Gridarta Editor
PluginEditorRow.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.dialog.plugin;
21 
22 import java.awt.Component;
23 import java.awt.event.FocusListener;
24 import java.awt.event.ItemEvent;
25 import java.awt.event.MouseListener;
26 import javax.swing.JComboBox;
27 import javax.swing.JTextField;
28 import javax.swing.event.DocumentEvent;
29 import javax.swing.event.DocumentListener;
30 import javax.swing.text.JTextComponent;
36 import net.sf.gridarta.plugin.Plugin;
40 import org.apache.log4j.Category;
41 import org.apache.log4j.Logger;
42 import org.jetbrains.annotations.NotNull;
43 
49 public class PluginEditorRow {
50 
54  @NotNull
55  private static final Category LOG = Logger.getLogger(PluginEditorRow.class);
56 
60  @NotNull
61  private final MouseListener mouseListener;
62 
66  @NotNull
67  private final FocusListener focusListener;
68 
72  @NotNull
73  private final Component parameterNameEditor;
74 
78  @NotNull
79  private final Component parameterDescriptionEditor;
80 
84  @NotNull
85  private final Component parameterTypeEditor;
86 
90  @NotNull
92 
105  public <G extends GameObject<G, A, R>, A extends MapArchObject<A>, R extends Archetype<G, A, R>> PluginEditorRow(@NotNull final Plugin<G, A, R> plugin, @NotNull final PluginParameter<G, A, R, ?> parameter, @NotNull final PluginParameterViewFactory<G, A, R> pluginParameterViewFactory, @NotNull final MouseListener mouseListener, @NotNull final FocusListener focusListener, @NotNull final Component parent) {
106  this.mouseListener = mouseListener;
107  this.focusListener = focusListener;
108 
111  parameterTypeEditor = createTypeEditor(plugin, parameter);
112  pluginParameterView = createView(parameter, pluginParameterViewFactory, parent);
113  }
114 
120  @NotNull
121  private <G extends GameObject<G, A, R>, A extends MapArchObject<A>, R extends Archetype<G, A, R>> Component createNameEditor(final PluginParameter<G, A, R, ?> parameter) {
122  final JTextComponent textField = new JTextField(parameter.getName());
123  textField.getDocument().addDocumentListener(new DocumentListener() {
124 
125  @Override
126  public void insertUpdate(@NotNull final DocumentEvent e) {
127  change();
128  }
129 
130  @Override
131  public void removeUpdate(@NotNull final DocumentEvent e) {
132  change();
133  }
134 
135  @Override
136  public void changedUpdate(@NotNull final DocumentEvent e) {
137  change();
138  }
139 
143  private void change() {
144  parameter.setName(textField.getText());
145  }
146 
147  });
148  attachListeners(textField);
149  return textField;
150  }
151 
157  @NotNull
158  private <G extends GameObject<G, A, R>, A extends MapArchObject<A>, R extends Archetype<G, A, R>> Component createDescriptionEditor(final PluginParameter<G, A, R, ?> parameter) {
159  final JTextComponent textField = new JTextField(parameter.getDescription());
160  textField.getDocument().addDocumentListener(new DocumentListener() {
161 
162  @Override
163  public void changedUpdate(@NotNull final DocumentEvent e) {
164  change();
165  }
166 
167  @Override
168  public void insertUpdate(@NotNull final DocumentEvent e) {
169  change();
170  }
171 
172  @Override
173  public void removeUpdate(@NotNull final DocumentEvent e) {
174  change();
175  }
176 
180  private void change() {
181  parameter.setDescription(textField.getText());
182  }
183  });
184  attachListeners(textField);
185  return textField;
186  }
187 
194  @NotNull
195  private <G extends GameObject<G, A, R>, A extends MapArchObject<A>, R extends Archetype<G, A, R>> Component createTypeEditor(final Plugin<G, A, R> plugin, final PluginParameter<G, A, R, ?> parameter) {
196  final JComboBox<?> comboBox = new JComboBox<>(PluginParameterFactory.getTypes());
197  comboBox.setSelectedItem(parameter.getParameterType());
198  comboBox.addItemListener(e -> {
199  if (e.getStateChange() != ItemEvent.SELECTED) {
200  return;
201  }
202 
203  final String newParameterType = (String) e.getItem();
204  if (parameter.getParameterType().equals(newParameterType)) {
205  return;
206  }
207 
208  try {
209  plugin.convertType(parameter, newParameterType);
210  } catch (final NoSuchParameterException ex) {
211  LOG.warn("Cannot create parameter for " + ex.getMessage());
212  }
213  });
214  attachListeners(comboBox);
215  return comboBox;
216  }
217 
226  @NotNull
227  private <G extends GameObject<G, A, R>, A extends MapArchObject<A>, R extends Archetype<G, A, R>> PluginParameterView createView(final PluginParameter<G, A, R, ?> parameter, final PluginParameterViewFactory<G, A, R> pluginParameterViewFactory, final Component parent) {
228  final PluginParameterView pluginParameterView = pluginParameterViewFactory.newPluginParameterView(parent, parameter);
231  return pluginParameterView;
232  }
233 
238  @NotNull
239  public Component getParameterNameEditor() {
240  return parameterNameEditor;
241  }
242 
247  @NotNull
248  public Component getParameterDescriptionEditor() {
250  }
251 
256  @NotNull
257  public Component getParameterTypeEditor() {
258  return parameterTypeEditor;
259  }
260 
266  @NotNull
267  public Component getConfigComponent() {
269  }
270 
275  @NotNull
276  public Component getValueComponent() {
278  }
279 
285  private void attachListeners(@NotNull final Component component) {
286  component.addFocusListener(focusListener);
287  component.addMouseListener(mouseListener);
288  }
289 
290 }
net.sf.gridarta.gui.dialog.plugin.parameter.PluginParameterView.getConfigComponent
JComponent getConfigComponent()
Returns a JComponent for editing the parameter configuration.
net.sf.gridarta.gui.dialog.plugin.PluginEditorRow.pluginParameterView
final PluginParameterView pluginParameterView
The PluginParameterView instance for the parameter being edited.
Definition: PluginEditorRow.java:91
net.sf.gridarta.plugin
Definition: BshRunnable.java:20
net.sf.gridarta.plugin.parameter.PluginParameter.getParameterType
String getParameterType()
Returns the parameter type name.
net.sf.gridarta.gui.dialog.plugin.PluginEditorRow.getValueComponent
Component getValueComponent()
Returns the editor component for editing the parameter's value.
Definition: PluginEditorRow.java:276
net.sf.gridarta.plugin.parameter.PluginParameter
Parameter for a Plugin.
Definition: PluginParameter.java:33
net.sf.gridarta.gui.dialog.plugin.PluginEditorRow.getParameterDescriptionEditor
Component getParameterDescriptionEditor()
Returns the editor component for editing the parameter's description.
Definition: PluginEditorRow.java:248
net.sf.gridarta
Base package of all Gridarta classes.
net.sf.gridarta.gui.dialog.plugin.PluginEditorRow
A set of components for editing a PluginParameter and its configuration.
Definition: PluginEditorRow.java:49
net.sf
net.sf.gridarta.gui.dialog.plugin.PluginEditorRow.parameterTypeEditor
final Component parameterTypeEditor
The editor component for editing the parameter's type.
Definition: PluginEditorRow.java:85
net.sf.gridarta.plugin.parameter.PluginParameter.getDescription
String getDescription()
The user-provided description of the value for the user interface.
net.sf.gridarta.gui.dialog.plugin.parameter.PluginParameterView.getValueComponent
JComponent getValueComponent()
Returns a JComponent for editing the parameter value.
net.sf.gridarta.gui.dialog.plugin.PluginEditorRow.parameterNameEditor
final Component parameterNameEditor
The editor component for editing the parameter's name.
Definition: PluginEditorRow.java:73
net.sf.gridarta.model.archetype
Definition: AbstractArchetype.java:20
net.sf.gridarta.gui.dialog.plugin.parameter.PluginParameterViewFactory.newPluginParameterView
PluginParameterView newPluginParameterView(@NotNull final Component parent, @NotNull final PluginParameter< G, A, R, ?> parameter)
Definition: PluginParameterViewFactory.java:94
net.sf.gridarta.model.gameobject.GameObject
Reflects a game object (object on a map).
Definition: GameObject.java:36
net.sf.gridarta.gui.dialog.plugin.parameter
net.sf.gridarta.gui.dialog.plugin.PluginEditorRow.getParameterTypeEditor
Component getParameterTypeEditor()
Returns the editor component for editing the parameter's type.
Definition: PluginEditorRow.java:257
net.sf.gridarta.gui
Graphical User Interface of Gridarta.
net.sf.gridarta.gui.dialog.plugin.PluginEditorRow.parameterDescriptionEditor
final Component parameterDescriptionEditor
The editor component for editing the parameter's description.
Definition: PluginEditorRow.java:79
net.sf.gridarta.plugin.parameter.NoSuchParameterException
Thrown if a parameter does not exist.
Definition: NoSuchParameterException.java:29
net.sf.gridarta.model.gameobject
GameObjects are the objects based on Archetypes found on maps.
Definition: AbstractGameObject.java:20
net
net.sf.gridarta.gui.dialog.plugin.PluginEditorRow.focusListener
final FocusListener focusListener
The FocusListener that is attached to all editor components.
Definition: PluginEditorRow.java:67
net.sf.gridarta.gui.dialog.plugin.PluginEditorRow.createDescriptionEditor
private< G extends GameObject< G, A, R >, A extends MapArchObject< A >, R extends Archetype< G, A, R > > Component createDescriptionEditor(final PluginParameter< G, A, R, ?> parameter)
Creates an editor component for a plugin parameter's description.
Definition: PluginEditorRow.java:158
net.sf.gridarta.model.maparchobject.MapArchObject
Interface for MapArchObjects.
Definition: MapArchObject.java:40
net.sf.gridarta.gui.dialog.plugin.PluginEditorRow.getConfigComponent
Component getConfigComponent()
Returns the editor component for editing the parameter's configuration parameters.
Definition: PluginEditorRow.java:267
net.sf.gridarta.plugin.parameter.PluginParameter.getName
String getName()
The name of the parameter.
net.sf.gridarta.gui.dialog.plugin.PluginEditorRow.createNameEditor
private< G extends GameObject< G, A, R >, A extends MapArchObject< A >, R extends Archetype< G, A, R > > Component createNameEditor(final PluginParameter< G, A, R, ?> parameter)
Creates an editor component for a plugin parameter's name.
Definition: PluginEditorRow.java:121
net.sf.gridarta.gui.dialog.plugin.PluginEditorRow.getParameterNameEditor
Component getParameterNameEditor()
Returns the editor component for editing the parameter's name.
Definition: PluginEditorRow.java:239
net.sf.gridarta.gui.dialog
net.sf.gridarta.gui.dialog.plugin.PluginEditorRow.LOG
static final Category LOG
The Logger for printing log messages.
Definition: PluginEditorRow.java:55
net.sf.gridarta.gui.dialog.plugin
Definition: CloseableTabbedPane.java:47
net.sf.gridarta.gui.dialog.plugin.parameter.PluginParameterViewFactory
Factory for creating PluginParameterView instances.
Definition: PluginParameterViewFactory.java:49
net.sf.gridarta.gui.dialog.plugin.PluginEditorRow.createView
private< G extends GameObject< G, A, R >, A extends MapArchObject< A >, R extends Archetype< G, A, R > > PluginParameterView createView(final PluginParameter< G, A, R, ?> parameter, final PluginParameterViewFactory< G, A, R > pluginParameterViewFactory, final Component parent)
Creates a PluginParameterView instance for a parameter.
Definition: PluginEditorRow.java:227
net.sf.gridarta.model
net.sf.gridarta.model.archetype.Archetype
Reflects an Archetype.
Definition: Archetype.java:41
net.sf.gridarta.plugin.Plugin
Model for plugins.
Definition: Plugin.java:53
net.sf.gridarta.plugin.parameter.PluginParameter.setDescription
void setDescription(@NotNull String description)
Sets the user-provided description of the value for the user interface.
net.sf.gridarta.gui.dialog.plugin.PluginEditorRow.PluginEditorRow
public< G extends GameObject< G, A, R >, A extends MapArchObject< A >, R extends Archetype< G, A, R > > PluginEditorRow(@NotNull final Plugin< G, A, R > plugin, @NotNull final PluginParameter< G, A, R, ?> parameter, @NotNull final PluginParameterViewFactory< G, A, R > pluginParameterViewFactory, @NotNull final MouseListener mouseListener, @NotNull final FocusListener focusListener, @NotNull final Component parent)
Creates a new instance.
Definition: PluginEditorRow.java:105
net.sf.gridarta.plugin.parameter.PluginParameterFactory.getTypes
static String[] getTypes()
Returns all available plugin parameter type names.
Definition: PluginParameterFactory.java:127
net.sf.gridarta.plugin.parameter.PluginParameterFactory
Factory for Plugin Parameters.
Definition: PluginParameterFactory.java:37
net.sf.gridarta.model.maparchobject
Definition: AbstractMapArchObject.java:20
net.sf.gridarta.gui.dialog.plugin.PluginEditorRow.createTypeEditor
private< G extends GameObject< G, A, R >, A extends MapArchObject< A >, R extends Archetype< G, A, R > > Component createTypeEditor(final Plugin< G, A, R > plugin, final PluginParameter< G, A, R, ?> parameter)
Creates an editor component for a plugin parameter's type.
Definition: PluginEditorRow.java:195
net.sf.gridarta.gui.dialog.plugin.PluginEditorRow.attachListeners
void attachListeners(@NotNull final Component component)
Attaches focusListener and mouseListener to a {}.
Definition: PluginEditorRow.java:285
net.sf.gridarta.gui.dialog.plugin.parameter.PluginParameterView
Interface for views that display plugin parameters.
Definition: PluginParameterView.java:29
net.sf.gridarta.gui.dialog.plugin.PluginEditorRow.mouseListener
final MouseListener mouseListener
The MouseListener that is attached to all editor components.
Definition: PluginEditorRow.java:61
net.sf.gridarta.plugin.parameter.PluginParameter.setName
void setName(@NotNull String name)
Sets the name of the parameter.
net.sf.gridarta.plugin.parameter
Definition: AbstractPathParameter.java:20