Gridarta Editor
ArchetypeChooserView.java
Go to the documentation of this file.
1 /*
2  * Gridarta MMORPG map editor for Crossfire, Daimonin and similar games.
3  * Copyright (C) 2000-2015 The Gridarta Developers.
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; either version 2 of the License, or
8  * (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License along
16  * with this program; if not, write to the Free Software Foundation, Inc.,
17  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18  */
19 
20 package net.sf.gridarta.gui.panel.archetypechooser;
21 
22 import java.awt.BorderLayout;
23 import java.util.prefs.Preferences;
24 import javax.swing.AbstractButton;
25 import javax.swing.Action;
26 import javax.swing.BorderFactory;
27 import javax.swing.ButtonGroup;
28 import javax.swing.JPanel;
29 import javax.swing.JTabbedPane;
30 import javax.swing.JToggleButton;
31 import javax.swing.SwingConstants;
32 import javax.swing.event.ChangeEvent;
33 import javax.swing.event.ChangeListener;
34 import net.sf.gridarta.MainControl;
46 import net.sf.japi.swing.action.ActionMethod;
47 import org.jetbrains.annotations.NotNull;
48 import org.jetbrains.annotations.Nullable;
49 
54 public class ArchetypeChooserView<G extends GameObject<G, A, R>, A extends MapArchObject<A>, R extends Archetype<G, A, R>> extends JPanel {
55 
59  @NotNull
60  private static final String DISPLAY_MODE_KEY = "archetypeChooserDisplayMode";
61 
65  private static final long serialVersionUID = 1L;
66 
70  @NotNull
71  private static final Preferences PREFERENCES = Preferences.userNodeForPackage(MainControl.class);
72 
77  @NotNull
78  private final AbstractButton buttonDisplayGameObjectNames;
79 
84  @NotNull
85  private final AbstractButton buttonDisplayArchetypeNames;
86 
91  @NotNull
92  private final AbstractButton buttonDisplayIconsOnly;
93 
98  @NotNull
100 
105  @NotNull
106  private final JTabbedPane tabDesktop = new JTabbedPane(SwingConstants.TOP);
107 
112  @NotNull
114 
119  @NotNull
121 
126  @NotNull
128 
132  @NotNull
133  private final ChangeListener changeListener = new ChangeListener() {
134 
135  @Override
136  public void stateChanged(final ChangeEvent e) {
137  final JTabbedPane tabbedPane = (JTabbedPane) e.getSource();
138  final int index = tabbedPane.getSelectedIndex();
139  if (index != -1) {
141  }
142  }
143  };
144 
163  public ArchetypeChooserView(final boolean createDirectionPane, @NotNull final ArchetypeChooserModel<G, A, R> archetypeChooserModel, @NotNull final FaceObjectProviders faceObjectProviders, @NotNull final Action displayGameObjectNamesAction, @NotNull final Action displayArchetypeNamesAction, @NotNull final Action displayIconsOnlyAction, @NotNull final DisplayMode<G, A, R> displayModeGameObjectNames, @NotNull final DisplayMode<G, A, R> displayModeArchetypeNames, @NotNull final DisplayMode<G, A, R> displayModeIconsOnly) {
164  super(new BorderLayout());
165  this.archetypeChooserModel = archetypeChooserModel;
166  this.displayModeGameObjectNames = displayModeGameObjectNames;
167  this.displayModeArchetypeNames = displayModeArchetypeNames;
168  this.displayModeIconsOnly = displayModeIconsOnly;
169 
171 
172  @Override
173  public void selectedPanelChanged(@NotNull final ArchetypeChooserPanel<G, A, R> selectedPanel) {
174  }
175 
176  @Override
177  public void selectedFolderChanged(@NotNull final ArchetypeChooserFolder<G, A, R> selectedFolder) {
178  }
179 
180  @Override
181  public void selectedArchetypeChanged(@Nullable final R selectedArchetype) {
182  }
183 
184  @Override
185  public void directionChanged(@Nullable final Integer direction) {
186  }
187 
188  @Override
189  public void displayModeChanged(@NotNull final DisplayMode<G, A, R> displayMode) {
190  if (displayMode == displayModeGameObjectNames) {
191  PREFERENCES.putInt(DISPLAY_MODE_KEY, 0);
192  } else if (displayMode == displayModeArchetypeNames) {
193  PREFERENCES.putInt(DISPLAY_MODE_KEY, 1);
194  } else if (displayMode == displayModeIconsOnly) {
195  PREFERENCES.putInt(DISPLAY_MODE_KEY, 2);
196  }
197  updateActions();
198  }
199 
200  });
201  final FaceObjectProvidersListener faceObjectProvidersListener = new FaceObjectProvidersListener() {
202 
203  @Override
204  public void facesReloaded() {
206  if (archetypeChooserPanel != null) {
207  final ArchetypePanel<G, A, R> archetypePanel = findPanel(archetypeChooserPanel.getName());
208  if (archetypePanel != null) {
209  archetypePanel.repaint();
210  }
211  }
212  }
213 
214  };
215  faceObjectProviders.addFaceObjectProvidersListener(faceObjectProvidersListener);
216 
217  buttonDisplayGameObjectNames = new JToggleButton(displayGameObjectNamesAction);
218  buttonDisplayArchetypeNames = new JToggleButton(displayArchetypeNamesAction);
219  buttonDisplayIconsOnly = new JToggleButton(displayIconsOnlyAction);
220  final ButtonGroup buttonGroup = new ButtonGroup();
221  buttonGroup.add(buttonDisplayGameObjectNames);
222  buttonGroup.add(buttonDisplayArchetypeNames);
223  buttonGroup.add(buttonDisplayIconsOnly);
224  final int preferencesDisplayMode = PREFERENCES.getInt(DISPLAY_MODE_KEY, 0);
225  switch (preferencesDisplayMode) {
226  case 0:
227  default:
229  break;
230 
231  case 1:
233  break;
234 
235  case 2:
237  break;
238  }
239  tabDesktop.setBorder(BorderFactory.createEmptyBorder(CommonConstants.SPACE_PICKMAP_ARCHETYPE_TOP, 0, 0, 0));
240  add(tabDesktop);
241  if (createDirectionPane) {
242  add(new DirectionPane<>(archetypeChooserModel, true), BorderLayout.SOUTH);
243  }
245  if (selectedPanel != null) {
246  final ArchetypePanel<G, A, R> archetypePanel = findPanel(selectedPanel.getName());
247  if (archetypePanel != null) {
248  setSelectedPanel(archetypePanel);
249  }
250  }
251  tabDesktop.addChangeListener(changeListener);
252  }
253 
259  @NotNull
260  public ArchetypePanel<G, A, R> findOrCreatePanel(@NotNull final String panelName) {
261  final ArchetypePanel<G, A, R> existingPanel = findPanel(panelName);
262  if (existingPanel != null) {
263  return existingPanel;
264  }
265 
266  final ArchetypeChooserPanel<G, A, R> archetypeChooserPanel = archetypeChooserModel.getPanel(panelName);
267  final ArchetypePanel<G, A, R> newPanel = new ArchetypePanel<>(archetypeChooserModel, archetypeChooserPanel);
268 
269  // insert new panel in alphabetical order
270  int i;
271  for (i = 0; i < tabDesktop.getTabCount() && panelName.compareToIgnoreCase(tabDesktop.getTitleAt(i)) > 0; i++) {
272  }
273  tabDesktop.insertTab(panelName, null, newPanel, null, i);
274 
275  return newPanel;
276  }
277 
283  @Nullable
284  private ArchetypePanel<G, A, R> findPanel(@NotNull final String panelName) {
285  for (int i = 0; i < tabDesktop.getTabCount(); i++) {
286  if (panelName.equals(tabDesktop.getTitleAt(i))) {
287  return getArchetypePanel(i);
288  }
289  }
290 
291  return null;
292  }
293 
299  @NotNull
300  private ArchetypePanel<G, A, R> getArchetypePanel(final int index) {
301  //JTabbedPane does not use type parameters
302  @SuppressWarnings("unchecked") final ArchetypePanel<G, A, R> archetypePanel = (ArchetypePanel<G, A, R>) tabDesktop.getComponentAt(index);
303  return archetypePanel;
304  }
305 
310  public final void setSelectedPanel(@NotNull final ArchetypePanel<G, A, R> selectedPanel) {
311  final int selectedIndex = tabDesktop.indexOfComponent(selectedPanel);
312  if (selectedIndex == -1 || selectedIndex == tabDesktop.getSelectedIndex()) {
313  return;
314  }
315 
316  setSelectedPanelInt(selectedPanel);
317  tabDesktop.setSelectedIndex(selectedIndex);
318  }
319 
323  @ActionMethod
324  public void displayArchetypeNames() {
326  }
327 
331  @ActionMethod
332  public void displayIconsOnly() {
334  }
335 
339  private void updateActions() {
341  if (displayMode == displayModeGameObjectNames) {
342  buttonDisplayGameObjectNames.setSelected(true);
343  } else if (displayMode == displayModeArchetypeNames) {
344  buttonDisplayArchetypeNames.setSelected(true);
345  } else if (displayMode == displayModeIconsOnly) {
346  buttonDisplayIconsOnly.setSelected(true);
347  }
348  }
349 
355  private void setSelectedPanelInt(@NotNull final ArchetypePanel<G, A, R> archetypePanel) {
356  archetypeChooserModel.setSelectedPanel(archetypePanel.getArchetypeChooserPanel());
357  }
358 
359 }
net.sf.gridarta.gui.panel.archetypechooser.ArchetypeChooserView.displayArchetypeNames
void displayArchetypeNames()
Definition: ArchetypeChooserView.java:324
net.sf.gridarta.gui.panel.archetypechooser.ArchetypeChooserView.displayModeArchetypeNames
final DisplayMode< G, A, R > displayModeArchetypeNames
Definition: ArchetypeChooserView.java:120
net.sf.gridarta.model.archetypechooser.ArchetypeChooserModel
Definition: ArchetypeChooserModel.java:38
net.sf.gridarta.gui.panel.archetypechooser.ArchetypeChooserView.DISPLAY_MODE_KEY
static final String DISPLAY_MODE_KEY
Definition: ArchetypeChooserView.java:60
net.sf.gridarta
net.sf.gridarta.model.archetypechooser.ArchetypeChooserModel.setDisplayMode
void setDisplayMode(@NotNull final DisplayMode< G, A, R > displayMode)
Definition: ArchetypeChooserModel.java:236
net.sf.gridarta.gui.panel.archetypechooser.ArchetypeChooserView.displayModeIconsOnly
final DisplayMode< G, A, R > displayModeIconsOnly
Definition: ArchetypeChooserView.java:127
net.sf.gridarta.gui.panel.archetypechooser.ArchetypeChooserView.findOrCreatePanel
ArchetypePanel< G, A, R > findOrCreatePanel(@NotNull final String panelName)
Definition: ArchetypeChooserView.java:260
net.sf.gridarta.model.archetypechooser
Definition: ArchetypeChooserFolder.java:20
net.sf
net.sf.gridarta.gui.panel.archetypechooser.ArchetypeChooserView.buttonDisplayIconsOnly
final AbstractButton buttonDisplayIconsOnly
Definition: ArchetypeChooserView.java:92
net.sf.gridarta.utils.CommonConstants
Definition: CommonConstants.java:28
net.sf.gridarta.model.archetype
Definition: AbstractArchetype.java:20
net.sf.gridarta.model.face.FaceObjectProviders
Definition: FaceObjectProviders.java:46
net.sf.gridarta.model.gameobject.GameObject
Definition: GameObject.java:36
net.sf.gridarta.model.archetypechooser.ArchetypeChooserFolder
Definition: ArchetypeChooserFolder.java:40
net.sf.gridarta.gui.panel.archetypechooser.ArchetypeChooserView.buttonDisplayGameObjectNames
final AbstractButton buttonDisplayGameObjectNames
Definition: ArchetypeChooserView.java:78
net.sf.gridarta.model.archetypechooser.ArchetypeChooserModel.getSelectedPanel
ArchetypeChooserPanel< G, A, R > getSelectedPanel()
Definition: ArchetypeChooserModel.java:162
net.sf.gridarta.model.gameobject
Definition: AbstractGameObject.java:20
net
net.sf.gridarta.gui.panel.archetypechooser.ArchetypeChooserView.buttonDisplayArchetypeNames
final AbstractButton buttonDisplayArchetypeNames
Definition: ArchetypeChooserView.java:85
net.sf.gridarta.model.maparchobject.MapArchObject
Definition: MapArchObject.java:40
net.sf.gridarta.model.archetypechooser.ArchetypeChooserPanel
Definition: ArchetypeChooserPanel.java:40
net.sf.gridarta.gui.panel.archetypechooser.ArchetypeChooserView.ArchetypeChooserView
ArchetypeChooserView(final boolean createDirectionPane, @NotNull final ArchetypeChooserModel< G, A, R > archetypeChooserModel, @NotNull final FaceObjectProviders faceObjectProviders, @NotNull final Action displayGameObjectNamesAction, @NotNull final Action displayArchetypeNamesAction, @NotNull final Action displayIconsOnlyAction, @NotNull final DisplayMode< G, A, R > displayModeGameObjectNames, @NotNull final DisplayMode< G, A, R > displayModeArchetypeNames, @NotNull final DisplayMode< G, A, R > displayModeIconsOnly)
Definition: ArchetypeChooserView.java:163
net.sf.gridarta.model.archetypechooser.ArchetypeChooserModel.setSelectedPanel
void setSelectedPanel(@NotNull final ArchetypeChooserPanel< G, A, R > selectedPanel)
Definition: ArchetypeChooserModel.java:170
net.sf.gridarta.gui.panel.archetypechooser.ArchetypeChooserView.displayModeGameObjectNames
final DisplayMode< G, A, R > displayModeGameObjectNames
Definition: ArchetypeChooserView.java:113
net.sf.gridarta.gui.panel.archetypechooser.ArchetypeChooserView.setSelectedPanel
final void setSelectedPanel(@NotNull final ArchetypePanel< G, A, R > selectedPanel)
Definition: ArchetypeChooserView.java:310
net.sf.gridarta.gui.panel.archetypechooser.ArchetypeChooserView.archetypeChooserModel
final ArchetypeChooserModel< G, A, R > archetypeChooserModel
Definition: ArchetypeChooserView.java:99
net.sf.gridarta.model.archetypechooser.ArchetypeChooserModel.getDisplayMode
DisplayMode< G, A, R > getDisplayMode()
Definition: ArchetypeChooserModel.java:228
net.sf.gridarta.model.archetypechooser.ArchetypeChooserModel.addArchetypeChooserModelListener
void addArchetypeChooserModelListener(@NotNull final ArchetypeChooserModelListener< G, A, R > listener)
Definition: ArchetypeChooserModel.java:104
net.sf.gridarta.gui.panel.archetypechooser.ArchetypeChooserView.getArchetypePanel
ArchetypePanel< G, A, R > getArchetypePanel(final int index)
Definition: ArchetypeChooserView.java:300
net.sf.gridarta.model
net.sf.gridarta.model.archetype.Archetype
Definition: Archetype.java:41
net.sf.gridarta.gui.panel.archetypechooser.ArchetypeChooserView.updateActions
void updateActions()
Definition: ArchetypeChooserView.java:339
net.sf.gridarta.model.face.FaceObjectProvidersListener
Definition: FaceObjectProvidersListener.java:29
net.sf.gridarta.model.face
Definition: AbstractFaceObjects.java:20
net.sf.gridarta.gui.panel.archetypechooser.ArchetypeChooserView.tabDesktop
final JTabbedPane tabDesktop
Definition: ArchetypeChooserView.java:106
net.sf.gridarta.model.maparchobject
Definition: AbstractMapArchObject.java:20
net.sf.gridarta.gui.panel.archetypechooser.ArchetypeChooserView.findPanel
ArchetypePanel< G, A, R > findPanel(@NotNull final String panelName)
Definition: ArchetypeChooserView.java:284
net.sf.gridarta.model.archetypechooser.DisplayMode
Definition: DisplayMode.java:35
net.sf.gridarta.model.archetypechooser.ArchetypeChooserPanel.getName
String getName()
Definition: ArchetypeChooserPanel.java:115
net.sf.gridarta.model.archetypechooser.ArchetypeChooserModel.getPanel
ArchetypeChooserPanel< G, A, R > getPanel(@NotNull final String panelName)
Definition: ArchetypeChooserModel.java:142
net.sf.gridarta.gui.panel.archetypechooser.ArchetypeChooserView.displayIconsOnly
void displayIconsOnly()
Definition: ArchetypeChooserView.java:332
net.sf.gridarta.model.archetypechooser.ArchetypeChooserModelListener
Definition: ArchetypeChooserModelListener.java:34
net.sf.gridarta.gui.panel.archetypechooser.ArchetypePanel
Definition: ArchetypePanel.java:60
net.sf.gridarta.gui.panel.archetypechooser.ArchetypeChooserView.changeListener
final ChangeListener changeListener
Definition: ArchetypeChooserView.java:133
net.sf.gridarta.utils.CommonConstants.SPACE_PICKMAP_ARCHETYPE_TOP
static final int SPACE_PICKMAP_ARCHETYPE_TOP
Definition: CommonConstants.java:49
net.sf.gridarta.gui.panel.archetypechooser.ArchetypeChooserView.PREFERENCES
static final Preferences PREFERENCES
Definition: ArchetypeChooserView.java:71
net.sf.gridarta.utils
Definition: ActionBuilderUtils.java:20
net.sf.gridarta.gui.panel.archetypechooser.ArchetypeChooserView.setSelectedPanelInt
void setSelectedPanelInt(@NotNull final ArchetypePanel< G, A, R > archetypePanel)
Definition: ArchetypeChooserView.java:355
net.sf.gridarta.gui.panel.archetypechooser.ArchetypeChooserView.serialVersionUID
static final long serialVersionUID
Definition: ArchetypeChooserView.java:65
net.sf.gridarta.gui.panel.archetypechooser.DirectionPane
Definition: DirectionPane.java:42
net.sf.gridarta.gui.panel.archetypechooser.ArchetypeChooserView
Definition: ArchetypeChooserView.java:54
net.sf.gridarta.MainControl
Definition: MainControl.java:27