Gridarta Editor
DefaultMapView.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.map.mapview;
21 
22 import java.awt.BorderLayout;
23 import java.awt.Component;
24 import java.awt.Point;
25 import java.beans.PropertyVetoException;
26 import java.util.Set;
27 import javax.swing.Action;
28 import javax.swing.JComponent;
29 import javax.swing.JInternalFrame;
30 import javax.swing.JScrollPane;
31 import javax.swing.KeyStroke;
32 import javax.swing.WindowConstants;
53 import net.sf.gridarta.utils.Size2D;
54 import net.sf.japi.swing.action.ActionBuilder;
55 import net.sf.japi.swing.action.ActionBuilderFactory;
56 import org.apache.log4j.Category;
57 import org.apache.log4j.Logger;
58 import org.jetbrains.annotations.NotNull;
59 import org.jetbrains.annotations.Nullable;
60 
65 public class DefaultMapView<G extends GameObject<G, A, R>, A extends MapArchObject<A>, R extends Archetype<G, A, R>> extends AbstractMapView<G, A, R> {
66 
70  @NotNull
71  private static final Category LOG = Logger.getLogger(DefaultMapView.class);
72 
76  @NotNull
77  private static final ActionBuilder ACTION_BUILDER = ActionBuilderFactory.getInstance().getActionBuilder("net.sf.gridarta");
78 
82  @NotNull
84 
88  @NotNull
89  private final JInternalFrame internalFrame;
90 
94  private final int number;
95 
99  @NotNull
100  private final PathManager pathManager;
101 
105  @NotNull
107 
111  @NotNull
113 
117  @NotNull
119 
124  @NotNull
126 
127  @Override
128  public void mapSizeChanged(@NotNull final Size2D newSize) {
129  // ignore
130  }
131 
132  @Override
133  public void mapSquaresChanged(@NotNull final Set<MapSquare<G, A, R>> mapSquares) {
134  // ignore
135  }
136 
137  @Override
138  public void mapObjectsChanged(@NotNull final Set<G> gameObjects, @NotNull final Set<G> transientGameObjects) {
139  // ignore
140  }
141 
142  @Override
143  public void errorsChanged(@NotNull final ErrorCollector<G, A, R> errors) {
144  // ignore
145  }
146 
147  @Override
148  public void mapFileChanged(@Nullable final MapFile oldMapFile) {
149  updateTitle();
150  }
151 
152  @Override
153  public void modifiedChanged() {
154  updateTitle();
155  }
156 
157  };
158 
163  @NotNull
165 
166  @Override
167  public void mapMetaChanged() {
168  updateTitle();
169  }
170 
171  @Override
172  public void mapSizeChanged(@NotNull final Size2D mapSize) {
173  // ignore
174  }
175 
176  };
177 
182  @NotNull
184 
185  @Override
186  public void saved(@NotNull final DefaultMapControl<G, A, R> mapControl) {
187  updateTitle();
188  }
189 
190  };
191 
203  public DefaultMapView(@NotNull final MapControl<G, A, R> mapControl, final int number, @NotNull final PathManager pathManager, @NotNull final MapGrid mapGrid, @NotNull final MapCursor<G, A, R> mapCursor, @NotNull final AbstractMapRenderer<G, A, R> renderer, final int xScrollDistance, final int yScrollDistance) {
205  internalFrame = new JInternalFrame(getWindowTitle(mapControl, number, pathManager), true, true, true, true);
206  this.mapControl = mapControl;
207  this.number = number;
208  this.pathManager = pathManager;
209  this.renderer = renderer;
212  mapCursorTracker = new MapCursorTracker<>(mapControl.isPickmap(), xScrollDistance, yScrollDistance, mapCursor, renderer);
214  mapModel.getMapArchObject().addMapArchObjectListener(mapArchObjectListener);
216  internalFrame.getContentPane().setLayout(new BorderLayout());
217  internalFrame.getContentPane().add(mapCursorTracker.getScrollPane(), BorderLayout.CENTER);
218  internalFrame.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
219  internalFrame.setAutoscrolls(true);
220  internalFrame.setFocusable(true);
221  for (final Direction direction : Direction.values()) {
222  installAccelerator("moveCursor" + direction.getId());
223  }
224  installAccelerator("moveSquarePrev");
225  installAccelerator("moveSquareNext");
226  installAccelerator("moveSquareUp");
227  installAccelerator("moveSquareDown");
228  installAccelerator("moveSquareInv");
229  installAccelerator("moveSquareEnv");
230  }
231 
236  @Override
237  public void setViewPosition(@NotNull final Point viewPosition) {
238  mapCursorTracker.setViewPosition(viewPosition);
239  }
240 
245  private void installAccelerator(@NotNull final String key) {
246  final Action action = ACTION_BUILDER.getAction(key);
247  if (action != null) {
248  final KeyStroke keyStroke1 = ActionUtils.getShortcut(action);
249  if (keyStroke1 != null) {
250  internalFrame.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(keyStroke1, key);
251  }
252  final KeyStroke keyStroke2 = ActionUtils.getAlternativeShortcut(action);
253  if (keyStroke2 != null) {
254  internalFrame.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(keyStroke2, key);
255  }
256  internalFrame.getActionMap().put(key, action);
257  }
258  }
259 
260  @Override
261  public void closeNotify() {
262  super.closeNotify();
263  internalFrame.getContentPane().remove(mapCursorTracker.getScrollPane());
269  mapModel.getMapArchObject().removeMapArchObjectListener(mapArchObjectListener);
271  //mapFileActions.closeNotify();
273  }
274 
278  private void updateTitle() {
279  internalFrame.setTitle(getWindowTitle());
280  }
281 
282  @NotNull
283  @Override
284  public String getWindowTitle() {
286  }
287 
295  @NotNull
296  private static String getWindowTitle(@NotNull final MapControl<?, ?, ?> mapControl, final int number, @NotNull final PathManager pathManager) {
297  final MapFile mapFile = mapControl.getMapModel().getMapFile();
298  final String mapPath = mapFile == null ? "<unsaved>" : mapFile.getMapPath().toString();
299  return mapPath + " [ " + mapControl.getMapModel().getMapArchObject().getMapName() + " ] (" + number + ")" + (mapControl.getMapModel().isModified() ? " *" : "");
300  }
301 
302  @NotNull
303  @Override
304  public Component getComponent() {
305  return internalFrame;
306  }
307 
308  @NotNull
309  @Override
311  return mapControl;
312  }
313 
314  @Override
315  public void activate() {
316  try {
317  internalFrame.setSelected(true);
318  } catch (final PropertyVetoException e) {
319  LOG.warn("Unexpected exception", e);
320  }
321  internalFrame.setVisible(true);
322  internalFrame.requestFocus();
323  internalFrame.restoreSubcomponentFocus();
324  }
325 
326  @NotNull
327  @Override
328  public JInternalFrame getInternalFrame() {
329  return internalFrame;
330  }
331 
332  @NotNull
333  @Override
335  return renderer;
336  }
337 
338  @NotNull
339  @Override
340  public JScrollPane getScrollPane() {
342  }
343 
344 }
net.sf.gridarta.gui.map.mapview.AbstractMapView< G, A, R >::mapGrid
final MapGrid mapGrid
Definition: AbstractMapView.java:61
net.sf.gridarta.model.direction.Direction
Definition: Direction.java:28
net.sf.gridarta.gui.map.renderer.AbstractMapRenderer.closeNotify
abstract void closeNotify()
net.sf.gridarta.gui.map.mapview.DefaultMapView.mapArchObjectListener
final MapArchObjectListener mapArchObjectListener
Definition: DefaultMapView.java:164
net.sf.gridarta.model.mapmodel.MapModel
Definition: MapModel.java:75
net.sf.gridarta.gui.map.mapview.DefaultMapView.closeNotify
void closeNotify()
Definition: DefaultMapView.java:261
net.sf.gridarta.gui.map.mapview.DefaultMapView.mapControlListener
final MapControlListener< G, A, R > mapControlListener
Definition: DefaultMapView.java:183
net.sf.gridarta.model.mapmodel.MapModel.getMapArchObject
A getMapArchObject()
net.sf.gridarta.gui.map.mapview.AbstractMapView< G, A, R >::mapModel
final MapModel< G, A, R > mapModel
Definition: AbstractMapView.java:55
net.sf.gridarta.gui.map.mapview.DefaultMapView.pathManager
final PathManager pathManager
Definition: DefaultMapView.java:100
net.sf.gridarta.gui.map.mapview.ErroneousMapSquares< G, A, R >
net.sf.gridarta.gui.map.mapview.DefaultMapView.getMapControl
MapControl< G, A, R > getMapControl()
Definition: DefaultMapView.java:310
net.sf.gridarta.gui.map.mapview.DefaultMapView.mapModelListener
final MapModelListener< G, A, R > mapModelListener
Definition: DefaultMapView.java:125
net.sf.gridarta.gui.map.mapview.DefaultMapView.internalFrame
final JInternalFrame internalFrame
Definition: DefaultMapView.java:89
net.sf.gridarta
net.sf.gridarta.model.mapmodel.MapSquare
Definition: MapSquare.java:45
net.sf
net.sf.gridarta.model.maparchobject.MapArchObjectListener
Definition: MapArchObjectListener.java:30
net.sf.gridarta.model.io.PathManager
Definition: PathManager.java:39
net.sf.gridarta.model.mapmodel
Definition: AboveFloorInsertionMode.java:20
net.sf.gridarta.gui.map.mapview.DefaultMapView.setViewPosition
void setViewPosition(@NotNull final Point viewPosition)
Definition: DefaultMapView.java:237
net.sf.gridarta.gui.map.renderer
Definition: AbstractIsoMapRenderer.java:20
net.sf.gridarta.gui.map.mapview.DefaultMapView.getWindowTitle
static String getWindowTitle(@NotNull final MapControl<?, ?, ?> mapControl, final int number, @NotNull final PathManager pathManager)
Definition: DefaultMapView.java:296
net.sf.gridarta.gui.map.mapview.DefaultMapView.getComponent
Component getComponent()
Definition: DefaultMapView.java:304
net.sf.gridarta.model.archetype
Definition: AbstractArchetype.java:20
net.sf.gridarta.model.gameobject.GameObject
Definition: GameObject.java:36
net.sf.gridarta.model.mapcontrol
Definition: DefaultMapControl.java:20
net.sf.gridarta.model.mapmodel.MapModel.addMapModelListener
void addMapModelListener(@NotNull MapModelListener< G, A, R > listener)
net.sf.gridarta.model.mapmodel.MapModel.isModified
boolean isModified()
net.sf.gridarta.gui.map.mapview.DefaultMapView.activate
void activate()
Definition: DefaultMapView.java:315
net.sf.gridarta.gui.map.mapview.DefaultMapView.installAccelerator
void installAccelerator(@NotNull final String key)
Definition: DefaultMapView.java:245
net.sf.gridarta.model.mapmodel.MapFile.getMapPath
AbsoluteMapPath getMapPath()
Definition: MapFile.java:93
net.sf.gridarta.utils.ActionUtils
Definition: ActionUtils.java:33
net.sf.gridarta.gui
net.sf.gridarta.gui.utils.MenuUtils.disposeMenuElement
static void disposeMenuElement(@NotNull final MenuElement menuElement)
Definition: MenuUtils.java:58
net.sf.gridarta.gui.map.renderer.AbstractMapRenderer
Definition: AbstractMapRenderer.java:45
net.sf.gridarta.gui.map.mapview.DefaultMapView.getWindowTitle
String getWindowTitle()
Definition: DefaultMapView.java:284
net.sf.gridarta.gui.map.mapview.DefaultMapView.ACTION_BUILDER
static final ActionBuilder ACTION_BUILDER
Definition: DefaultMapView.java:77
net.sf.gridarta.model.gameobject
Definition: AbstractGameObject.java:20
net.sf.gridarta.gui.map.mapview.DefaultMapView.number
final int number
Definition: DefaultMapView.java:94
net
net.sf.gridarta.model.mapcontrol.MapControl.isPickmap
boolean isPickmap()
net.sf.gridarta.utils.ActionUtils.getShortcut
static KeyStroke getShortcut(@NotNull final Action action)
Definition: ActionUtils.java:120
net.sf.gridarta.model.mapmodel.MapModel.removeMapModelListener
void removeMapModelListener(@NotNull MapModelListener< G, A, R > listener)
net.sf.gridarta.model.maparchobject.MapArchObject
Definition: MapArchObject.java:40
net.sf.gridarta.gui.map.mapview.MapCursorTracker.closeNotify
void closeNotify()
Definition: MapCursorTracker.java:129
net.sf.gridarta.model.validation.ErrorCollector
Definition: ErrorCollector.java:33
net.sf.gridarta.gui.map.mapview.DefaultMapView.updateTitle
void updateTitle()
Definition: DefaultMapView.java:278
net.sf.gridarta.gui.map.mapview.DefaultMapView.getInternalFrame
JInternalFrame getInternalFrame()
Definition: DefaultMapView.java:328
net.sf.gridarta.gui.map.mapview.DefaultMapView.mapCursorTracker
final MapCursorTracker< G, A, R > mapCursorTracker
Definition: DefaultMapView.java:118
net.sf.gridarta.model.validation
Definition: AbstractValidator.java:20
net.sf.gridarta.model.mapmodel.AbsoluteMapPath.toString
String toString()
Definition: AbsoluteMapPath.java:117
net.sf.gridarta.model.mapcursor.MapCursor
Definition: MapCursor.java:58
net.sf.gridarta.gui.map.mapview.DefaultMapView.getScrollPane
JScrollPane getScrollPane()
Definition: DefaultMapView.java:340
net.sf.gridarta.model.mapmodel.MapFile
Definition: MapFile.java:31
net.sf.gridarta.model.io
Definition: AbstractArchetypeParser.java:20
net.sf.gridarta.utils.ActionUtils.getAlternativeShortcut
static KeyStroke getAlternativeShortcut(@NotNull final Action action)
Definition: ActionUtils.java:130
net.sf.gridarta.model.mapmodel.MapModelListener
Definition: MapModelListener.java:36
net.sf.gridarta.model.mapgrid.MapGrid
Definition: MapGrid.java:46
net.sf.gridarta.gui.map.mapview.DefaultMapView
Definition: DefaultMapView.java:65
net.sf.gridarta.model.mapcontrol.MapControl.addMapControlListener
void addMapControlListener(@NotNull MapControlListener< G, A, R > listener)
net.sf.gridarta.gui.map.mapview.DefaultMapView.LOG
static final Category LOG
Definition: DefaultMapView.java:71
net.sf.gridarta.model.mapgrid
Definition: MapGrid.java:20
net.sf.gridarta.gui.map.mapview.MapCursorTracker.getScrollPane
JScrollPane getScrollPane()
Definition: MapCursorTracker.java:147
net.sf.gridarta.gui.map.mapview.DefaultMapView.erroneousMapSquares
final ErroneousMapSquares< G, A, R > erroneousMapSquares
Definition: DefaultMapView.java:112
net.sf.gridarta.model
net.sf.gridarta.model.archetype.Archetype
Definition: Archetype.java:41
net.sf.gridarta.gui.map
Definition: AbstractPerMapDialogManager.java:20
net.sf.gridarta.gui.map.mapview.AbstractMapView
Definition: AbstractMapView.java:49
net.sf.gridarta.gui.map.mapview.ErroneousMapSquares.closeNotify
void closeNotify()
Definition: ErroneousMapSquares.java:129
net.sf.gridarta.gui.map.mapview.DefaultMapView.DefaultMapView
DefaultMapView(@NotNull final MapControl< G, A, R > mapControl, final int number, @NotNull final PathManager pathManager, @NotNull final MapGrid mapGrid, @NotNull final MapCursor< G, A, R > mapCursor, @NotNull final AbstractMapRenderer< G, A, R > renderer, final int xScrollDistance, final int yScrollDistance)
Definition: DefaultMapView.java:203
net.sf.gridarta.model.mapcontrol.MapControl
Definition: MapControl.java:35
net.sf.gridarta.model.mapcontrol.MapControlListener
Definition: MapControlListener.java:33
net.sf.gridarta.model.mapcontrol.MapControl.removeMapControlListener
void removeMapControlListener(@NotNull MapControlListener< G, A, R > listener)
net.sf.gridarta.gui.map.mapview.DefaultMapView.renderer
final AbstractMapRenderer< G, A, R > renderer
Definition: DefaultMapView.java:106
net.sf.gridarta.gui.map.mapview.MapCursorTracker< G, A, R >
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.utils
Definition: AnimationComponent.java:20
net.sf.gridarta.model.mapcontrol.DefaultMapControl
Definition: DefaultMapControl.java:44
net.sf.gridarta.gui.map.renderer.MapRenderer
Definition: MapRenderer.java:36
net.sf.gridarta.model.mapmodel.MapModel.getMapFile
MapFile getMapFile()
net.sf.gridarta.gui.map.mapview.DefaultMapView.getRenderer
MapRenderer getRenderer()
Definition: DefaultMapView.java:334
net.sf.gridarta.model.mapcursor
Definition: MapCursor.java:20
net.sf.gridarta.gui.utils.MenuUtils
Definition: MenuUtils.java:39
net.sf.gridarta.gui.map.mapview.MapCursorTracker.setViewPosition
void setViewPosition(@NotNull final Point viewPosition)
Definition: MapCursorTracker.java:121
net.sf.gridarta.utils.Size2D
Definition: Size2D.java:30
net.sf.gridarta.gui.map.mapview.DefaultMapView.mapControl
final MapControl< G, A, R > mapControl
Definition: DefaultMapView.java:83
net.sf.gridarta.utils
Definition: ActionBuilderUtils.java:20
net.sf.gridarta.model.direction
Definition: Direction.java:20
net.sf.gridarta.gui.map.mapview.AbstractMapView< G, A, R >::mapCursor
final MapCursor< G, A, R > mapCursor
Definition: AbstractMapView.java:67