Gridarta Editor
MapViews.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.awt.Point;
23 import java.util.ArrayList;
24 import java.util.Collection;
25 import java.util.Collections;
26 import java.util.Iterator;
27 import java.util.List;
28 import java.util.concurrent.CopyOnWriteArrayList;
33 import org.jetbrains.annotations.NotNull;
34 import org.jetbrains.annotations.Nullable;
35 
40 public class MapViews<G extends GameObject<G, A, R>, A extends MapArchObject<A>, R extends Archetype<G, A, R>> {
41 
45  @NotNull
46  private final Collection<MapViewsListener<G, A, R>> listeners = new CopyOnWriteArrayList<>();
47 
54  @NotNull
55  private final List<MapView<G, A, R>> mapViews = new ArrayList<>();
56 
60  private int nextMapViewCounter;
61 
66  public void addMapViewsListener(@NotNull final MapViewsListener<G, A, R> listener) {
67  listeners.add(listener);
68  }
69 
74  public void removeMapViewsListener(@NotNull final MapViewsListener<G, A, R> listener) {
75  listeners.remove(listener);
76  }
77 
82  @Nullable
84  return mapViews.isEmpty() ? null : mapViews.get(0);
85  }
86 
91  public int getMapViews() {
92  return mapViews.size();
93  }
94 
103  @NotNull
104  public MapView<G, A, R> newMapView(@NotNull final MapControl<G, A, R> mapControl, @Nullable final Point viewPosition, @NotNull final MapViewFactory<G, A, R> mapViewFactory) {
105  mapControl.acquire();
106  try {
107  final MapView<G, A, R> mapView = mapViewFactory.newMapView(mapControl, ++nextMapViewCounter);
108  if (viewPosition != null) {
109  mapView.setViewPosition(viewPosition);
110  }
111  mapViews.add(mapView);
112  mapControl.acquire();
113  for (final MapViewsListener<G, A, R> listener : listeners) {
114  listener.mapViewCreated(mapView);
115  }
116  return mapView;
117  } finally {
118  mapControl.release();
119  }
120  }
121 
126  @NotNull
127  public Point @NotNull [] getViewPositions() {
128  final Point[] result = new Point[mapViews.size()];
129  for (int i = 0; i < result.length; i++) {
130  result[i] = mapViews.get(i).getScrollPane().getViewport().getViewPosition();
131  }
132  return result;
133  }
134 
139  public void closeView(@NotNull final MapView<G, A, R> mapView) {
140  for (final MapViewsListener<G, A, R> listener : listeners) {
141  listener.mapViewClosing(mapView);
142  }
143  mapView.closeNotify();
144  mapViews.remove(mapView);
145  mapView.getMapControl().release();
146  }
147 
151  public void closeAllViews() {
152  while (!mapViews.isEmpty()) {
153  closeView(mapViews.get(0));
154  }
155  }
156 
161  public void setFocus(@NotNull final MapView<G, A, R> mapView) {
162  assert mapViews.contains(mapView);
163  mapViews.remove(mapView);
164  mapViews.add(0, mapView);
165  }
166 
172  @NotNull
173  public Iterator<MapView<G, A, R>> getMapViewIterator() {
174  return Collections.unmodifiableList(mapViews).iterator();
175  }
176 
180  public void repaintAllViews() {
181  for (final MapView<G, A, R> mapView : mapViews) {
182  mapView.getRenderer().forceRepaint();
183  }
184  }
185 
190  public void raise(@NotNull final MapView<G, A, R> mapView) {
191  for (final MapViewsListener<G, A, R> listener : listeners) {
192  listener.mapViewRaise(mapView);
193  }
194  }
195 
196 }
net.sf.gridarta.gui.map.mapview.MapViews.nextMapViewCounter
int nextMapViewCounter
The map view counter for the next created MapView.
Definition: MapViews.java:60
net.sf.gridarta.gui.map.mapview.MapViews.getMapViewIterator
Iterator< MapView< G, A, R > > getMapViewIterator()
Returns an Iterator returning all MapViews.
Definition: MapViews.java:173
net.sf.gridarta
Base package of all Gridarta classes.
net.sf.gridarta.gui.map.mapview.MapViews.repaintAllViews
void repaintAllViews()
Repaints all MapViews.
Definition: MapViews.java:180
net.sf
net.sf.gridarta.gui.map.mapview.MapViews
A list of MapViews for one MapControl instance.
Definition: MapViews.java:40
net.sf.gridarta.gui.map.mapview.MapViews.newMapView
MapView< G, A, R > newMapView(@NotNull final MapControl< G, A, R > mapControl, @Nullable final Point viewPosition, @NotNull final MapViewFactory< G, A, R > mapViewFactory)
Creates a new MapView.
Definition: MapViews.java:104
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.model.mapcontrol
Definition: DefaultMapControl.java:20
net.sf.gridarta.gui.map.mapview.MapViews.getMapViews
int getMapViews()
Returns the number of views of a MapControl.
Definition: MapViews.java:91
net.sf.gridarta.gui.map.mapview.MapViews.getMapViewFrame
MapView< G, A, R > getMapViewFrame()
Returns the last used view of a MapControl.
Definition: MapViews.java:83
net.sf.gridarta.gui.map.mapview.MapView.setViewPosition
void setViewPosition(@NotNull Point viewPosition)
Sets the view position.
net.sf.gridarta.gui.map.mapview.MapViews.closeView
void closeView(@NotNull final MapView< G, A, R > mapView)
Closes a view of a MapControl.
Definition: MapViews.java:139
net.sf.gridarta.model.gameobject
GameObjects are the objects based on Archetypes found on maps.
Definition: AbstractGameObject.java:20
net
net.sf.gridarta.gui.map.mapview.MapViews.closeAllViews
void closeAllViews()
Closes all views of a MapControl.
Definition: MapViews.java:151
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.MapViewsListener< G, A, R >
net.sf.gridarta.gui.map.mapview.MapViews.removeMapViewsListener
void removeMapViewsListener(@NotNull final MapViewsListener< G, A, R > listener)
Removes a MapViewsListener to be notified of events.
Definition: MapViews.java:74
net.sf.gridarta.gui.map.mapview.MapViews.addMapViewsListener
void addMapViewsListener(@NotNull final MapViewsListener< G, A, R > listener)
Adds a MapViewsListener to be notified of events.
Definition: MapViews.java:66
net.sf.gridarta.gui.map.mapview.MapViews.listeners
final Collection< MapViewsListener< G, A, R > > listeners
The registered MapViewsListeners.
Definition: MapViews.java:46
net.sf.gridarta.gui.map.mapview.MapViews.setFocus
void setFocus(@NotNull final MapView< G, A, R > mapView)
Sets a MapView as the main view.
Definition: MapViews.java:161
net.sf.gridarta.model
net.sf.gridarta.model.archetype.Archetype
Reflects an Archetype.
Definition: Archetype.java:41
net.sf.gridarta.gui.map.mapview.MapViewFactory< G, A, R >
net.sf.gridarta.gui.map.mapview.MapViews.mapViews
final List< MapView< G, A, R > > mapViews
The list contains all views of the map.
Definition: MapViews.java:55
net.sf.gridarta.gui.map.mapview.MapViews.getViewPositions
Point[] getViewPositions()
Returns the current view positions of all views of a MapControl.
Definition: MapViews.java:127
net.sf.gridarta.model.mapcontrol.MapControl
Currently nothing more than a marker interface for unification.
Definition: MapControl.java:35
net.sf.gridarta.model.maparchobject
Definition: AbstractMapArchObject.java:20