20 package net.sf.gridarta.gui.panel.archetypechooser;
22 import java.awt.BorderLayout;
23 import java.awt.event.ActionEvent;
24 import java.awt.event.ActionListener;
25 import java.util.ArrayList;
26 import java.util.Comparator;
27 import java.util.List;
28 import javax.swing.DefaultListModel;
29 import javax.swing.JComboBox;
30 import javax.swing.JPanel;
31 import javax.swing.JPopupMenu;
32 import javax.swing.JScrollPane;
33 import javax.swing.JViewport;
34 import javax.swing.ListSelectionModel;
35 import javax.swing.event.ListSelectionEvent;
36 import javax.swing.event.ListSelectionListener;
49 import net.
sf.japi.swing.action.ActionBuilder;
50 import net.
sf.japi.swing.action.ActionBuilderFactory;
51 import net.
sf.japi.swing.action.ActionMethod;
52 import org.jetbrains.annotations.NotNull;
53 import org.jetbrains.annotations.Nullable;
71 private static final ActionBuilder
ACTION_BUILDER = ActionBuilderFactory.getInstance().getActionBuilder(
"net.sf.gridarta");
115 private final JComboBox<ArchetypeChooserFolder<G, A, R>>
folders =
new JComboBox<>();
144 super(
new BorderLayout());
146 archetypeList.setFocusable(
false);
148 archetypeList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
149 final JScrollPane scrollPane =
new JScrollPane(archetypeList);
150 add(scrollPane, BorderLayout.CENTER);
151 add(folders, BorderLayout.NORTH);
152 scrollPane.setAutoscrolls(
true);
153 scrollPane.getViewport().setScrollMode(JViewport.SIMPLE_SCROLL_MODE);
154 folders.setAutoscrolls(
true);
167 public void selectedArchetypeChanged(@Nullable
final R selectedArchetype) {
171 public void directionChanged(@Nullable
final Integer direction) {
180 archetypeChooserModel.addArchetypeChooserModelListener(archetypeChooserModelListener);
187 folders.setSelectedItem(selectedFolder);
192 public void selectedArchetypeChanged(@Nullable
final R selectedArchetype) {
198 archetypeList.addListSelectionListener(
new ListSelectionListener() {
201 public void valueChanged(@NotNull
final ListSelectionEvent e) {
202 if (!updateInProgress) {
204 if (folder != null) {
212 archetypeChooserPanel.addArchetypeChooserPanelListener(archetypeChooserPanelListener);
215 folders.addItem(folder);
218 folders.setSelectedItem(archetypeChooserPanel.getSelectedFolder());
219 folders.addActionListener(
new ActionListener() {
222 public void actionPerformed(@NotNull
final ActionEvent e) {
224 if (folder != null) {
240 archetypeList.setCellRenderer(displayMode);
241 archetypeList.setLayoutOrientation(displayMode.getLayoutOrientation());
242 archetypeList.setVisibleRowCount(-1);
254 return archetypeList.getSelectedValue();
263 archetypeList.setSelectedValue(archetype,
true);
264 archetypeList.ensureIndexIsVisible(archetypeList.getSelectedIndex());
275 return selectedFolder;
282 synchronized (archetypeList.getTreeLock()) {
284 if (archetypeListFolder != folder) {
286 updateInProgress =
true;
287 archetypeListModel.removeAllElements();
288 if (folder != null) {
289 final List<R> archetypes =
new ArrayList<>();
291 archetypes.sort(displayMode);
292 for (
final R archetype : archetypes) {
293 archetypeListModel.addElement(archetype);
295 if (archetypeListFolder != null) {
297 if (oldSelectedArchetype != null && folder.
containsArchetype(oldSelectedArchetype)) {
303 if (archetypeListFolder != null) {
306 archetypeListFolder = folder;
307 if (archetypeListFolder != null) {
311 updateInProgress =
false;
323 final JPopupMenu menu =
new JPopupMenu();
324 menu.add(ACTION_BUILDER.createAction(
false,
"editPopup",
this));
341 final List<ArchetypeChooserFolder<G, A, R>> archetypeChooserFolders = archetypeChooserPanel.
getFolders();
342 for (
int index = 1; index < archetypeChooserFolders.size(); index++) {
345 folders.setSelectedIndex(index);
A DefaultListCellRenderer for rendering ArchetypeChooserFolder instances.
final ArchetypeChooserPanel< G, A, R > archetypeChooserPanel
The associated ArchetypeChooserPanel.
Comparator< Archetype< G, A, R > > displayMode
The comparator for sorting archetypes in the active panel.
R getSelectedArchetype()
Returns the selected Archetype.
JPopupMenu createListPopupMenu()
Creates the popup menu for the archetype lists to bring up the editor.
ArchetypeChooserFolder< G, A, R > getSelectedFolder()
Returns the selected folder in folders.
Graphical User Interface of Gridarta.
A named panel within the ArchetypeChooserModel.
final GList< R > archetypeList
The list of currently shown archetypes; it is updated each time a new folder is selected.
void editPopup()
Action method for the popup menu to edit a default arch.
static final long serialVersionUID
Serial Version UID.
void updateArchetypeList()
Updates archetypeList to contain the currently selected folder.
final DefaultListModel< R > archetypeListModel
The list model of archetypeList.
A named folder within the ArchetypeChooserModel.
final JPopupMenu popupMenu
The popup menu for the archetype lists to bring up the editor.
void setSelectedFolder(@NotNull final ArchetypeChooserFolder< G, A, R > selectedFolder)
Sets the selected ArchetypeChooserFolder.
Collection< R > getArchetypes()
Returns the Archetypes.
Class with constants used in Gridarta and derivates.
static final Color BG_COLOR
Background Color (for the Panels).
A panel showing a set of archetypes.
Base package of all Gridarta classes.
Reflects a game object (object on a map).
static final ActionBuilder ACTION_BUILDER
Action Builder.
void setSelectedArchetype(@Nullable final R selectedArchetype)
Sets the selected Archetype.
GameObjects are the objects based on Archetypes found on maps.
R getSelectedArchetype()
Returns the archetype currently selected in the list.
Interface for listeners interested in ArchetypeChooserPanel related events.
void removeArchetypeChooserFolderListener(@NotNull final ArchetypeChooserFolderListener< G, A, R > listener)
Removes a listener to be notified of changes.
List< ArchetypeChooserFolder< G, A, R > > getFolders()
Returns the ArchetypeChooserFolders.
ArchetypeChooserFolder< G, A, R > archetypeListFolder
The currently shown ArchetypeChooserFolder.
boolean updateInProgress
Set while updateArchetypeList() is running.
Interface for listeners interested in ArchetypeChooserModel related events.
Abstract base class for classes implementing display modes of the archetype chooser.
The view of the archetype chooser.
Interface for listeners interested in ArchetypeChooserFolder related events.
final JComboBox< ArchetypeChooserFolder< G, A, R > > folders
The combo box for selecting the active archetype panel.
boolean containsArchetype(@NotNull final R archetype)
Returns whether an Archetype is part of this folder.
void selectArchetype(@NotNull final R archetype)
Selects an archetype.
final ArchetypeChooserFolderListener< G, A, R > archetypeChooserFolderListener
The ArchetypeChooserFolderListener attached to archetypeListFolder to track changes to the selected a...
void addArchetypeChooserFolderListener(@NotNull final ArchetypeChooserFolderListener< G, A, R > listener)
Adds a listener to be notified of changes.
void updateCellRenderer(@NotNull final DisplayMode< G, A, R > displayMode)
Updates the cell renderer state.
void setSelectedArchetype(@Nullable final R archetype)
Sets the currently selected archetype in the list.
ArchetypeChooserPanel< G, A, R > getArchetypeChooserPanel()
Returns the associated ArchetypeChooserPanel.
Interface for MapArchObjects.
ArchetypePanel(@NotNull final ArchetypeChooserModel< G, A, R > archetypeChooserModel, @NotNull final ArchetypeChooserPanel< G, A, R > archetypeChooserPanel)
Creates a new instance.