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 dde003d51..c45206724 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/EmptyNiftyGui.xml b/sdk/jme3-gui/src/com/jme3/gde/gui/EmptyNiftyGui.xml index 1a2083b11..4627e7ff5 100644 --- a/sdk/jme3-gui/src/com/jme3/gde/gui/EmptyNiftyGui.xml +++ b/sdk/jme3-gui/src/com/jme3/gde/gui/EmptyNiftyGui.xml @@ -1,10 +1,10 @@ - - - - - - - - - + + + + + + + + + \ No newline at end of file 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 a136c4e14..3198fee98 100644 --- a/sdk/jme3-gui/src/com/jme3/gde/gui/Navigator.java +++ b/sdk/jme3-gui/src/com/jme3/gde/gui/Navigator.java @@ -1,191 +1,202 @@ -/* - * 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.ScreenChildFactory; -import jada.ngeditor.controller.GUIEditor; -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, LookupListener{ - 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); - - } - - /** - * 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) { - try { - this.context = context; - context.lookupResult(NiftyGuiDataObject.class).addLookupListener(this); - intNavigator(context); - } catch (PropertyVetoException ex) { - Exceptions.printStackTrace(ex); - } - } - - @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) { - - jada.ngeditor.listeners.actions.Action act = ( jada.ngeditor.listeners.actions.Action) arg; - if(act.getType() == jada.ngeditor.listeners.actions.Action.SEL){ - ArrayList path = new ArrayList(); - GElement parent = act.getGUIElement(); - 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); - } - }else if(act.getType() == jada.ngeditor.listeners.actions.Action.NEW){ - try { - this.intNavigator(context); - } 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(); - - editor.selectElement(element); - - } - } - } - } - - @Override - public void resultChanged(LookupEvent ev) { - try { - intNavigator(context); - } catch (PropertyVetoException ex) { - Exceptions.printStackTrace(ex); - } - } - - private void intNavigator(Lookup context) throws PropertyVetoException { - - NiftyGuiDataObject man = context.lookup(NiftyGuiDataObject.class); - ExplorerUtils.activateActions(mgr, true); - editor = man.getLookup().lookup(GUIEditor.class); - AbstractNode guiRoot = new AbstractNode(Children.create(new ScreenChildFactory(editor.getGui()), true)); - 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); - editor.addObserver(this); - } -} +/* + * 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); + + } +} diff --git a/sdk/jme3-gui/src/com/jme3/gde/gui/NiftyGuiDataObject.java b/sdk/jme3-gui/src/com/jme3/gde/gui/NiftyGuiDataObject.java index 55a8ad448..35c97ba72 100644 --- a/sdk/jme3-gui/src/com/jme3/gde/gui/NiftyGuiDataObject.java +++ b/sdk/jme3-gui/src/com/jme3/gde/gui/NiftyGuiDataObject.java @@ -1,148 +1,149 @@ -/* - * 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 jada.ngeditor.controller.GUIEditor; -import java.io.IOException; -import org.netbeans.api.project.Project; -import org.netbeans.api.project.ProjectManager; -import org.netbeans.core.spi.multiview.MultiViewElement; -import org.netbeans.core.spi.multiview.text.MultiViewEditorElement; -import org.openide.awt.ActionID; -import org.openide.awt.ActionReference; -import org.openide.awt.ActionReferences; -import org.openide.filesystems.FileObject; -import org.openide.filesystems.MIMEResolver; -import org.openide.loaders.DataNode; -import org.openide.loaders.DataObject; -import org.openide.loaders.DataObjectExistsException; -import org.openide.loaders.MultiDataObject; -import org.openide.loaders.MultiFileLoader; -import org.openide.nodes.Children; -import org.openide.nodes.Node; -import org.openide.util.Lookup; -import org.openide.util.NbBundle.Messages; -import org.openide.windows.TopComponent; - -@Messages({ - "LBL_NiftyGui_LOADER=Files of NiftyGui" -}) -@MIMEResolver.Registration( - displayName = "#LBL_NiftyGui_LOADER", - resource = "NiftyGuiResolver.xml") -@DataObject.Registration( - mimeType = "text/x-niftygui+xml", - iconBase = "com/jme3/gde/gui/Computer_File_043.gif", - displayName = "#LBL_NiftyGui_LOADER", - position = 300) -@ActionReferences({ - @ActionReference( - path = "Loaders/text/x-niftygui+xml/Actions", - id = - @ActionID(category = "System", id = "org.openide.actions.OpenAction"), - position = 100, - separatorAfter = 200), - @ActionReference( - path = "Loaders/text/x-niftygui+xml/Actions", - id = - @ActionID(category = "Edit", id = "org.openide.actions.CutAction"), - position = 300), - @ActionReference( - path = "Loaders/text/x-niftygui+xml/Actions", - id = - @ActionID(category = "Edit", id = "org.openide.actions.CopyAction"), - position = 400, - separatorAfter = 500), - @ActionReference( - path = "Loaders/text/x-niftygui+xml/Actions", - id = - @ActionID(category = "Edit", id = "org.openide.actions.DeleteAction"), - position = 600), - @ActionReference( - path = "Loaders/text/x-niftygui+xml/Actions", - id = - @ActionID(category = "System", id = "org.openide.actions.RenameAction"), - position = 700, - separatorAfter = 800), - @ActionReference( - path = "Loaders/text/x-niftygui+xml/Actions", - id = - @ActionID(category = "System", id = "org.openide.actions.SaveAsTemplateAction"), - position = 900, - separatorAfter = 1000), - @ActionReference( - path = "Loaders/text/x-niftygui+xml/Actions", - id = - @ActionID(category = "System", id = "org.openide.actions.FileSystemAction"), - position = 1100, - separatorAfter = 1200), - @ActionReference( - path = "Loaders/text/x-niftygui+xml/Actions", - id = - @ActionID(category = "System", id = "org.openide.actions.ToolsAction"), - position = 1300), - @ActionReference( - path = "Loaders/text/x-niftygui+xml/Actions", - id = - @ActionID(category = "System", id = "org.openide.actions.PropertiesAction"), - position = 1400) -}) -public class NiftyGuiDataObject extends MultiDataObject { - - public NiftyGuiDataObject(FileObject pf, MultiFileLoader loader) throws DataObjectExistsException, IOException { - super(pf, loader); - registerEditor("text/x-niftygui+xml", true); - findAssetManager(); - this.getCookieSet().assign(GUIEditor.class,new GUIEditor()); - } - - protected final void findAssetManager() { - FileObject file = getPrimaryFile(); - ProjectManager pm = ProjectManager.getDefault(); - while (file != null) { - if (file.isFolder() && pm.isProject(file)) { - try { - Project project = ProjectManager.getDefault().findProject(file); - if (project != null) { - ProjectAssetManager mgr = project.getLookup().lookup(ProjectAssetManager.class); - if (mgr != null) { - this.getCookieSet().assign(mgr.getClass(),mgr); - return; - } - } - } catch (IOException ex) { - } catch (IllegalArgumentException ex) { - } - } - file = file.getParent(); - } - } - - @Override - protected Node createNodeDelegate() { - DataNode node = new DataNode(this, Children.LEAF, getLookup()); - node.setIconBaseWithExtension("com/jme3/gde/gui/Computer_File_043.gif"); - return node; - } - - @Override - protected int associateLookup() { - return 1; - } - - @MultiViewElement.Registration( - displayName = "#LBL_NiftyGui_EDITOR", - iconBase = "com/jme3/gde/gui/Computer_File_043.gif", - mimeType = "text/x-niftygui+xml", - persistenceType = TopComponent.PERSISTENCE_ONLY_OPENED, - preferredID = "NiftyGui", - position = 1000) - @Messages("LBL_NiftyGui_EDITOR=XML") - public static MultiViewEditorElement createEditor(Lookup lkp) { - final MultiViewEditorElement multiViewEditorElement = new MultiViewEditorElement(lkp); - return multiViewEditorElement; - } -} +/* + * 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 jada.ngeditor.controller.CommandProcessor; +import jada.ngeditor.controller.GUIEditor; +import java.io.IOException; +import org.netbeans.api.project.Project; +import org.netbeans.api.project.ProjectManager; +import org.netbeans.core.spi.multiview.MultiViewElement; +import org.netbeans.core.spi.multiview.text.MultiViewEditorElement; +import org.openide.awt.ActionID; +import org.openide.awt.ActionReference; +import org.openide.awt.ActionReferences; +import org.openide.filesystems.FileObject; +import org.openide.filesystems.MIMEResolver; +import org.openide.loaders.DataNode; +import org.openide.loaders.DataObject; +import org.openide.loaders.DataObjectExistsException; +import org.openide.loaders.MultiDataObject; +import org.openide.loaders.MultiFileLoader; +import org.openide.nodes.Children; +import org.openide.nodes.Node; +import org.openide.util.Lookup; +import org.openide.util.NbBundle.Messages; +import org.openide.windows.TopComponent; + +@Messages({ + "LBL_NiftyGui_LOADER=Files of NiftyGui" +}) +@MIMEResolver.Registration( + displayName = "#LBL_NiftyGui_LOADER", + resource = "NiftyGuiResolver.xml") +@DataObject.Registration( + mimeType = "text/x-niftygui+xml", + iconBase = "com/jme3/gde/gui/Computer_File_043.gif", + displayName = "#LBL_NiftyGui_LOADER", + position = 300) +@ActionReferences({ + @ActionReference( + path = "Loaders/text/x-niftygui+xml/Actions", + id = + @ActionID(category = "System", id = "org.openide.actions.OpenAction"), + position = 100, + separatorAfter = 200), + @ActionReference( + path = "Loaders/text/x-niftygui+xml/Actions", + id = + @ActionID(category = "Edit", id = "org.openide.actions.CutAction"), + position = 300), + @ActionReference( + path = "Loaders/text/x-niftygui+xml/Actions", + id = + @ActionID(category = "Edit", id = "org.openide.actions.CopyAction"), + position = 400, + separatorAfter = 500), + @ActionReference( + path = "Loaders/text/x-niftygui+xml/Actions", + id = + @ActionID(category = "Edit", id = "org.openide.actions.DeleteAction"), + position = 600), + @ActionReference( + path = "Loaders/text/x-niftygui+xml/Actions", + id = + @ActionID(category = "System", id = "org.openide.actions.RenameAction"), + position = 700, + separatorAfter = 800), + @ActionReference( + path = "Loaders/text/x-niftygui+xml/Actions", + id = + @ActionID(category = "System", id = "org.openide.actions.SaveAsTemplateAction"), + position = 900, + separatorAfter = 1000), + @ActionReference( + path = "Loaders/text/x-niftygui+xml/Actions", + id = + @ActionID(category = "System", id = "org.openide.actions.FileSystemAction"), + position = 1100, + separatorAfter = 1200), + @ActionReference( + path = "Loaders/text/x-niftygui+xml/Actions", + id = + @ActionID(category = "System", id = "org.openide.actions.ToolsAction"), + position = 1300), + @ActionReference( + path = "Loaders/text/x-niftygui+xml/Actions", + id = + @ActionID(category = "System", id = "org.openide.actions.PropertiesAction"), + position = 1400) +}) +public class NiftyGuiDataObject extends MultiDataObject { + + public NiftyGuiDataObject(FileObject pf, MultiFileLoader loader) throws DataObjectExistsException, IOException { + super(pf, loader); + registerEditor("text/x-niftygui+xml", true); + findAssetManager(); + this.getCookieSet().assign(GUIEditor.class, CommandProcessor.getInstance().getGuiEditor()); + } + + protected final void findAssetManager() { + FileObject file = getPrimaryFile(); + ProjectManager pm = ProjectManager.getDefault(); + while (file != null) { + if (file.isFolder() && pm.isProject(file)) { + try { + Project project = ProjectManager.getDefault().findProject(file); + if (project != null) { + ProjectAssetManager mgr = project.getLookup().lookup(ProjectAssetManager.class); + if (mgr != null) { + this.getCookieSet().assign(mgr.getClass(),mgr); + return; + } + } + } catch (IOException ex) { + } catch (IllegalArgumentException ex) { + } + } + file = file.getParent(); + } + } + + @Override + protected Node createNodeDelegate() { + DataNode node = new DataNode(this, Children.LEAF, getLookup()); + node.setIconBaseWithExtension("com/jme3/gde/gui/Computer_File_043.gif"); + return node; + } + + @Override + protected int associateLookup() { + return 1; + } + + @MultiViewElement.Registration( + displayName = "#LBL_NiftyGui_EDITOR", + iconBase = "com/jme3/gde/gui/Computer_File_043.gif", + mimeType = "text/x-niftygui+xml", + persistenceType = TopComponent.PERSISTENCE_ONLY_OPENED, + preferredID = "NiftyGui", + position = 1000) + @Messages("LBL_NiftyGui_EDITOR=XML") + public static MultiViewEditorElement createEditor(Lookup lkp) { + final MultiViewEditorElement multiViewEditorElement = new MultiViewEditorElement(lkp); + return multiViewEditorElement; + } +} 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 a1ff4ef20..57fc4be2b 100644 --- a/sdk/jme3-gui/src/com/jme3/gde/gui/NiftyGuiVisualElement.java +++ b/sdk/jme3-gui/src/com/jme3/gde/gui/NiftyGuiVisualElement.java @@ -1,332 +1,335 @@ -/* - * 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.core.scene.SceneApplication; -import com.jme3.gde.gui.nodes.GUINode; -import com.jme3.gde.gui.palette.NiftyGUIPaletteFactory; -import de.lessvoid.nifty.Nifty; -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.model.elements.GElement; -import jada.ngeditor.model.elements.GLayer; -import jada.ngeditor.model.exception.NoProductException; -import java.awt.Dimension; -import java.awt.dnd.DropTarget; -import java.awt.dnd.DropTargetDragEvent; -import java.awt.dnd.DropTargetDropEvent; -import java.awt.dnd.DropTargetEvent; -import java.awt.dnd.DropTargetListener; -import java.awt.event.ItemEvent; -import java.awt.event.ItemListener; -import java.beans.PropertyVetoException; -import java.io.File; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Observable; -import java.util.Observer; -import java.util.concurrent.Callable; -import javax.swing.Action; -import javax.swing.ActionMap; -import javax.swing.DefaultComboBoxModel; -import javax.swing.JComboBox; -import javax.swing.JComponent; -import javax.swing.JPanel; -import javax.swing.JToolBar; -import javax.swing.text.AbstractDocument; -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.DialogDisplayer; -import org.openide.NotifyDescriptor; -import org.openide.awt.UndoRedo; -import org.openide.explorer.ExplorerManager; -import org.openide.explorer.ExplorerUtils; -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; - -@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 { - - 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; - - - 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); - editor.addObserver(this); - nodesManager = new ExplorerManager(); - nifty = view.getNifty(); - view.setTransferHandler(tranf); - view.setDropTarget(tmp); - editor.addObserver(view); - editor.addObserver(tranf); - editor.addObserver(tmp); - this.createToolbar(); - } - /** - * Old code - * @author normenhansen - */ - private void createToolbar() { - toolbar.setPreferredSize(new Dimension(10000, 24)); - toolbar.setMaximumSize(new Dimension(10000, 24)); - toolbar.setFloatable(false); - 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"); - 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() { - try { - ProgressHandle handle = ProgressHandleFactory.createHandle("Loading the gui file"); - String path = this.obj.getPrimaryFile().getPath(); - ProjectAssetManager mgr = obj.getLookup().lookup(ProjectAssetManager.class); - String assetPath = mgr.getAssetFolder().getPath(); - handle.progress(50); - this.editor.createNewGui(nifty,new File(path),new File(assetPath)); - nodesManager.setRootContext(new GUINode(this.editor.getGui())); - Collection layers1 = this.editor.getGui().getLayers(); - 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); - } - } - - @Override - public void componentClosed() { - } - /** - * Raw implementation , just to prototype the editor - */ - @Override - public void componentShowing() { - try { - ProgressHandle handle = ProgressHandleFactory.createHandle("Loading the gui file"); - String path = this.obj.getPrimaryFile().getPath(); - ProjectAssetManager mgr = this.obj.getLookup().lookup(ProjectAssetManager.class); - String assetPath = mgr.getAssetFolder().getPath(); - this.editor.createNewGui(nifty,new File(path),new File(assetPath)); - nodesManager.setRootContext(new GUINode(this.editor.getGui())); - Collection layers1 = this.editor.getGui().getLayers(); - 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); - } - - } - /** - * 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); - } - } - - @Override - public void componentActivated() { - } - - @Override - public void componentDeactivated() { - } - - @Override - public UndoRedo getUndoRedo() { - return UndoRedo.NONE; - } - - @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) { - jada.ngeditor.listeners.actions.Action act = ( jada.ngeditor.listeners.actions.Action) arg; - if(act.getType() == jada.ngeditor.listeners.actions.Action.SEL){ - ArrayList path = new ArrayList(); - GElement parent = act.getGUIElement(); - 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); - } - } - } -} +/* + * 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); + } + } +} diff --git a/sdk/jme3-gui/src/com/jme3/gde/gui/layer.xml b/sdk/jme3-gui/src/com/jme3/gde/gui/layer.xml index 6c29c21a6..9bba55c07 100644 --- a/sdk/jme3-gui/src/com/jme3/gde/gui/layer.xml +++ b/sdk/jme3-gui/src/com/jme3/gde/gui/layer.xml @@ -1,10 +1,19 @@ - - - - - - - - - - + + + + + + + + + + + + + + + + + + + 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 9af3ef4af..277a4c717 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,97 +1,117 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ -package com.jme3.gde.gui.nodes; - -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; - -/** - * - * @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()){ - set.put(new ElementAttributeProperty(element,pair.getKey())); - } - s.put(set); - return s; - } - - public class ElementAttributeProperty extends Node.Property { - - private String attributeName; - private GElement element; - - 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; - } - - @Override - public PropertyEditor getPropertyEditor() { - return super.getPropertyEditor(); //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.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(); + } + }; +} diff --git a/sdk/jme3-gui/src/com/jme3/gde/gui/propertyeditors/ResourceEditor.java b/sdk/jme3-gui/src/com/jme3/gde/gui/propertyeditors/ResourceEditor.java new file mode 100644 index 000000000..805d4da7a --- /dev/null +++ b/sdk/jme3-gui/src/com/jme3/gde/gui/propertyeditors/ResourceEditor.java @@ -0,0 +1,71 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ +package com.jme3.gde.gui.propertyeditors; + +import jada.ngeditor.controller.CommandProcessor; +import jada.ngeditor.guiviews.editors.FileChooserEditor; +import jada.ngeditor.model.GuiEditorModel; +import java.awt.Component; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; +import java.beans.PropertyEditorSupport; +import java.io.File; +import java.util.Observable; +import java.util.Observer; +import javax.swing.JFileChooser; + +/** + * + * @author cris + */ +public class ResourceEditor extends PropertyEditorSupport implements Observer, ActionListener{ + private final FileChooserEditor fileChooserEditor; + private File assetFolder; + + + public ResourceEditor() { + CommandProcessor.getInstance().getObservable().addObserver(this); + + GuiEditorModel model = (GuiEditorModel) CommandProcessor.getInstance().getObservable(); + this.assetFolder = model.getCurrent().getAssetFolder(); + fileChooserEditor = new FileChooserEditor(this.assetFolder); + fileChooserEditor.getFileChooser().addActionListener(this); + } + + + @Override + public Component getCustomEditor() { + + return fileChooserEditor.getFileChooser(); //To change body of generated methods, choose Tools | Templates. + } + + @Override + public boolean supportsCustomEditor() { + return true; //To change body of generated methods, choose Tools | Templates. + } + + + + @Override + public void update(Observable o, Object arg) { + if(o instanceof GuiEditorModel){ + GuiEditorModel model = (GuiEditorModel) o; + this.assetFolder = model.getCurrent().getAssetFolder(); + } + } + + @Override + public void actionPerformed(ActionEvent e) { + if (JFileChooser.APPROVE_SELECTION.equals(e.getActionCommand())) { + this.setValue(fileChooserEditor.traslateFile()); + } + } + + + + +} diff --git a/sdk/jme3-gui/src/com/jme3/gde/gui/propertyeditors/SizeEditor.java b/sdk/jme3-gui/src/com/jme3/gde/gui/propertyeditors/SizeEditor.java new file mode 100644 index 000000000..2abcc6f7b --- /dev/null +++ b/sdk/jme3-gui/src/com/jme3/gde/gui/propertyeditors/SizeEditor.java @@ -0,0 +1,59 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ +package com.jme3.gde.gui.propertyeditors; + +import java.awt.Component; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; +import java.beans.PropertyEditorSupport; +import java.beans.PropertyVetoException; +import java.beans.VetoableChangeListener; +import javax.swing.JLabel; +import org.openide.explorer.propertysheet.ExPropertyEditor; +import org.openide.explorer.propertysheet.PropertyEnv; + +/** + * + * @author cris + */ +public class SizeEditor extends PropertyEditorSupport implements ExPropertyEditor, PropertyChangeListener{ + private PropertyEnv env; + + @Override + public void setAsText(String text) throws IllegalArgumentException { + super.setAsText(text); //To change body of generated methods, choose Tools | Templates. + } + + @Override + public String getAsText() { + return super.getAsText(); //To change body of generated methods, choose Tools | Templates. + } + + @Override + public Component getCustomEditor() { + jada.ngeditor.guiviews.editors.SizeEditor editor = new jada.ngeditor.guiviews.editors.SizeEditor(); + editor.setValue(this.getValue()); + editor.addPropertyChangeListener(this); + return editor.getComponent(); //To change body of generated methods, choose Tools | Templates. + } + + @Override + public boolean supportsCustomEditor() { + return true; //To change body of generated methods, choose Tools | Templates. + } + + @Override + public void attachEnv(PropertyEnv env) { + this.env = env; + } + + @Override + public void propertyChange(PropertyChangeEvent evt) { + this.setValue(evt.getNewValue()); + } + + + +}