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-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.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.ItemListener;
26 import java.awt.event.MouseListener;
27 import javax.swing.JComboBox;
28 import javax.swing.JTextField;
29 import javax.swing.event.DocumentEvent;
30 import javax.swing.event.DocumentListener;
31 import javax.swing.text.JTextComponent;
37 import net.sf.gridarta.plugin.Plugin;
41 import org.apache.log4j.Category;
42 import org.apache.log4j.Logger;
43 import org.jetbrains.annotations.NotNull;
44 
50 public class PluginEditorRow {
51 
55  @NotNull
56  private static final Category LOG = Logger.getLogger(PluginEditorRow.class);
57 
61  @NotNull
62  private final MouseListener mouseListener;
63 
67  @NotNull
68  private final FocusListener focusListener;
69 
73  @NotNull
74  private final Component parameterNameEditor;
75 
79  @NotNull
80  private final Component parameterDescriptionEditor;
81 
85  @NotNull
86  private final Component parameterTypeEditor;
87 
91  @NotNull
93 
106  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) {
107  this.mouseListener = mouseListener;
108  this.focusListener = focusListener;
109 
110  parameterNameEditor = createNameEditor(parameter);
111  parameterDescriptionEditor = createDescriptionEditor(parameter);
112  parameterTypeEditor = createTypeEditor(plugin, parameter);
113  pluginParameterView = createView(parameter, pluginParameterViewFactory, parent);
114  }
115 
121  @NotNull
122  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) {
123  final JTextComponent textField = new JTextField(parameter.getName());
124  textField.getDocument().addDocumentListener(new DocumentListener() {
125 
126  @Override
127  public void insertUpdate(@NotNull final DocumentEvent e) {
128  change();
129  }
130 
131  @Override
132  public void removeUpdate(@NotNull final DocumentEvent e) {
133  change();
134  }
135 
136  @Override
137  public void changedUpdate(@NotNull final DocumentEvent e) {
138  change();
139  }
140 
144  private void change() {
145  parameter.setName(textField.getText());
146  }
147 
148  });
149  attachListeners(textField);
150  return textField;
151  }
152 
158  @NotNull
159  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) {
160  final JTextComponent textField = new JTextField(parameter.getDescription());
161  textField.getDocument().addDocumentListener(new DocumentListener() {
162 
163  @Override
164  public void changedUpdate(@NotNull final DocumentEvent e) {
165  change();
166  }
167 
168  @Override
169  public void insertUpdate(@NotNull final DocumentEvent e) {
170  change();
171  }
172 
173  @Override
174  public void removeUpdate(@NotNull final DocumentEvent e) {
175  change();
176  }
177 
181  private void change() {
182  parameter.setDescription(textField.getText());
183  }
184  });
185  attachListeners(textField);
186  return textField;
187  }
188 
195  @NotNull
196  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) {
197  final JComboBox<?> comboBox = new JComboBox<>(PluginParameterFactory.getTypes());
198  comboBox.setSelectedItem(parameter.getParameterType());
199  comboBox.addItemListener(new ItemListener() {
200 
201  @Override
202  public void itemStateChanged(@NotNull final ItemEvent e) {
203  if (e.getStateChange() != ItemEvent.SELECTED) {
204  return;
205  }
206 
207  final String newParameterType = (String) e.getItem();
208  if (parameter.getParameterType().equals(newParameterType)) {
209  return;
210  }
211 
212  try {
213  plugin.convertType(parameter, newParameterType);
214  } catch (final NoSuchParameterException ex) {
215  LOG.warn("Cannot create parameter for " + ex.getMessage());
216  }
217  }
218 
219  });
220  attachListeners(comboBox);
221  return comboBox;
222  }
223 
232  @NotNull
233  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) {
234  final PluginParameterView pluginParameterView = pluginParameterViewFactory.newPluginParameterView(parent, parameter);
237  return pluginParameterView;
238  }
239 
244  @NotNull
245  public Component getParameterNameEditor() {
246  return parameterNameEditor;
247  }
248 
253  @NotNull
254  public Component getParameterDescriptionEditor() {
256  }
257 
262  @NotNull
263  public Component getParameterTypeEditor() {
264  return parameterTypeEditor;
265  }
266 
272  @NotNull
273  public Component getConfigComponent() {
275  }
276 
281  @NotNull
282  public Component getValueComponent() {
284  }
285 
291  private void attachListeners(@NotNull final Component component) {
292  component.addFocusListener(focusListener);
293  component.addMouseListener(mouseListener);
294  }
295 
296 }
net.sf.gridarta.gui.dialog.plugin.parameter.PluginParameterView.getConfigComponent
JComponent getConfigComponent()
net.sf.gridarta.gui.dialog.plugin.PluginEditorRow.pluginParameterView
final PluginParameterView pluginParameterView
Definition: PluginEditorRow.java:92
net.sf.gridarta.plugin
Definition: BshRunnable.java:20
net.sf.gridarta.gui.dialog.plugin.PluginEditorRow.getValueComponent
Component getValueComponent()
Definition: PluginEditorRow.java:282
net.sf.gridarta.plugin.parameter.PluginParameter
Definition: PluginParameter.java:33
net.sf.gridarta.gui.dialog.plugin.PluginEditorRow.getParameterDescriptionEditor
Component getParameterDescriptionEditor()
Definition: PluginEditorRow.java:254
net.sf.gridarta
net.sf.gridarta.gui.dialog.plugin.PluginEditorRow
Definition: PluginEditorRow.java:50
net.sf
net.sf.gridarta.gui.dialog.plugin.PluginEditorRow.parameterTypeEditor
final Component parameterTypeEditor
Definition: PluginEditorRow.java:86
net.sf.gridarta.gui.dialog.plugin.parameter.PluginParameterView.getValueComponent
JComponent getValueComponent()
net.sf.gridarta.gui.dialog.plugin.PluginEditorRow.parameterNameEditor
final Component parameterNameEditor
Definition: PluginEditorRow.java:74
net.sf.gridarta.model.archetype
Definition: AbstractArchetype.java:20
net.sf.gridarta.model.gameobject.GameObject
Definition: GameObject.java:36
net.sf.gridarta.gui.dialog.plugin.parameter
net.sf.gridarta.gui.dialog.plugin.PluginEditorRow.getParameterTypeEditor
Component getParameterTypeEditor()
Definition: PluginEditorRow.java:263
net.sf.gridarta.gui
net.sf.gridarta.gui.dialog.plugin.PluginEditorRow.parameterDescriptionEditor
final Component parameterDescriptionEditor
Definition: PluginEditorRow.java:80
net.sf.gridarta.plugin.parameter.NoSuchParameterException
Definition: NoSuchParameterException.java:29
net.sf.gridarta.model.gameobject
Definition: AbstractGameObject.java:20
net
net.sf.gridarta.gui.dialog.plugin.PluginEditorRow.focusListener
final FocusListener focusListener
Definition: PluginEditorRow.java:68
net.sf.gridarta.model.maparchobject.MapArchObject
Definition: MapArchObject.java:40
net.sf.gridarta.gui.dialog.plugin.PluginEditorRow.getConfigComponent
Component getConfigComponent()
Definition: PluginEditorRow.java:273
net.sf.gridarta.plugin.parameter.PluginParameter.getName
String getName()
net.sf.gridarta.gui.dialog.plugin.PluginEditorRow.getParameterNameEditor
Component getParameterNameEditor()
Definition: PluginEditorRow.java:245
net.sf.gridarta.gui.dialog
net.sf.gridarta.gui.dialog.plugin.PluginEditorRow.LOG
static final Category LOG
Definition: PluginEditorRow.java:56
net.sf.gridarta.gui.dialog.plugin
Definition: CloseableTabbedPane.java:47
net.sf.gridarta.gui.dialog.plugin.parameter.PluginParameterViewFactory
Definition: PluginParameterViewFactory.java:49
net.sf.gridarta.model
net.sf.gridarta.model.archetype.Archetype
Definition: Archetype.java:41
net.sf.gridarta.plugin.Plugin
Definition: Plugin.java:53
net.sf.gridarta.plugin.parameter.PluginParameterFactory
Definition: PluginParameterFactory.java:37
net.sf.gridarta.model.maparchobject
Definition: AbstractMapArchObject.java:20
net.sf.gridarta.gui.dialog.plugin.PluginEditorRow.attachListeners
void attachListeners(@NotNull final Component component)
Definition: PluginEditorRow.java:291
net.sf.gridarta.gui.dialog.plugin.parameter.PluginParameterView
Definition: PluginParameterView.java:29
net.sf.gridarta.gui.dialog.plugin.PluginEditorRow.mouseListener
final MouseListener mouseListener
Definition: PluginEditorRow.java:62
net.sf.gridarta.plugin.parameter.PluginParameter.setName
void setName(@NotNull String name)
net.sf.gridarta.plugin.parameter
Definition: AbstractPathParameter.java:20