diff --git a/sdk/jme3-gui/nbproject/project.properties b/sdk/jme3-gui/nbproject/project.properties
index f82a1a43d..8b6690b3e 100644
--- a/sdk/jme3-gui/nbproject/project.properties
+++ b/sdk/jme3-gui/nbproject/project.properties
@@ -1,9 +1,9 @@
-file.reference.swingtonifty.jar=release/modules/ext/swingtonifty.jar
-#Thu, 25 Aug 2011 20:26:49 +0200
-javac.source=1.6
-javac.compilerargs=-Xlint -Xlint:-serial
-license.file=../license-jme.txt
-nbm.homepage=http://www.jmonkeyengine.com
-nbm.module.author=Normen Hansen,Cristiano Aguzzi
-nbm.needs.restart=true
-spec.version.base=3.1.5
+file.reference.swingtonifty.jar=release/modules/ext/swingtonifty.jar
+#Thu, 25 Aug 2011 20:26:49 +0200
+javac.source=1.6
+javac.compilerargs=-Xlint -Xlint:-serial
+license.file=../license-jme.txt
+nbm.homepage=http://www.jmonkeyengine.com
+nbm.module.author=Normen Hansen,Cristiano Aguzzi
+nbm.needs.restart=true
+spec.version.base=3.2
diff --git a/sdk/jme3-gui/release/modules/ext/Nifty-Editor0.5.9.jar b/sdk/jme3-gui/release/modules/ext/Nifty-Editor0.5.9.jar
index c45206724..368008604 100644
Binary files a/sdk/jme3-gui/release/modules/ext/Nifty-Editor0.5.9.jar and b/sdk/jme3-gui/release/modules/ext/Nifty-Editor0.5.9.jar differ
diff --git a/sdk/jme3-gui/src/com/jme3/gde/gui/Navigator.java b/sdk/jme3-gui/src/com/jme3/gde/gui/Navigator.java
index 3198fee98..60aecd474 100644
--- a/sdk/jme3-gui/src/com/jme3/gde/gui/Navigator.java
+++ b/sdk/jme3-gui/src/com/jme3/gde/gui/Navigator.java
@@ -1,202 +1,200 @@
-/*
- * To change this template, choose Tools | Templates
- * and open the template in the editor.
- */
-package com.jme3.gde.gui;
-
-import com.jme3.gde.gui.nodes.GElementNode;
-import com.jme3.gde.gui.nodes.GUINode;
-import com.jme3.gde.gui.nodes.ScreenChildFactory;
-import jada.ngeditor.controller.CommandProcessor;
-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 java.awt.BorderLayout;
-import java.beans.PropertyChangeEvent;
-import java.beans.PropertyChangeListener;
-import java.beans.PropertyVetoException;
-import java.util.ArrayList;
-import java.util.Observable;
-import java.util.Observer;
-import javax.swing.JComponent;
-import org.netbeans.spi.navigator.NavigatorPanel;
-import org.openide.explorer.ExplorerManager;
-import org.openide.explorer.ExplorerUtils;
-import org.openide.explorer.view.BeanTreeView;
-import org.openide.nodes.AbstractNode;
-import org.openide.nodes.Children;
-import org.openide.nodes.Node;
-import org.openide.util.Exceptions;
-import org.openide.util.Lookup;
-import org.openide.util.LookupEvent;
-import org.openide.util.LookupListener;
-import org.openide.util.Utilities;
-import org.openide.util.lookup.ProxyLookup;
-import org.openide.windows.TopComponent;
-
-/**
- *
- * @author cris
- */
-@NavigatorPanel.Registration(mimeType = "text/x-niftygui+xml", displayName="Gui View")
-public class Navigator extends javax.swing.JPanel implements NavigatorPanel,ExplorerManager.Provider , Observer, PropertyChangeListener{
- private Lookup lookup;
- private ExplorerManager mgr = new ExplorerManager();
- private final BeanTreeView beanTreeView;
- private GUIEditor editor;
- private Lookup context;
- private boolean lock;
- /**
- * Creates new form Navigator
- */
- public Navigator() {
- initComponents();
- setLayout(new BorderLayout());
- beanTreeView = new BeanTreeView();
- add(beanTreeView, BorderLayout.CENTER);
- CommandProcessor.getInstance().getObservable().addObserver(this);
-
- }
-
- /**
- * This method is called from within the constructor to initialize the form.
- * WARNING: Do NOT modify this code. The content of this method is always
- * regenerated by the Form Editor.
- */
- @SuppressWarnings("unchecked")
- // //GEN-BEGIN:initComponents
- private void initComponents() {
-
- javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
- this.setLayout(layout);
- layout.setHorizontalGroup(
- layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
- .addGap(0, 244, Short.MAX_VALUE)
- );
- layout.setVerticalGroup(
- layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
- .addGap(0, 274, Short.MAX_VALUE)
- );
- }// //GEN-END:initComponents
- // Variables declaration - do not modify//GEN-BEGIN:variables
- // End of variables declaration//GEN-END:variables
-
- @Override
- public String getDisplayName() {
- return "GuiView";
- }
-
- @Override
- public String getDisplayHint() {
- return "Easy view for your gui";
- }
-
- @Override
- public JComponent getComponent() {
- return this;
- }
-
- @Override
- public void panelActivated(Lookup context) {
-
- }
-
- @Override
- public void panelDeactivated() {
- ExplorerUtils.activateActions(mgr, false);
- }
-
- @Override
- public Lookup getLookup() {
- return lookup;
- }
-
- @Override
- public ExplorerManager getExplorerManager() {
- return mgr;
- }
-
- @Override
- 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);
- }
- }
-
- if(arg instanceof SelectionChanged){
- SelectionChanged event = (SelectionChanged) arg;
- if(event.getNewSelection().isEmpty()){
- return;
- }
- ArrayList path = new ArrayList();
- GElement parent = ((SelectionChanged)arg).getElement();
- while(parent!=null){
- path.add(parent.getID());
- parent = parent.getParent();
- }
- Node result = mgr.getRootContext();
- for(int i=path.size()-1;i>=0;i--){
- result = result.getChildren().findChild(path.get(i));
- }
- try {
- mgr.setSelectedNodes(new Node[]{result});
- } catch (PropertyVetoException ex) {
- Exceptions.printStackTrace(ex);
- }
- }
- beanTreeView.updateUI();
- }
-
- @Override
- public void propertyChange(PropertyChangeEvent evt) {
- if (evt.getPropertyName().equals(ExplorerManager.PROP_SELECTED_NODES)) {
- Node[] newValue = (Node[]) evt.getNewValue();
- if (newValue.length > 0) {
- AbstractNode firstSelected = (AbstractNode) newValue[0];
- if (firstSelected instanceof GElementNode) {
- GElement element = ((GElementNode) firstSelected).getGelement();
- GUI gui = ((GUINode)mgr.getRootContext()).getGui();
- 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);
-
- }
- }
- }
- }
-
-
- private void intNavigator(GUI gui) throws PropertyVetoException {
-
-
- ExplorerUtils.activateActions(mgr, true);
-
-
- AbstractNode guiRoot = new GUINode(gui);
- guiRoot.setName("Gui");
- this.mgr.setRootContext(guiRoot);
- this.beanTreeView.updateUI();
- mgr.addPropertyChangeListener(this);
- this.mgr.setSelectedNodes(new Node[]{guiRoot});
- Lookup lookup1 = ExplorerUtils.createLookup(mgr, getActionMap());
- lookup = new ProxyLookup(lookup1);
-
- }
-}
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package com.jme3.gde.gui;
+
+import com.jme3.gde.gui.nodes.GElementNode;
+import com.jme3.gde.gui.nodes.GUINode;
+import jada.ngeditor.controller.CommandProcessor;
+import jada.ngeditor.controller.GUIEditor;
+import jada.ngeditor.controller.commands.SelectCommand;
+import jada.ngeditor.listeners.events.SelectionChanged;
+import jada.ngeditor.model.GUI;
+import jada.ngeditor.model.GuiEditorModel;
+import jada.ngeditor.model.elements.GElement;
+import java.awt.BorderLayout;
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+import java.beans.PropertyVetoException;
+import java.util.ArrayList;
+import java.util.Observable;
+import java.util.Observer;
+import javax.swing.JComponent;
+import org.netbeans.spi.navigator.NavigatorPanel;
+import org.openide.explorer.ExplorerManager;
+import org.openide.explorer.ExplorerUtils;
+import org.openide.explorer.view.BeanTreeView;
+import org.openide.nodes.AbstractNode;
+import org.openide.nodes.Node;
+import org.openide.util.Exceptions;
+import org.openide.util.Lookup;
+import org.openide.util.lookup.ProxyLookup;
+
+/**
+ *
+ * @author cris
+ */
+@NavigatorPanel.Registration(mimeType = "text/x-niftygui+xml", displayName="Gui View")
+public class Navigator extends javax.swing.JPanel implements NavigatorPanel,ExplorerManager.Provider , Observer, PropertyChangeListener{
+ private Lookup lookup;
+ private ExplorerManager mgr = new ExplorerManager();
+ private final BeanTreeView beanTreeView;
+ /**
+ * Creates new form Navigator
+ */
+ public Navigator() {
+ initComponents();
+ setLayout(new BorderLayout());
+ beanTreeView = new BeanTreeView();
+ add(beanTreeView, BorderLayout.CENTER);
+ final GuiEditorModel model = (GuiEditorModel) CommandProcessor.getInstance().getObservable();
+ model.addObserver(this);
+ if(model.getCurrent() != null){
+ try {
+ this.intNavigator(model.getCurrent());
+ } catch (PropertyVetoException ex) {
+ Exceptions.printStackTrace(ex);
+ }
+ }
+
+
+ }
+
+ /**
+ * This method is called from within the constructor to initialize the form.
+ * WARNING: Do NOT modify this code. The content of this method is always
+ * regenerated by the Form Editor.
+ */
+ @SuppressWarnings("unchecked")
+ // //GEN-BEGIN:initComponents
+ private void initComponents() {
+
+ javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
+ this.setLayout(layout);
+ layout.setHorizontalGroup(
+ layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addGap(0, 244, Short.MAX_VALUE)
+ );
+ layout.setVerticalGroup(
+ layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addGap(0, 274, Short.MAX_VALUE)
+ );
+ }// //GEN-END:initComponents
+ // Variables declaration - do not modify//GEN-BEGIN:variables
+ // End of variables declaration//GEN-END:variables
+
+ @Override
+ public String getDisplayName() {
+ return "GuiView";
+ }
+
+ @Override
+ public String getDisplayHint() {
+ return "Easy view for your gui";
+ }
+
+ @Override
+ public JComponent getComponent() {
+ return this;
+ }
+
+ @Override
+ public void panelActivated(Lookup context) {
+
+ }
+
+ @Override
+ public void panelDeactivated() {
+ ExplorerUtils.activateActions(mgr, false);
+ }
+
+ @Override
+ public Lookup getLookup() {
+ return lookup;
+ }
+
+ @Override
+ public ExplorerManager getExplorerManager() {
+ return mgr;
+ }
+
+ @Override
+ 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);
+ }
+ }
+
+ if(arg instanceof SelectionChanged){
+ SelectionChanged event = (SelectionChanged) arg;
+ if(event.getNewSelection().isEmpty()){
+ return;
+ }
+ ArrayList path = new ArrayList();
+ GElement parent = ((SelectionChanged)arg).getElement();
+ while(parent!=null){
+ path.add(parent.getID());
+ parent = parent.getParent();
+ }
+ Node result = mgr.getRootContext();
+ for(int i=path.size()-1;i>=0;i--){
+ result = result.getChildren().findChild(path.get(i));
+ }
+ try {
+ mgr.setSelectedNodes(new Node[]{result});
+ } catch (PropertyVetoException ex) {
+ Exceptions.printStackTrace(ex);
+ }
+ }
+ beanTreeView.updateUI();
+ }
+
+ @Override
+ public void propertyChange(PropertyChangeEvent evt) {
+ if (evt.getPropertyName().equals(ExplorerManager.PROP_SELECTED_NODES)) {
+ Node[] newValue = (Node[]) evt.getNewValue();
+ if (newValue.length > 0) {
+ AbstractNode firstSelected = (AbstractNode) newValue[0];
+ if (firstSelected instanceof GElementNode) {
+ GElement element = ((GElementNode) firstSelected).getGelement();
+ GUI gui = ((GUINode)mgr.getRootContext()).getGui();
+ 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 {
+ CommandProcessor.getInstance().excuteCommand(command);
+ } catch (Exception ex) {
+ Exceptions.printStackTrace(ex);
+ }
+ gui.getSelection().addObserver(this);
+
+ }
+ }
+ }
+ }
+
+
+ private void intNavigator(GUI gui) throws PropertyVetoException {
+
+
+ ExplorerUtils.activateActions(mgr, true);
+
+
+ AbstractNode guiRoot = new GUINode(gui);
+ guiRoot.setName("Gui");
+ this.mgr.setRootContext(guiRoot);
+ this.beanTreeView.updateUI();
+ mgr.addPropertyChangeListener(this);
+ this.mgr.setSelectedNodes(new Node[]{guiRoot});
+ Lookup lookup1 = ExplorerUtils.createLookup(mgr, getActionMap());
+ lookup = new ProxyLookup(lookup1);
+
+ }
+}
diff --git a/sdk/jme3-gui/src/com/jme3/gde/gui/NiftyGuiVisualElement.java b/sdk/jme3-gui/src/com/jme3/gde/gui/NiftyGuiVisualElement.java
index 57fc4be2b..09721e625 100644
--- a/sdk/jme3-gui/src/com/jme3/gde/gui/NiftyGuiVisualElement.java
+++ b/sdk/jme3-gui/src/com/jme3/gde/gui/NiftyGuiVisualElement.java
@@ -1,335 +1,334 @@
-/*
- * To change this template, choose Tools | Templates
- * and open the template in the editor.
- */
-package com.jme3.gde.gui;
-
-import com.jme3.gde.core.assets.ProjectAssetManager;
-import com.jme3.gde.gui.nodes.GUINode;
-import de.lessvoid.nifty.Nifty;
-import jada.ngeditor.controller.CommandProcessor;
-import jada.ngeditor.controller.GUIEditor;
-import jada.ngeditor.guiviews.DND.PaletteDropTarget;
-import jada.ngeditor.guiviews.DND.TrasferHandling;
-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.GLayer;
-import jada.ngeditor.model.exception.NoProductException;
-import java.awt.Dimension;
-import java.awt.event.ItemEvent;
-import java.awt.event.ItemListener;
-import java.beans.PropertyChangeEvent;
-import java.beans.PropertyChangeListener;
-import java.beans.PropertyVetoException;
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Observable;
-import java.util.Observer;
-import javax.swing.Action;
-import javax.swing.ActionMap;
-import javax.swing.DefaultComboBoxModel;
-import javax.swing.JComboBox;
-import javax.swing.JComponent;
-import javax.swing.JLabel;
-import javax.swing.JPanel;
-import javax.swing.JToolBar;
-import javax.xml.bind.JAXBException;
-import javax.xml.parsers.ParserConfigurationException;
-import org.netbeans.api.progress.ProgressHandle;
-import org.netbeans.api.progress.ProgressHandleFactory;
-import org.netbeans.core.spi.multiview.CloseOperationState;
-import org.netbeans.core.spi.multiview.MultiViewElement;
-import org.netbeans.core.spi.multiview.MultiViewElementCallback;
-import org.openide.awt.UndoRedo;
-import org.openide.explorer.ExplorerManager;
-import org.openide.explorer.ExplorerUtils;
-import org.openide.loaders.DataObject;
-import org.openide.nodes.Node;
-import org.openide.util.Exceptions;
-import org.openide.util.Lookup;
-import org.openide.util.NbBundle.Messages;
-import org.openide.windows.TopComponent;
-import org.xml.sax.SAXException;
-import sun.rmi.runtime.Log;
-
-@MultiViewElement.Registration(
- displayName = "#LBL_NiftyGui_VISUAL",
- iconBase = "com/jme3/gde/gui/Computer_File_043.gif",
- mimeType = "text/x-niftygui+xml",
- persistenceType = TopComponent.PERSISTENCE_NEVER,
- preferredID = "NiftyGuiVisual",
- position = 2000)
-@Messages("LBL_NiftyGui_VISUAL=Visual")
-public final class NiftyGuiVisualElement extends JPanel implements MultiViewElement , ExplorerManager.Provider,Observer, PropertyChangeListener {
-
- private NiftyGuiDataObject obj;
- private JToolBar toolbar = new JToolBar();
- private transient MultiViewElementCallback callback;
- private GUIEditor editor;
- private final Nifty nifty;
- private final J2DNiftyView view;
- private final JComboBox layers = new JComboBox();
- private final ExplorerManager nodesManager;
- private final UndoRedo.Manager undoSupport;
- private int guiID;
-
-
- public NiftyGuiVisualElement(Lookup lkp) {
- obj = lkp.lookup(NiftyGuiDataObject.class);
- assert obj != null;
- initComponents();
- view = new J2DNiftyView(800, 600);
- view.init();
- this.scrollArea.getViewport().addChangeListener(view);
- this.scrollArea.setViewportView(view);
- TrasferHandling tranf = new TrasferHandling();
- PaletteDropTarget tmp = new PaletteDropTarget();
- editor = obj.getLookup().lookup(GUIEditor.class);
- nodesManager = new ExplorerManager();
- nifty = view.getNifty();
- view.setTransferHandler(tranf);
- view.setDropTarget(tmp);
- // editor.addObserver(view);
- // editor.addObserver(tranf);
- this.obj.addPropertyChangeListener(this);
- this.createToolbar();
- this.undoSupport = new UndoRedo.Manager();
- CommandProcessor.getInstance().setUndoManager(undoSupport);
- }
- /**
- * Old code
- * @author normenhansen
- */
- private void createToolbar() {
- toolbar.setPreferredSize(new Dimension(10000, 24));
- toolbar.setMaximumSize(new Dimension(10000, 24));
- toolbar.setFloatable(false);
- toolbar.add(new JLabel("Change Resolution"));
- JComboBox comboBox = new JComboBox(new String[]{"640x480", "480x800", "800x480", "800x600", "1024x768", "1280x720"});
- comboBox.addItemListener(new ItemListener() {
-
- public void itemStateChanged(ItemEvent e) {
- String string = (String) e.getItem();
- if ("640x480".equals(string)) {
- view.setResoltion(640, 480);
- } else if ("1024x768".equals(string)) {
- view.setResoltion(1024, 768);
- } else if ("1280x720".equals(string)) {
- view.setResoltion(1280, 720);
- } else if ("800x600".equals(string)) {
- view.setResoltion(800, 600);
- } else if ("800x480".equals(string)) {
- view.setResoltion(800, 480);
- } else if ("480x800".equals(string)) {
- view.setResoltion(480, 800);
- } else {
- view.setResoltion(800, 600);
- }
- }
- });
- toolbar.add(comboBox);
- comboBox.setSelectedItem("800x600");
- toolbar.add(new JLabel("Current Layer"));
- layers.addItemListener(new ItemListener() {
-
- public void itemStateChanged(ItemEvent e) {
- GLayer item = (GLayer) e.getItem();
- editor.selectElement(item);
- }
- });
- toolbar.add(layers);
- }
- @Override
- public String getName() {
- return "NiftyGuiVisualElement";
- }
-
- /**
- * This method is called from within the constructor to initialize the form.
- * WARNING: Do NOT modify this code. The content of this method is always
- * regenerated by the Form Editor.
- */
- // //GEN-BEGIN:initComponents
- private void initComponents() {
-
- scrollArea = new javax.swing.JScrollPane();
-
- setLayout(new java.awt.BorderLayout());
- add(scrollArea, java.awt.BorderLayout.CENTER);
- }// //GEN-END:initComponents
-
- // Variables declaration - do not modify//GEN-BEGIN:variables
- private javax.swing.JScrollPane scrollArea;
- // End of variables declaration//GEN-END:variables
- @Override
- public JComponent getVisualRepresentation() {
- return this;
- }
-
- @Override
- public JComponent getToolbarRepresentation() {
- return toolbar;
- }
-
- @Override
- public Action[] getActions() {
- return new Action[0];
- }
-
- @Override
- public Lookup getLookup() {
- return ExplorerUtils.createLookup(nodesManager, new ActionMap());
- }
- /**
- * Raw implementation , just to prototype the editor
- */
- @Override
- public void componentOpened() {
- loadGui();
- }
-
- @Override
- public void componentClosed() {
-
- }
- /**
- * Raw implementation , just to prototype the editor
- */
- @Override
- public void componentShowing() {
- if(!this.obj.isModified()){
- return;
- }
- loadGui();
-
- }
- /**
- * Raw implementation , just to prototype the editor
- */
- @Override
- public void componentHidden() {
- String path = this.obj.getPrimaryFile().getPath();
- try {
- this.editor.saveGui(path);
- } catch (FileNotFoundException ex) {
- Exceptions.printStackTrace(ex);
- } catch (JAXBException ex) {
- Exceptions.printStackTrace(ex);
- } catch (NullPointerException ex){
- Exceptions.printStackTrace(ex);
- }
- }
-
- @Override
- public void componentActivated() {
- GuiEditorModel model = (GuiEditorModel) CommandProcessor.getInstance().getObservable();
- model.setCurrentGUI(guiID);
- CommandProcessor.getInstance().setUndoManager(undoSupport);
- }
-
- @Override
- public void componentDeactivated() {
- }
-
- @Override
- public UndoRedo getUndoRedo() {
- return this.undoSupport;
- }
-
- @Override
- public void setMultiViewCallback(MultiViewElementCallback callback) {
- this.callback = callback;
- }
-
- @Override
- public CloseOperationState canCloseElement() {
- return CloseOperationState.STATE_OK;
- }
-
- @Override
- public ExplorerManager getExplorerManager() {
- return nodesManager;
- }
-
- @Override
- public void update(Observable o, Object arg) {
- if(arg instanceof SelectionChanged ){
- SelectionChanged event = (SelectionChanged) arg;
- if(event.getNewSelection().isEmpty()){
- return;
- }
- ArrayList path = new ArrayList();
- GElement parent = event.getElement();
- while(parent!=null){
- path.add(parent.getID());
- parent = parent.getParent();
- }
-
- Node result = nodesManager.getRootContext();
-
- for(int i=path.size()-1;i>=0 && result!=null;i--){
- result = result.getChildren().findChild(path.get(i));
- }
- try {
- if(result!=null){
- nodesManager.setSelectedNodes(new Node[]{result});
- }
- } catch (PropertyVetoException ex) {
- Exceptions.printStackTrace(ex);
- }
- }
- }
-
- @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 layers1 = this.editor.getGui().getLayers();
- guiID = this.editor.getGui().getGUIid();
- DefaultComboBoxModel model = new DefaultComboBoxModel(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);
- }
- }
-}
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package com.jme3.gde.gui;
+
+import com.jme3.app.Application;
+import com.jme3.gde.core.assets.ProjectAssetManager;
+import com.jme3.gde.gui.nodes.GElementNode;
+import com.jme3.gde.gui.nodes.GUINode;
+import de.lessvoid.nifty.Nifty;
+import jada.ngeditor.controller.CommandProcessor;
+import jada.ngeditor.controller.GUIEditor;
+import jada.ngeditor.guiviews.DND.PaletteDropTarget;
+import jada.ngeditor.guiviews.DND.TrasferHandling;
+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.GLayer;
+import jada.ngeditor.model.exception.NoProductException;
+import java.awt.Dimension;
+import java.awt.event.ItemEvent;
+import java.awt.event.ItemListener;
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+import java.beans.PropertyVetoException;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Observable;
+import java.util.Observer;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.swing.Action;
+import javax.swing.ActionMap;
+import javax.swing.DefaultComboBoxModel;
+import javax.swing.JComboBox;
+import javax.swing.JComponent;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JToolBar;
+import javax.xml.bind.JAXBException;
+import javax.xml.parsers.ParserConfigurationException;
+import org.netbeans.api.progress.ProgressHandle;
+import org.netbeans.api.progress.ProgressHandleFactory;
+import org.netbeans.core.spi.multiview.CloseOperationState;
+import org.netbeans.core.spi.multiview.MultiViewElement;
+import org.netbeans.core.spi.multiview.MultiViewElementCallback;
+import org.openide.awt.UndoRedo;
+import org.openide.explorer.ExplorerManager;
+import org.openide.explorer.ExplorerUtils;
+import org.openide.loaders.DataObject;
+import org.openide.nodes.Node;
+import org.openide.util.Exceptions;
+import org.openide.util.Lookup;
+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.xml.sax.SAXException;
+import sun.rmi.runtime.Log;
+
+@MultiViewElement.Registration(
+ displayName = "#LBL_NiftyGui_VISUAL",
+ iconBase = "com/jme3/gde/gui/Computer_File_043.gif",
+ mimeType = "text/x-niftygui+xml",
+ persistenceType = TopComponent.PERSISTENCE_NEVER,
+ preferredID = "NiftyGuiVisual",
+ position = 2000)
+@Messages("LBL_NiftyGui_VISUAL=Visual")
+public final class NiftyGuiVisualElement extends JPanel implements MultiViewElement , ExplorerManager.Provider,Observer, PropertyChangeListener {
+ private static final Logger logger = Logger.getLogger(NiftyGuiVisualElement.class.getName());
+ private NiftyGuiDataObject obj;
+ private JToolBar toolbar = new JToolBar();
+ private transient MultiViewElementCallback callback;
+ private GUIEditor editor;
+ private final Nifty nifty;
+ private final J2DNiftyView view;
+ private final JComboBox layers = new JComboBox();
+ private final ExplorerManager nodesManager;
+ private final UndoRedo.Manager undoSupport;
+ private int guiID;
+ private final InstanceContent content = new InstanceContent();
+ private Lookup lookup;
+
+ public NiftyGuiVisualElement(Lookup lkp) {
+ obj = lkp.lookup(NiftyGuiDataObject.class);
+ assert obj != null;
+ initComponents();
+ view = new J2DNiftyView(800, 600);
+ view.init();
+ this.scrollArea.getViewport().addChangeListener(view);
+ this.scrollArea.setViewportView(view);
+ TrasferHandling tranf = new TrasferHandling();
+ PaletteDropTarget tmp = new PaletteDropTarget();
+ editor = obj.getLookup().lookup(GUIEditor.class);
+ nodesManager = new ExplorerManager();
+ nifty = view.getNifty();
+ view.setTransferHandler(tranf);
+ view.setDropTarget(tmp);
+ // editor.addObserver(view);
+ // editor.addObserver(tranf);
+ this.obj.addPropertyChangeListener(this);
+ this.createToolbar();
+ this.undoSupport = new UndoRedo.Manager();
+ CommandProcessor.getInstance().setUndoManager(undoSupport);
+ this.content.set(Collections.singleton(obj.getNodeDelegate()), null);
+ lookup = new AbstractLookup(content);
+ }
+ /**
+ * Old code
+ * @author normenhansen
+ */
+ private void createToolbar() {
+ toolbar.setPreferredSize(new Dimension(10000, 24));
+ toolbar.setMaximumSize(new Dimension(10000, 24));
+ toolbar.setFloatable(false);
+ toolbar.add(new JLabel("Change Resolution"));
+ JComboBox comboBox = new JComboBox(new String[]{"640x480", "480x800", "800x480", "800x600", "1024x768", "1280x720"});
+ comboBox.addItemListener(new ItemListener() {
+
+ public void itemStateChanged(ItemEvent e) {
+ String string = (String) e.getItem();
+ if ("640x480".equals(string)) {
+ view.setResoltion(640, 480);
+ } else if ("1024x768".equals(string)) {
+ view.setResoltion(1024, 768);
+ } else if ("1280x720".equals(string)) {
+ view.setResoltion(1280, 720);
+ } else if ("800x600".equals(string)) {
+ view.setResoltion(800, 600);
+ } else if ("800x480".equals(string)) {
+ view.setResoltion(800, 480);
+ } else if ("480x800".equals(string)) {
+ view.setResoltion(480, 800);
+ } else {
+ view.setResoltion(800, 600);
+ }
+ }
+ });
+ toolbar.add(comboBox);
+ comboBox.setSelectedItem("800x600");
+ toolbar.add(new JLabel("Current Layer"));
+ layers.addItemListener(new ItemListener() {
+
+ public void itemStateChanged(ItemEvent e) {
+ GLayer item = (GLayer) e.getItem();
+ editor.selectElement(item);
+ }
+ });
+ toolbar.add(layers);
+ }
+ @Override
+ public String getName() {
+ return "NiftyGuiVisualElement";
+ }
+
+ /**
+ * This method is called from within the constructor to initialize the form.
+ * WARNING: Do NOT modify this code. The content of this method is always
+ * regenerated by the Form Editor.
+ */
+ // //GEN-BEGIN:initComponents
+ private void initComponents() {
+
+ scrollArea = new javax.swing.JScrollPane();
+
+ setLayout(new java.awt.BorderLayout());
+ add(scrollArea, java.awt.BorderLayout.CENTER);
+ }// //GEN-END:initComponents
+
+ // Variables declaration - do not modify//GEN-BEGIN:variables
+ private javax.swing.JScrollPane scrollArea;
+ // End of variables declaration//GEN-END:variables
+ @Override
+ public JComponent getVisualRepresentation() {
+ return this;
+ }
+
+ @Override
+ public JComponent getToolbarRepresentation() {
+ return toolbar;
+ }
+
+ @Override
+ public Action[] getActions() {
+ return new Action[0];
+ }
+
+ @Override
+ public Lookup getLookup() {
+ return this.lookup ;
+ }
+ /**
+ * Raw implementation , just to prototype the editor
+ */
+ @Override
+ public void componentOpened() {
+ loadGui();
+ }
+
+ @Override
+ public void componentClosed() {
+
+ }
+ /**
+ * Raw implementation , just to prototype the editor
+ */
+ @Override
+ public void componentShowing() {
+ if(!this.obj.isModified()){
+ return;
+ }
+ loadGui();
+
+ }
+ /**
+ * Raw implementation , just to prototype the editor
+ */
+ @Override
+ public void componentHidden() {
+ String path = this.obj.getPrimaryFile().getPath();
+ try {
+ this.editor.saveGui(path);
+ } catch (FileNotFoundException ex) {
+ Exceptions.printStackTrace(ex);
+ } catch (JAXBException ex) {
+ Exceptions.printStackTrace(ex);
+ } catch (NullPointerException ex){
+ Exceptions.printStackTrace(ex);
+ }
+ }
+
+ @Override
+ public void componentActivated() {
+ try{
+ GuiEditorModel model = (GuiEditorModel) CommandProcessor.getInstance().getObservable();
+ model.setCurrentGUI(guiID);
+ CommandProcessor.getInstance().setUndoManager(undoSupport);
+ }catch(java.lang.IllegalArgumentException ex){
+ logger.log(Level.SEVERE,"Can't load your gui", ex);
+ }
+ }
+
+ @Override
+ public void componentDeactivated() {
+ }
+
+ @Override
+ public UndoRedo getUndoRedo() {
+ return this.undoSupport;
+ }
+
+ @Override
+ public void setMultiViewCallback(MultiViewElementCallback callback) {
+ this.callback = callback;
+ }
+
+ @Override
+ public CloseOperationState canCloseElement() {
+ return CloseOperationState.STATE_OK;
+ }
+
+ @Override
+ public ExplorerManager getExplorerManager() {
+ return nodesManager;
+ }
+
+ @Override
+ public void update(Observable o, Object arg) {
+ if(arg instanceof SelectionChanged ){
+ SelectionChanged event = (SelectionChanged) arg;
+ if(event.getNewSelection().isEmpty()){
+ return;
+ }
+ GElement parent = event.getElement();
+ GElementNode node = new GElementNode(parent);
+ this.content.set(Collections.singleton(node), null);
+ }
+ }
+
+ @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 layers1 = this.editor.getGui().getLayers();
+ guiID = this.editor.getGui().getGUIid();
+ DefaultComboBoxModel model = new DefaultComboBoxModel(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);
+ }
+ }
+}
diff --git a/sdk/jme3-gui/src/com/jme3/gde/gui/nodes/GElementNode.java b/sdk/jme3-gui/src/com/jme3/gde/gui/nodes/GElementNode.java
index 277a4c717..ae4e0158a 100644
--- a/sdk/jme3-gui/src/com/jme3/gde/gui/nodes/GElementNode.java
+++ b/sdk/jme3-gui/src/com/jme3/gde/gui/nodes/GElementNode.java
@@ -1,117 +1,128 @@
-/*
- * To change this template, choose Tools | Templates
- * and open the template in the editor.
- */
-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 java.beans.PropertyEditor;
-import java.lang.reflect.InvocationTargetException;
-import java.util.Map.Entry;
-import org.openide.nodes.AbstractNode;
-import org.openide.nodes.Children;
-import org.openide.nodes.Node;
-import org.openide.nodes.Sheet;
-import sun.beans.editors.BoolEditor;
-import sun.beans.editors.BooleanEditor;
-
-/**
- *
- * @author cris
- */
-public class GElementNode extends AbstractNode{
- private final GElement element;
-
- public GElementNode(GElement element) {
- super(Children.create(new GElementChildFactory(element), false));
-
- this.element = element;
- this.setName(element.getID());
-
- }
-
- public GElement getGelement(){
- return element;
- }
-
- public void updateChildren(){
-
- }
- @Override
- protected Sheet createSheet() {
- Sheet s = super.createSheet();
- Sheet.Set set = s.get(Sheet.PROPERTIES);
- if (set == null) {
- set = Sheet.createPropertiesSet();
- s.put(set);
- }
- set.setName("Element Properties");
- set.setShortDescription("You can set element properties");
- for(Entry pair : this.element.listAttributes().entrySet()){
- final ElementAttributeProperty elementAttributeProperty = new ElementAttributeProperty(element,pair.getKey());
- pickEditor(pair, elementAttributeProperty);
- set.put(elementAttributeProperty);
- }
- s.put(set);
- return s;
- }
-
- private void pickEditor(Entry 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 {
-
- private String attributeName;
- private GElement element;
- private PropertyEditor editor;
-
- public ElementAttributeProperty(GElement element, String attributeName) {
- super(String.class);
- this.element = element;
- this.attributeName = attributeName;
- this.setName(attributeName);
- this.setDisplayName(attributeName);
-
- }
-
- @Override
- public boolean canRead() {
- return true;
- }
-
- @Override
- public String getValue() throws IllegalAccessException, InvocationTargetException{
- return element.getAttribute(attributeName);
- }
-
- @Override
- public boolean canWrite() {
- return true;
- }
-
- public void setPropertyEditor(PropertyEditor editor){
- this.editor = editor;
- }
- @Override
- public PropertyEditor getPropertyEditor() {
-
- return this.editor; //To change body of generated methods, choose Tools | Templates.
- }
-
-
-
- @Override
- public void setValue(Object val) throws IllegalAccessException, IllegalArgumentException {
- element.addAttribute(attributeName, val.toString());
- element.refresh();
- }
- };
-}
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package com.jme3.gde.gui.nodes;
+
+import com.jme3.gde.gui.propertyeditors.ResourceEditor;
+import com.jme3.gde.gui.propertyeditors.SizeEditor;
+import jada.ngeditor.controller.CommandProcessor;
+import jada.ngeditor.controller.commands.EditAttributeCommand;
+import jada.ngeditor.model.elements.GElement;
+import java.beans.PropertyEditor;
+import java.lang.reflect.InvocationTargetException;
+import java.util.Map.Entry;
+import javax.swing.JOptionPane;
+import org.openide.nodes.AbstractNode;
+import org.openide.nodes.Children;
+import org.openide.nodes.Node;
+import org.openide.nodes.Sheet;
+import org.openide.util.Exceptions;
+import sun.beans.editors.BoolEditor;
+import sun.beans.editors.BooleanEditor;
+
+/**
+ *
+ * @author cris
+ */
+public class GElementNode extends AbstractNode{
+ private final GElement element;
+
+ public GElementNode(GElement element) {
+ super(Children.create(new GElementChildFactory(element), false));
+
+ this.element = element;
+ this.setName(element.getID());
+
+ }
+
+ public GElement getGelement(){
+ return element;
+ }
+
+ public void updateChildren(){
+
+ }
+ @Override
+ protected Sheet createSheet() {
+ Sheet s = super.createSheet();
+ Sheet.Set set = s.get(Sheet.PROPERTIES);
+ if (set == null) {
+ set = Sheet.createPropertiesSet();
+ s.put(set);
+ }
+ set.setName("Element Properties");
+ set.setShortDescription("You can set element properties");
+ for(Entry pair : this.element.listAttributes().entrySet()){
+ final ElementAttributeProperty elementAttributeProperty = new ElementAttributeProperty(element,pair.getKey());
+ pickEditor(pair, elementAttributeProperty);
+ set.put(elementAttributeProperty);
+ }
+ s.put(set);
+ return s;
+ }
+
+ private void pickEditor(Entry 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 {
+
+ private String attributeName;
+ private GElement element;
+ private PropertyEditor editor;
+
+ public ElementAttributeProperty(GElement element, String attributeName) {
+ super(String.class);
+ this.element = element;
+ this.attributeName = attributeName;
+ this.setName(attributeName);
+ this.setDisplayName(attributeName);
+
+ }
+
+ @Override
+ public boolean canRead() {
+ return true;
+ }
+
+ @Override
+ public String getValue() throws IllegalAccessException, InvocationTargetException{
+ return element.getAttribute(attributeName);
+ }
+
+ @Override
+ public boolean canWrite() {
+ return true;
+ }
+
+ public void setPropertyEditor(PropertyEditor editor){
+ this.editor = editor;
+ }
+ @Override
+ public PropertyEditor getPropertyEditor() {
+
+ return this.editor; //To change body of generated methods, choose Tools | Templates.
+ }
+
+
+
+ @Override
+ public void setValue(Object val) throws IllegalAccessException, IllegalArgumentException {
+ try {
+ EditAttributeCommand command = CommandProcessor.getInstance().getCommand(EditAttributeCommand.class);
+ command.setAttribute(attributeName);
+ command.setValue(val.toString());
+ CommandProcessor.getInstance().excuteCommand(command);
+ } catch (Exception ex) {
+ JOptionPane.showMessageDialog(null, ex);
+ }
+
+ }
+ };
+}