Gridarta Editor
GUIMainControl.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.maincontrol;
21 
22 import java.awt.BorderLayout;
23 import java.awt.Container;
24 import java.awt.Frame;
25 import java.io.File;
26 import java.io.IOException;
27 import java.util.MissingResourceException;
28 import java.util.ResourceBundle;
29 import java.util.prefs.Preferences;
30 import javax.swing.Action;
31 import javax.swing.ImageIcon;
32 import javax.swing.JFrame;
33 import javax.swing.JMenu;
34 import javax.swing.JMenuBar;
35 import net.sf.gridarta.MainControl;
131 import net.sf.gridarta.gui.misc.About;
134 import net.sf.gridarta.gui.misc.MainView;
208 import net.sf.gridarta.utils.Exiter;
211 import net.sf.japi.swing.action.ActionBuilder;
212 import net.sf.japi.swing.action.ActionBuilderFactory;
213 import net.sf.japi.swing.tod.TipOfTheDayManager;
214 import net.sf.japi.util.ThrowableHandler;
215 import org.apache.log4j.Category;
216 import org.apache.log4j.Logger;
217 import org.jetbrains.annotations.NotNull;
218 import org.jetbrains.annotations.Nullable;
219 
225 public class GUIMainControl<G extends GameObject<G, A, R>, A extends MapArchObject<A>, R extends Archetype<G, A, R>> implements ThrowableHandler<Throwable> {
226 
230  @NotNull
231  private static final ActionBuilder ACTION_BUILDER = ActionBuilderFactory.getInstance().getActionBuilder("net.sf.gridarta");
232 
236  @NotNull
237  private static final Category LOG = Logger.getLogger(GUIMainControl.class);
238 
242  @NotNull
243  private static final Preferences PREFERENCES = Preferences.userNodeForPackage(MainControl.class);
244 
248  @NotNull
250 
254  @NotNull
255  private final JFrame mainViewFrame;
256 
260  @NotNull
261  private final MainView mainView;
262 
266  @NotNull
268 
272  @NotNull
273  private final String scriptExtension;
274 
278  @NotNull
280 
285  @NotNull
287 
291  @NotNull
293 
297  @NotNull
299 
309  public GUIMainControl(@NotNull final ProjectModel<G, A, R> projectModel, @NotNull final EditorSettings editorSettings, @NotNull final ErrorView errorView, @NotNull final ResourceIcons resourceIcons, @NotNull final EditorFactory<G, A, R> editorFactory, @NotNull final ConfigSourceFactory configSourceFactory) {
310  this.projectModel = projectModel;
311  final NamedFilter defaultNamedFilterList = new NamedFilter(projectModel.getGameObjectMatchers().getFilters());
312  final FilterControl<G, A, R> filterControl = new DefaultFilterControl<>(defaultNamedFilterList, editorSettings);
313  final MapViewSettings mapViewSettings = new DefaultMapViewSettings();
314  final RendererFactory<G, A, R> rendererFactory = editorFactory.newRendererFactory(mapViewSettings, filterControl, projectModel.getGameObjectParser(), projectModel.getFaceObjectProviders(), resourceIcons, projectModel.getSmoothFaces());
315  final MapViewFactory<G, A, R> mapViewFactory = editorFactory.newMapViewFactory(rendererFactory, projectModel.getPathManager());
316  scriptExtension = editorFactory.getScriptExtension();
317  final DisplayMode<G, A, R> displayModeGameObjectNames = new DisplayNameCellRenderer<>(projectModel.getFaceObjectProviders());
318  final DisplayMode<G, A, R> displayModeArchetypeNames = new ArchetypeNameCellRenderer<>(projectModel.getFaceObjectProviders());
319  final DisplayMode<G, A, R> displayModeIconsOnly = new ArchetypeIconCellRenderer<>(projectModel.getFaceObjectProviders());
320  final ExitConnectorModel exitConnectorModel = new DefaultExitConnectorModel();
321  final ShortcutsManager shortcutsManager = new ShortcutsManager(ACTION_BUILDER);
322  final ImageCreator<G, A, R> imageCreator = new ImageCreator<>(projectModel.getMapManager(), rendererFactory);
323  final VolatileSettings volatileSettings = new DefaultVolatileSettings(projectModel.getProjectSettings().getMapsDirectory());
324  final ImageCreator2<G, A, R> imageCreator2 = new ImageCreator2<>(volatileSettings, imageCreator);
325  final String spellFile = editorFactory.getSpellFile();
326  final SpellsUtils spellUtils = spellFile != null ? new SpellsUtils(spellFile) : null;
327  final AppPreferencesModel appPreferencesModel = new AppPreferencesModel(ActionBuilderUtils.getString(ACTION_BUILDER, "serverDefault"), System.getProperty("os.name").toLowerCase().startsWith("win") ? ActionBuilderUtils.getString(ACTION_BUILDER, "clientDefaultWindows") : ActionBuilderUtils.getString(ACTION_BUILDER, "clientDefaultOther"), ActionBuilderUtils.getString(ACTION_BUILDER, "editorDefault"));
328  final MapViewManager<G, A, R> mapViewManager = new MapViewManager<>();
329  final StatusBar<G, A, R> statusBar = new StatusBar<>(projectModel.getMapManager(), mapViewManager, projectModel.getArchetypeSet(), projectModel.getFaceObjects());
330  final MapImageCache<G, A, R> mapImageCache = new MapImageCache<>(projectModel.getMapManager(), resourceIcons.getResourceIcon(ResourceIcons.DEFAULT_ICON).getImage(), resourceIcons.getResourceIcon(ResourceIcons.DEFAULT_PREVIEW).getImage(), rendererFactory, editorFactory.getCacheFiles());
331  final MapFolderTree<G, A, R> mapFolderTree = new MapFolderTree<>(projectModel.getProjectSettings().getPickmapDir());
332  final ImageIcon icon = resourceIcons.getResourceIcon(ResourceIcons.APP_ICON);
333  mainViewFrame = new JFrame(ACTION_BUILDER.format("mainWindow.title", getBuildNumberAsString()));
334  final Frame parent = mainViewFrame;
335  final PickmapChooserModel<G, A, R> pickmapChooserModel = new PickmapChooserModel<>();
336  final PickmapChooserView<G, A, R> pickmapChooserView = new PickmapChooserView<>(pickmapChooserModel, mapFolderTree, projectModel.getMapArchObjectFactory(), projectModel.getMapReaderFactory(), projectModel.getPickmapManager());
337  final PickmapSettings pickmapSettings = new DefaultPickmapSettings();
338  final CFTreasureListTree treasureListTree = new CFTreasureListTree(projectModel.getTreasureTree(), parent, projectModel.getArchetypeSet(), projectModel.getFaceObjectProviders(), resourceIcons);
339  final ImageIcon noFaceSquareIcon = resourceIcons.getResourceIcon(ResourceIcons.SQUARE_NO_FACE);
340  final ImageIcon unknownSquareIcon = resourceIcons.getResourceIcon(ResourceIcons.SQUARE_UNKNOWN);
341  final SelectedSquareModel<G, A, R> selectedSquareModel = new SelectedSquareModel<>();
342  final GameObjectMatcher floorMatcher = projectModel.getGameObjectMatchers().getMatcher("system_floor", "floor");
343  final GameObjectMatcher wallMatcher = projectModel.getGameObjectMatchers().getMatcher("system_wall", "wall");
344  final ErrorViewCollector gameObjectMatchersErrorViewCollector = new ErrorViewCollector(errorView, new File(projectModel.getProjectSettings().getConfigurationDirectory(), "GameObjectMatchers.xml"));
345  final GameObjectMatcher belowFloorMatcher = projectModel.getGameObjectMatchers().getMatcherWarn(gameObjectMatchersErrorViewCollector, "system_below_floor", "below_floor");
346  final GameObjectMatcher systemObjectMatcher = projectModel.getGameObjectMatchers().getMatcher("system_system_object");
347  final InsertionModeSet<G, A, R> insertionModeSet = new InsertionModeSet<>(projectModel.getTopmostInsertionMode(), floorMatcher, wallMatcher, belowFloorMatcher, systemObjectMatcher);
348  final CopyBuffer<G, A, R> copyBuffer = new CopyBuffer<>(mapViewSettings, projectModel.getGameObjectFactory(), projectModel.getMapArchObjectFactory(), projectModel.getMapModelFactory(), insertionModeSet);
349  final FindDialogManager<G, A, R> findDialogManager = new FindDialogManager<>(parent, mapViewManager);
350  final Exiter exiter = new DefaultExiter(parent);
351  scriptEditControl = new ScriptEditControl(editorFactory.getScriptFileFilter(), scriptExtension, parent, projectModel.getProjectSettings().getMapsDirectory(), PREFERENCES, exiter);
352  final MenuEntries menuEntries = new MenuEntries();
353  final TextAreaDefaults textAreaDefaults = new TextAreaDefaults(scriptEditControl, menuEntries);
354  scriptEditControl.setTextAreaDefaults(textAreaDefaults);
355  final GameObjectAttributesDialogFactory<G, A, R> gameObjectAttributesDialogFactory = new GameObjectAttributesDialogFactory<>(projectModel.getArchetypeTypeSet(), parent, treasureListTree, projectModel.getFaceObjectProviders(), projectModel.getAnimationObjects(), projectModel.getProjectSettings(), editorFactory.getMapFileFilter(), editorFactory.getScriptFileFilter(), projectModel.getFaceObjects(), projectModel.getGameObjectSpells(), projectModel.getNumberSpells(), editorFactory.getUndefinedSpellIndex(), projectModel.getTreasureTree(), noFaceSquareIcon, unknownSquareIcon, textAreaDefaults, projectModel.getMapManager());
356  final ScriptedEventEditor<G, A, R> scriptedEventEditor = new ScriptedEventEditor<>(projectModel.getProjectSettings(), scriptEditControl);
357  final ScriptArchUtils scriptArchUtils = DefaultMainControl.loadScriptArchUtils(errorView, editorFactory, projectModel.getArchetypeTypeSet());
358  final ScriptedEventFactory<G, A, R> scriptedEventFactory = editorFactory.newScriptedEventFactory(scriptArchUtils, projectModel.getGameObjectFactory(), scriptedEventEditor, projectModel.getArchetypeSet());
359  final ScriptArchEditor<G, A, R> scriptArchEditor = new ScriptArchEditor<>(scriptedEventFactory, editorFactory.getScriptExtension(), editorFactory.getScriptName(), scriptArchUtils, editorFactory.getScriptFileFilter(), projectModel.getProjectSettings(), projectModel.getMapManager(), projectModel.getPathManager(), scriptEditControl);
360  final ScriptArchDataUtils<G, A, R> scriptArchDataUtils = editorFactory.newScriptArchDataUtils(scriptArchUtils, scriptedEventFactory, scriptedEventEditor);
361  final GameObjectMatcher monsterMatcherTmp = projectModel.getGameObjectMatchers().getMatcherWarn(gameObjectMatchersErrorViewCollector, "system_monster", "monster");
362  final GameObjectMatcher monsterMatcher = monsterMatcherTmp == null ? new TypeNrsGameObjectMatcher() : monsterMatcherTmp;
363  final GameObjectMatcher exitGameObjectMatcherTmp = projectModel.getGameObjectMatchers().getMatcherWarn(gameObjectMatchersErrorViewCollector, "system_exit", "exit");
364  final GameObjectMatcher exitGameObjectMatcher = exitGameObjectMatcherTmp == null ? new TypeNrsGameObjectMatcher() : exitGameObjectMatcherTmp;
365  final ExitMatcher<G, A, R> exitMatcher = new ExitMatcher<>(exitGameObjectMatcher);
366  final MapPropertiesDialogFactory<G, A, R> mapPropertiesDialogFactory = editorFactory.newMapPropertiesDialogFactory(projectModel.getProjectSettings(), projectModel.getMapManager());
367  final DelayedMapModelListenerManager<G, A, R> delayedMapModelListenerManager = new DelayedMapModelListenerManager<>(projectModel.getMapManager(), exiter);
368  final Control<?, G, A, R> lockedItemsControl = new LockedItemsControl<>(mapViewManager, delayedMapModelListenerManager, editorFactory.getLockedItemsTypeNumbers());
369  final GameObjectAttributesModel<G, A, R> gameObjectAttributesModel = new GameObjectAttributesModel<>();
370  final File scriptsFile = new File(projectModel.getProjectSettings().getMapsDirectory(), editorFactory.getScriptsDir());
371  updaterManager = new UpdaterManager(exiter, projectModel.getMapManager(), parent, editorFactory.getGridartaJarFilename());
372  final TextEditorTab<G, A, R> textEditorTab = new TextEditorTab<>(gameObjectAttributesModel, projectModel.getArchetypeTypeSet());
373  final EditorAction undoControl = new UndoControl<>(projectModel.getMapManager(), projectModel.getGameObjectFactory(), projectModel.getGameObjectMatchers());
374  final EditorActionManager<G, A, R> editorActionManager = new EditorActionManager<>(mapViewManager);
375  final Action displayGameObjectNamesAction = editorActionManager.createAction("displayGameObjectNames", "Archetype Chooser", new DisplayGameObjectNamesAction<>(projectModel.getArchetypeChooserModel(), displayModeArchetypeNames));
376  final Action displayIconsOnlyAction = editorActionManager.createAction("displayIconsOnly", "Archetype Chooser", new DisplayIconsOnlyAction<>(projectModel.getArchetypeChooserModel(), displayModeIconsOnly));
377  final Action displayArchetypeNamesAction = editorActionManager.createAction("displayArchetypeNames", "Archetype Chooser", new DisplayArchetypeNamesAction<>(projectModel.getArchetypeChooserModel(), displayModeGameObjectNames));
378  final ArchetypeChooserView<G, A, R> archetypeChooserView = new ArchetypeChooserView<>(editorFactory.isCreateDirectionPane(), projectModel.getArchetypeChooserModel(), projectModel.getFaceObjectProviders(), displayGameObjectNamesAction, displayArchetypeNamesAction, displayIconsOnlyAction, displayModeGameObjectNames, displayModeArchetypeNames, displayModeIconsOnly);
379  final ArchetypeChooserControl<G, A, R> archetypeChooserControl = new ArchetypeChooserControl<>(projectModel.getArchetypeChooserModel(), archetypeChooserView);
380  mapViewsManager = new MapViewsManager<>(mapViewSettings, mapViewFactory, projectModel.getMapManager(), projectModel.getPickmapManager(), projectModel.getPathManager());
381  newMapDialogFactory = editorFactory.newNewMapDialogFactory(mapViewsManager, projectModel.getMapArchObjectFactory(), pickmapChooserView, parent);
382  fileControl = new DefaultFileControl<>(projectModel.getProjectSettings(), volatileSettings, mapImageCache, projectModel.getMapManager(), mapViewsManager, parent, GuiFileFilters.MAP_FILE_FILTER, editorFactory.getScriptFileFilter(), newMapDialogFactory, scriptExtension, scriptEditControl, projectModel.getPathManager());
383  mapViewsManager.setFileControl(fileControl);
384  final PickmapChooserControl<G, A, R> pickmapChooserControl = new PickmapChooserControl<>(pickmapChooserModel, pickmapSettings, newMapDialogFactory, mapFolderTree, projectModel.getMapManager(), parent, mapViewsManager, fileControl, pickmapChooserView);
385  final DefaultObjectChooser<G, A, R> objectChooser = new DefaultObjectChooser<>(archetypeChooserControl, pickmapChooserControl, projectModel.getArchetypeChooserModel(), pickmapChooserModel, projectModel.getArchetypeTypeSet());
386  newMapDialogFactory.setObjectChooser(objectChooser);
387  final MapDesktop<G, A, R> mapDesktop = new MapDesktop<>(mapViewManager, projectModel.getMapManager(), mapImageCache, mapViewsManager);
388  final EnterMap<G, A, R> enterMap = new EnterMap<>(parent, editorFactory.getDirectionMap(), fileControl, mapViewsManager);
389  final MapActions<G, A, R> mapActions = new MapActions<>(parent, projectModel.getMapManager(), mapViewManager, exitMatcher, GuiFileFilters.MAP_FILE_FILTER, selectedSquareModel, editorFactory.isAllowRandomMapParameters(), mapPropertiesDialogFactory, mapViewSettings, mapViewsManager, enterMap, projectModel.getProjectSettings());
390  final MapFolderTreeActions<G, A, R> mapFolderTreeActions = new MapFolderTreeActions<>(mapFolderTree, pickmapSettings, newMapDialogFactory, "createPickmapFolder", "deletePickmapFolder", "confirmDeletePickmapFolder", "deletePickmapFolderNotEmpty");
391  final ViewActions<G, A, R> viewActions = new ViewActions<>(mapViewSettings, projectModel.getMapManager());
392  final EditorAction mapFileActions = new MapFileActions<>(imageCreator2, projectModel.getMapManager(), mapViewsManager, mapViewManager, fileControl, parent);
393  final BookmarksMapMenuPreferences bookmarksMapMenuPreferences = new BookmarksMapMenuPreferences(projectModel.getPathManager());
394  final MapMenu mapMenu = bookmarksMapMenuPreferences.getMapMenu();
395  @Nullable final MapMenuManager<G, A, R> bookmarksMapMenuManager = new MapMenuManager<>(mapMenu, mapViewsManager, fileControl, mapImageCache);
396  final ExitConnectorActions<G, A, R> exitConnectorActions = new ExitConnectorActions<>(exitConnectorModel, exitMatcher, projectModel.getArchetypeSet(), projectModel.getMapManager(), fileControl, insertionModeSet); // XXX: should be part of DefaultMainControl
397  final EditorAction exitConnectorController = new ExitConnectorController<>(exitConnectorActions, exitConnectorModel);
398  final ToolPalette<G, A, R> toolPalette = new ToolPalette<>(mapViewSettings, selectedSquareModel, objectChooser, pickmapSettings, floorMatcher, wallMatcher, monsterMatcher, insertionModeSet);
399  final GameObjectAttributesControl<G, A, R> gameObjectAttributesControl = new GameObjectAttributesControl<>(gameObjectAttributesModel, gameObjectAttributesDialogFactory, objectChooser, projectModel.getMapManager(), selectedSquareModel, projectModel.getGameObjectFactory(), mapViewSettings);
400  final GameObjectTab<G, A, R> gameObjectTab = new GameObjectTab<>("gameObject", gameObjectAttributesControl, Location.BOTTOM, false, 0, true);
401  final ReplaceDialogManager<G, A, R> replaceDialogManager = new ReplaceDialogManager<>(parent, copyBuffer, objectChooser, mapViewManager, projectModel.getFaceObjectProviders(), insertionModeSet);
402  final PluginParameterViewFactory<G, A, R> pluginParameterViewFactory = new PluginParameterViewFactory<>(projectModel.getArchetypeSet(), gameObjectAttributesModel, objectChooser, projectModel.getMapManager(), projectModel.getFaceObjectProviders(), projectModel.getPathManager());
403  final PluginController<G, A, R> pluginControl = new PluginController<>(filterControl, projectModel.getPluginModel(), projectModel.newPluginParameters(rendererFactory), parent, pluginParameterViewFactory, scriptsFile, resourceIcons);
404  final EditorAction mainActions = new MainActions<>(findDialogManager, replaceDialogManager, mainViewFrame, mapViewSettings, projectModel.getArchetypeSet(), copyBuffer, objectChooser, projectModel.getMapManager(), insertionModeSet);
405  final EditorAction mapCursorActions = new MapCursorActions<>(mapActions);
406  final Action moveSquareDownAction = editorActionManager.createAction("moveSquareDown", "Selected Square View", new MoveSquareDownAction<>(selectedSquareModel, projectModel.getMapManager()));
407  final Action moveSquareUpAction = editorActionManager.createAction("moveSquareUp", "Selected Square View", new MoveSquareUpAction<>(selectedSquareModel, projectModel.getMapManager()));
408  final Action moveSquareBottomAction = editorActionManager.createAction("moveSquareBottom", "Selected Square View", new MoveSquareBottomAction<>(selectedSquareModel, projectModel.getMapManager()));
409  final Action moveSquareEnvAction = editorActionManager.createAction("moveSquareEnv", "Selected Square View", new MoveSquareEnvAction<>(selectedSquareModel, projectModel.getMapManager()));
410  final Action moveSquareInvAction = editorActionManager.createAction("moveSquareInv", "Selected Square View", new MoveSquareInvAction<>(selectedSquareModel, projectModel.getMapManager()));
411  final Action moveSquareTopAction = editorActionManager.createAction("moveSquareTop", "Selected Square View", new MoveSquareTopAction<>(selectedSquareModel, projectModel.getMapManager()));
412  editorActionManager.createAction("findArchetypes", "Archetypes", new FindArchetypesAction<>(parent, archetypeChooserControl, objectChooser, projectModel.getArchetypeTypeSet()));
413  editorActionManager.createAction("browseArchetypes", "Archetypes", new BrowseArchetypesAction<>(parent, archetypeChooserControl, objectChooser, projectModel.getArchetypeSet(), resourceIcons.getResourceIcon(ResourceIcons.CLOSE_TAB_SMALL_ICON)));
414  editorActionManager.createAction("moveSquarePrev", "Selected Square View", new MoveSquarePrevAction<>(selectedSquareModel, projectModel.getMapManager()));
415  editorActionManager.createAction("moveSquareNext", "Selected Square View", new MoveSquareNextAction<>(selectedSquareModel, projectModel.getMapManager()));
416  editorActionManager.createAction("prevWindow", "Map,Window", mapDesktop);
417  editorActionManager.createAction("nextWindow", "Map,Window", mapDesktop);
418  editorActionManager.createAction("addNewPickmap", "Pickmap", pickmapChooserControl);
419  editorActionManager.createAction("openPickmapMap", "Pickmap", pickmapChooserControl);
420  editorActionManager.createAction("deletePickmap", "Pickmap", pickmapChooserControl);
421  editorActionManager.createAction("savePickmap", "Pickmap", pickmapChooserControl);
422  editorActionManager.createAction("revertPickmap", "Pickmap", pickmapChooserControl);
423  editorActionManager.createAction("viewTreasurelists", "Tool", new ViewTreasurelistsAction(treasureListTree, parent));
424  editorActionManager.createAction("mapCreateView", "Map,Window", mapActions);
425  editorActionManager.createAction("mapProperties", "Map", mapActions);
426  editorActionManager.createToggleAction("autoJoin", "Map", mapActions);
427  editorActionManager.createAction("shrinkMapSize", "Map", mapActions);
428  editorActionManager.createAction("enterExit", "Map Navigation", mapActions);
429  editorActionManager.createAction("nextExit", "Map Navigation", mapActions);
430  editorActionManager.createAction("prevExit", "Map Navigation", mapActions);
431  editorActionManager.createAction("deleteUnknownObjects", "Map Navigation", mapActions);
432  editorActionManager.createAction("enterNorthMap", "Map Navigation", mapActions);
433  editorActionManager.createAction("enterEastMap", "Map Navigation", mapActions);
434  editorActionManager.createAction("enterSouthMap", "Map Navigation", mapActions);
435  editorActionManager.createAction("enterWestMap", "Map Navigation", mapActions);
436  editorActionManager.createAction("enterNorthEastMap", "Map Navigation", mapActions);
437  editorActionManager.createAction("enterSouthEastMap", "Map Navigation", mapActions);
438  editorActionManager.createAction("enterSouthWestMap", "Map Navigation", mapActions);
439  editorActionManager.createAction("enterNorthWestMap", "Map Navigation", mapActions);
440  editorActionManager.createAction("enterUpMap", "Map Navigation", mapActions);
441  editorActionManager.createAction("enterDownMap", "Map Navigation", mapActions);
442  editorActionManager.createAction("createTileNorth", "Map/Create Tile", mapActions);
443  editorActionManager.createAction("createTileEast", "Map/Create Tile", mapActions);
444  editorActionManager.createAction("createTileSouth", "Map/Create Tile", mapActions);
445  editorActionManager.createAction("createTileWest", "Map/Create Tile", mapActions);
446  editorActionManager.createAction("createTileNorthEast", "Map/Create Tile", mapActions);
447  editorActionManager.createAction("createTileSouthEast", "Map/Create Tile", mapActions);
448  editorActionManager.createAction("createTileSouthWest", "Map/Create Tile", mapActions);
449  editorActionManager.createAction("createTileNorthWest", "Map/Create Tile", mapActions);
450  editorActionManager.createAction("createTileUp", "Map/Create Tile", mapActions);
451  editorActionManager.createAction("createTileDown", "Map/Create Tile", mapActions);
452  editorActionManager.createToggleAction("gridVisible", "Map Navigation", mapActions);
453  editorActionManager.createToggleAction("lightVisible", "Map Navigation", new LightVisibleAction(mapViewSettings));
454  editorActionManager.createToggleAction("smoothing", "Map Navigation", mapActions);
455  editorActionManager.createToggleAction("doubleFaces", "Map Navigation", mapActions);
456  editorActionManager.createToggleAction("tileShow", "Map Navigation", mapActions);
457  editorActionManager.createToggleAction("tileStretching", "Map Navigation", mapActions);
458  editorActionManager.createAction("editPlugins", "Plugin", new PluginManagerFactory<>(mainViewFrame, pluginControl, projectModel.getPluginModel(), pluginParameterViewFactory, resourceIcons));
459  editorActionManager.createAction("savePlugins", "Plugin", new SavePluginsAction<>(pluginControl));
460  editorActionManager.createAction("importPlugin", "Plugin", new ImportPluginAction<>(projectModel.getPluginModel(), parent));
461  editorActionManager.createAction("update", "Tool", updaterManager);
462  editorActionManager.createAction("about", "Help", new About(parent));
463  editorActionManager.createAction("undo", "Undo", undoControl);
464  editorActionManager.createAction("redo", "Undo", undoControl);
465  final Action exitAction = editorActionManager.createAction("exit", "Other", new ExitAction(exiter, scriptEditControl, fileControl, pickmapChooserControl, pluginControl));
466  mainView = new MainView(mainViewFrame, exitAction, mapDesktop, icon, exiter);
467  editorActionManager.createAction("createPickmapFolder", "Pickmap", mapFolderTreeActions);
468  editorActionManager.createAction("deletePickmapFolder", "Pickmap", mapFolderTreeActions);
469  editorActionManager.createAction("resetView", "Map", viewActions);
470  editorActionManager.createAction("saveMap", "Map", mapFileActions);
471  editorActionManager.createAction("saveMapAs", "Map", mapFileActions);
472  editorActionManager.createAction("createImage", "Map,Image", mapFileActions);
473  editorActionManager.createAction("reloadMap", "Map", mapFileActions);
474  editorActionManager.createAction("closeMap", "Map", mapFileActions);
475  editorActionManager.createAction("clear", "Copy Buffer", mainActions);
476  editorActionManager.createAction("cut", "Copy Buffer", mainActions);
477  editorActionManager.createAction("copy", "Copy Buffer", mainActions);
478  editorActionManager.createAction("paste", "Copy Buffer", mainActions);
479  editorActionManager.createAction("pasteTiled", "Copy Buffer", mainActions);
480  editorActionManager.createAction("shiftNorth", "Map/Shift", mainActions);
481  editorActionManager.createAction("shiftNorthEast", "Map/Shift", mainActions);
482  editorActionManager.createAction("shiftEast", "Map/Shift", mainActions);
483  editorActionManager.createAction("shiftSouthEast", "Map/Shift", mainActions);
484  editorActionManager.createAction("shiftSouth", "Map/Shift", mainActions);
485  editorActionManager.createAction("shiftSouthWest", "Map/Shift", mainActions);
486  editorActionManager.createAction("shiftWest", "Map/Shift", mainActions);
487  editorActionManager.createAction("shiftNorthWest", "Map/Shift", mainActions);
488  editorActionManager.createAction("find", "Map", mainActions);
489  editorActionManager.createAction("findNext", "Map", mainActions);
490  editorActionManager.createAction("findPrev", "Map", mainActions);
491  editorActionManager.createAction("replace", "Map", mainActions);
492  editorActionManager.createAction("fillAuto", "Map/Fill", mainActions);
493  editorActionManager.createAction("fillAbove", "Map/Fill", mainActions);
494  editorActionManager.createAction("fillBelow", "Map/Fill", mainActions);
495  editorActionManager.createAction("randFillAuto", "Map/Fill", mainActions);
496  editorActionManager.createAction("randFillAbove", "Map/Fill", mainActions);
497  editorActionManager.createAction("randFillBelow", "Map/Fill", mainActions);
498  editorActionManager.createAction("floodFill", "Map/Fill", mainActions);
499  editorActionManager.createAction("massChange", "Map", mainActions);
500  editorActionManager.createAction("selectAll", "Map/Selection", mainActions);
501  editorActionManager.createAction("invertSelection", "Map/Selection", mainActions);
502  editorActionManager.createAction("expandEmptySelection", "Map/Selection", mainActions);
503  editorActionManager.createAction("tileStretchingSet", "Map,Tile Stretching", mainActions);
504  editorActionManager.createAction("tileStretchingClear", "Map,Tile Stretching", mainActions);
505  editorActionManager.createAction("tileStretchingIncrease", "Map,Tile Stretching", mainActions);
506  editorActionManager.createAction("tileStretchingDecrease", "Map,Tile Stretching", mainActions);
507  editorActionManager.createAction("growSelection", "Map/Selection", new GrowSelectionAction<G, A, R>());
508  editorActionManager.createAction("shrinkSelection", "Map/Selection", new ShrinkSelectionAction<G, A, R>());
509  editorActionManager.createAction("collectArches", "Tool", new CollectArchesAction<>(projectModel.getProjectSettings(), projectModel.getResources(), exiter, mainViewFrame));
510  editorActionManager.createAction("reloadFaces", "Image,Tool", new ReloadFacesAction<>(projectModel.getArchetypeSet(), projectModel.getFaceObjectProviders()));
511  editorActionManager.createAction("validateMap", "Map,Tool", new ValidateMapAction<>(projectModel.getValidators(), projectModel.getMapManager()));
512  editorActionManager.createAction("showHelp", "Help", new ShowHelpAction(parent));
513  editorActionManager.createAction("tipOfTheDay", "Help", new TipOfTheDayAction(parent));
514  editorActionManager.createAction("newMap", "Map", new NewMapAction<>(newMapDialogFactory));
515  editorActionManager.createAction("goMap", "Map", new GoMapDialogManager<>(parent, projectModel.getMapManager(), mapViewsManager, projectModel.getProjectSettings(), exiter));
516  editorActionManager.createAction("goExit", "Map Navigation", new GoExitDialogManager<>(parent, projectModel.getMapManager(), mapViewManager, exitGameObjectMatcher, enterMap, projectModel.getFaceObjectProviders()));
517  editorActionManager.createAction("cleanCompletelyBlockedSquares", "Tool", new CleanCompletelyBlockedSquaresAction<>(projectModel.getMapManager()));
518  editorActionManager.createAction("collectSpells", "Tool", new CollectSpellsAction(spellUtils, projectModel.getProjectSettings(), parent));
519  editorActionManager.createAction("controlClient", "Tool", new ControlClientAction(appPreferencesModel, mainViewFrame));
520  editorActionManager.createAction("controlServer", "Tool", new ControlServerAction(appPreferencesModel, mainViewFrame));
521  editorActionManager.createAction("gc", "Tool", new GcAction(statusBar));
522  editorActionManager.createAction("options", "Tool", new OptionsAction<>(editorFactory, projectModel.getProjectSettings(), editorSettings, projectModel.getValidators(), appPreferencesModel, exitConnectorModel, configSourceFactory, parent));
523  editorActionManager.createAction("shortcuts", "Tool", new ShortcutsAction(shortcutsManager, parent));
524  editorActionManager.createAction("zoom", "Tool", new ZoomAction<>(projectModel.getMapManager(), rendererFactory, parent));
525  editorActionManager.createAction("moveCursorNorth", "Map Cursor,Map/Selection", mapCursorActions);
526  editorActionManager.createAction("moveCursorEast", "Map Cursor,Map/Selection", mapCursorActions);
527  editorActionManager.createAction("moveCursorSouth", "Map Cursor,Map/Selection", mapCursorActions);
528  editorActionManager.createAction("moveCursorWest", "Map Cursor,Map/Selection", mapCursorActions);
529  editorActionManager.createAction("moveCursorNorthEast", "Map Cursor,Map/Selection", mapCursorActions);
530  editorActionManager.createAction("moveCursorSouthEast", "Map Cursor,Map/Selection", mapCursorActions);
531  editorActionManager.createAction("moveCursorSouthWest", "Map Cursor,Map/Selection", mapCursorActions);
532  editorActionManager.createAction("moveCursorNorthWest", "Map Cursor,Map/Selection", mapCursorActions);
533  editorActionManager.createAction("goLocation", "Map Cursor", new GoLocationAction<>(mapViewManager));
534  editorActionManager.createAction("selectSquare", "Map Cursor,Map/Selection", new SelectSquareAction<G, A, R>());
535  editorActionManager.createAction("addToSelection", "Map Cursor,Map/Selection", new AddToSelectionAction<G, A, R>());
536  editorActionManager.createAction("subFromSelection", "Map Cursor,Map/Selection", new SubFromSelectionAction<G, A, R>());
537  editorActionManager.createAction("startStopDrag", "Map Cursor,Map/Selection", new StartStopDragAction<G, A, R>());
538  editorActionManager.createAction("releaseDrag", "Map Cursor,Map/Selection", new ReleaseDragAction<G, A, R>());
539  editorActionManager.createAction("insertArch", "Map Cursor,Map", new InsertArchAction<>(objectChooser, mapViewSettings));
540  editorActionManager.createAction("deleteArch", "Map Cursor,Map", new DeleteArchAction<G, A, R>(mapViewSettings));
541  editorActionManager.createAction("selectArchAbove", "Map Cursor,Selected Square View", new SelectArchBelowAction<G, A, R>());
542  editorActionManager.createAction("selectArchBelow", "Map Cursor,Selected Square View", new SelectArchAboveAction<G, A, R>());
543  editorActionManager.createAction("archAttributes", "Map", new ArchAttributesAction<>(gameObjectAttributesDialogFactory));
544  editorActionManager.createAction("newScript", "Script", scriptEditControl);
545  editorActionManager.createAction("editScript", "Script", new EditScriptAction<>(fileControl));
546  editorActionManager.createAction("openFile", "Map", new OpenFileAction<>(fileControl));
547  editorActionManager.createAction("saveAllMaps", "Map", new SaveAllMapsAction<>(fileControl));
548  final Action aCloseAllMaps = editorActionManager.createAction("closeAllMaps", "Map,Window", new CloseAllMapsAction<>(fileControl));
549  editorActionManager.createAction("gameObjectTextEditor", "Tool", new MainViewActions<>(mainView, gameObjectAttributesControl, gameObjectTab, textEditorTab));
550  editorActionManager.createAction("manageBookmarks", "Bookmarks", new ManageBookmarksAction<>(mapMenu, mapImageCache, parent));
551  editorActionManager.createAction("addBookmark", "Bookmarks", new AddBookmarkAction<G, A, R>(bookmarksMapMenuPreferences));
552  editorActionManager.createActionOptional("openInClient", "Map", editorFactory.newServerActions(fileControl));
553  editorActionManager.createAction("exitCopy", "Exit Connector", exitConnectorController);
554  editorActionManager.createAction("exitPaste", "Exit Connector", exitConnectorController);
555  editorActionManager.createAction("exitConnect", "Exit Connector", exitConnectorController);
556  pickmapChooserControl.setPopupMenu(ACTION_BUILDER.createPopupMenu(true, "pickmaps"));
557  final JMenuBar menuBar = ACTION_BUILDER.createMenuBar(true, "main");
558  mainViewFrame.setJMenuBar(menuBar);
559  mainViewFrame.add(new MainToolbar(editorSettings).getComponent(), BorderLayout.NORTH);
560  mainViewFrame.add(statusBar, BorderLayout.SOUTH);
561  mainView.addTab(gameObjectTab);
562  final String compassIconName = editorFactory.getCompassIconName();
563  final ImageIcon compassIcon = compassIconName == null ? null : resourceIcons.getResourceIcon(compassIconName);
564  mainView.addTab(new Tab("selectedSquare", new SelectedSquareView<>(selectedSquareModel, gameObjectAttributesDialogFactory, objectChooser, mapViewManager, mapViewSettings, compassIcon, projectModel.getFaceObjectProviders(), unknownSquareIcon, moveSquareUpAction, moveSquareDownAction, moveSquareTopAction, moveSquareBottomAction, moveSquareEnvAction, moveSquareInvAction), Location.RIGHT, false, 1, true));
565  mainView.addTab(new Tab("tools", toolPalette, Location.LEFT, false, 2, false));
566  mainView.addTab(new Tab("objects", objectChooser, Location.LEFT, false, 3, true));
567  final JMenu windowMenu = MenuUtils.getMenu(menuBar, "window");
568  if (windowMenu == null) {
569  LOG.warn("'main' menu bar does not define 'window' menu.");
570  } else {
571  //noinspection ResultOfObjectAllocationIgnored
572  new WindowMenuManager<>(windowMenu, mapViewManager, aCloseAllMaps, mapDesktop);
573  }
574  final JMenu pickmapFoldersMenu = MenuUtils.getMenu(menuBar, "pickmapFolders");
575  if (pickmapFoldersMenu == null) {
576  LOG.warn("'main' menu bar does not define 'pickmapFolders' menu.");
577  } else {
578  mapFolderTreeActions.setPickmapFoldersMenu(pickmapFoldersMenu);
579  }
580  viewActions.init(projectModel.getGameObjectMatchers().getFilters());
581  final Container viewMenu = MenuUtils.getMenu(menuBar, "view");
582  if (viewMenu == null) {
583  LOG.warn("'main' menu bar does not define 'view' menu.");
584  } else {
585  viewActions.setMenu(viewMenu);
586  }
587  final JMenu pluginsMenu = MenuUtils.getMenu(menuBar, "plugins");
588  if (pluginsMenu == null) {
589  LOG.warn("'main' menu bar does not define 'plugins' menu.");
590  } else {
591  pluginControl.getView().setMenu(pluginsMenu);
592  }
593  final ErrorListView<G, A, R> errorListView = new ErrorListView<>(mapViewManager);
594  gameObjectAttributesControl.addTab(new ArchTab<>(projectModel.getArchetypeTypeSet(), gameObjectAttributesModel));
595  gameObjectAttributesControl.addTab(new MsgTextTab<>(gameObjectAttributesModel));
596  gameObjectAttributesControl.addTab(new EventsTab<>(parent, projectModel.getMapManager(), gameObjectAttributesModel, scriptArchEditor, editorFactory.newScriptArchData(), scriptArchDataUtils, scriptArchUtils));
597  gameObjectAttributesControl.addTab(new FaceTab<>(gameObjectAttributesModel, projectModel.getFaceObjects(), projectModel.getFaceObjectProviders(), projectModel.getAnimationObjects(), noFaceSquareIcon, unknownSquareIcon));
598  gameObjectAttributesControl.addTab(textEditorTab);
599  mainView.addTab(new Tab("monsters", new MonsterControl<>(mapViewManager, delayedMapModelListenerManager, monsterMatcher).getView(), Location.BOTTOM, false, 4, false));
600  mainView.addTab(new Tab("connections", new ConnectionControl<>(mapViewManager, delayedMapModelListenerManager).getView(), Location.BOTTOM, false, 5, false));
601  mainView.addTab(new Tab("lockedItems", lockedItemsControl.getView(), Location.BOTTOM, false, 6, false));
602  mainView.addTab(new WarningsTab<>("warnings", errorListView, Location.BOTTOM, false, 7, false));
603  mainView.addTab(new GameObjectTextEditorTab<>("textEditor", new GameObjectTextEditor(projectModel.getArchetypeTypeSet()), Location.RIGHT, true, 8, false, selectedSquareModel, projectModel.getMapManager()));
604 
605  new ArchetypeValidator(projectModel.getAnimationObjects(), projectModel.getFaceObjects(), errorView).validate(projectModel.getArchetypeSet());
606  new AnimationValidator(projectModel.getFaceObjects(), errorView).validate(projectModel.getAnimationObjects());
607 
608  final MapMenuPreferences recentMapMenuPreferences = new RecentMapMenuPreferences(projectModel.getPathManager());
609  final MapMenuManager<G, A, R> recentMapMenuManager = new MapMenuManager<>(recentMapMenuPreferences.getMapMenu(), mapViewsManager, fileControl, mapImageCache);
610  final JMenu recentMenu = MenuUtils.getMenu(menuBar, "recent");
611  if (recentMenu == null) {
612  LOG.warn("'main' menu bar does not define 'recent' menu.");
613  } else {
614  recentMapMenuManager.setMenu(recentMenu);
615  }
616 
617  final JMenu bookmarksMenu = MenuUtils.getMenu(menuBar, "bookmarks");
618  if (bookmarksMenu == null) {
619  LOG.warn("'main' menu bar does not define 'bookmarks' menu.");
620  } else {
621  bookmarksMapMenuManager.setMenu(bookmarksMenu);
622  }
623 
624  final JMenu analyzeMenu = MenuUtils.getMenu(menuBar, "analyze");
625  if (analyzeMenu == null) {
626  LOG.warn("'main' menu bar does not define 'analyze' menu.");
627  } else {
628  filterControl.createMenuEntries(analyzeMenu);
629  }
630  final MapUserListenerManager<G, A, R> mapUserListenerManager = new MapUserListenerManager<>(toolPalette, mapViewsManager);
631  mapUserListenerManager.addMapManager(projectModel.getMapManager());
632  mapUserListenerManager.addMapManager(projectModel.getPickmapManager());
633 
634  new MapKeyListener<>(mapViewManager, projectModel.getMapManager());
635 
636  new Loader<>(errorView, mapFolderTree, projectModel.getMapReaderFactory(), projectModel.getPickmapManager(), mapViewsManager).load();
637  if (!pickmapChooserModel.isEmpty()) {
638  objectChooser.movePickmapChooserToFront();
639  }
640  recentMapMenuManager.initRecent();
641  if (bookmarksMapMenuManager != null) {
642  bookmarksMapMenuManager.initRecent();
643  }
644 
645  //noinspection ResultOfObjectAllocationIgnored
646  new RecentManager<>(projectModel.getMapManager(), recentMapMenuPreferences);
647 
648  //noinspection ResultOfObjectAllocationIgnored
649  new AutoValidator<>(projectModel.getValidators(), editorFactory.isAutoValidatorDefault(), delayedMapModelListenerManager);
650  projectModel.getMapManager().setFileControl(fileControl);
651  shortcutsManager.loadShortcuts();
652  delayedMapModelListenerManager.start();
653  }
654 
659  @NotNull
660  private static String getBuildNumberAsString() {
661  try {
662  return ResourceBundle.getBundle("build").getString("build.number");
663  } catch (final MissingResourceException ignored) {
664  return "unknown version";
665  }
666  }
667 
673  public void openFile(@NotNull final File file) throws IOException {
674  final boolean isScriptFile = file.getName().toLowerCase().endsWith(scriptExtension);
675  if (file.isFile()) {
676  if (isScriptFile) {
677  scriptEditControl.openScriptFile(file.getAbsolutePath());
678  } else {
679  mapViewsManager.openMapFileWithView(file, null, null);
680  }
681  } else if (!file.exists()) {
682  if (isScriptFile) {
683  // TODO: pass filename
684  scriptEditControl.newScript();
685  } else {
686  newMapDialogFactory.showNewMapDialog(); // XXX: pass file
687  }
688  } // If neither branch matches, it's a directory - what to do with directories?
689  }
690 
695  public void openFiles(final Iterable<String> filenames) {
696  for (final String filename : filenames) {
697  final File file = new File(filename);
698  try {
699  openFile(file);
700  } catch (final IOException ex) {
701  fileControl.reportLoadError(file, ex.getMessage());
702  }
703  }
704  }
705 
706  @Override
707  public void handleThrowable(@NotNull final Throwable t) {
708  mainView.handleThrowable(t);
709  }
710 
715  public void run(@NotNull final Iterable<String> args) {
716  mainViewFrame.setVisible(true);
717  TipOfTheDayManager.showAtStartup(mainViewFrame);
718  updaterManager.startup();
719 
720  if (projectModel.getArchetypeSet().getArchetypeCount() == 0) {
721  ACTION_BUILDER.showMessageDialog(mainViewFrame, "loadArchesNoArchetypes");
722  }
723 
724  openFiles(args);
725  }
726 
727 }
Implements the controller for undo/redo actions.
An EditorAction that toggles whether map lighting is visible.
A Filter that aggregates named filters.
final MapViewsManager< G, A, R > mapViewsManager
The MapViewsManager instance.
Dialog to edit events linked to item scripting.
An AbstractMapMenuPreferences implementation that manages recent menu entries.
static final Category LOG
The logger for printing log messages.
An EditorAction that shows the "tip of the day" dialog.
Implements the main status bar of the application.
Definition: StatusBar.java:68
Abstract controller base class for map view controls.
Definition: Control.java:42
Package with common types for event archetypes.
Implements actions related to the MainView.
Convenience class for adding messages to a ErrorView instance using a fixed category name...
void reportLoadError(@Nullable final File file, @NotNull final String message)
An EditorAction that shrinks the current selection by one map square.
Graphical User Interface of Gridarta.
Interface for classes that match GameObjects.
This package contains classes related to matching GameObjects, so called GameObjectMatchers.
An EditorAction that runs the map validator on the current map.
Reading and writing of Atrinik maps.
The controller of the locked items view control.
Creates and displays the find dialog.
An EditorAction that edits or creates a map file.
final JFrame mainViewFrame
The main window&#39;s JFrame.
An EditorAction that toggles a selection process.
UI parts of the implementation of an Undo / Redo in Gridarta.
An EditorAction that adds the current pre-selection to the selection.
The JDesktopPane containing all map views.
Definition: MapDesktop.java:60
An EditorAction that toggles the current pre-selection in the selection.
The action for saving modified plugins.
static final Preferences PREFERENCES
The Preferences.
final ProjectModel< G, A, R > projectModel
The ProjectModel to edit.
A tab in a TabbedPanel component.
Definition: Tab.java:53
An EditorAction that reloads all images from disk.
Gridarta can handle frame information of animations and allow the selection of an animation using a t...
Factory for creating ScriptedEvent instances.
The tab containing the game object text editor.
Tracks map views and attaches/detaches MapMouseListener instances.
An EditorAction that opens the "Create New Map" dialog.
Utility class for validating ArchetypeSet instances.
This package handles tools for manipulating maps.
Manages the contents of a recent or bookmark menu.
Definition: MapMenu.java:44
An EditorAction that finishes a selection process when the mouse button is released.
Implements actions for the "file" menu attached to maps.
GUIMainControl(@NotNull final ProjectModel< G, A, R > projectModel, @NotNull final EditorSettings editorSettings, @NotNull final ErrorView errorView, @NotNull final ResourceIcons resourceIcons, @NotNull final EditorFactory< G, A, R > editorFactory, @NotNull final ConfigSourceFactory configSourceFactory)
Creates a new instance.
final UpdaterManager updaterManager
The UpdaterManager instance.
void showNewMapDialog()
Shows a dialog for creating a new map.
Main window of the level editor.
Definition: MainView.java:53
Default FileControl implementation.
Manages a MapMenu instance, implementing constraints for recent or bookmark menus.
Encapsulates functionality related to actions for pickmap folder selection.
Maintains the application preferences state.
Utility class defining FileFilters.
void openScriptFile(@NotNull final String pathName)
Open a new empty script document.
The "Face" tab in the archetype chooser.
Definition: FaceTab.java:59
An net.sf.gridarta.utils.EditorAction that selects the previous game object in the SelectedSquareMode...
static String getString(@NotNull final ActionBuilder actionBuilder, @NotNull final String key, @NotNull final String defaultValue)
Returns the value of a key.
void openFile(@NotNull final File file)
Loads a map file.
final String scriptExtension
The extensions of event script files.
Interface for classes displaying error messages.
Definition: ErrorView.java:28
Base package of all Gridarta classes.
An EditorAction that inserts a new game object into the current map.
An net.sf.gridarta.utils.EditorAction that moves the selected game object in the SelectedSquareModel ...
void addMapManager(@NotNull final MapManager< G, A, R > mapManager)
Registers a MapManager to track.
An EditorAction that creates a new bookmark for the current map.
This package contains the classes for the script editor used within the editor to create and modify P...
Definition: Actions.java:20
Reflects a game object (object on a map).
Definition: GameObject.java:36
Implements views of links between GameObjects or groups or.
An net.sf.gridarta.utils.EditorAction that selects the next game object in the SelectedSquareModel.
MapView< G, A, R > openMapFileWithView(@NotNull final MapFile mapFile, @Nullable final Point viewPosition, @Nullable final Point centerSquare)
Load a map file and create a map view.
int getArchetypeCount()
Returns the number of Archetypes available.
An EditorAction that edits or creates a script file.
Utility class implementing menu related functions.
Definition: MenuUtils.java:39
Exits the application.
Definition: Exiter.java:28
A global editor action.
An EditorAction that deletes the currently selected game object.
Selects valid exit game objects from maps.
This package contains the preferences ui modules.
void loadShortcuts()
Restores all shortcuts from the preferences.
void handleThrowable(@NotNull final Throwable t)
Container for settings that affect the rendering of maps.
An EditorAction that opens the game object attributes dialog for the currently selected game object...
This class handles updating the map editor.
An EditorAction that saves all modified maps.
GameObjects are the objects based on Archetypes found on maps.
Interface used as preferences location.
An EditorAction that openes the "go location" dialog.
The "Events" tab in the game object attributes panel.
Definition: EventsTab.java:62
Creates images from map instances.
static final String DEFAULT_PREVIEW
The default map preview to use if no icon can be created.
An EditorAction that closes all map windows.
An EditorAction that shows the help dialog.
The CFTreasureListTree class fully manages treasurelists.
Maintains a set of EditorAction instances and calls their event listener callbacks.
void openFiles(final Iterable< String > filenames)
Load a list of map files.
The about dialog.
Definition: About.java:37
The filter package contains the classes for Filters.
Definition: BtnPopup.java:20
void setTextAreaDefaults(@NotNull final TextAreaDefaults textAreaDefaults)
Caches icon and preview images for map files.
Displays the contents of the currently selected map square.
Manager for shortcuts of all Actions in an ActionBuilder instance.
Manages actions in the "map" menu.
Definition: MapActions.java:70
static String getBuildNumberAsString()
Returns the application&#39;s build number as a string.
MainControl is a central class that&#39;s used for access on global data structures / collections and glo...
An EditorAction that runs the archetype collection.
final NewMapDialogFactory< G, A, R > newMapDialogFactory
The NewMapDialogFactory instance for creating new maps or pickmaps.
This package contains the other part of the script editor.
static final ActionBuilder ACTION_BUILDER
The ActionBuilder.
static final String DEFAULT_ICON
The default map icon to use if no icon can be created.
The controller of the monster view control.
An AbstractMapMenuPreferences implementation that manages bookmark menu entries.
Base classes for rendering maps.
An EditorAction that displays the browse archetypes dialog.
static final FileFilter MAP_FILE_FILTER
Swing FileFilter for map files.
Creates the main GUI of Gridarta.
final DefaultFileControl< G, A, R > fileControl
The DefaultFileControl instance.
ArchetypeSet< G, A, R > getArchetypeSet()
The Tab displaying the game object text editor.
Factory for creating MapRenderer instances.
ScriptEditControl - Manages events and data flow for the script editor entity.
Classes implementing the pickmap chooser.
net.sf.gridarta.model.scripts.ScriptArchData related functions.
An net.sf.gridarta.utils.EditorAction that moves the selected game object in the SelectedSquareModel ...
Utility class to create NewMapDialog instances.
Abstract base class for classes implementing display modes of the archetype chooser.
A Tab that displays the currently selected GameObject.
Utility class implementing actions that operate on ExitConnectorModels.
Utility class for ActionBuilder related functions.
Common base class for the panel that allows users to edit a GameObject&#39;s attributes.
Encapsulates actions and related functions.
Implements the auto-validator for map validation.
An EditorAction that displays the find archetypes dialog.
Stores information needed by the exit connector.
Creates images from map instances.
Pane for controlling which mouse to select and configure tools for.
Manages the pickmap panel and most pickmap-related code in general.
The panel that displays the game objects of the currently selected map square.
A DisplayMode showing archetypes as images and archetype name.
The "Msg Text" tab in the game object attributes panel.
Definition: MsgTextTab.java:43
Dialog to create events linked to item scripting.
final ScriptEditControl scriptEditControl
The ScriptEditControl instance.
Creates ImageIcon instances from resources.
An net.sf.gridarta.utils.EditorAction that moves the selected game object in the SelectedSquareModel ...
An net.sf.gridarta.utils.EditorAction that moves the selected game object in the SelectedSquareModel ...
A Tab that displays map validator results.
An GameObjectMatcher matching certain archetype types.
An net.sf.gridarta.utils.EditorAction that moves the selected game object in the SelectedSquareModel ...
An net.sf.gridarta.utils.EditorAction that moves the selected game object in the SelectedSquareModel ...
An EditorAction that opens the bookmarks manager.
An ErrorPanel displays errors to the user.
An EditorAction tha shows the treasurelists dialog.
void run(@NotNull final Iterable< String > args)
Starts the editor: makes the main window visible and opens map files.
Tracks key presses and maps them to actions.
void handleThrowable(final Throwable t)
This implementation displays the exception in a modal message dialog.
Definition: MainView.java:201
Helper class for entering maps.
Definition: EnterMap.java:52
void addTab(@NotNull final Tab tab)
Adds a tab.
Definition: MainView.java:161
The model component of the selected square control.
An EditorAction that selects the game object above the current game object.
List of menu entries (all CFPython commands).
void newScript()
Open a new empty script document.
An EditorAction that selects the game object below the current game object.
An EditorAction that grows the current selection by one map square.
Settings that apply to the editor.
static final String APP_ICON
Application icon definitions (icon-dir).
Loader for pickmaps from a directory.
Definition: Loader.java:40
Provides support for delayed notification of MapModel changes.
Common base implementation of CopyBuffer.
Definition: CopyBuffer.java:52
The controller of the connection view control.
The action for importing a plugin from a file.
final MainView mainView
The MainView instance.
An EditorAction that removes the current pre-selection from the selection.
void startup()
Eventually perform an update during startup.
Manages edit type actions in "view" menu.
The main toolbar of the application.
A DisplayMode showing archetypes as images and in-game game object name.
Utility class for validating AnimationObject instances.
A factory for creating MapView instances.
static JMenu getMenu(@NotNull final JMenuBar menuBar, @NotNull final String name)
Returns a named JMenu entry of a JMenuBar.
Definition: MenuUtils.java:124
Manages the recent menu entries.
static final String CLOSE_TAB_SMALL_ICON
Container for settings that affect pickmaps.
Encapsulates default settings for a text area.
Settings that are not retained across editor restarts.
The "Arch" tab in the archetype chooser.
Definition: ArchTab.java:55