20 package net.sf.gridarta.gui.scripts;
22 import java.awt.Color;
23 import java.awt.Component;
24 import java.awt.Container;
25 import java.awt.FlowLayout;
26 import java.awt.Frame;
27 import java.awt.Insets;
29 import java.io.IOException;
30 import javax.swing.AbstractButton;
31 import javax.swing.BorderFactory;
32 import javax.swing.Box;
33 import javax.swing.BoxLayout;
34 import javax.swing.JButton;
35 import javax.swing.JComboBox;
36 import javax.swing.JDialog;
37 import javax.swing.JFileChooser;
38 import javax.swing.JLabel;
39 import javax.swing.JOptionPane;
40 import javax.swing.JPanel;
41 import javax.swing.JTextField;
42 import javax.swing.WindowConstants;
43 import javax.swing.filechooser.FileFilter;
44 import javax.swing.text.JTextComponent;
60 import net.
sf.japi.swing.action.ActionBuilder;
61 import net.
sf.japi.swing.action.ActionBuilderFactory;
62 import net.
sf.japi.util.Arrays2;
63 import org.jetbrains.annotations.NotNull;
75 private static final ActionBuilder
ACTION_BUILDER = ActionBuilderFactory.getInstance().getActionBuilder(
"net.sf.gridarta");
146 public ScriptArchEditor(@NotNull
final ScriptedEventFactory<G, A, R> scriptedEventFactory, @NotNull
final String
scriptEnding, @NotNull
final String
name, @NotNull
final ScriptArchUtils scriptArchUtils, @NotNull
final FileFilter
scriptFileFilter, @NotNull
final ProjectSettings projectSettings, @NotNull
final MapManager<?, ?, ?> mapManager, @NotNull
final PathManager pathManager, @NotNull
final ScriptEditControl scriptEditControl) {
165 final JComboBox<?> tmpEventTypeBox =
new JComboBox<>(valuesArray);
166 tmpEventTypeBox.setSelectedIndex(Arrays2.linearEqualitySearch(
"say", valuesArray));
167 return tmpEventTypeBox;
178 final String archName = gameObject.getBestName();
184 newScriptFrame.setDefaultCloseOperation(WindowConstants.HIDE_ON_CLOSE);
186 final JPanel mainPanel =
new JPanel();
187 mainPanel.setLayout(
new BoxLayout(mainPanel, BoxLayout.Y_AXIS));
188 mainPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 2, 5));
191 final Container line1 =
new JPanel(
new FlowLayout(FlowLayout.LEFT));
193 headingLabel.setForeground(Color.black);
194 line1.add(headingLabel);
195 mainPanel.add(line1);
198 mainPanel.add(Box.createVerticalStrut(10));
199 final Container line2 =
new JPanel(
new FlowLayout(FlowLayout.LEFT));
201 line2.add(typeLabel);
204 line2.add(Box.createHorizontalStrut(10));
208 line2.add(pluginLabel);
210 mainPanel.add(line2);
213 mainPanel.add(Box.createVerticalStrut(5));
214 final Container line3 =
new JPanel(
new FlowLayout(FlowLayout.LEFT));
216 line3.add(scriptFileLabel);
217 mainPanel.add(line3);
219 final AbstractButton browseButton =
new JButton(
"...");
220 browseButton.setMargin(
new Insets(0, 10, 0, 10));
221 browseButton.addActionListener(e -> {
224 final JFileChooser fileChooser =
new JFileChooser();
226 fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
228 fileChooser.setMultiSelectionEnabled(
false);
231 if (fileChooser.showOpenDialog(newScriptFrame) == JFileChooser.APPROVE_OPTION) {
233 final File f = fileChooser.getSelectedFile();
238 line3.add(browseButton);
239 mainPanel.add(line3);
242 mainPanel.add(Box.createVerticalStrut(5));
243 final Container line4 =
new JPanel(
new FlowLayout(FlowLayout.LEFT));
247 mainPanel.add(line4);
250 final Container line5 =
new JPanel(
new FlowLayout(FlowLayout.LEFT));
251 final JPanel textPanel =
new JPanel();
252 textPanel.setLayout(
new BoxLayout(textPanel, BoxLayout.Y_AXIS));
254 textPanel.add(label1);
256 textPanel.add(label2);
257 line5.add(textPanel);
258 mainPanel.add(line5);
261 mainPanel.add(Box.createVerticalStrut(10));
262 final Container line6 =
new JPanel(
new FlowLayout(FlowLayout.RIGHT));
264 nsOkButton.addActionListener(e ->
createNewEvent(newScriptFrame, scriptArchData, gameObject));
265 line6.add(nsOkButton);
268 cancelButton.addActionListener(e -> newScriptFrame.setVisible(
false));
269 line6.add(cancelButton);
270 mainPanel.add(line6);
272 newScriptFrame.getContentPane().add(mainPanel);
273 newScriptFrame.pack();
274 newScriptFrame.setLocationRelativeTo(parent);
275 newScriptFrame.setVisible(
true);
279 final StringBuilder scriptPath =
new StringBuilder(
inputScriptPath.getText().trim().replace(
'\\',
'/'));
282 final String pluginName = ((String)
pluginNameBox.getSelectedItem()).trim();
287 final GameObject<G, A, R> replaceObject = scriptArchData.getScriptedEvent(eventType, gameObject);
288 if (replaceObject !=
null) {
296 String absScriptPath;
297 if (scriptPath.length() > 0 && scriptPath.charAt(0) ==
'/') {
300 if (!mapDir.exists()) {
302 frame.setVisible(
false);
303 ACTION_BUILDER.showMessageDialog(frame,
"mapDirDoesntExist", mapDir);
307 absScriptPath = mapDir.getAbsolutePath() + scriptPath;
310 absScriptPath = localMapDir.getAbsolutePath() +
"/" + scriptPath;
314 File newScriptFile =
new File(absScriptPath);
315 if (!newScriptFile.exists() && !absScriptPath.endsWith(
scriptEnding)) {
318 newScriptFile =
new File(absScriptPath);
321 if (newScriptFile.exists()) {
322 if (newScriptFile.isFile()) {
331 if (replaceObject !=
null) {
335 frame.setVisible(
false);
344 newScriptFile =
new File(absScriptPath);
352 boolean couldCreateFile =
false;
355 couldCreateFile = newScriptFile.createNewFile();
356 }
catch (
final IOException e) {
360 if (!couldCreateFile) {
373 if (replaceObject !=
null) {
377 frame.setVisible(
false);