Gridarta Editor
ReleaseDragAction.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.action;
21 
22 import java.awt.Point;
23 import javax.swing.Action;
29 import net.sf.japi.swing.action.ActionMethod;
30 import org.jetbrains.annotations.NotNull;
31 import org.jetbrains.annotations.Nullable;
32 
38 public class ReleaseDragAction<G extends GameObject<G, A, R>, A extends MapArchObject<A>, R extends Archetype<G, A, R>> extends AbstractMapCursorAction<G, A, R> implements EditorAction {
39 
44  @Nullable
45  private Action action;
46 
47  @Override
48  public void setAction(@NotNull final Action action, @NotNull final String name) {
49  this.action = action;
50  }
51 
55  @ActionMethod
56  public void releaseDrag() {
57  doReleaseDrag(true);
58  }
59 
65  private boolean doReleaseDrag(final boolean performAction) {
66  final MapCursor<G, A, R> mapCursor = getActiveMapCursor();
67  if (mapCursor == null) {
68  return false;
69  }
70 
71  if (performAction) {
72  if (mapCursor.isDragging()) {
73  mapCursor.dragRelease();
74  } else {
75  final Point location = mapCursor.getLocation();
76  mapCursor.deactivate();
77  mapCursor.setLocation(location);
78  }
79  }
80 
81  return true;
82  }
83 
84  @Override
85  protected void updateAction() {
86  if (action != null) {
87  //noinspection ConstantConditions
88  action.setEnabled(doReleaseDrag(false));
89  }
90  }
91 
92 }
MapCursor< G, A, R > getActiveMapCursor()
Return the map cursor of the current map view if it is active.
void releaseDrag()
Action method for "release drag".
Action action
The Action associated with this editor action.
An EditorAction that finishes a selection process when the mouse button is released.
MapCursor provides methods to move and drag on map.
Definition: MapCursor.java:57
Point getLocation()
Get position of cursor.
Definition: MapCursor.java:226
void setLocation(@NotNull final Point p)
Move cursor to a new location.
Definition: MapCursor.java:235
Base package of all Gridarta classes.
Reflects a game object (object on a map).
Definition: GameObject.java:36
A global editor action.
GameObjects are the objects based on Archetypes found on maps.
void setAction(@NotNull final Action action, @NotNull final String name)
Sets the Action instance for this editor action.
void dragRelease()
Leave drag mode and undo pre-selection.
Definition: MapCursor.java:318
Abstract base class for actions that have to track the current map cursor.
boolean doReleaseDrag(final boolean performAction)
Executes the "release drag" action.
boolean isDragging()
Returns whether the cursor is currently being dragged.
Definition: MapCursor.java:411
final void deactivate()
Cursor gets deactivated.
Definition: MapCursor.java:354