Gridarta Editor
MapViewManager.java
Go to the documentation of this file.
1 /*
2  * Gridarta MMORPG map editor for Crossfire, Daimonin and similar games.
3  * Copyright (C) 2000-2023 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.map.mapview;
21 
22 import java.util.ArrayList;
23 import java.util.Collection;
24 import java.util.Collections;
25 import java.util.Iterator;
26 import java.util.List;
30 import org.jetbrains.annotations.NotNull;
31 import org.jetbrains.annotations.Nullable;
32 
38 public class MapViewManager<G extends GameObject<G, A, R>, A extends MapArchObject<A>, R extends Archetype<G, A, R>> implements Iterable<MapView<G, A, R>> {
39 
44  @NotNull
45  private final List<MapView<G, A, R>> mapViewsList = Collections.synchronizedList(new ArrayList<>());
46 
50  @Nullable
52 
56  @NotNull
57  private final Collection<MapViewManagerListener<G, A, R>> listeners = new ArrayList<>();
58 
63  public void setActiveMapView(@NotNull final MapView<G, A, R> mapView) {
64  assert mapViewsList.contains(mapView);
65  mapViewsList.remove(mapView);
66  mapViewsList.add(0, mapView);
68  }
69 
75  public void removeMapView(@NotNull final MapView<G, A, R> mapView) {
76  assert mapViewsList.contains(mapView);
77  if (!mapViewsList.contains(mapView)) {
78  return;
79  }
80 
81  mapViewsList.remove(mapView);
82  for (final MapViewManagerListener<G, A, R> listener : listeners) {
83  listener.mapViewClosing(mapView);
84  }
86  }
87 
92  public void addMapView(@NotNull final MapView<G, A, R> mapView) {
93  assert !mapViewsList.contains(mapView);
94  mapViewsList.add(0, mapView);
95 
96  for (final MapViewManagerListener<G, A, R> listener : listeners) {
97  listener.mapViewCreated(mapView);
98  }
99  }
100 
105  public void deactivateMapView(@NotNull final MapView<G, A, R> mapView) {
106  assert mapViewsList.contains(mapView);
107  if (mapViewsList.size() <= 1) {
108  return;
109  }
110 
111  mapViewsList.remove(mapView);
112  mapViewsList.add(mapView);
114  }
115 
120  public void activateMapView(@NotNull final MapView<G, A, R> mapView) {
121  assert mapViewsList.contains(mapView);
122  mapViewsList.remove(mapView);
123  mapViewsList.add(0, mapView);
125  }
126 
131  @NotNull
132  @Override
133  public Iterator<MapView<G, A, R>> iterator() {
134  return Collections.unmodifiableList(mapViewsList).iterator();
135  }
136 
140  private void updateActiveMapView() {
141  final MapView<G, A, R> newActiveMapView = mapViewsList.isEmpty() ? null : mapViewsList.get(0);
142  if (activeMapView == newActiveMapView) {
143  return;
144  }
145 
146  activeMapView = newActiveMapView;
147  for (final MapViewManagerListener<G, A, R> listener : listeners) {
148  listener.activeMapViewChanged(activeMapView);
149  }
150  }
151 
156  public void addMapViewManagerListener(@NotNull final MapViewManagerListener<G, A, R> listener) {
157  listeners.add(listener);
158  }
159 
164  public void removeMapViewManagerListener(@NotNull final MapViewManagerListener<G, A, R> listener) {
165  listeners.remove(listener);
166  }
167 
173  @Nullable
175  return activeMapView;
176  }
177 
183  public boolean doPrevWindow(final boolean performAction) {
184  if (mapViewsList.size() <= 1) {
185  return false;
186  }
187 
188  if (performAction) {
189  // XXX I might work I might not work, use AWT/Swing focus traversal
190  final MapView<G, A, R> mapView = mapViewsList.remove(0);
191  mapViewsList.add(mapView);
193  }
194 
195  return true;
196  }
197 
203  public boolean doNextWindow(final boolean performAction) {
204  final int size = mapViewsList.size();
205  if (size <= 1) {
206  return false;
207  }
208 
209  if (performAction) {
210  // XXX I might work I might not work, use AWT/Swing focus traversal
211  final MapView<G, A, R> mapView = mapViewsList.remove(size - 1);
212  mapViewsList.add(0, mapView);
214  }
215 
216  return true;
217  }
218 
219 }
net.sf.gridarta.gui.map.mapview.MapViewManager.deactivateMapView
void deactivateMapView(@NotNull final MapView< G, A, R > mapView)
Deactivates a map view.
Definition: MapViewManager.java:105
net.sf.gridarta.gui.map.mapview.MapViewManager.mapViewsList
final List< MapView< G, A, R > > mapViewsList
All open map views as a list.
Definition: MapViewManager.java:45
net.sf.gridarta
Base package of all Gridarta classes.
net.sf.gridarta.gui.map.mapview.MapViewManager
Maintains all map views.
Definition: MapViewManager.java:38
net.sf
net.sf.gridarta.gui.map.mapview.MapViewManager.doNextWindow
boolean doNextWindow(final boolean performAction)
Executes the "next window" action.
Definition: MapViewManager.java:203
net.sf.gridarta.gui.map.mapview.MapViewManagerListener< G, A, R >
net.sf.gridarta.model.archetype
Definition: AbstractArchetype.java:20
net.sf.gridarta.model.gameobject.GameObject
Reflects a game object (object on a map).
Definition: GameObject.java:36
net.sf.gridarta.gui.map.mapview.MapViewManager.iterator
Iterator< MapView< G, A, R > > iterator()
Returns all opened map views.
Definition: MapViewManager.java:133
net.sf.gridarta.gui.map.mapview.MapViewManager.addMapView
void addMapView(@NotNull final MapView< G, A, R > mapView)
Adds a map view.
Definition: MapViewManager.java:92
net.sf.gridarta.model.gameobject
GameObjects are the objects based on Archetypes found on maps.
Definition: AbstractGameObject.java:20
net
net.sf.gridarta.model.maparchobject.MapArchObject
Interface for MapArchObjects.
Definition: MapArchObject.java:40
net.sf.gridarta.gui.map.mapview.MapView< G, A, R >
net.sf.gridarta.gui.map.mapview.MapViewManager.setActiveMapView
void setActiveMapView(@NotNull final MapView< G, A, R > mapView)
Sets the active map view.
Definition: MapViewManager.java:63
net.sf.gridarta.gui.map.mapview.MapViewManager.updateActiveMapView
void updateActiveMapView()
Updates the active map view and notifies all listeners of changes.
Definition: MapViewManager.java:140
net.sf.gridarta.model
net.sf.gridarta.model.archetype.Archetype
Reflects an Archetype.
Definition: Archetype.java:41
net.sf.gridarta.gui.map.mapview.MapViewManager.getActiveMapView
MapView< G, A, R > getActiveMapView()
Returns the active top map view we are working with.
Definition: MapViewManager.java:174
net.sf.gridarta.gui.map.mapview.MapViewManager.doPrevWindow
boolean doPrevWindow(final boolean performAction)
Executes the "prev window" action.
Definition: MapViewManager.java:183
net.sf.gridarta.gui.map.mapview.MapViewManager.activateMapView
void activateMapView(@NotNull final MapView< G, A, R > mapView)
Activates a map view.
Definition: MapViewManager.java:120
net.sf.gridarta.model.maparchobject
Definition: AbstractMapArchObject.java:20
net.sf.gridarta.gui.map.mapview.MapViewManager.removeMapViewManagerListener
void removeMapViewManagerListener(@NotNull final MapViewManagerListener< G, A, R > listener)
Removes a listener to be notified.
Definition: MapViewManager.java:164
net.sf.gridarta.gui.map.mapview.MapViewManager.addMapViewManagerListener
void addMapViewManagerListener(@NotNull final MapViewManagerListener< G, A, R > listener)
Adds a listener to be notified.
Definition: MapViewManager.java:156
net.sf.gridarta.gui.map.mapview.MapViewManager.activeMapView
MapView< G, A, R > activeMapView
The active map view.
Definition: MapViewManager.java:51
net.sf.gridarta.gui.map.mapview.MapViewManager.listeners
final Collection< MapViewManagerListener< G, A, R > > listeners
The registered MapViewManagerListeners.
Definition: MapViewManager.java:57
net.sf.gridarta.gui.map.mapview.MapViewManager.removeMapView
void removeMapView(@NotNull final MapView< G, A, R > mapView)
Removes a map view.
Definition: MapViewManager.java:75