UndoSupport, now the editor will reload the gui only if file is changed and some property editors. Also xml auto completition and XmlNavigator

This commit is contained in:
relu91 2014-08-09 15:44:35 +02:00
parent f1071fd05b
commit ba848391dd
9 changed files with 961 additions and 787 deletions

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<nifty xmlns="http://nifty-gui.sourceforge.net/nifty-1.3.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://nifty-gui.sourceforge.net/nifty-1.3.xsd http://nifty-gui.sourceforge.net/nifty-1.3.xsd"> <nifty xmlns="http://nifty-gui.lessvoid.com/nifty-gui" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://raw.githubusercontent.com/void256/nifty-gui/1.4/nifty-core/src/main/resources/nifty.xsd https://raw.githubusercontent.com/void256/nifty-gui/1.4/nifty-core/src/main/resources/nifty.xsd">
<!-- +++++++++++++++++++++++++++++++++++++++ --> <!-- +++++++++++++++++++++++++++++++++++++++ -->
<!-- start screen --> <!-- start screen -->
<!-- +++++++++++++++++++++++++++++++++++++++ --> <!-- +++++++++++++++++++++++++++++++++++++++ -->

View File

@ -5,8 +5,15 @@
package com.jme3.gde.gui; package com.jme3.gde.gui;
import com.jme3.gde.gui.nodes.GElementNode; import com.jme3.gde.gui.nodes.GElementNode;
import com.jme3.gde.gui.nodes.GUINode;
import com.jme3.gde.gui.nodes.ScreenChildFactory; import com.jme3.gde.gui.nodes.ScreenChildFactory;
import jada.ngeditor.controller.CommandProcessor;
import jada.ngeditor.controller.GUIEditor; import jada.ngeditor.controller.GUIEditor;
import jada.ngeditor.controller.commands.SelectCommand;
import jada.ngeditor.listeners.events.ReloadGuiEvent;
import jada.ngeditor.listeners.events.SelectionChanged;
import jada.ngeditor.model.GUI;
import jada.ngeditor.model.GuiEditorModel;
import jada.ngeditor.model.elements.GElement; import jada.ngeditor.model.elements.GElement;
import java.awt.BorderLayout; import java.awt.BorderLayout;
import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeEvent;
@ -36,7 +43,7 @@ import org.openide.windows.TopComponent;
* @author cris * @author cris
*/ */
@NavigatorPanel.Registration(mimeType = "text/x-niftygui+xml", displayName="Gui View") @NavigatorPanel.Registration(mimeType = "text/x-niftygui+xml", displayName="Gui View")
public class Navigator extends javax.swing.JPanel implements NavigatorPanel,ExplorerManager.Provider , Observer, PropertyChangeListener, LookupListener{ public class Navigator extends javax.swing.JPanel implements NavigatorPanel,ExplorerManager.Provider , Observer, PropertyChangeListener{
private Lookup lookup; private Lookup lookup;
private ExplorerManager mgr = new ExplorerManager(); private ExplorerManager mgr = new ExplorerManager();
private final BeanTreeView beanTreeView; private final BeanTreeView beanTreeView;
@ -51,6 +58,7 @@ public class Navigator extends javax.swing.JPanel implements NavigatorPanel,Expl
setLayout(new BorderLayout()); setLayout(new BorderLayout());
beanTreeView = new BeanTreeView(); beanTreeView = new BeanTreeView();
add(beanTreeView, BorderLayout.CENTER); add(beanTreeView, BorderLayout.CENTER);
CommandProcessor.getInstance().getObservable().addObserver(this);
} }
@ -94,13 +102,7 @@ public class Navigator extends javax.swing.JPanel implements NavigatorPanel,Expl
@Override @Override
public void panelActivated(Lookup context) { public void panelActivated(Lookup context) {
try {
this.context = context;
context.lookupResult(NiftyGuiDataObject.class).addLookupListener(this);
intNavigator(context);
} catch (PropertyVetoException ex) {
Exceptions.printStackTrace(ex);
}
} }
@Override @Override
@ -120,11 +122,24 @@ public class Navigator extends javax.swing.JPanel implements NavigatorPanel,Expl
@Override @Override
public void update(Observable o, Object arg) { public void update(Observable o, Object arg) {
if(o instanceof GuiEditorModel){
try {
GuiEditorModel model = (GuiEditorModel) o;
model.getCurrent().addObserver(this);
model.getCurrent().getSelection().addObserver(this);
this.intNavigator(model.getCurrent());
} catch (PropertyVetoException ex) {
Exceptions.printStackTrace(ex);
}
}
jada.ngeditor.listeners.actions.Action act = ( jada.ngeditor.listeners.actions.Action) arg; if(arg instanceof SelectionChanged){
if(act.getType() == jada.ngeditor.listeners.actions.Action.SEL){ SelectionChanged event = (SelectionChanged) arg;
if(event.getNewSelection().isEmpty()){
return;
}
ArrayList<String> path = new ArrayList<String>(); ArrayList<String> path = new ArrayList<String>();
GElement parent = act.getGUIElement(); GElement parent = ((SelectionChanged)arg).getElement();
while(parent!=null){ while(parent!=null){
path.add(parent.getID()); path.add(parent.getID());
parent = parent.getParent(); parent = parent.getParent();
@ -138,12 +153,6 @@ public class Navigator extends javax.swing.JPanel implements NavigatorPanel,Expl
} catch (PropertyVetoException ex) { } catch (PropertyVetoException ex) {
Exceptions.printStackTrace(ex); Exceptions.printStackTrace(ex);
} }
}else if(act.getType() == jada.ngeditor.listeners.actions.Action.NEW){
try {
this.intNavigator(context);
} catch (PropertyVetoException ex) {
Exceptions.printStackTrace(ex);
}
} }
beanTreeView.updateUI(); beanTreeView.updateUI();
} }
@ -156,29 +165,31 @@ public class Navigator extends javax.swing.JPanel implements NavigatorPanel,Expl
AbstractNode firstSelected = (AbstractNode) newValue[0]; AbstractNode firstSelected = (AbstractNode) newValue[0];
if (firstSelected instanceof GElementNode) { if (firstSelected instanceof GElementNode) {
GElement element = ((GElementNode) firstSelected).getGelement(); GElement element = ((GElementNode) firstSelected).getGelement();
GUI gui = ((GUINode)mgr.getRootContext()).getGui();
editor.selectElement(element); gui.getSelection().deleteObserver(this); // I don't wont to get notified about this selection change
SelectCommand command = CommandProcessor.getInstance().getCommand(SelectCommand.class);
command.setElement(element);
try {
lock = true;
CommandProcessor.getInstance().excuteCommand(command);
} catch (Exception ex) {
Exceptions.printStackTrace(ex);
}
gui.getSelection().addObserver(this);
} }
} }
} }
} }
@Override
public void resultChanged(LookupEvent ev) {
try {
intNavigator(context);
} catch (PropertyVetoException ex) {
Exceptions.printStackTrace(ex);
}
}
private void intNavigator(Lookup context) throws PropertyVetoException { private void intNavigator(GUI gui) throws PropertyVetoException {
NiftyGuiDataObject man = context.lookup(NiftyGuiDataObject.class);
ExplorerUtils.activateActions(mgr, true); ExplorerUtils.activateActions(mgr, true);
editor = man.getLookup().lookup(GUIEditor.class);
AbstractNode guiRoot = new AbstractNode(Children.create(new ScreenChildFactory(editor.getGui()), true));
AbstractNode guiRoot = new GUINode(gui);
guiRoot.setName("Gui"); guiRoot.setName("Gui");
this.mgr.setRootContext(guiRoot); this.mgr.setRootContext(guiRoot);
this.beanTreeView.updateUI(); this.beanTreeView.updateUI();
@ -186,6 +197,6 @@ public class Navigator extends javax.swing.JPanel implements NavigatorPanel,Expl
this.mgr.setSelectedNodes(new Node[]{guiRoot}); this.mgr.setSelectedNodes(new Node[]{guiRoot});
Lookup lookup1 = ExplorerUtils.createLookup(mgr, getActionMap()); Lookup lookup1 = ExplorerUtils.createLookup(mgr, getActionMap());
lookup = new ProxyLookup(lookup1); lookup = new ProxyLookup(lookup1);
editor.addObserver(this);
} }
} }

