Gridarta Editor
MapFolderTreeActions.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.mapfiles;
21 
22 import javax.swing.Action;
23 import javax.swing.JCheckBoxMenuItem;
24 import javax.swing.JMenu;
33 import net.sf.japi.swing.action.ActionBuilder;
34 import net.sf.japi.swing.action.ActionBuilderFactory;
35 import net.sf.japi.swing.action.ActionMethod;
36 import org.jetbrains.annotations.NotNull;
37 import org.jetbrains.annotations.Nullable;
38 
43 public class MapFolderTreeActions<G extends GameObject<G, A, R>, A extends MapArchObject<A>, R extends Archetype<G, A, R>> implements EditorAction {
44 
48  @NotNull
49  private static final ActionBuilder ACTION_BUILDER = ActionBuilderFactory.getInstance().getActionBuilder("net.sf.gridarta");
50 
54  @NotNull
56 
60  @NotNull
62 
66  @NotNull
68 
72  @NotNull
73  private final String createFolderKey;
74 
78  @NotNull
79  private final String deleteFolderKey;
80 
84  @NotNull
85  private final String confirmDeleteFolderKey;
86 
90  @NotNull
91  private final String deleteFolderNotEmptyKey;
92 
96  @Nullable
97  private JMenu folderMenu;
98 
102  @Nullable
104 
108  @Nullable
109  private Action aCreateFolderAction;
110 
114  @Nullable
115  private Action aDeletePickmapFolder;
116 
121  @NotNull
123 
124  @Override
125  public void activeMapFolderChanged(@Nullable final MapFolder<G, A, R> mapFolder) {
126  activeMapFolder = mapFolder;
127  refresh();
128  }
129 
130  @Override
131  public void folderAdded(@NotNull final MapFolder<G, A, R> mapFolder) {
132  refresh();
133  }
134 
135  @Override
136  public void folderRemoved(@NotNull final MapFolder<G, A, R> mapFolder) {
137  refresh();
138  }
139 
140  };
141 
146  @NotNull
148 
161  public MapFolderTreeActions(@NotNull final MapFolderTree<G, A, R> mapFolderTree, @NotNull final PickmapSettings pickmapSettings, @NotNull final NewMapDialogFactory<G, A, R> newMapDialogFactory, @NotNull final String createFolderKey, @NotNull final String deleteFolderKey, @NotNull final String confirmDeleteFolderKey, @NotNull final String deleteFolderNotEmptyKey) {
162  this.mapFolderTree = mapFolderTree;
163  this.pickmapSettings = pickmapSettings;
164  this.newMapDialogFactory = newMapDialogFactory;
165  this.createFolderKey = createFolderKey;
166  this.deleteFolderKey = deleteFolderKey;
167  this.confirmDeleteFolderKey = confirmDeleteFolderKey;
168  this.deleteFolderNotEmptyKey = deleteFolderNotEmptyKey;
172  refresh();
173  }
174 
180  @Deprecated
181  public void setPickmapFoldersMenu(@Nullable final JMenu folderMenu) {
182  this.folderMenu = folderMenu;
183  refresh();
184  }
185 
189  private void refresh() {
190  if (aCreateFolderAction != null) {
191  aCreateFolderAction.setEnabled(doCreateFolder(false));
192  }
193  if (aDeletePickmapFolder != null) {
194  aDeletePickmapFolder.setEnabled(doDeletePickmapFolder(false));
195  }
196 
197  if (folderMenu == null) {
198  return;
199  }
200 
202  for (final MapFolder<G, A, R> mapFolder : mapFolderTree) {
203  final JCheckBoxMenuItem menuItem = new JCheckBoxMenuItem();
204  final Action action = new MapFolderTreeAction<>(mapFolderTree, mapFolder, menuItem);
205  menuItem.setAction(action);
206  menuItem.setSelected(mapFolder == activeMapFolder);
207  assert folderMenu != null;
208  folderMenu.add(menuItem);
209  }
210  }
211 
215  @ActionMethod
216  public void createPickmapFolder() {
217  doCreateFolder(true);
218  }
219 
225  private boolean doCreateFolder(final boolean performAction) {
226  if (pickmapSettings.isLocked()) {
227  return false;
228  }
229 
230  if (performAction) {
232  }
233 
234  return true;
235  }
236 
240  @ActionMethod
241  public void deletePickmapFolder() {
242  doDeletePickmapFolder(true);
243  }
244 
250  private boolean doDeletePickmapFolder(final boolean performAction) {
251  if (pickmapSettings.isLocked()) {
252  return false;
253  }
254 
255  final MapFolder<G, A, R> mapFolder = activeMapFolder;
256  if (mapFolder == null || mapFolder.getParent() == null) {
257  return false;
258  }
259 
260  if (performAction) {
261  if (mapFolder.getPickmaps() > 0 && !ACTION_BUILDER.showQuestionDialog(null/*XXX:parent*/, confirmDeleteFolderKey, mapFolder.getName(), mapFolder.getPickmaps())) {
262  return false;
263  }
264 
265  try {
266  mapFolderTree.removeMapFolder(mapFolder, true);
267  } catch (final MapFolderNotEmptyException ex) {
268  ACTION_BUILDER.showMessageDialog(null/*XXX:parent*/, deleteFolderNotEmptyKey, mapFolder.getName());
269  }
270  }
271 
272  return true;
273  }
274 
275  @Override
276  public void setAction(@NotNull final Action action, @NotNull final String name) {
277  if (name.equals(createFolderKey)) {
278  aCreateFolderAction = action;
279  } else if (name.equals(deleteFolderKey)) {
280  aDeletePickmapFolder = action;
281  } else {
282  throw new IllegalArgumentException("unsupported action name: " + name);
283  }
284  refresh();
285  }
286 
287 }
name
name
Definition: ArchetypeTypeSetParserTest-ignoreDefaultAttribute1-result.txt:2
net.sf.gridarta.gui.mapfiles.MapFolderTreeActions.pickmapSettingsListener
final PickmapSettingsListener pickmapSettingsListener
The PickmapSettingsListener attached to {}.
Definition: MapFolderTreeActions.java:147
net.sf.gridarta.gui.mapfiles.MapFolderTreeActions.createFolderKey
final String createFolderKey
The action key for "create folder".
Definition: MapFolderTreeActions.java:73
net.sf.gridarta.gui.mapfiles.MapFolderTreeListener< G, A, R >
net.sf.gridarta.gui.mapfiles.MapFolderTreeActions.aCreateFolderAction
Action aCreateFolderAction
Action for "create folder".
Definition: MapFolderTreeActions.java:109
net.sf.gridarta.gui.mapfiles.MapFolderTreeActions.setPickmapFoldersMenu
void setPickmapFoldersMenu(@Nullable final JMenu folderMenu)
Sets the pickmap folders menu to manage.
Definition: MapFolderTreeActions.java:181
net.sf.gridarta.gui.mapfiles.MapFolderTreeActions.createPickmapFolder
void createPickmapFolder()
Action callback function to create a new pickmap folder.
Definition: MapFolderTreeActions.java:216
net.sf.gridarta.gui.mapfiles.MapFolderTreeActions.MapFolderTreeActions
MapFolderTreeActions(@NotNull final MapFolderTree< G, A, R > mapFolderTree, @NotNull final PickmapSettings pickmapSettings, @NotNull final NewMapDialogFactory< G, A, R > newMapDialogFactory, @NotNull final String createFolderKey, @NotNull final String deleteFolderKey, @NotNull final String confirmDeleteFolderKey, @NotNull final String deleteFolderNotEmptyKey)
Creates a new instance.
Definition: MapFolderTreeActions.java:161
net.sf.gridarta
Base package of all Gridarta classes.
net.sf.gridarta.gui.utils.MenuUtils.removeAll
static void removeAll(@NotNull final JMenu menu)
Remove all menu entries.
Definition: MenuUtils.java:72
net.sf.gridarta.gui.mapfiles.MapFolderTree< G, A, R >
net.sf.gridarta.gui.mapfiles.MapFolderTreeActions.confirmDeleteFolderKey
final String confirmDeleteFolderKey
The dialog key for "confirm delete folder?".
Definition: MapFolderTreeActions.java:85
net.sf.gridarta.model.pickmapsettings.PickmapSettingsListener
Interface for event listeners that are interested in changes on {}.
Definition: PickmapSettingsListener.java:29
net.sf
net.sf.gridarta.gui.mapfiles.MapFolderTreeActions.aDeletePickmapFolder
Action aDeletePickmapFolder
Action called for "delete active folder".
Definition: MapFolderTreeActions.java:115
net.sf.gridarta.gui.dialog.newmap.NewMapDialogFactory.showNewPickmapFolderDialog
void showNewPickmapFolderDialog(@NotNull final MapFolderTree< G, A, R > mapFolderTree, @Nullable final MapFolder< G, A, R > parent)
Shows a dialog for creating a new pickmap folder.
Definition: NewMapDialogFactory.java:159
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.mapfiles.MapFolder.getParent
MapFolder< G, A, R > getParent()
Returns the parent folder.
Definition: MapFolder.java:121
net.sf.gridarta.gui.mapfiles.MapFolderTreeActions.refresh
void refresh()
Updates the actions' states.
Definition: MapFolderTreeActions.java:189
net.sf.gridarta.gui
Graphical User Interface of Gridarta.
net.sf.gridarta.gui.mapfiles.MapFolderTreeActions.mapFolderTreeListener
final MapFolderTreeListener< G, A, R > mapFolderTreeListener
The MapFolderTreeListener which is registered to the selected pickmap.
Definition: MapFolderTreeActions.java:122
net.sf.gridarta.model.gameobject
GameObjects are the objects based on Archetypes found on maps.
Definition: AbstractGameObject.java:20
net
net.sf.gridarta.gui.mapfiles.MapFolder.getName
String getName()
Returns the name.
Definition: MapFolder.java:130
net.sf.gridarta.gui.mapfiles.MapFolderTreeActions.ACTION_BUILDER
static final ActionBuilder ACTION_BUILDER
Action Builder.
Definition: MapFolderTreeActions.java:49
net.sf.gridarta.model.maparchobject.MapArchObject
Interface for MapArchObjects.
Definition: MapArchObject.java:40
net.sf.gridarta.gui.mapfiles.MapFolderTreeActions.deleteFolderKey
final String deleteFolderKey
The action key for "delete folder".
Definition: MapFolderTreeActions.java:79
net.sf.gridarta.gui.mapfiles.MapFolder< G, A, R >
net.sf.gridarta.gui.dialog.newmap
Definition: AbstractMapsizeNewMapDialog.java:20
net.sf.gridarta.gui.dialog.newmap.NewMapDialogFactory
Utility class to create NewMapDialog instances.
Definition: NewMapDialogFactory.java:39
net.sf.gridarta.model.pickmapsettings.PickmapSettings.isLocked
boolean isLocked()
Returns whether pickmaps are immutable.
net.sf.gridarta.gui.mapfiles.MapFolderTreeActions.deleteFolderNotEmptyKey
final String deleteFolderNotEmptyKey
The dialog key for "folder is not empty".
Definition: MapFolderTreeActions.java:91
net.sf.gridarta.gui.mapfiles.MapFolderTreeActions.mapFolderTree
final MapFolderTree< G, A, R > mapFolderTree
The model to operate on.
Definition: MapFolderTreeActions.java:55
net.sf.gridarta.gui.dialog
net.sf.gridarta.model.pickmapsettings.PickmapSettings.addPickmapSettingsListener
void addPickmapSettingsListener(@NotNull PickmapSettingsListener listener)
Adds a PickmapSettingsListener to be notified about changes.
net.sf.gridarta.model
net.sf.gridarta.model.archetype.Archetype
Reflects an Archetype.
Definition: Archetype.java:41
net.sf.gridarta.gui.mapfiles.MapFolderTreeActions.pickmapSettings
final PickmapSettings pickmapSettings
The PickmapSettings to use.
Definition: MapFolderTreeActions.java:61
net.sf.gridarta.gui.mapfiles.MapFolderTreeActions.setAction
void setAction(@NotNull final Action action, @NotNull final String name)
Sets the Action instance for this editor action.
Definition: MapFolderTreeActions.java:276
net.sf.gridarta.gui.mapfiles.MapFolderTreeActions.activeMapFolder
MapFolder< G, A, R > activeMapFolder
The last known active folder.
Definition: MapFolderTreeActions.java:103
net.sf.gridarta.gui.mapfiles.MapFolderTree.addModelListener
void addModelListener(@NotNull final MapFolderTreeListener< G, A, R > listener)
Adds a MapFolderTreeListener to be informed about changes.
Definition: MapFolderTree.java:188
net.sf.gridarta.model.pickmapsettings
Definition: AbstractPickmapSettings.java:20
net.sf.gridarta.gui.mapfiles.MapFolderTree.removeMapFolder
synchronized void removeMapFolder(@NotNull final MapFolder< G, A, R > mapFolder, final boolean deleteFile)
Removes a map folder from this model.
Definition: MapFolderTree.java:113
net.sf.gridarta.gui.mapfiles.MapFolderTree.getActiveMapFolder
MapFolder< G, A, R > getActiveMapFolder()
Returns the active map folder.
Definition: MapFolderTree.java:147
net.sf.gridarta.gui.mapfiles.MapFolderTreeActions.deletePickmapFolder
void deletePickmapFolder()
Action callback function to delete the current pickmap folder.
Definition: MapFolderTreeActions.java:241
net.sf.gridarta.model.maparchobject
Definition: AbstractMapArchObject.java:20
net.sf.gridarta.gui.mapfiles.MapFolder.getPickmaps
int getPickmaps()
Returns the number of pickmaps in this folder.
Definition: MapFolder.java:221
net.sf.gridarta.gui.utils
Definition: AnimationComponent.java:20
net.sf.gridarta.gui.mapfiles.MapFolderTreeActions.folderMenu
JMenu folderMenu
The pickmap folders menu to update.
Definition: MapFolderTreeActions.java:97
net.sf.gridarta.utils.EditorAction
A global editor action.
Definition: EditorAction.java:29
net.sf.gridarta.gui.mapfiles.MapFolderTreeActions
Encapsulates functionality related to actions for pickmap folder selection.
Definition: MapFolderTreeActions.java:43
net.sf.gridarta.gui.utils.MenuUtils
Utility class implementing menu related functions.
Definition: MenuUtils.java:39
net.sf.gridarta.gui.mapfiles.MapFolderTreeActions.doDeletePickmapFolder
boolean doDeletePickmapFolder(final boolean performAction)
Executes the "delete pickmap" action.
Definition: MapFolderTreeActions.java:250
net.sf.gridarta.gui.mapfiles.MapFolderNotEmptyException
Indicates that a folder contains sub-folders.
Definition: MapFolderNotEmptyException.java:28
net.sf.gridarta.utils
Definition: ActionBuilderUtils.java:20
net.sf.gridarta.gui.mapfiles.MapFolderTreeAction
An action for the entry in the pickmaps folder menu.
Definition: MapFolderTreeAction.java:36
net.sf.gridarta.model.pickmapsettings.PickmapSettings
Container for settings that affect pickmaps.
Definition: PickmapSettings.java:28
net.sf.gridarta.gui.mapfiles.MapFolderTreeActions.doCreateFolder
boolean doCreateFolder(final boolean performAction)
Executes the "create folder" action.
Definition: MapFolderTreeActions.java:225
net.sf.gridarta.gui.mapfiles.MapFolderTreeActions.newMapDialogFactory
final NewMapDialogFactory< G, A, R > newMapDialogFactory
The factory for creating new pickmap folders.
Definition: MapFolderTreeActions.java:67