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); + } + + } + }; +}