View File

@ -5,6 +5,7 @@
package com.jme3.gde.gui; package com.jme3.gde.gui;
import com.jme3.gde.core.assets.ProjectAssetManager; import com.jme3.gde.core.assets.ProjectAssetManager;
import jada.ngeditor.controller.CommandProcessor;
import jada.ngeditor.controller.GUIEditor; import jada.ngeditor.controller.GUIEditor;
import java.io.IOException; import java.io.IOException;
import org.netbeans.api.project.Project; import org.netbeans.api.project.Project;
@ -96,7 +97,7 @@ public class NiftyGuiDataObject extends MultiDataObject {
super(pf, loader); super(pf, loader);
registerEditor("text/x-niftygui+xml", true); registerEditor("text/x-niftygui+xml", true);
findAssetManager(); findAssetManager();
this.getCookieSet().assign(GUIEditor.class,new GUIEditor()); this.getCookieSet().assign(GUIEditor.class, CommandProcessor.getInstance().getGuiEditor());
} }
protected final void findAssetManager() { protected final void findAssetManager() {

View File

@ -5,42 +5,40 @@
package com.jme3.gde.gui; package com.jme3.gde.gui;
import com.jme3.gde.core.assets.ProjectAssetManager; import com.jme3.gde.core.assets.ProjectAssetManager;
import com.jme3.gde.core.scene.SceneApplication;
import com.jme3.gde.gui.nodes.GUINode; import com.jme3.gde.gui.nodes.GUINode;
import com.jme3.gde.gui.palette.NiftyGUIPaletteFactory;
import de.lessvoid.nifty.Nifty; import de.lessvoid.nifty.Nifty;
import jada.ngeditor.controller.CommandProcessor;
import jada.ngeditor.controller.GUIEditor; import jada.ngeditor.controller.GUIEditor;
import jada.ngeditor.guiviews.DND.PaletteDropTarget; import jada.ngeditor.guiviews.DND.PaletteDropTarget;
import jada.ngeditor.guiviews.DND.TrasferHandling; import jada.ngeditor.guiviews.DND.TrasferHandling;
import jada.ngeditor.guiviews.J2DNiftyView; import jada.ngeditor.guiviews.J2DNiftyView;
import jada.ngeditor.listeners.events.SelectionChanged;
import jada.ngeditor.model.GuiEditorModel;
import jada.ngeditor.model.elements.GElement; import jada.ngeditor.model.elements.GElement;
import jada.ngeditor.model.elements.GLayer; import jada.ngeditor.model.elements.GLayer;
import jada.ngeditor.model.exception.NoProductException; import jada.ngeditor.model.exception.NoProductException;
import java.awt.Dimension; import java.awt.Dimension;
import java.awt.dnd.DropTarget;
import java.awt.dnd.DropTargetDragEvent;
import java.awt.dnd.DropTargetDropEvent;
import java.awt.dnd.DropTargetEvent;
import java.awt.dnd.DropTargetListener;
import java.awt.event.ItemEvent; import java.awt.event.ItemEvent;
import java.awt.event.ItemListener; import java.awt.event.ItemListener;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.beans.PropertyVetoException; import java.beans.PropertyVetoException;
import java.io.File; import java.io.File;
import java.io.FileNotFoundException; import java.io.FileNotFoundException;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.Observable; import java.util.Observable;
import java.util.Observer; import java.util.Observer;
import java.util.concurrent.Callable;
import javax.swing.Action; import javax.swing.Action;
import javax.swing.ActionMap; import javax.swing.ActionMap;
import javax.swing.DefaultComboBoxModel; import javax.swing.DefaultComboBoxModel;
import javax.swing.JComboBox; import javax.swing.JComboBox;
import javax.swing.JComponent; import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JPanel; import javax.swing.JPanel;
import javax.swing.JToolBar; import javax.swing.JToolBar;
import javax.swing.text.AbstractDocument;
import javax.xml.bind.JAXBException; import javax.xml.bind.JAXBException;
import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.ParserConfigurationException;
import org.netbeans.api.progress.ProgressHandle; import org.netbeans.api.progress.ProgressHandle;
@ -48,20 +46,17 @@ import org.netbeans.api.progress.ProgressHandleFactory;
import org.netbeans.core.spi.multiview.CloseOperationState; import org.netbeans.core.spi.multiview.CloseOperationState;
import org.netbeans.core.spi.multiview.MultiViewElement; import org.netbeans.core.spi.multiview.MultiViewElement;
import org.netbeans.core.spi.multiview.MultiViewElementCallback; import org.netbeans.core.spi.multiview.MultiViewElementCallback;
import org.openide.DialogDisplayer;
import org.openide.NotifyDescriptor;
import org.openide.awt.UndoRedo; import org.openide.awt.UndoRedo;
import org.openide.explorer.ExplorerManager; import org.openide.explorer.ExplorerManager;
import org.openide.explorer.ExplorerUtils; import org.openide.explorer.ExplorerUtils;
import org.openide.loaders.DataObject;
import org.openide.nodes.Node; import org.openide.nodes.Node;
import org.openide.util.Exceptions; import org.openide.util.Exceptions;
import org.openide.util.Lookup; import org.openide.util.Lookup;
import org.openide.util.NbBundle.Messages; import org.openide.util.NbBundle.Messages;
import org.openide.util.lookup.AbstractLookup;
import org.openide.util.lookup.InstanceContent;
import org.openide.util.lookup.ProxyLookup;
import org.openide.windows.TopComponent; import org.openide.windows.TopComponent;
import org.xml.sax.SAXException; import org.xml.sax.SAXException;
import sun.rmi.runtime.Log;
@MultiViewElement.Registration( @MultiViewElement.Registration(
displayName = "#LBL_NiftyGui_VISUAL", displayName = "#LBL_NiftyGui_VISUAL",
@ -71,7 +66,7 @@ import org.xml.sax.SAXException;
preferredID = "NiftyGuiVisual", preferredID = "NiftyGuiVisual",
position = 2000) position = 2000)
@Messages("LBL_NiftyGui_VISUAL=Visual") @Messages("LBL_NiftyGui_VISUAL=Visual")
public final class NiftyGuiVisualElement extends JPanel implements MultiViewElement , ExplorerManager.Provider,Observer { public final class NiftyGuiVisualElement extends JPanel implements MultiViewElement , ExplorerManager.Provider,Observer, PropertyChangeListener {
private NiftyGuiDataObject obj; private NiftyGuiDataObject obj;
private JToolBar toolbar = new JToolBar(); private JToolBar toolbar = new JToolBar();
@ -81,6 +76,8 @@ public final class NiftyGuiVisualElement extends JPanel implements MultiViewElem
private final J2DNiftyView view; private final J2DNiftyView view;
private final JComboBox layers = new JComboBox(); private final JComboBox layers = new JComboBox();
private final ExplorerManager nodesManager; private final ExplorerManager nodesManager;
private final UndoRedo.Manager undoSupport;
private int guiID;
public NiftyGuiVisualElement(Lookup lkp) { public NiftyGuiVisualElement(Lookup lkp) {
@ -94,15 +91,16 @@ public final class NiftyGuiVisualElement extends JPanel implements MultiViewElem
TrasferHandling tranf = new TrasferHandling(); TrasferHandling tranf = new TrasferHandling();
PaletteDropTarget tmp = new PaletteDropTarget(); PaletteDropTarget tmp = new PaletteDropTarget();
editor = obj.getLookup().lookup(GUIEditor.class); editor = obj.getLookup().lookup(GUIEditor.class);
editor.addObserver(this);
nodesManager = new ExplorerManager(); nodesManager = new ExplorerManager();
nifty = view.getNifty(); nifty = view.getNifty();
view.setTransferHandler(tranf); view.setTransferHandler(tranf);
view.setDropTarget(tmp); view.setDropTarget(tmp);
editor.addObserver(view); // editor.addObserver(view);
editor.addObserver(tranf); // editor.addObserver(tranf);
editor.addObserver(tmp); this.obj.addPropertyChangeListener(this);
this.createToolbar(); this.createToolbar();
this.undoSupport = new UndoRedo.Manager();
CommandProcessor.getInstance().setUndoManager(undoSupport);
} }
/** /**
* Old code * Old code
@ -112,6 +110,7 @@ public final class NiftyGuiVisualElement extends JPanel implements MultiViewElem
toolbar.setPreferredSize(new Dimension(10000, 24)); toolbar.setPreferredSize(new Dimension(10000, 24));
toolbar.setMaximumSize(new Dimension(10000, 24)); toolbar.setMaximumSize(new Dimension(10000, 24));
toolbar.setFloatable(false); toolbar.setFloatable(false);
toolbar.add(new JLabel("Change Resolution"));
JComboBox comboBox = new JComboBox(new String[]{"640x480", "480x800", "800x480", "800x600", "1024x768", "1280x720"}); JComboBox comboBox = new JComboBox(new String[]{"640x480", "480x800", "800x480", "800x600", "1024x768", "1280x720"});
comboBox.addItemListener(new ItemListener() { comboBox.addItemListener(new ItemListener() {
@ -136,6 +135,7 @@ public final class NiftyGuiVisualElement extends JPanel implements MultiViewElem
}); });
toolbar.add(comboBox); toolbar.add(comboBox);
comboBox.setSelectedItem("800x600"); comboBox.setSelectedItem("800x600");
toolbar.add(new JLabel("Current Layer"));
layers.addItemListener(new ItemListener() { layers.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) { public void itemStateChanged(ItemEvent e) {
@ -191,74 +191,22 @@ public final class NiftyGuiVisualElement extends JPanel implements MultiViewElem
*/ */
@Override @Override
public void componentOpened() { public void componentOpened() {
try { loadGui();
ProgressHandle handle = ProgressHandleFactory.createHandle("Loading the gui file");
String path = this.obj.getPrimaryFile().getPath();
ProjectAssetManager mgr = obj.getLookup().lookup(ProjectAssetManager.class);
String assetPath = mgr.getAssetFolder().getPath();
handle.progress(50);
this.editor.createNewGui(nifty,new File(path),new File(assetPath));
nodesManager.setRootContext(new GUINode(this.editor.getGui()));
Collection<GLayer> layers1 = this.editor.getGui().getLayers();
DefaultComboBoxModel<GLayer> model = new DefaultComboBoxModel<GLayer>(layers1.toArray(new GLayer[0]));
layers.setModel(model);
layers.setSelectedItem(this.editor.getCurrentLayer());
handle.finish();
} catch (ParserConfigurationException ex) {
Exceptions.printStackTrace(ex);
} catch (JAXBException ex) {
Exceptions.printStackTrace(ex);
} catch (ClassNotFoundException ex) {
Exceptions.printStackTrace(ex);
} catch (IOException ex) {
Exceptions.printStackTrace(ex);
} catch (NoProductException ex) {
Exceptions.printStackTrace(ex);
} catch (SAXException ex) {
Exceptions.printStackTrace(ex);
} catch (Exception ex) {
Exceptions.printStackTrace(ex);
}
} }
@Override @Override
public void componentClosed() { public void componentClosed() {
} }
/** /**
* Raw implementation , just to prototype the editor * Raw implementation , just to prototype the editor
*/ */
@Override @Override
public void componentShowing() { public void componentShowing() {
try { if(!this.obj.isModified()){
ProgressHandle handle = ProgressHandleFactory.createHandle("Loading the gui file"); return;
String path = this.obj.getPrimaryFile().getPath();
ProjectAssetManager mgr = this.obj.getLookup().lookup(ProjectAssetManager.class);
String assetPath = mgr.getAssetFolder().getPath();
this.editor.createNewGui(nifty,new File(path),new File(assetPath));
nodesManager.setRootContext(new GUINode(this.editor.getGui()));
Collection<GLayer> layers1 = this.editor.getGui().getLayers();
DefaultComboBoxModel<GLayer> model = new DefaultComboBoxModel<GLayer>(layers1.toArray(new GLayer[0]));
layers.setModel(model);
layers.setSelectedItem(this.editor.getCurrentLayer());
handle.finish();
} catch (ParserConfigurationException ex) {
Exceptions.printStackTrace(ex);
} catch (JAXBException ex) {
Exceptions.printStackTrace(ex);
} catch (ClassNotFoundException ex) {
Exceptions.printStackTrace(ex);
} catch (IOException ex) {
Exceptions.printStackTrace(ex);
} catch (NoProductException ex) {
Exceptions.printStackTrace(ex);
} catch (SAXException ex) {
Exceptions.printStackTrace(ex);
} catch (Exception ex) {
Exceptions.printStackTrace(ex);
} }
loadGui();
} }
/** /**
@ -273,11 +221,16 @@ public final class NiftyGuiVisualElement extends JPanel implements MultiViewElem
Exceptions.printStackTrace(ex); Exceptions.printStackTrace(ex);
} catch (JAXBException ex) { } catch (JAXBException ex) {
Exceptions.printStackTrace(ex); Exceptions.printStackTrace(ex);
} catch (NullPointerException ex){
Exceptions.printStackTrace(ex);
} }
} }
@Override @Override
public void componentActivated() { public void componentActivated() {
GuiEditorModel model = (GuiEditorModel) CommandProcessor.getInstance().getObservable();
model.setCurrentGUI(guiID);
CommandProcessor.getInstance().setUndoManager(undoSupport);
} }
@Override @Override
@ -286,7 +239,7 @@ public final class NiftyGuiVisualElement extends JPanel implements MultiViewElem
@Override @Override
public UndoRedo getUndoRedo() { public UndoRedo getUndoRedo() {
return UndoRedo.NONE; return this.undoSupport;
} }
@Override @Override
@ -306,10 +259,13 @@ public final class NiftyGuiVisualElement extends JPanel implements MultiViewElem
@Override @Override
public void update(Observable o, Object arg) { public void update(Observable o, Object arg) {
jada.ngeditor.listeners.actions.Action act = ( jada.ngeditor.listeners.actions.Action) arg; if(arg instanceof SelectionChanged ){
if(act.getType() == jada.ngeditor.listeners.actions.Action.SEL){ SelectionChanged event = (SelectionChanged) arg;
if(event.getNewSelection().isEmpty()){
return;
}
ArrayList<String> path = new ArrayList<String>(); ArrayList<String> path = new ArrayList<String>();
GElement parent = act.getGUIElement(); GElement parent = event.getElement();
while(parent!=null){ while(parent!=null){
path.add(parent.getID()); path.add(parent.getID());
parent = parent.getParent(); parent = parent.getParent();
@ -329,4 +285,51 @@ public final class NiftyGuiVisualElement extends JPanel implements MultiViewElem
} }
} }
} }
@Override
public void propertyChange(PropertyChangeEvent evt) {
if(evt.getPropertyName().equals(DataObject.PROP_MODIFIED)){
boolean old = (Boolean)evt.getOldValue();
boolean nev = (Boolean)evt.getNewValue();
if(old && !nev){
this.loadGui();
}
}
}
private void loadGui() {
try {
ProgressHandle handle = ProgressHandleFactory.createHandle("Loading the gui file");
InputStream is = this.obj.getPrimaryFile().getInputStream();
ProjectAssetManager mgr = this.obj.getLookup().lookup(ProjectAssetManager.class);
String assetPath = mgr.getAssetFolder().getPath();
this.editor.createNewGui(nifty,is,new File(assetPath));
this.view.newGui(this.editor.getGui());
nodesManager.setRootContext(new GUINode(this.editor.getGui()));
this.editor.getGui().getSelection().addObserver(this);
Collection<GLayer> layers1 = this.editor.getGui().getLayers();
guiID = this.editor.getGui().getGUIid();
DefaultComboBoxModel<GLayer> model = new DefaultComboBoxModel<GLayer>(layers1.toArray(new GLayer[0]));
layers.setModel(model);
layers.setSelectedItem(this.editor.getCurrentLayer());
handle.finish();
} catch (ParserConfigurationException ex) {
Exceptions.printStackTrace(ex);
} catch (JAXBException ex) {
Exceptions.printStackTrace(ex);
} catch (ClassNotFoundException ex) {
Exceptions.printStackTrace(ex);
} catch (IOException ex) {
Exceptions.printStackTrace(ex);
} catch (NoProductException ex) {
Exceptions.printStackTrace(ex);
} catch (SAXException ex) {
Exceptions.printStackTrace(ex);
} catch (Exception ex) {
Exceptions.printStackTrace(ex);
}
}
} }

View File

@ -7,4 +7,13 @@
</file> </file>
</folder> </folder>
</folder> </folder>
<folder name="Navigator">
<folder name="Panels">
<folder name="text">
<folder name="x-niftygui+xml">
<file name="org-netbeans-modules-xml-text-navigator-XMLNavigatorPanel.instance"/>
</folder>
</folder>
</folder>
</folder>
</filesystem> </filesystem>

View File

@ -4,6 +4,8 @@
*/ */
package com.jme3.gde.gui.nodes; package com.jme3.gde.gui.nodes;
import com.jme3.gde.gui.propertyeditors.ResourceEditor;
import com.jme3.gde.gui.propertyeditors.SizeEditor;
import jada.ngeditor.model.elements.GElement; import jada.ngeditor.model.elements.GElement;
import java.beans.PropertyEditor; import java.beans.PropertyEditor;
import java.lang.reflect.InvocationTargetException; import java.lang.reflect.InvocationTargetException;
@ -12,6 +14,8 @@ import org.openide.nodes.AbstractNode;
import org.openide.nodes.Children; import org.openide.nodes.Children;
import org.openide.nodes.Node; import org.openide.nodes.Node;
import org.openide.nodes.Sheet; import org.openide.nodes.Sheet;
import sun.beans.editors.BoolEditor;
import sun.beans.editors.BooleanEditor;
/** /**
* *
@ -46,16 +50,28 @@ public class GElementNode extends AbstractNode{
set.setName("Element Properties"); set.setName("Element Properties");
set.setShortDescription("You can set element properties"); set.setShortDescription("You can set element properties");
for(Entry<String,String> pair : this.element.listAttributes().entrySet()){ for(Entry<String,String> pair : this.element.listAttributes().entrySet()){
set.put(new ElementAttributeProperty(element,pair.getKey())); final ElementAttributeProperty elementAttributeProperty = new ElementAttributeProperty(element,pair.getKey());
pickEditor(pair, elementAttributeProperty);
set.put(elementAttributeProperty);
} }
s.put(set); s.put(set);
return s; return s;
} }
private void pickEditor(Entry<String, String> pair, final ElementAttributeProperty elementAttributeProperty) {
if(pair.getKey().equals("width")||pair.getKey().equals("height") || pair.getKey().equals("x") || pair.getKey().equals("y") ){
elementAttributeProperty.setPropertyEditor(new SizeEditor());
}else if(pair.getKey().equals("filename")){
elementAttributeProperty.setPropertyEditor(new ResourceEditor());
}
}
public class ElementAttributeProperty extends Node.Property { public class ElementAttributeProperty extends Node.Property {
private String attributeName; private String attributeName;
private GElement element; private GElement element;
private PropertyEditor editor;
public ElementAttributeProperty(GElement element, String attributeName) { public ElementAttributeProperty(GElement element, String attributeName) {
super(String.class); super(String.class);
@ -81,9 +97,13 @@ public class GElementNode extends AbstractNode{
return true; return true;
} }
public void setPropertyEditor(PropertyEditor editor){
this.editor = editor;
}
@Override @Override
public PropertyEditor getPropertyEditor() { public PropertyEditor getPropertyEditor() {
return super.getPropertyEditor(); //To change body of generated methods, choose Tools | Templates.
return this.editor; //To change body of generated methods, choose Tools | Templates.
} }

View File

@ -0,0 +1,71 @@
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package com.jme3.gde.gui.propertyeditors;
import jada.ngeditor.controller.CommandProcessor;
import jada.ngeditor.guiviews.editors.FileChooserEditor;
import jada.ngeditor.model.GuiEditorModel;
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.beans.PropertyEditorSupport;
import java.io.File;
import java.util.Observable;
import java.util.Observer;
import javax.swing.JFileChooser;
/**
*
* @author cris
*/
public class ResourceEditor extends PropertyEditorSupport implements Observer, ActionListener{
private final FileChooserEditor fileChooserEditor;
private File assetFolder;
public ResourceEditor() {
CommandProcessor.getInstance().getObservable().addObserver(this);
GuiEditorModel model = (GuiEditorModel) CommandProcessor.getInstance().getObservable();
this.assetFolder = model.getCurrent().getAssetFolder();
fileChooserEditor = new FileChooserEditor(this.assetFolder);
fileChooserEditor.getFileChooser().addActionListener(this);
}
@Override
public Component getCustomEditor() {
return fileChooserEditor.getFileChooser(); //To change body of generated methods, choose Tools | Templates.
}
@Override
public boolean supportsCustomEditor() {
return true; //To change body of generated methods, choose Tools | Templates.
}
@Override
public void update(Observable o, Object arg) {
if(o instanceof GuiEditorModel){
GuiEditorModel model = (GuiEditorModel) o;
this.assetFolder = model.getCurrent().getAssetFolder();
}
}
@Override
public void actionPerformed(ActionEvent e) {
if (JFileChooser.APPROVE_SELECTION.equals(e.getActionCommand())) {
this.setValue(fileChooserEditor.traslateFile());
}
}
}

View File

@ -0,0 +1,59 @@
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package com.jme3.gde.gui.propertyeditors;
import java.awt.Component;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.beans.PropertyEditorSupport;
import java.beans.PropertyVetoException;
import java.beans.VetoableChangeListener;
import javax.swing.JLabel;
import org.openide.explorer.propertysheet.ExPropertyEditor;
import org.openide.explorer.propertysheet.PropertyEnv;
/**
*
* @author cris
*/
public class SizeEditor extends PropertyEditorSupport implements ExPropertyEditor, PropertyChangeListener{
private PropertyEnv env;
@Override
public void setAsText(String text) throws IllegalArgumentException {
super.setAsText(text); //To change body of generated methods, choose Tools | Templates.
}
@Override
public String getAsText() {
return super.getAsText(); //To change body of generated methods, choose Tools | Templates.
}
@Override
public Component getCustomEditor() {
jada.ngeditor.guiviews.editors.SizeEditor editor = new jada.ngeditor.guiviews.editors.SizeEditor();
editor.setValue(this.getValue());
editor.addPropertyChangeListener(this);
return editor.getComponent(); //To change body of generated methods, choose Tools | Templates.
}
@Override
public boolean supportsCustomEditor() {
return true; //To change body of generated methods, choose Tools | Templates.
}
@Override
public void attachEnv(PropertyEnv env) {
this.env = env;
}
@Override
public void propertyChange(PropertyChangeEvent evt) {
this.setValue(evt.getNewValue());
}
}