Gridarta Editor
DefaultObjectChooser.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.objectchooser;
21 
22 import java.awt.BorderLayout;
23 import java.awt.Point;
24 import java.util.ArrayList;
25 import java.util.Collection;
26 import java.util.Collections;
27 import java.util.List;
28 import javax.swing.JPanel;
29 import javax.swing.JTabbedPane;
30 import javax.swing.SwingConstants;
31 import javax.swing.event.ChangeEvent;
32 import javax.swing.event.ChangeListener;
53 import org.jetbrains.annotations.NotNull;
54 import org.jetbrains.annotations.Nullable;
55 
60 public class DefaultObjectChooser<G extends GameObject<G, A, R>, A extends MapArchObject<A>, R extends Archetype<G, A, R>> extends JPanel implements ObjectChooser<G, A, R> {
61 
65  private static final long serialVersionUID = 1L;
66 
70  @NotNull
72 
76  @NotNull
78 
83  @NotNull
85 
89  @NotNull
90  private final JTabbedPane tabbedPane = new JTabbedPane(SwingConstants.TOP);
91 
95  @NotNull
96  private final List<ObjectChooserTab<G, A, R>> tabs = new ArrayList<>();
97 
101  @NotNull
102  private final Collection<ObjectChooserListener<G, A, R>> listeners = new ArrayList<>();
103 
107  @Nullable
109 
113  @Nullable
115 
119  @Nullable
121 
125  @Nullable
127 
131  private int selectedIndex = -2;
132 
136  @NotNull
138 
139  @Override
140  public void mapCursorChangedPos(@NotNull final Point location) {
142  }
143 
144  @Override
145  public void mapCursorChangedMode() {
146  // ignore
147  }
148 
149  @Override
150  public void mapCursorChangedGameObject(@Nullable final MapSquare<G, A, R> mapSquare, @Nullable final G gameObject) {
151  // ignore
152  }
153 
154  @Override
155  public void mapCursorChangedSize() {
156  // ignore
157  }
158 
159  };
160 
169  public DefaultObjectChooser(@NotNull final ObjectChooserTab<G, A, R> archetypeChooserControl, @NotNull final ObjectChooserTab<G, A, R> pickmapChooserControl, @NotNull final ArchetypeChooserModel<G, A, R> archetypeChooserModel, @NotNull final PickmapChooserModel<G, A, R> pickmapChooserModel, @NotNull final ArchetypeTypeSet archetypeTypeSet) {
170  super(new BorderLayout());
171  this.pickmapChooserControl = pickmapChooserControl;
172  this.archetypeChooserModel = archetypeChooserModel;
173  objectChoiceDisplay = new ObjectChoiceDisplay(archetypeTypeSet);
174 
176 
177  addTab(archetypeChooserControl);
179 
180  final ChangeListener changeListener = new ChangeListener() {
181 
182  @Override
183  public void stateChanged(final ChangeEvent e) {
185  }
186 
187  };
188  tabbedPane.addChangeListener(changeListener);
189 
191  add(tabbedPane, BorderLayout.CENTER);
192  add(objectChoiceDisplay, BorderLayout.SOUTH);
193 
194  final ArchetypeChooserModelListener<G, A, R> archetypeChooserModelListener = new ArchetypeChooserModelListener<G, A, R>() {
195 
196  @Override
197  public void selectedPanelChanged(@NotNull final ArchetypeChooserPanel<G, A, R> selectedPanel) {
198  // ignore
199  }
200 
201  @Override
202  public void selectedFolderChanged(@NotNull final ArchetypeChooserFolder<G, A, R> selectedFolder) {
203  // ignore
204  }
205 
206  @Override
207  public void selectedArchetypeChanged(@Nullable final R selectedArchetype) {
208  if (!isPickmapActive()) {
209  fireSelectionChanged(selectedArchetype);
210  }
211  }
212 
213  @Override
214  public void directionChanged(@Nullable final Integer direction) {
215  // ignore
216  }
217 
218  @Override
219  public void displayModeChanged(@NotNull final DisplayMode<G, A, R> displayMode) {
220  // ignore
221  }
222 
223  };
224  archetypeChooserModel.addArchetypeChooserModelListener(archetypeChooserModelListener);
225 
226  final PickmapChooserModelListener<G, A, R> pickmapChooserModelListener = new PickmapChooserModelListener<G, A, R>() {
227 
228  @Override
229  public void activePickmapChanged(@Nullable final PickmapState<G, A, R> pickmapState) {
230  if (activePickmapState != pickmapState) { // ignore non-changes
231  updateActivePickmap(pickmapState);
232  }
233  }
234 
235  @Override
236  public void pickmapReverted(@NotNull final PickmapState<G, A, R> pickmapState) {
237  if (activePickmapState == pickmapState) { // ignore unless active pickmap was reverted
238  updateActivePickmap(pickmapState);
239  }
240  }
241 
242  @Override
243  public void pickmapModifiedChanged(final int index, @NotNull final PickmapState<G, A, R> pickmapState) {
244  // ignore
245  }
246 
247  };
248  pickmapChooserModel.addPickmapChooserListener(pickmapChooserModelListener);
249 
251  }
252 
257  private void addTab(@NotNull final ObjectChooserTab<G, A, R> tab) {
258  tabs.add(tab);
259  tabbedPane.addTab(tab.getTitle(), tab.getComponent());
260  }
261 
266  private void setActiveTab(final int index) {
267  @Nullable ObjectChooserTab<G, A, R> tab;
268  try {
269  tab = tabs.get(index);
270  } catch (final IndexOutOfBoundsException ignored) {
271  tab = null;
272  }
273  if (activeTab == tab) {
274  return;
275  }
276 
277  if (activeTab != null) {
278  activeTab.setActive(false);
279  }
280  activeTab = tab;
281  if (activeTab != null) {
282  activeTab.setActive(true);
283  }
284  for (final ObjectChooserListener<G, A, R> listener : listeners) {
285  listener.pickmapActiveChanged(isPickmapActive());
286  }
287  if (isPickmapActive()) {
289  } else {
291  fireSelectionChanged(selectedPanel == null ? null : selectedPanel.getSelectedFolder().getSelectedArchetype());
292  }
293  }
294 
295  @Override
296  public final boolean isPickmapActive() {
298  }
299 
305  @Override
306  public boolean isMatching(@NotNull final G gameObject) {
307  return activeTab != null && activeTab.isMatching(gameObject);
308  }
309 
310  @Override
311  public void addObjectChooserListener(@NotNull final ObjectChooserListener<G, A, R> listener) {
312  listeners.add(listener);
313  }
314 
315  @Override
316  public void removeObjectChooserListener(@NotNull final ObjectChooserListener<G, A, R> listener) {
317  listeners.remove(listener);
318  }
319 
320  @Override
322  tabbedPane.setSelectedIndex(0);
323  }
324 
325  @Override
327  tabbedPane.setSelectedIndex(1);
328  }
329 
330  @Nullable
331  @Override
333  return cursorSelection;
334  }
335 
336  @Nullable
337  @Override
339  return activeTab == null ? null : activeTab.getSelection();
340  }
341 
342  @NotNull
343  @Override
344  public List<? extends BaseObject<G, A, R, ?>> getSelections() {
345  return activeTab == null ? Collections.<G>emptyList() : activeTab.getSelections();
346  }
347 
351  private void updateSelectedIndex() {
352  final int index = tabbedPane.getSelectedIndex();
353  if (index != selectedIndex) {
354  selectedIndex = index;
355  setActiveTab(index);
356  }
357  }
358 
363  private void updateActivePickmap(@Nullable final PickmapState<G, A, R> pickmapState) {
364  if (activePickmapView != null) {
366  }
367  activePickmapState = pickmapState;
369  if (activePickmapView != null) {
371  }
372  }
373 
377  private void updateActivePickmap() {
380  }
381 
386  private void updatePickmapInfo(@Nullable final MapCursor<G, A, R> mapCursor) {
387  if (isPickmapActive()) {
388  @Nullable final BaseObject<G, A, R, ?> gameObject;
389  if (mapCursor == null) {
390  gameObject = null;
391  } else {
392  final Point location = mapCursor.getLocation();
393  if (activePickmapState == null) {
394  gameObject = null;
395  } else {
397  if (pickmap == null) {
398  gameObject = null;
399  } else {
400  final MapModel<G, A, R> mapModel = pickmap.getMapModel();
401  gameObject = mapModel.getMapSquare(location).getFirst();
402  }
403  }
404  }
405  fireSelectionChanged(gameObject);
406  }
407  }
408 
413  private void fireSelectionChanged(@Nullable final BaseObject<G, A, R, ?> gameObject) {
414  if (cursorSelection == gameObject) {
415  return;
416  }
417  cursorSelection = gameObject;
418 
419  for (final ObjectChooserListener<G, A, R> listener : listeners) {
420  listener.selectionChanged(gameObject);
421  }
422 
424  }
425 
426 }
net.sf.gridarta.model.archetypetype
Definition: AbstractArchetypeAttributeInvSpell.java:20
net.sf.gridarta.gui.panel.objectchooser.ObjectChooserTab.getSelections
List<? extends BaseObject< G, A, R, ?> > getSelections()
net.sf.gridarta.model.mapmodel.MapModel
Definition: MapModel.java:75
net.sf.gridarta.gui.panel
net.sf.gridarta.gui.panel.objectchooser.DefaultObjectChooser.isMatching
boolean isMatching(@NotNull final G gameObject)
Definition: DefaultObjectChooser.java:306
net.sf.gridarta.gui.panel.objectchooser.DefaultObjectChooser.addTab
void addTab(@NotNull final ObjectChooserTab< G, A, R > tab)
Definition: DefaultObjectChooser.java:257
net.sf.gridarta.gui.panel.objectchooser.ObjectChooserTab.setActive
void setActive(boolean active)
net.sf.gridarta.gui.panel.pickmapchooser
Definition: package-info.java:24
net.sf.gridarta.gui.panel.objectchooser.DefaultObjectChooser.addObjectChooserListener
void addObjectChooserListener(@NotNull final ObjectChooserListener< G, A, R > listener)
Definition: DefaultObjectChooser.java:311
net.sf.gridarta.model.archetypechooser.ArchetypeChooserModel
Definition: ArchetypeChooserModel.java:38
net.sf.gridarta.gui.panel.objectchooser.DefaultObjectChooser.activePickmapView
MapView< G, A, R > activePickmapView
Definition: DefaultObjectChooser.java:120
net.sf.gridarta
net.sf.gridarta.gui.mapfiles.PickmapState.getMapView
MapView< G, A, R > getMapView()
Definition: PickmapState.java:163
net.sf.gridarta.model.mapmodel.MapSquare.getFirst
G getFirst(@NotNull final GameObjectMatcher gameObjectMatcher)
Definition: MapSquare.java:230
net.sf.gridarta.gui.panel.objectchooser.ObjectChooserTab< G, A, R >
net.sf.gridarta.model.mapmodel.MapSquare
Definition: MapSquare.java:45
net.sf.gridarta.gui.panel.objectchooser.DefaultObjectChooser.tabs
final List< ObjectChooserTab< G, A, R > > tabs
Definition: DefaultObjectChooser.java:96
net.sf.gridarta.model.archetypechooser
Definition: ArchetypeChooserFolder.java:20
net.sf.gridarta.gui.panel.objectchooser.DefaultObjectChooser.activeTab
ObjectChooserTab< G, A, R > activeTab
Definition: DefaultObjectChooser.java:108
net.sf
net.sf.gridarta.model.mapmodel
Definition: AboveFloorInsertionMode.java:20
net.sf.gridarta.gui.panel.objectchooser.DefaultObjectChooser.objectChoiceDisplay
final ObjectChoiceDisplay objectChoiceDisplay
Definition: DefaultObjectChooser.java:84
net.sf.gridarta.gui.panel.pickmapchooser.PickmapChooserModelListener
Definition: PickmapChooserModelListener.java:33
net.sf.gridarta.gui.panel.objectchooser.DefaultObjectChooser.pickmapChooserControl
final ObjectChooserTab< G, A, R > pickmapChooserControl
Definition: DefaultObjectChooser.java:71
net.sf.gridarta.gui.panel.objectchoicedisplay
Definition: ObjectChoiceDisplay.java:20
net.sf.gridarta.model.archetype
Definition: AbstractArchetype.java:20
net.sf.gridarta.gui.panel.objectchooser.DefaultObjectChooser.removeObjectChooserListener
void removeObjectChooserListener(@NotNull final ObjectChooserListener< G, A, R > listener)
Definition: DefaultObjectChooser.java:316
net.sf.gridarta.model.gameobject.GameObject
Definition: GameObject.java:36
net.sf.gridarta.model.mapcontrol
Definition: DefaultMapControl.java:20
net.sf.gridarta.model.archetypetype.ArchetypeTypeSet
Definition: ArchetypeTypeSet.java:40
net.sf.gridarta.model.mapcursor.MapCursorListener
Definition: MapCursorListener.java:36
net.sf.gridarta.gui.panel.objectchooser.DefaultObjectChooser.archetypeChooserModel
final ArchetypeChooserModel< G, A, R > archetypeChooserModel
Definition: DefaultObjectChooser.java:77
net.sf.gridarta.gui
net.sf.gridarta.gui.panel.objectchooser.DefaultObjectChooser.movePickmapChooserToFront
void movePickmapChooserToFront()
Definition: DefaultObjectChooser.java:326
net.sf.gridarta.model.archetypechooser.ArchetypeChooserFolder
Definition: ArchetypeChooserFolder.java:40
net.sf.gridarta.gui.map.mapview.MapView.getMapCursor
MapCursor< G, A, R > getMapCursor()
net.sf.gridarta.gui.panel.objectchooser.DefaultObjectChooser.moveArchetypeChooserToFront
void moveArchetypeChooserToFront()
Definition: DefaultObjectChooser.java:321
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.objectchooser.DefaultObjectChooser.isPickmapActive
final boolean isPickmapActive()
Definition: DefaultObjectChooser.java:296
net.sf.gridarta.model.maparchobject.MapArchObject
Definition: MapArchObject.java:40
net.sf.gridarta.gui.map.mapview
Definition: AbstractMapView.java:20
net.sf.gridarta.model.archetypechooser.ArchetypeChooserPanel
Definition: ArchetypeChooserPanel.java:40
net.sf.gridarta.gui.map.mapview.MapView
Definition: MapView.java:43
net.sf.gridarta.gui.panel.objectchooser.DefaultObjectChooser.updateSelectedIndex
void updateSelectedIndex()
Definition: DefaultObjectChooser.java:351
net.sf.gridarta.model.mapcursor.MapCursor.removeMapCursorListener
void removeMapCursorListener(@NotNull final MapCursorListener< G, A, R > listener)
Definition: MapCursor.java:427
net.sf.gridarta.gui.panel.pickmapchooser.PickmapChooserModel
Definition: PickmapChooserModel.java:51
net.sf.gridarta.model.mapcursor.MapCursor
Definition: MapCursor.java:58
net.sf.gridarta.model.baseobject.BaseObject
Definition: BaseObject.java:34
net.sf.gridarta.gui.panel.objectchooser.DefaultObjectChooser.DefaultObjectChooser
DefaultObjectChooser(@NotNull final ObjectChooserTab< G, A, R > archetypeChooserControl, @NotNull final ObjectChooserTab< G, A, R > pickmapChooserControl, @NotNull final ArchetypeChooserModel< G, A, R > archetypeChooserModel, @NotNull final PickmapChooserModel< G, A, R > pickmapChooserModel, @NotNull final ArchetypeTypeSet archetypeTypeSet)
Definition: DefaultObjectChooser.java:169
net.sf.gridarta.gui.panel.objectchooser.ObjectChooser
Definition: ObjectChooser.java:34
net.sf.gridarta.gui.mapfiles.PickmapState
Definition: PickmapState.java:45
net.sf.gridarta.gui.panel.objectchooser.DefaultObjectChooser.getSelections
List<? extends BaseObject< G, A, R, ?> > getSelections()
Definition: DefaultObjectChooser.java:344
net.sf.gridarta.model.archetypechooser.ArchetypeChooserModel.addArchetypeChooserModelListener
void addArchetypeChooserModelListener(@NotNull final ArchetypeChooserModelListener< G, A, R > listener)
Definition: ArchetypeChooserModel.java:104
net.sf.gridarta.model.mapcursor.MapCursor.addMapCursorListener
void addMapCursorListener(@NotNull final MapCursorListener< G, A, R > listener)
Definition: MapCursor.java:419
net.sf.gridarta.gui.panel.objectchooser.DefaultObjectChooser.updatePickmapInfo
void updatePickmapInfo(@Nullable final MapCursor< G, A, R > mapCursor)
Definition: DefaultObjectChooser.java:386
net.sf.gridarta.model.mapmodel.MapModel.getMapSquare
MapSquare< G, A, R > getMapSquare(@NotNull Point pos)
net.sf.gridarta.gui.panel.objectchooser.DefaultObjectChooser.listeners
final Collection< ObjectChooserListener< G, A, R > > listeners
Definition: DefaultObjectChooser.java:102
net.sf.gridarta.gui.panel.objectchoicedisplay.ObjectChoiceDisplay.showObjectChooserQuickObject
void showObjectChooserQuickObject(@Nullable final BaseObject<?, ?, ?, ?> gameObject, final boolean isPickmapActive)
Definition: ObjectChoiceDisplay.java:125
net.sf.gridarta.gui.panel.objectchooser.DefaultObjectChooser.tabbedPane
final JTabbedPane tabbedPane
Definition: DefaultObjectChooser.java:90
net.sf.gridarta.gui.panel.objectchooser.DefaultObjectChooser.mapCursorListener
final MapCursorListener< G, A, R > mapCursorListener
Definition: DefaultObjectChooser.java:137
net.sf.gridarta.model
net.sf.gridarta.model.archetype.Archetype
Definition: Archetype.java:41
net.sf.gridarta.gui.panel.objectchooser.DefaultObjectChooser.fireSelectionChanged
void fireSelectionChanged(@Nullable final BaseObject< G, A, R, ?> gameObject)
Definition: DefaultObjectChooser.java:413
net.sf.gridarta.model.baseobject
Definition: AbstractBaseObject.java:20
net.sf.gridarta.gui.panel.objectchooser.DefaultObjectChooser
Definition: DefaultObjectChooser.java:60
net.sf.gridarta.gui.map
Definition: AbstractPerMapDialogManager.java:20
net.sf.gridarta.gui.panel.objectchooser.ObjectChooserTab.isMatching
boolean isMatching(@NotNull G gameObject)
net.sf.gridarta.model.archetypechooser.ArchetypeChooserFolder.getSelectedArchetype
R getSelectedArchetype()
Definition: ArchetypeChooserFolder.java:127
net.sf.gridarta.gui.panel.objectchooser.DefaultObjectChooser.selectedIndex
int selectedIndex
Definition: DefaultObjectChooser.java:131
net.sf.gridarta.gui.panel.objectchooser.DefaultObjectChooser.updateActivePickmap
void updateActivePickmap()
Definition: DefaultObjectChooser.java:377
net.sf.gridarta.model.mapcontrol.MapControl
Definition: MapControl.java:35
net.sf.gridarta.model.mapcontrol.MapControl.getMapModel
MapModel< G, A, R > getMapModel()
net.sf.gridarta.model.maparchobject
Definition: AbstractMapArchObject.java:20
net.sf.gridarta.gui.panel.objectchooser.DefaultObjectChooser.getSelection
final BaseObject< G, A, R, ?> getSelection()
Definition: DefaultObjectChooser.java:338
net.sf.gridarta.model.archetypechooser.DisplayMode
Definition: DisplayMode.java:35
net.sf.gridarta.gui.panel.objectchooser.DefaultObjectChooser.setActiveTab
void setActiveTab(final int index)
Definition: DefaultObjectChooser.java:266
net.sf.gridarta.gui.panel.objectchoicedisplay.ObjectChoiceDisplay
Definition: ObjectChoiceDisplay.java:41
net.sf.gridarta.gui.panel.objectchooser.DefaultObjectChooser.cursorSelection
BaseObject< G, A, R, ?> cursorSelection
Definition: DefaultObjectChooser.java:126
net.sf.gridarta.gui.panel.objectchooser.DefaultObjectChooser.activePickmapState
PickmapState< G, A, R > activePickmapState
Definition: DefaultObjectChooser.java:114
net.sf.gridarta.model.mapcursor
Definition: MapCursor.java:20
net.sf.gridarta.model.archetypechooser.ArchetypeChooserModelListener
Definition: ArchetypeChooserModelListener.java:34
net.sf.gridarta.gui.panel.objectchooser.ObjectChooserTab.getSelection
BaseObject< G, A, R, ?> getSelection()
net.sf.gridarta.model.archetypechooser.ArchetypeChooserPanel.getSelectedFolder
ArchetypeChooserFolder< G, A, R > getSelectedFolder()
Definition: ArchetypeChooserPanel.java:189
net.sf.gridarta.gui.panel.objectchooser.DefaultObjectChooser.getCursorSelection
BaseObject< G, A, R, ?> getCursorSelection()
Definition: DefaultObjectChooser.java:332
net.sf.gridarta.gui.panel.objectchooser.DefaultObjectChooser.serialVersionUID
static final long serialVersionUID
Definition: DefaultObjectChooser.java:65
net.sf.gridarta.gui.panel.objectchooser.ObjectChooserListener< G, A, R >
net.sf.gridarta.gui.mapfiles.PickmapState.getPickmap
MapControl< G, A, R > getPickmap()
Definition: PickmapState.java:150
net.sf.gridarta.gui.panel.objectchooser.DefaultObjectChooser.updateActivePickmap
void updateActivePickmap(@Nullable final PickmapState< G, A, R > pickmapState)
Definition: DefaultObjectChooser.java:363
net.sf.gridarta.gui.mapfiles
Definition: DuplicateMapFolderException.java:20