Gridarta Editor
EventsTab.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.panel.gameobjectattributes;
21 
22 import java.awt.BorderLayout;
23 import java.awt.Container;
24 import java.awt.Dimension;
25 import java.awt.Frame;
26 import java.awt.GridLayout;
27 import javax.swing.Action;
28 import javax.swing.DefaultListModel;
29 import javax.swing.JButton;
30 import javax.swing.JList;
31 import javax.swing.JPanel;
32 import javax.swing.JScrollPane;
33 import javax.swing.ListModel;
34 import javax.swing.ListSelectionModel;
35 import javax.swing.ScrollPaneConstants;
36 import javax.swing.border.EtchedBorder;
37 import javax.swing.event.ListSelectionEvent;
38 import javax.swing.event.ListSelectionListener;
50 import net.sf.japi.swing.action.ActionBuilder;
51 import net.sf.japi.swing.action.ActionBuilderFactory;
52 import net.sf.japi.swing.action.ActionMethod;
53 import org.jetbrains.annotations.NotNull;
54 import org.jetbrains.annotations.Nullable;
55 
61 public class EventsTab<G extends GameObject<G, A, R>, A extends MapArchObject<A>, R extends Archetype<G, A, R>> extends AbstractGameObjectAttributesTab<G, A, R> {
62 
66  @NotNull
67  private static final ActionBuilder ACTION_BUILDER = ActionBuilderFactory.getInstance().getActionBuilder("net.sf.gridarta");
68 
72  @NotNull
73  private final Frame parent;
74 
78  @NotNull
80 
84  @NotNull
86 
90  @NotNull
92 
96  @NotNull
98 
102  @NotNull
104 
108  @NotNull
109  private final JPanel panel = new JPanel();
110 
114  @NotNull
115  private final JScrollPane scrollPane;
116 
120  @NotNull
121  private final Action aEventAddNew = ACTION_BUILDER.createAction(false, "eventAddNew", this);
122 
126  @NotNull
127  private final Action aEventEditData = ACTION_BUILDER.createAction(false, "eventEditData", this);
128 
132  @NotNull
133  private final Action aEventEdit = ACTION_BUILDER.createAction(false, "eventEdit", this);
134 
138  @NotNull
139  private final Action aEventRemove = ACTION_BUILDER.createAction(false, "eventRemove", this);
140 
144  @NotNull
145  private final JList<String> eventList = new JList<>();
146 
151  @Nullable
153 
164  public EventsTab(@NotNull final Frame parent, @NotNull final MapManager<G, A, R> mapManager, @NotNull final GameObjectAttributesModel<G, A, R> gameObjectAttributesModel, @NotNull final ScriptArchEditor<G, A, R> scriptArchEditor, @NotNull final ScriptArchData<G, A, R> scriptArchData, @NotNull final ScriptArchDataUtils<G, A, R> scriptArchDataUtils, @NotNull final ScriptArchUtils scriptArchUtils) {
165  super(gameObjectAttributesModel);
166  this.parent = parent;
167  this.mapManager = mapManager;
168  this.scriptArchEditor = scriptArchEditor;
169  this.scriptArchData = scriptArchData;
170  this.scriptArchDataUtils = scriptArchDataUtils;
171  this.scriptArchUtils = scriptArchUtils;
172 
173  scrollPane = new JScrollPane(eventList);
174  scrollPane.setBorder(new EtchedBorder());
175  scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED);
176  scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
177  scrollPane.setPreferredSize(new Dimension(80, 40));
178 
179  final Container buttons = new JPanel(new GridLayout(4, 1));
180  buttons.add(new JButton(aEventAddNew));
181  buttons.add(new JButton(aEventEditData));
182  buttons.add(new JButton(aEventEdit));
183  buttons.add(new JButton(aEventRemove));
184 
185  panel.setLayout(new BorderLayout());
186  panel.add(scrollPane, BorderLayout.CENTER);
187  panel.add(buttons, BorderLayout.EAST);
188  panel.setPreferredSize(new Dimension(100, 40));
189 
190  eventList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
191  final ListSelectionListener listSelectionListener = new ListSelectionListener() {
192 
193  @Override
194  public void valueChanged(final ListSelectionEvent e) {
195  updateActions();
196  }
197 
198  };
199  eventList.addListSelectionListener(listSelectionListener);
200  refresh(gameObjectAttributesModel.getSelectedGameObject());
201  }
202 
203  @NotNull
204  @Override
205  public JPanel getPanel() {
206  return panel;
207  }
208 
209  @Override
210  public boolean canApply() {
211  return false;
212  }
213 
214  @Override
215  public void activate() {
216  scrollPane.requestFocusInWindow();
217  }
218 
219  @Override
220  protected final void refresh(@Nullable final G gameObject) {
221  selectedGameObject = gameObject;
222  if (gameObject == null || !gameObject.isScripted()) {
224  final ListModel<?> listModel = eventList.getModel();
225  if (listModel != null && listModel.getSize() > 0) {
226  eventList.setModel(new DefaultListModel<>());
227  }
228  } else {
230  eventList.removeAll();
232  }
233  updateActions();
234  }
235 
239  private void updateActions() {
240  aEventAddNew.setEnabled(doAddNewEvent(false));
242  aEventEdit.setEnabled(doEditEvent(ScriptTask.EVENT_OPEN, false));
243  aEventRemove.setEnabled(doEditEvent(ScriptTask.EVENT_REMOVE, false));
244  }
245 
246  @Override
247  protected void apply(@NotNull final G gameObject) {
248  }
249 
253  @ActionMethod
254  public void eventAddNew() {
255  doAddNewEvent(true);
256  }
257 
261  @ActionMethod
262  public void eventEditData() {
264  }
265 
269  @ActionMethod
270  public void eventEdit() {
272  }
273 
277  @ActionMethod
278  public void eventRemove() {
280  }
281 
287  private boolean doAddNewEvent(final boolean performAction) {
288  final GameObject<G, A, R> gameObject = selectedGameObject;
289  if (gameObject == null) {
290  return false;
291  }
292 
293  if (performAction) {
294  final G selectedHead = gameObject.getHead();
295  final MapModel<G, A, R> mapModel = selectedHead.getMapSquare().getMapModel();
296  mapModel.beginTransaction("Add event");
297  try {
299 
300  if (scriptArchData.isEmpty(selectedHead)) {
301  setEventPanelButtonState(true, false, false, false);
302  } else {
303  setEventPanelButtonState(true, true, true, true);
305  }
306  } finally {
307  mapModel.endTransaction();
308  }
309  }
310 
311  return true;
312  }
313 
323  private boolean doEditEvent(@NotNull final ScriptTask task, final boolean performAction) {
324  final GameObject<G, A, R> gameObject = selectedGameObject;
325  if (gameObject == null) {
326  return false;
327  }
328 
329  final ListModel<?> listModel = eventList.getModel();
330  if (listModel == null || listModel.getSize() <= 0) {
331  return false;
332  }
333 
334  final int index = eventList.getSelectedIndex();
335  if (index < 0) {
336  return false;
337  }
338 
339  if (performAction) {
340  final G selectedHead = gameObject.getHead();
341  final MapModel<G, A, R> mapModel = selectedHead.getMapSquare().getMapModel();
342  mapModel.beginTransaction("Modify event");
343  try {
344  scriptArchDataUtils.modifyEventScript(index, task, eventList, mapManager, parent, selectedHead);
345  if (scriptArchData.isEmpty(selectedHead)) {
346  setEventPanelButtonState(true, false, false, false);
347  }
348  } finally {
349  mapModel.endTransaction();
350  }
351  }
352 
353  return true;
354  }
355 
363  private void setEventPanelButtonState(final boolean newButton, final boolean modifyButton, final boolean pathButton, final boolean removeButton) {
364  aEventAddNew.setEnabled(newButton);
365  aEventEditData.setEnabled(pathButton);
366  aEventEdit.setEnabled(modifyButton);
367  aEventRemove.setEnabled(removeButton);
368  }
369 
370 }
net.sf.gridarta.gui.panel.gameobjectattributes.EventsTab.getPanel
JPanel getPanel()
Definition: EventsTab.java:205
net.sf.gridarta.model.mapmanager
Definition: AbstractMapManager.java:20
net.sf.gridarta.model.mapmodel.MapModel
Definition: MapModel.java:75
net.sf.gridarta.gui.scripts.ScriptTask.EVENT_EDIT_PATH
EVENT_EDIT_PATH
Definition: ScriptTask.java:38
net.sf.gridarta.model.mapmanager.MapManager
Definition: MapManager.java:37
net.sf.gridarta.gui.utils.Severity.MODIFIED
MODIFIED
Definition: Severity.java:39
net.sf.gridarta.gui.panel.gameobjectattributes.EventsTab.canApply
boolean canApply()
Definition: EventsTab.java:210
net.sf.gridarta
net.sf.gridarta.gui.panel.gameobjectattributes.EventsTab.apply
void apply(@NotNull final G gameObject)
Definition: EventsTab.java:247
net.sf.gridarta.model.mapmodel.MapModel.endTransaction
void endTransaction()
net.sf.gridarta.gui.panel.gameobjectattributes.EventsTab.scriptArchEditor
final ScriptArchEditor< G, A, R > scriptArchEditor
Definition: EventsTab.java:85
net.sf.gridarta.gui.panel.gameobjectattributes.EventsTab.eventEdit
void eventEdit()
Definition: EventsTab.java:270
net.sf
net.sf.gridarta.model.mapmodel.MapModel.beginTransaction
void beginTransaction(@NotNull String name)
net.sf.gridarta.model.scripts
Definition: AbstractScriptedEvent.java:20
net.sf.gridarta.model.mapmodel
Definition: AboveFloorInsertionMode.java:20
net.sf.gridarta.model.archetype
Definition: AbstractArchetype.java:20
net.sf.gridarta.model.gameobject.GameObject
Definition: GameObject.java:36
net.sf.gridarta.gui.scripts.ScriptTask.EVENT_OPEN
EVENT_OPEN
Definition: ScriptTask.java:33
net.sf.gridarta.gui.panel.gameobjectattributes.EventsTab.aEventAddNew
final Action aEventAddNew
Definition: EventsTab.java:121
net.sf.gridarta.gui.panel.gameobjectattributes.EventsTab.scriptArchUtils
final ScriptArchUtils scriptArchUtils
Definition: EventsTab.java:97
net.sf.gridarta.gui.panel.gameobjectattributes.EventsTab.setEventPanelButtonState
void setEventPanelButtonState(final boolean newButton, final boolean modifyButton, final boolean pathButton, final boolean removeButton)
Definition: EventsTab.java:363
net.sf.gridarta.gui.panel.gameobjectattributes.AbstractGameObjectAttributesTab
Definition: AbstractGameObjectAttributesTab.java:38
net.sf.gridarta.model.scripts.ScriptArchUtils
Definition: ScriptArchUtils.java:26
net.sf.gridarta.gui.panel.gameobjectattributes.EventsTab.eventList
final JList< String > eventList
Definition: EventsTab.java:145
net.sf.gridarta.gui
net.sf.gridarta.gui.utils.Severity
Definition: Severity.java:29
net.sf.gridarta.gui.panel.gameobjectattributes.EventsTab.updateActions
void updateActions()
Definition: EventsTab.java:239
net.sf.gridarta.gui.panel.gameobjectattributes.EventsTab.scriptArchData
final ScriptArchData< G, A, R > scriptArchData
Definition: EventsTab.java:91
net.sf.gridarta.model.gameobject
Definition: AbstractGameObject.java:20
net
net.sf.gridarta.gui.scripts.ScriptTask.EVENT_REMOVE
EVENT_REMOVE
Definition: ScriptTask.java:43
net.sf.gridarta.gui.panel.gameobjectattributes.EventsTab.scrollPane
final JScrollPane scrollPane
Definition: EventsTab.java:115
net.sf.gridarta.gui.panel.gameobjectattributes.EventsTab.parent
final Frame parent
Definition: EventsTab.java:73
net.sf.gridarta.gui.scripts.ScriptArchEditor.addEventScript
void addEventScript(@NotNull final G gameObject, @NotNull final ScriptArchData< G, A, R > scriptArchData, @NotNull final Frame parent)
Definition: ScriptArchEditor.java:179
net.sf.gridarta.model.maparchobject.MapArchObject
Definition: MapArchObject.java:40
net.sf.gridarta.gui.panel.gameobjectattributes.EventsTab.eventRemove
void eventRemove()
Definition: EventsTab.java:278
net.sf.gridarta.gui.panel.gameobjectattributes.GameObjectAttributesModel< G, A, R >
net.sf.gridarta.gui.scripts.ScriptArchEditor
Definition: ScriptArchEditor.java:71
net.sf.gridarta.gui.panel.gameobjectattributes.EventsTab.EventsTab
EventsTab(@NotNull final Frame parent, @NotNull final MapManager< G, A, R > mapManager, @NotNull final GameObjectAttributesModel< G, A, R > gameObjectAttributesModel, @NotNull final ScriptArchEditor< G, A, R > scriptArchEditor, @NotNull final ScriptArchData< G, A, R > scriptArchData, @NotNull final ScriptArchDataUtils< G, A, R > scriptArchDataUtils, @NotNull final ScriptArchUtils scriptArchUtils)
Definition: EventsTab.java:164
net.sf.gridarta.gui.scripts.ScriptTask
Definition: ScriptTask.java:28
net.sf.gridarta.gui.panel.gameobjectattributes.EventsTab.eventAddNew
void eventAddNew()
Definition: EventsTab.java:254
net.sf.gridarta.gui.scripts
Definition: AbstractScriptArchUtils.java:20
net.sf.gridarta.gui.panel.gameobjectattributes.EventsTab.aEventEdit
final Action aEventEdit
Definition: EventsTab.java:133
net.sf.gridarta.gui.panel.gameobjectattributes.EventsTab.ACTION_BUILDER
static final ActionBuilder ACTION_BUILDER
Definition: EventsTab.java:67
net.sf.gridarta.model.mapmodel.MapSquare.getMapModel
MapModel< G, A, R > getMapModel()
Definition: MapSquare.java:99
net.sf.gridarta.gui.panel.gameobjectattributes.EventsTab.eventEditData
void eventEditData()
Definition: EventsTab.java:262
net.sf.gridarta.gui.panel.gameobjectattributes.EventsTab.doAddNewEvent
boolean doAddNewEvent(final boolean performAction)
Definition: EventsTab.java:287
net.sf.gridarta.model.baseobject.BaseObject.getHead
T getHead()
net.sf.gridarta.model.mapmodel.MapModel.getMapSquare
MapSquare< G, A, R > getMapSquare(@NotNull Point pos)
net.sf.gridarta.model.scripts.ScriptArchData.isEmpty
boolean isEmpty(@NotNull G gameObject)
net.sf.gridarta.gui.panel.gameobjectattributes.AbstractGameObjectAttributesTab< G, A, R >::setTabSeverity
void setTabSeverity( @NotNull final Severity tabSeverity)
Definition: AbstractGameObjectAttributesTab.java:102
net.sf.gridarta.gui.panel.gameobjectattributes.EventsTab.doEditEvent
boolean doEditEvent(@NotNull final ScriptTask task, final boolean performAction)
Definition: EventsTab.java:323
net.sf.gridarta.gui.panel.gameobjectattributes.EventsTab.mapManager
final MapManager< G, A, R > mapManager
Definition: EventsTab.java:79
net.sf.gridarta.model
net.sf.gridarta.model.archetype.Archetype
Definition: Archetype.java:41
net.sf.gridarta.gui.scripts.ScriptArchDataUtils.modifyEventScript
void modifyEventScript(final int eventIndex, final ScriptTask task, @NotNull final JList< String > panelList, @NotNull final MapManager<?, ?, ?> mapManager, @NotNull final Frame parent, @NotNull final Iterable< G > gameObject)
Definition: ScriptArchDataUtils.java:98
net.sf.gridarta.gui.panel.gameobjectattributes.EventsTab.activate
void activate()
Definition: EventsTab.java:215
net.sf.gridarta.gui.panel.gameobjectattributes.EventsTab
Definition: EventsTab.java:61
net.sf.gridarta.model.maparchobject
Definition: AbstractMapArchObject.java:20
net.sf.gridarta.gui.panel.gameobjectattributes.EventsTab.refresh
final void refresh(@Nullable final G gameObject)
Definition: EventsTab.java:220
net.sf.gridarta.gui.utils
Definition: AnimationComponent.java:20
net.sf.gridarta.gui.panel.gameobjectattributes.EventsTab.scriptArchDataUtils
final ScriptArchDataUtils< G, A, R > scriptArchDataUtils
Definition: EventsTab.java:103
net.sf.gridarta.gui.panel.gameobjectattributes.EventsTab.aEventRemove
final Action aEventRemove
Definition: EventsTab.java:139
net.sf.gridarta.model.scripts.ScriptArchUtils.addEventsToJList
void addEventsToJList(@NotNull JList< String > list, @NotNull Iterable<? extends GameObject<?, ?, ?>> gameObject)
net.sf.gridarta.gui.panel.gameobjectattributes.EventsTab.panel
final JPanel panel
Definition: EventsTab.java:109
net.sf.gridarta.gui.utils.Severity.DEFAULT
DEFAULT
Definition: Severity.java:34
net.sf.gridarta.gui.panel.gameobjectattributes.EventsTab.aEventEditData
final Action aEventEditData
Definition: EventsTab.java:127
net.sf.gridarta.gui.panel.gameobjectattributes.EventsTab.selectedGameObject
GameObject< G, A, R > selectedGameObject
Definition: EventsTab.java:152
net.sf.gridarta.gui.scripts.ScriptArchDataUtils
Definition: ScriptArchDataUtils.java:41
net.sf.gridarta.model.scripts.ScriptArchData
Definition: ScriptArchData.java:35