Gridarta Editor
ScriptedEventEditor.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.scripts;
21 
22 import java.awt.Component;
23 import java.awt.Container;
24 import java.awt.FlowLayout;
25 import java.awt.Frame;
26 import java.io.File;
27 import javax.swing.AbstractButton;
28 import javax.swing.BorderFactory;
29 import javax.swing.Box;
30 import javax.swing.BoxLayout;
31 import javax.swing.JButton;
32 import javax.swing.JDialog;
33 import javax.swing.JLabel;
34 import javax.swing.JPanel;
35 import javax.swing.JTextField;
36 import javax.swing.WindowConstants;
37 import javax.swing.text.JTextComponent;
46 import net.sf.japi.swing.action.ActionBuilder;
47 import net.sf.japi.swing.action.ActionBuilderFactory;
48 import org.jetbrains.annotations.NotNull;
49 
54 public class ScriptedEventEditor<G extends GameObject<G, A, R>, A extends MapArchObject<A>, R extends Archetype<G, A, R>> {
55 
59  @NotNull
60  private static final ActionBuilder ACTION_BUILDER = ActionBuilderFactory.getInstance().getActionBuilder("net.sf.gridarta");
61 
65  @NotNull
67 
71  @NotNull
73 
74  @NotNull
75  private JTextComponent inputScriptPath;
76 
77  @NotNull
78  private JTextComponent inputPluginName;
79 
80  @NotNull
81  private JTextComponent inputOptions;
82 
89  this.projectSettings = projectSettings;
90  this.scriptEditControl = scriptEditControl;
91  }
92 
99  public void openScript(@NotNull final MapManager<?, ?, ?> mapManager, @NotNull final String scriptPath, @NotNull final Component parent) {
100  // trying to get the absolute path to script file:
101  final File scriptFile;
102  if (scriptPath.startsWith("/")) {
103  // file path is absolute (to map base directory):
104  scriptFile = new File(projectSettings.getMapsDirectory(), scriptPath.substring(1));
105  } else {
106  // file path is relative to map dir
107  scriptFile = new File(mapManager.getLocalMapDir(), scriptPath);
108  }
109 
110  // now see if that file really exists:
111  if (scriptFile.exists() && scriptFile.isFile()) {
112  scriptEditControl.openScriptFile(scriptFile);
113  } else {
114  // file does not exist!
115  ACTION_BUILDER.showMessageDialog(parent, "openScriptNotFound", scriptFile);
116  }
117  }
118 
125  public void editParameters(@NotNull final ScriptedEvent<G, A, R> scriptedEvent, @NotNull final Frame parent) {
126  final JDialog pathFrame = new JDialog(parent, ActionBuilderUtils.getString(ACTION_BUILDER, "scriptedEventTitle"), true);
127  pathFrame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
128 
129  final JPanel mainPanel = new JPanel();
130  mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS));
131  mainPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 2, 5));
132 
133  // input line: script path
134  final Container line1 = new JPanel(new FlowLayout(FlowLayout.RIGHT));
135  final Component text1 = new JLabel(ActionBuilderUtils.getString(ACTION_BUILDER, "scriptedEventScript"));
136  line1.add(text1);
137  inputScriptPath = new JTextField(scriptedEvent.getScriptPath(), 20);
138  line1.add(inputScriptPath);
139  mainPanel.add(line1);
140 
141  // input line: plugin options
142  final Container line2 = new JPanel(new FlowLayout(FlowLayout.RIGHT));
143  final Component text2 = new JLabel(ActionBuilderUtils.getString(ACTION_BUILDER, "scriptedEventOptions"));
144  line2.add(text2);
145  inputOptions = new JTextField(scriptedEvent.getOptions(), 20);
146  line2.add(inputOptions);
147  mainPanel.add(line2);
148  mainPanel.add(Box.createVerticalStrut(5));
149 
150  // input line: plugin name
151  final Container line3 = new JPanel(new FlowLayout(FlowLayout.RIGHT));
152  final Component text3 = ActionBuilderUtils.newLabel(ACTION_BUILDER, "scriptedEventPlugin");
153  line3.add(text3);
154  inputPluginName = new JTextField(scriptedEvent.getPluginName(), 20);
155  line3.add(inputPluginName);
156  mainPanel.add(line3);
157  mainPanel.add(Box.createVerticalStrut(5));
158 
159  // button panel:
160  final Container line4 = new JPanel(new FlowLayout(FlowLayout.RIGHT));
161  final AbstractButton okButton = new JButton(ActionBuilderUtils.getString(ACTION_BUILDER, "scriptedEventOk"));
162  okButton.addActionListener(e -> {
163  scriptedEvent.modifyEventPath();
164  pathFrame.dispose();
165  });
166  line4.add(okButton);
167 
168  final AbstractButton cancelButton = new JButton(ActionBuilderUtils.getString(ACTION_BUILDER, "scriptedEventCancel"));
169  cancelButton.addActionListener(e -> pathFrame.dispose());
170  line4.add(cancelButton);
171  mainPanel.add(line4);
172 
173  pathFrame.getContentPane().add(mainPanel);
174  pathFrame.pack();
175  pathFrame.setLocationRelativeTo(parent);
176  pathFrame.setVisible(true);
177  }
178 
179  @NotNull
180  public String getInputScriptPath() {
181  return inputScriptPath.getText().trim();
182  }
183 
184  @NotNull
185  public String getInputPluginName() {
186  return inputPluginName.getText().trim();
187  }
188 
189  @NotNull
190  public String getInputOptions() {
191  return inputOptions.getText().trim();
192  }
193 
194 }
net.sf.gridarta.model.mapmanager
Definition: AbstractMapManager.java:20
net.sf.gridarta.textedit.scripteditor
Classes for the script editor used within the editor to create and modify Python and Lua scripts.
Definition: Actions.java:20
net.sf.gridarta.model.mapmanager.MapManager
A MapManager manages all opened maps.
Definition: MapManager.java:37
net.sf.gridarta.gui.scripts.ScriptedEventEditor.getInputScriptPath
String getInputScriptPath()
Definition: ScriptedEventEditor.java:180
net.sf.gridarta
Base package of all Gridarta classes.
net.sf
net.sf.gridarta.model.scripts
Common types for event archetypes.
Definition: AbstractScriptedEvent.java:20
net.sf.gridarta.gui.scripts.ScriptedEventEditor.openScript
void openScript(@NotNull final MapManager<?, ?, ?> mapManager, @NotNull final String scriptPath, @NotNull final Component parent)
Opens the script pad to display a script.
Definition: ScriptedEventEditor.java:99
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.utils.ActionBuilderUtils.newLabel
static JLabel newLabel(@NotNull final ActionBuilder actionBuilder, @NotNull final String key)
Creates a new JLabel from a resource key.
Definition: ActionBuilderUtils.java:117
net.sf.gridarta.textedit
net.sf.gridarta.gui.scripts.ScriptedEventEditor.getInputOptions
String getInputOptions()
Definition: ScriptedEventEditor.java:190
net.sf.gridarta.model.scripts.ScriptedEvent
Class which stores information about one scripted event.
Definition: ScriptedEvent.java:31
net.sf.gridarta.model.gameobject
GameObjects are the objects based on Archetypes found on maps.
Definition: AbstractGameObject.java:20
net
net.sf.gridarta.gui.scripts.ScriptedEventEditor
Dialog to edit events linked to item scripting.
Definition: ScriptedEventEditor.java:54
net.sf.gridarta.gui.scripts.ScriptedEventEditor.inputOptions
JTextComponent inputOptions
Definition: ScriptedEventEditor.java:81
net.sf.gridarta.gui.scripts.ScriptedEventEditor.projectSettings
final ProjectSettings projectSettings
The project settings instance.
Definition: ScriptedEventEditor.java:66
net.sf.gridarta.gui.scripts.ScriptedEventEditor.scriptEditControl
final ScriptEditControl scriptEditControl
The ScriptEditControl to use.
Definition: ScriptedEventEditor.java:72
net.sf.gridarta.gui.scripts.ScriptedEventEditor.inputScriptPath
JTextComponent inputScriptPath
Definition: ScriptedEventEditor.java:75
net.sf.gridarta.model.maparchobject.MapArchObject
Interface for MapArchObjects.
Definition: MapArchObject.java:40
net.sf.gridarta.gui.scripts.ScriptedEventEditor.getInputPluginName
String getInputPluginName()
Definition: ScriptedEventEditor.java:185
net.sf.gridarta.gui.scripts.ScriptedEventEditor.inputPluginName
JTextComponent inputPluginName
Definition: ScriptedEventEditor.java:78
net.sf.gridarta.gui.scripts.ScriptedEventEditor.ScriptedEventEditor
ScriptedEventEditor(@NotNull final ProjectSettings projectSettings, @NotNull final ScriptEditControl scriptEditControl)
Creates a new instance.
Definition: ScriptedEventEditor.java:88
net.sf.gridarta.utils.ActionBuilderUtils.getString
static String getString(@NotNull final ActionBuilder actionBuilder, @NotNull final String key, @NotNull final String defaultValue)
Returns the value of a key.
Definition: ActionBuilderUtils.java:71
net.sf.gridarta.textedit.scripteditor.ScriptEditControl.openScriptFile
void openScriptFile(@NotNull final File file)
Opens a script file.
Definition: ScriptEditControl.java:155
net.sf.gridarta.model.settings.ProjectSettings
Settings that apply to a project.
Definition: ProjectSettings.java:29
net.sf.gridarta.textedit.scripteditor.ScriptEditControl
ScriptEditControl - Manages events and data flow for the script editor entity.
Definition: ScriptEditControl.java:59
net.sf.gridarta.model
net.sf.gridarta.model.archetype.Archetype
Reflects an Archetype.
Definition: Archetype.java:41
net.sf.gridarta.utils.ActionBuilderUtils
Utility class for ActionBuilder related functions.
Definition: ActionBuilderUtils.java:31
net.sf.gridarta.model.maparchobject
Definition: AbstractMapArchObject.java:20
net.sf.gridarta.model.settings.ProjectSettings.getMapsDirectory
File getMapsDirectory()
Returns the default maps directory.
net.sf.gridarta.gui.scripts.ScriptedEventEditor.ACTION_BUILDER
static final ActionBuilder ACTION_BUILDER
Action Builder.
Definition: ScriptedEventEditor.java:60
net.sf.gridarta.utils
Definition: ActionBuilderUtils.java:20
net.sf.gridarta.gui.scripts.ScriptedEventEditor.editParameters
void editParameters(@NotNull final ScriptedEvent< G, A, R > scriptedEvent, @NotNull final Frame parent)
Edit path and plugin name for an event.
Definition: ScriptedEventEditor.java:125
net.sf.gridarta.model.settings
Definition: AbstractDefaultProjectSettings.java:20