Browse Source

Bug fixing

relu91 11 years ago
parent
commit
a581c9a8bd

+ 9 - 9
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

BIN
jme3-gui/release/modules/ext/Nifty-Editor0.5.9.jar


+ 200 - 202
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
- */
[email protected](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")
-    // <editor-fold defaultstate="collapsed" desc="Generated Code">//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)
-        );
-    }// </editor-fold>//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<String> path = new ArrayList<String>();
-           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
+ */
[email protected](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")
+    // <editor-fold defaultstate="collapsed" desc="Generated Code">//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)
+        );
+    }// </editor-fold>//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<String> path = new ArrayList<String>();
+           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);
+        
+    }
+}

+ 334 - 335
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;
-
[email protected](
-        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.
-     */
-    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
-    private void initComponents() {
-
-        scrollArea = new javax.swing.JScrollPane();
-
-        setLayout(new java.awt.BorderLayout());
-        add(scrollArea, java.awt.BorderLayout.CENTER);
-    }// </editor-fold>//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<String> path = new ArrayList<String>();
-           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<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);
-        }
-    }
-}
+/*
+ * 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;
+
[email protected](
+        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.
+     */
+    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
+    private void initComponents() {
+
+        scrollArea = new javax.swing.JScrollPane();
+
+        setLayout(new java.awt.BorderLayout());
+        add(scrollArea, java.awt.BorderLayout.CENTER);
+    }// </editor-fold>//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<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);
+        }
+    }
+}

+ 128 - 117
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<String,String> 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<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 {
-
-        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<String,String> 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<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 {
+
+        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);
+            }
+            
+        }
+    };
+}