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

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

View File

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

View File

@ -1,191 +1,202 @@
/* /*
* To change this template, choose Tools | Templates * To change this template, choose Tools | Templates
* and open the template in the editor. * and open the template in the editor.
*/ */
package com.jme3.gde.gui; package com.jme3.gde.gui;
import com.jme3.gde.gui.nodes.GElementNode; import com.jme3.gde.gui.nodes.GElementNode;
import com.jme3.gde.gui.nodes.ScreenChildFactory; import com.jme3.gde.gui.nodes.GUINode;
import jada.ngeditor.controller.GUIEditor; import com.jme3.gde.gui.nodes.ScreenChildFactory;
import jada.ngeditor.model.elements.GElement; import jada.ngeditor.controller.CommandProcessor;
import java.awt.BorderLayout; import jada.ngeditor.controller.GUIEditor;
import java.beans.PropertyChangeEvent; import jada.ngeditor.controller.commands.SelectCommand;
import java.beans.PropertyChangeListener; import jada.ngeditor.listeners.events.ReloadGuiEvent;
import java.beans.PropertyVetoException; import jada.ngeditor.listeners.events.SelectionChanged;
import java.util.ArrayList; import jada.ngeditor.model.GUI;
import java.util.Observable; import jada.ngeditor.model.GuiEditorModel;
import java.util.Observer; import jada.ngeditor.model.elements.GElement;
import javax.swing.JComponent; import java.awt.BorderLayout;
import org.netbeans.spi.navigator.NavigatorPanel; import java.beans.PropertyChangeEvent;
import org.openide.explorer.ExplorerManager; import java.beans.PropertyChangeListener;
import org.openide.explorer.ExplorerUtils; import java.beans.PropertyVetoException;
import org.openide.explorer.view.BeanTreeView; import java.util.ArrayList;
import org.openide.nodes.AbstractNode; import java.util.Observable;
import org.openide.nodes.Children; import java.util.Observer;
import org.openide.nodes.Node; import javax.swing.JComponent;
import org.openide.util.Exceptions; import org.netbeans.spi.navigator.NavigatorPanel;
import org.openide.util.Lookup; import org.openide.explorer.ExplorerManager;
import org.openide.util.LookupEvent; import org.openide.explorer.ExplorerUtils;
import org.openide.util.LookupListener; import org.openide.explorer.view.BeanTreeView;
import org.openide.util.Utilities; import org.openide.nodes.AbstractNode;
import org.openide.util.lookup.ProxyLookup; import org.openide.nodes.Children;
import org.openide.windows.TopComponent; import org.openide.nodes.Node;
import org.openide.util.Exceptions;
/** import org.openide.util.Lookup;
* import org.openide.util.LookupEvent;
* @author cris import org.openide.util.LookupListener;
*/ import org.openide.util.Utilities;
@NavigatorPanel.Registration(mimeType = "text/x-niftygui+xml", displayName="Gui View") import org.openide.util.lookup.ProxyLookup;
public class Navigator extends javax.swing.JPanel implements NavigatorPanel,ExplorerManager.Provider , Observer, PropertyChangeListener, LookupListener{ import org.openide.windows.TopComponent;
private Lookup lookup;
private ExplorerManager mgr = new ExplorerManager(); /**
private final BeanTreeView beanTreeView; *
private GUIEditor editor; * @author cris
private Lookup context; */
private boolean lock; @NavigatorPanel.Registration(mimeType = "text/x-niftygui+xml", displayName="Gui View")
/** public class Navigator extends javax.swing.JPanel implements NavigatorPanel,ExplorerManager.Provider , Observer, PropertyChangeListener{
* Creates new form Navigator private Lookup lookup;
*/ private ExplorerManager mgr = new ExplorerManager();
public Navigator() { private final BeanTreeView beanTreeView;
initComponents(); private GUIEditor editor;
setLayout(new BorderLayout()); private Lookup context;
beanTreeView = new BeanTreeView(); private boolean lock;
add(beanTreeView, BorderLayout.CENTER); /**
* Creates new form Navigator
} */
public Navigator() {
/** initComponents();
* This method is called from within the constructor to initialize the form. setLayout(new BorderLayout());
* WARNING: Do NOT modify this code. The content of this method is always beanTreeView = new BeanTreeView();
* regenerated by the Form Editor. add(beanTreeView, BorderLayout.CENTER);
*/ CommandProcessor.getInstance().getObservable().addObserver(this);
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents }
private void initComponents() {
/**
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); * This method is called from within the constructor to initialize the form.
this.setLayout(layout); * WARNING: Do NOT modify this code. The content of this method is always
layout.setHorizontalGroup( * regenerated by the Form Editor.
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) */
.addGap(0, 244, Short.MAX_VALUE) @SuppressWarnings("unchecked")
); // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
layout.setVerticalGroup( private void initComponents() {
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 274, Short.MAX_VALUE) javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
); this.setLayout(layout);
}// </editor-fold>//GEN-END:initComponents layout.setHorizontalGroup(
// Variables declaration - do not modify//GEN-BEGIN:variables layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
// End of variables declaration//GEN-END:variables .addGap(0, 244, Short.MAX_VALUE)
);
@Override layout.setVerticalGroup(
public String getDisplayName() { layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
return "GuiView"; .addGap(0, 274, Short.MAX_VALUE)
} );
}// </editor-fold>//GEN-END:initComponents
@Override // Variables declaration - do not modify//GEN-BEGIN:variables
public String getDisplayHint() { // End of variables declaration//GEN-END:variables
return "Easy view for your gui";
} @Override
public String getDisplayName() {
@Override return "GuiView";
public JComponent getComponent() { }
return this;
} @Override
public String getDisplayHint() {
@Override return "Easy view for your gui";
public void panelActivated(Lookup context) { }
try {
this.context = context; @Override
context.lookupResult(NiftyGuiDataObject.class).addLookupListener(this); public JComponent getComponent() {
intNavigator(context); return this;
} catch (PropertyVetoException ex) { }
Exceptions.printStackTrace(ex);
} @Override
} public void panelActivated(Lookup context) {
@Override }
public void panelDeactivated() {
ExplorerUtils.activateActions(mgr, false); @Override
} public void panelDeactivated() {
ExplorerUtils.activateActions(mgr, false);
@Override }
public Lookup getLookup() {
return lookup; @Override
} public Lookup getLookup() {
return lookup;
@Override }
public ExplorerManager getExplorerManager() {
return mgr; @Override
} public ExplorerManager getExplorerManager() {
return mgr;
@Override }
public void update(Observable o, Object arg) {
@Override
jada.ngeditor.listeners.actions.Action act = ( jada.ngeditor.listeners.actions.Action) arg; public void update(Observable o, Object arg) {
if(act.getType() == jada.ngeditor.listeners.actions.Action.SEL){ if(o instanceof GuiEditorModel){
ArrayList<String> path = new ArrayList<String>(); try {
GElement parent = act.getGUIElement(); GuiEditorModel model = (GuiEditorModel) o;
while(parent!=null){ model.getCurrent().addObserver(this);
path.add(parent.getID()); model.getCurrent().getSelection().addObserver(this);
parent = parent.getParent(); this.intNavigator(model.getCurrent());
} } catch (PropertyVetoException ex) {
Node result = mgr.getRootContext(); Exceptions.printStackTrace(ex);
for(int i=path.size()-1;i>=0;i--){ }
result = result.getChildren().findChild(path.get(i)); }
}
try { if(arg instanceof SelectionChanged){
mgr.setSelectedNodes(new Node[]{result}); SelectionChanged event = (SelectionChanged) arg;
} catch (PropertyVetoException ex) { if(event.getNewSelection().isEmpty()){
Exceptions.printStackTrace(ex); return;
} }
}else if(act.getType() == jada.ngeditor.listeners.actions.Action.NEW){ ArrayList<String> path = new ArrayList<String>();
try { GElement parent = ((SelectionChanged)arg).getElement();
this.intNavigator(context); while(parent!=null){
} catch (PropertyVetoException ex) { path.add(parent.getID());
Exceptions.printStackTrace(ex); parent = parent.getParent();
} }
} Node result = mgr.getRootContext();
beanTreeView.updateUI(); for(int i=path.size()-1;i>=0;i--){
} result = result.getChildren().findChild(path.get(i));
}
@Override try {
public void propertyChange(PropertyChangeEvent evt) { mgr.setSelectedNodes(new Node[]{result});
if (evt.getPropertyName().equals(ExplorerManager.PROP_SELECTED_NODES)) { } catch (PropertyVetoException ex) {
Node[] newValue = (Node[]) evt.getNewValue(); Exceptions.printStackTrace(ex);
if (newValue.length > 0) { }
AbstractNode firstSelected = (AbstractNode) newValue[0]; }
if (firstSelected instanceof GElementNode) { beanTreeView.updateUI();
GElement element = ((GElementNode) firstSelected).getGelement(); }
editor.selectElement(element); @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) {
@Override GElement element = ((GElementNode) firstSelected).getGelement();
public void resultChanged(LookupEvent ev) { GUI gui = ((GUINode)mgr.getRootContext()).getGui();
try { gui.getSelection().deleteObserver(this); // I don't wont to get notified about this selection change
intNavigator(context); SelectCommand command = CommandProcessor.getInstance().getCommand(SelectCommand.class);
} catch (PropertyVetoException ex) { command.setElement(element);
Exceptions.printStackTrace(ex); try {
} lock = true;
} CommandProcessor.getInstance().excuteCommand(command);
} catch (Exception ex) {
private void intNavigator(Lookup context) throws PropertyVetoException { Exceptions.printStackTrace(ex);
}
NiftyGuiDataObject man = context.lookup(NiftyGuiDataObject.class); gui.getSelection().addObserver(this);
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}); private void intNavigator(GUI gui) throws PropertyVetoException {
Lookup lookup1 = ExplorerUtils.createLookup(mgr, getActionMap());
lookup = new ProxyLookup(lookup1);
editor.addObserver(this); 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);
}
}

View File

@ -1,148 +1,149 @@
/* /*
* To change this template, choose Tools | Templates * To change this template, choose Tools | Templates
* and open the template in the editor. * and open the template in the editor.
*/ */
package com.jme3.gde.gui; package com.jme3.gde.gui;
import com.jme3.gde.core.assets.ProjectAssetManager; import com.jme3.gde.core.assets.ProjectAssetManager;
import jada.ngeditor.controller.GUIEditor; import jada.ngeditor.controller.CommandProcessor;
import java.io.IOException; import jada.ngeditor.controller.GUIEditor;
import org.netbeans.api.project.Project; import java.io.IOException;
import org.netbeans.api.project.ProjectManager; import org.netbeans.api.project.Project;
import org.netbeans.core.spi.multiview.MultiViewElement; import org.netbeans.api.project.ProjectManager;
import org.netbeans.core.spi.multiview.text.MultiViewEditorElement; import org.netbeans.core.spi.multiview.MultiViewElement;
import org.openide.awt.ActionID; import org.netbeans.core.spi.multiview.text.MultiViewEditorElement;
import org.openide.awt.ActionReference; import org.openide.awt.ActionID;
import org.openide.awt.ActionReferences; import org.openide.awt.ActionReference;
import org.openide.filesystems.FileObject; import org.openide.awt.ActionReferences;
import org.openide.filesystems.MIMEResolver; import org.openide.filesystems.FileObject;
import org.openide.loaders.DataNode; import org.openide.filesystems.MIMEResolver;
import org.openide.loaders.DataObject; import org.openide.loaders.DataNode;
import org.openide.loaders.DataObjectExistsException; import org.openide.loaders.DataObject;
import org.openide.loaders.MultiDataObject; import org.openide.loaders.DataObjectExistsException;
import org.openide.loaders.MultiFileLoader; import org.openide.loaders.MultiDataObject;
import org.openide.nodes.Children; import org.openide.loaders.MultiFileLoader;
import org.openide.nodes.Node; import org.openide.nodes.Children;
import org.openide.util.Lookup; import org.openide.nodes.Node;
import org.openide.util.NbBundle.Messages; import org.openide.util.Lookup;
import org.openide.windows.TopComponent; import org.openide.util.NbBundle.Messages;
import org.openide.windows.TopComponent;
@Messages({
"LBL_NiftyGui_LOADER=Files of NiftyGui" @Messages({
}) "LBL_NiftyGui_LOADER=Files of NiftyGui"
@MIMEResolver.Registration( })
displayName = "#LBL_NiftyGui_LOADER", @MIMEResolver.Registration(
resource = "NiftyGuiResolver.xml") displayName = "#LBL_NiftyGui_LOADER",
@DataObject.Registration( resource = "NiftyGuiResolver.xml")
mimeType = "text/x-niftygui+xml", @DataObject.Registration(
iconBase = "com/jme3/gde/gui/Computer_File_043.gif", mimeType = "text/x-niftygui+xml",
displayName = "#LBL_NiftyGui_LOADER", iconBase = "com/jme3/gde/gui/Computer_File_043.gif",
position = 300) displayName = "#LBL_NiftyGui_LOADER",
@ActionReferences({ position = 300)
@ActionReference( @ActionReferences({
path = "Loaders/text/x-niftygui+xml/Actions", @ActionReference(
id = path = "Loaders/text/x-niftygui+xml/Actions",
@ActionID(category = "System", id = "org.openide.actions.OpenAction"), id =
position = 100, @ActionID(category = "System", id = "org.openide.actions.OpenAction"),
separatorAfter = 200), position = 100,
@ActionReference( separatorAfter = 200),
path = "Loaders/text/x-niftygui+xml/Actions", @ActionReference(
id = path = "Loaders/text/x-niftygui+xml/Actions",
@ActionID(category = "Edit", id = "org.openide.actions.CutAction"), id =
position = 300), @ActionID(category = "Edit", id = "org.openide.actions.CutAction"),
@ActionReference( position = 300),
path = "Loaders/text/x-niftygui+xml/Actions", @ActionReference(
id = path = "Loaders/text/x-niftygui+xml/Actions",
@ActionID(category = "Edit", id = "org.openide.actions.CopyAction"), id =
position = 400, @ActionID(category = "Edit", id = "org.openide.actions.CopyAction"),
separatorAfter = 500), position = 400,
@ActionReference( separatorAfter = 500),
path = "Loaders/text/x-niftygui+xml/Actions", @ActionReference(
id = path = "Loaders/text/x-niftygui+xml/Actions",
@ActionID(category = "Edit", id = "org.openide.actions.DeleteAction"), id =
position = 600), @ActionID(category = "Edit", id = "org.openide.actions.DeleteAction"),
@ActionReference( position = 600),
path = "Loaders/text/x-niftygui+xml/Actions", @ActionReference(
id = path = "Loaders/text/x-niftygui+xml/Actions",
@ActionID(category = "System", id = "org.openide.actions.RenameAction"), id =
position = 700, @ActionID(category = "System", id = "org.openide.actions.RenameAction"),
separatorAfter = 800), position = 700,
@ActionReference( separatorAfter = 800),
path = "Loaders/text/x-niftygui+xml/Actions", @ActionReference(
id = path = "Loaders/text/x-niftygui+xml/Actions",
@ActionID(category = "System", id = "org.openide.actions.SaveAsTemplateAction"), id =
position = 900, @ActionID(category = "System", id = "org.openide.actions.SaveAsTemplateAction"),
separatorAfter = 1000), position = 900,
@ActionReference( separatorAfter = 1000),
path = "Loaders/text/x-niftygui+xml/Actions", @ActionReference(
id = path = "Loaders/text/x-niftygui+xml/Actions",
@ActionID(category = "System", id = "org.openide.actions.FileSystemAction"), id =
position = 1100, @ActionID(category = "System", id = "org.openide.actions.FileSystemAction"),
separatorAfter = 1200), position = 1100,
@ActionReference( separatorAfter = 1200),
path = "Loaders/text/x-niftygui+xml/Actions", @ActionReference(
id = path = "Loaders/text/x-niftygui+xml/Actions",
@ActionID(category = "System", id = "org.openide.actions.ToolsAction"), id =
position = 1300), @ActionID(category = "System", id = "org.openide.actions.ToolsAction"),
@ActionReference( position = 1300),
path = "Loaders/text/x-niftygui+xml/Actions", @ActionReference(
id = path = "Loaders/text/x-niftygui+xml/Actions",
@ActionID(category = "System", id = "org.openide.actions.PropertiesAction"), id =
position = 1400) @ActionID(category = "System", id = "org.openide.actions.PropertiesAction"),
}) position = 1400)
public class NiftyGuiDataObject extends MultiDataObject { })
public class NiftyGuiDataObject extends MultiDataObject {
public NiftyGuiDataObject(FileObject pf, MultiFileLoader loader) throws DataObjectExistsException, IOException {
super(pf, loader); public NiftyGuiDataObject(FileObject pf, MultiFileLoader loader) throws DataObjectExistsException, IOException {
registerEditor("text/x-niftygui+xml", true); super(pf, loader);
findAssetManager(); registerEditor("text/x-niftygui+xml", true);
this.getCookieSet().assign(GUIEditor.class,new GUIEditor()); findAssetManager();
} this.getCookieSet().assign(GUIEditor.class, CommandProcessor.getInstance().getGuiEditor());
}
protected final void findAssetManager() {
FileObject file = getPrimaryFile(); protected final void findAssetManager() {
ProjectManager pm = ProjectManager.getDefault(); FileObject file = getPrimaryFile();
while (file != null) { ProjectManager pm = ProjectManager.getDefault();
if (file.isFolder() && pm.isProject(file)) { while (file != null) {
try { if (file.isFolder() && pm.isProject(file)) {
Project project = ProjectManager.getDefault().findProject(file); try {
if (project != null) { Project project = ProjectManager.getDefault().findProject(file);
ProjectAssetManager mgr = project.getLookup().lookup(ProjectAssetManager.class); if (project != null) {
if (mgr != null) { ProjectAssetManager mgr = project.getLookup().lookup(ProjectAssetManager.class);
this.getCookieSet().assign(mgr.getClass(),mgr); if (mgr != null) {
return; this.getCookieSet().assign(mgr.getClass(),mgr);
} return;
} }
} catch (IOException ex) { }
} catch (IllegalArgumentException ex) { } catch (IOException ex) {
} } catch (IllegalArgumentException ex) {
} }
file = file.getParent(); }
} file = file.getParent();
} }
}
@Override
protected Node createNodeDelegate() { @Override
DataNode node = new DataNode(this, Children.LEAF, getLookup()); protected Node createNodeDelegate() {
node.setIconBaseWithExtension("com/jme3/gde/gui/Computer_File_043.gif"); DataNode node = new DataNode(this, Children.LEAF, getLookup());
return node; node.setIconBaseWithExtension("com/jme3/gde/gui/Computer_File_043.gif");
} return node;
}
@Override
protected int associateLookup() { @Override
return 1; protected int associateLookup() {
} return 1;
}
@MultiViewElement.Registration(
displayName = "#LBL_NiftyGui_EDITOR", @MultiViewElement.Registration(
iconBase = "com/jme3/gde/gui/Computer_File_043.gif", displayName = "#LBL_NiftyGui_EDITOR",
mimeType = "text/x-niftygui+xml", iconBase = "com/jme3/gde/gui/Computer_File_043.gif",
persistenceType = TopComponent.PERSISTENCE_ONLY_OPENED, mimeType = "text/x-niftygui+xml",
preferredID = "NiftyGui", persistenceType = TopComponent.PERSISTENCE_ONLY_OPENED,
position = 1000) preferredID = "NiftyGui",
@Messages("LBL_NiftyGui_EDITOR=XML") position = 1000)
public static MultiViewEditorElement createEditor(Lookup lkp) { @Messages("LBL_NiftyGui_EDITOR=XML")
final MultiViewEditorElement multiViewEditorElement = new MultiViewEditorElement(lkp); public static MultiViewEditorElement createEditor(Lookup lkp) {
return multiViewEditorElement; final MultiViewEditorElement multiViewEditorElement = new MultiViewEditorElement(lkp);
} return multiViewEditorElement;
} }
}

View File

@ -1,332 +1,335 @@
/* /*
* To change this template, choose Tools | Templates * To change this template, choose Tools | Templates
* and open the template in the editor. * and open the template in the editor.
*/ */
package com.jme3.gde.gui; package com.jme3.gde.gui;
import com.jme3.gde.core.assets.ProjectAssetManager; import com.jme3.gde.core.assets.ProjectAssetManager;
import com.jme3.gde.core.scene.SceneApplication; import com.jme3.gde.gui.nodes.GUINode;
import com.jme3.gde.gui.nodes.GUINode; import de.lessvoid.nifty.Nifty;
import com.jme3.gde.gui.palette.NiftyGUIPaletteFactory; import jada.ngeditor.controller.CommandProcessor;
import de.lessvoid.nifty.Nifty; import jada.ngeditor.controller.GUIEditor;
import jada.ngeditor.controller.GUIEditor; import jada.ngeditor.guiviews.DND.PaletteDropTarget;
import jada.ngeditor.guiviews.DND.PaletteDropTarget; import jada.ngeditor.guiviews.DND.TrasferHandling;
import jada.ngeditor.guiviews.DND.TrasferHandling; import jada.ngeditor.guiviews.J2DNiftyView;
import jada.ngeditor.guiviews.J2DNiftyView; import jada.ngeditor.listeners.events.SelectionChanged;
import jada.ngeditor.model.elements.GElement; import jada.ngeditor.model.GuiEditorModel;
import jada.ngeditor.model.elements.GLayer; import jada.ngeditor.model.elements.GElement;
import jada.ngeditor.model.exception.NoProductException; import jada.ngeditor.model.elements.GLayer;
import java.awt.Dimension; import jada.ngeditor.model.exception.NoProductException;
import java.awt.dnd.DropTarget; import java.awt.Dimension;
import java.awt.dnd.DropTargetDragEvent; import java.awt.event.ItemEvent;
import java.awt.dnd.DropTargetDropEvent; import java.awt.event.ItemListener;
import java.awt.dnd.DropTargetEvent; import java.beans.PropertyChangeEvent;
import java.awt.dnd.DropTargetListener; import java.beans.PropertyChangeListener;
import java.awt.event.ItemEvent; import java.beans.PropertyVetoException;
import java.awt.event.ItemListener; import java.io.File;
import java.beans.PropertyVetoException; import java.io.FileNotFoundException;
import java.io.File; import java.io.IOException;
import java.io.FileNotFoundException; import java.io.InputStream;
import java.io.IOException; import java.util.ArrayList;
import java.util.ArrayList; import java.util.Collection;
import java.util.Collection; import java.util.Observable;
import java.util.Observable; import java.util.Observer;
import java.util.Observer; import javax.swing.Action;
import java.util.concurrent.Callable; import javax.swing.ActionMap;
import javax.swing.Action; import javax.swing.DefaultComboBoxModel;
import javax.swing.ActionMap; import javax.swing.JComboBox;
import javax.swing.DefaultComboBoxModel; import javax.swing.JComponent;
import javax.swing.JComboBox; import javax.swing.JLabel;
import javax.swing.JComponent; import javax.swing.JPanel;
import javax.swing.JPanel; import javax.swing.JToolBar;
import javax.swing.JToolBar; import javax.xml.bind.JAXBException;
import javax.swing.text.AbstractDocument; import javax.xml.parsers.ParserConfigurationException;
import javax.xml.bind.JAXBException; import org.netbeans.api.progress.ProgressHandle;
import javax.xml.parsers.ParserConfigurationException; import org.netbeans.api.progress.ProgressHandleFactory;
import org.netbeans.api.progress.ProgressHandle; import org.netbeans.core.spi.multiview.CloseOperationState;
import org.netbeans.api.progress.ProgressHandleFactory; import org.netbeans.core.spi.multiview.MultiViewElement;
import org.netbeans.core.spi.multiview.CloseOperationState; import org.netbeans.core.spi.multiview.MultiViewElementCallback;
import org.netbeans.core.spi.multiview.MultiViewElement; import org.openide.awt.UndoRedo;
import org.netbeans.core.spi.multiview.MultiViewElementCallback; import org.openide.explorer.ExplorerManager;
import org.openide.DialogDisplayer; import org.openide.explorer.ExplorerUtils;
import org.openide.NotifyDescriptor; import org.openide.loaders.DataObject;
import org.openide.awt.UndoRedo; import org.openide.nodes.Node;
import org.openide.explorer.ExplorerManager; import org.openide.util.Exceptions;
import org.openide.explorer.ExplorerUtils; import org.openide.util.Lookup;
import org.openide.nodes.Node; import org.openide.util.NbBundle.Messages;
import org.openide.util.Exceptions; import org.openide.windows.TopComponent;
import org.openide.util.Lookup; import org.xml.sax.SAXException;
import org.openide.util.NbBundle.Messages; import sun.rmi.runtime.Log;
import org.openide.util.lookup.AbstractLookup;
import org.openide.util.lookup.InstanceContent; @MultiViewElement.Registration(
import org.openide.util.lookup.ProxyLookup; displayName = "#LBL_NiftyGui_VISUAL",
import org.openide.windows.TopComponent; iconBase = "com/jme3/gde/gui/Computer_File_043.gif",
import org.xml.sax.SAXException; mimeType = "text/x-niftygui+xml",
persistenceType = TopComponent.PERSISTENCE_NEVER,
@MultiViewElement.Registration( preferredID = "NiftyGuiVisual",
displayName = "#LBL_NiftyGui_VISUAL", position = 2000)
iconBase = "com/jme3/gde/gui/Computer_File_043.gif", @Messages("LBL_NiftyGui_VISUAL=Visual")
mimeType = "text/x-niftygui+xml", public final class NiftyGuiVisualElement extends JPanel implements MultiViewElement , ExplorerManager.Provider,Observer, PropertyChangeListener {
persistenceType = TopComponent.PERSISTENCE_NEVER,
preferredID = "NiftyGuiVisual", private NiftyGuiDataObject obj;
position = 2000) private JToolBar toolbar = new JToolBar();
@Messages("LBL_NiftyGui_VISUAL=Visual") private transient MultiViewElementCallback callback;
public final class NiftyGuiVisualElement extends JPanel implements MultiViewElement , ExplorerManager.Provider,Observer { private GUIEditor editor;
private final Nifty nifty;
private NiftyGuiDataObject obj; private final J2DNiftyView view;
private JToolBar toolbar = new JToolBar(); private final JComboBox layers = new JComboBox();
private transient MultiViewElementCallback callback; private final ExplorerManager nodesManager;
private GUIEditor editor; private final UndoRedo.Manager undoSupport;
private final Nifty nifty; private int guiID;
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;
public NiftyGuiVisualElement(Lookup lkp) { initComponents();
obj = lkp.lookup(NiftyGuiDataObject.class); view = new J2DNiftyView(800, 600);
assert obj != null; view.init();
initComponents(); this.scrollArea.getViewport().addChangeListener(view);
view = new J2DNiftyView(800, 600); this.scrollArea.setViewportView(view);
view.init(); TrasferHandling tranf = new TrasferHandling();
this.scrollArea.getViewport().addChangeListener(view); PaletteDropTarget tmp = new PaletteDropTarget();
this.scrollArea.setViewportView(view); editor = obj.getLookup().lookup(GUIEditor.class);
TrasferHandling tranf = new TrasferHandling(); nodesManager = new ExplorerManager();
PaletteDropTarget tmp = new PaletteDropTarget(); nifty = view.getNifty();
editor = obj.getLookup().lookup(GUIEditor.class); view.setTransferHandler(tranf);
editor.addObserver(this); view.setDropTarget(tmp);
nodesManager = new ExplorerManager(); // editor.addObserver(view);
nifty = view.getNifty(); // editor.addObserver(tranf);
view.setTransferHandler(tranf); this.obj.addPropertyChangeListener(this);
view.setDropTarget(tmp); this.createToolbar();
editor.addObserver(view); this.undoSupport = new UndoRedo.Manager();
editor.addObserver(tranf); CommandProcessor.getInstance().setUndoManager(undoSupport);
editor.addObserver(tmp); }
this.createToolbar(); /**
} * Old code
/** * @author normenhansen
* Old code */
* @author normenhansen private void createToolbar() {
*/ toolbar.setPreferredSize(new Dimension(10000, 24));
private void createToolbar() { toolbar.setMaximumSize(new Dimension(10000, 24));
toolbar.setPreferredSize(new Dimension(10000, 24)); toolbar.setFloatable(false);
toolbar.setMaximumSize(new Dimension(10000, 24)); toolbar.add(new JLabel("Change Resolution"));
toolbar.setFloatable(false); JComboBox comboBox = new JComboBox(new String[]{"640x480", "480x800", "800x480", "800x600", "1024x768", "1280x720"});
JComboBox comboBox = new JComboBox(new String[]{"640x480", "480x800", "800x480", "800x600", "1024x768", "1280x720"}); comboBox.addItemListener(new ItemListener() {
comboBox.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) {
public void itemStateChanged(ItemEvent e) { String string = (String) e.getItem();
String string = (String) e.getItem(); if ("640x480".equals(string)) {
if ("640x480".equals(string)) { view.setResoltion(640, 480);
view.setResoltion(640, 480); } else if ("1024x768".equals(string)) {
} else if ("1024x768".equals(string)) { view.setResoltion(1024, 768);
view.setResoltion(1024, 768); } else if ("1280x720".equals(string)) {
} else if ("1280x720".equals(string)) { view.setResoltion(1280, 720);
view.setResoltion(1280, 720); } else if ("800x600".equals(string)) {
} else if ("800x600".equals(string)) { view.setResoltion(800, 600);
view.setResoltion(800, 600); } else if ("800x480".equals(string)) {
} else if ("800x480".equals(string)) { view.setResoltion(800, 480);
view.setResoltion(800, 480); } else if ("480x800".equals(string)) {
} else if ("480x800".equals(string)) { view.setResoltion(480, 800);
view.setResoltion(480, 800); } else {
} else { view.setResoltion(800, 600);
view.setResoltion(800, 600); }
} }
} });
}); toolbar.add(comboBox);
toolbar.add(comboBox); comboBox.setSelectedItem("800x600");
comboBox.setSelectedItem("800x600"); toolbar.add(new JLabel("Current Layer"));
layers.addItemListener(new ItemListener() { layers.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) { public void itemStateChanged(ItemEvent e) {
GLayer item = (GLayer) e.getItem(); GLayer item = (GLayer) e.getItem();
editor.selectElement(item); editor.selectElement(item);
} }
}); });
toolbar.add(layers); toolbar.add(layers);
} }
@Override @Override
public String getName() { public String getName() {
return "NiftyGuiVisualElement"; return "NiftyGuiVisualElement";
} }
/** /**
* This method is called from within the constructor to initialize the form. * 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 * WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor. * regenerated by the Form Editor.
*/ */
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() { private void initComponents() {
scrollArea = new javax.swing.JScrollPane(); scrollArea = new javax.swing.JScrollPane();
setLayout(new java.awt.BorderLayout()); setLayout(new java.awt.BorderLayout());
add(scrollArea, java.awt.BorderLayout.CENTER); add(scrollArea, java.awt.BorderLayout.CENTER);
}// </editor-fold>//GEN-END:initComponents }// </editor-fold>//GEN-END:initComponents
// Variables declaration - do not modify//GEN-BEGIN:variables // Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JScrollPane scrollArea; private javax.swing.JScrollPane scrollArea;
// End of variables declaration//GEN-END:variables // End of variables declaration//GEN-END:variables
@Override @Override
public JComponent getVisualRepresentation() { public JComponent getVisualRepresentation() {
return this; return this;
} }
@Override @Override
public JComponent getToolbarRepresentation() { public JComponent getToolbarRepresentation() {
return toolbar; return toolbar;
} }
@Override @Override
public Action[] getActions() { public Action[] getActions() {
return new Action[0]; return new Action[0];
} }
@Override @Override
public Lookup getLookup() { public Lookup getLookup() {
return ExplorerUtils.createLookup(nodesManager, new ActionMap()); return ExplorerUtils.createLookup(nodesManager, new ActionMap());
} }
/** /**
* Raw implementation , just to prototype the editor * Raw implementation , just to prototype the editor
*/ */
@Override @Override
public void componentOpened() { public void componentOpened() {
try { loadGui();
ProgressHandle handle = ProgressHandleFactory.createHandle("Loading the gui file"); }
String path = this.obj.getPrimaryFile().getPath();
ProjectAssetManager mgr = obj.getLookup().lookup(ProjectAssetManager.class); @Override
String assetPath = mgr.getAssetFolder().getPath(); public void componentClosed() {
handle.progress(50);
this.editor.createNewGui(nifty,new File(path),new File(assetPath)); }
nodesManager.setRootContext(new GUINode(this.editor.getGui())); /**
Collection<GLayer> layers1 = this.editor.getGui().getLayers(); * Raw implementation , just to prototype the editor
DefaultComboBoxModel<GLayer> model = new DefaultComboBoxModel<GLayer>(layers1.toArray(new GLayer[0])); */
layers.setModel(model); @Override
layers.setSelectedItem(this.editor.getCurrentLayer()); public void componentShowing() {
if(!this.obj.isModified()){
handle.finish(); return;
}
} catch (ParserConfigurationException ex) { loadGui();
Exceptions.printStackTrace(ex);
} catch (JAXBException ex) { }
Exceptions.printStackTrace(ex); /**
} catch (ClassNotFoundException ex) { * Raw implementation , just to prototype the editor
Exceptions.printStackTrace(ex); */
} catch (IOException ex) { @Override
Exceptions.printStackTrace(ex); public void componentHidden() {
} catch (NoProductException ex) { String path = this.obj.getPrimaryFile().getPath();
Exceptions.printStackTrace(ex); try {
} catch (SAXException ex) { this.editor.saveGui(path);
Exceptions.printStackTrace(ex); } catch (FileNotFoundException ex) {
} catch (Exception ex) { Exceptions.printStackTrace(ex);
Exceptions.printStackTrace(ex); } catch (JAXBException ex) {
} Exceptions.printStackTrace(ex);
} } catch (NullPointerException ex){
Exceptions.printStackTrace(ex);
@Override }
public void componentClosed() { }
}
/** @Override
* Raw implementation , just to prototype the editor public void componentActivated() {
*/ GuiEditorModel model = (GuiEditorModel) CommandProcessor.getInstance().getObservable();
@Override model.setCurrentGUI(guiID);
public void componentShowing() { CommandProcessor.getInstance().setUndoManager(undoSupport);
try { }
ProgressHandle handle = ProgressHandleFactory.createHandle("Loading the gui file");
String path = this.obj.getPrimaryFile().getPath(); @Override
ProjectAssetManager mgr = this.obj.getLookup().lookup(ProjectAssetManager.class); public void componentDeactivated() {
String assetPath = mgr.getAssetFolder().getPath(); }
this.editor.createNewGui(nifty,new File(path),new File(assetPath));
nodesManager.setRootContext(new GUINode(this.editor.getGui())); @Override
Collection<GLayer> layers1 = this.editor.getGui().getLayers(); public UndoRedo getUndoRedo() {
DefaultComboBoxModel<GLayer> model = new DefaultComboBoxModel<GLayer>(layers1.toArray(new GLayer[0])); return this.undoSupport;
layers.setModel(model); }
layers.setSelectedItem(this.editor.getCurrentLayer());
@Override
handle.finish(); public void setMultiViewCallback(MultiViewElementCallback callback) {
} catch (ParserConfigurationException ex) { this.callback = callback;
Exceptions.printStackTrace(ex); }
} catch (JAXBException ex) {
Exceptions.printStackTrace(ex); @Override
} catch (ClassNotFoundException ex) { public CloseOperationState canCloseElement() {
Exceptions.printStackTrace(ex); return CloseOperationState.STATE_OK;
} catch (IOException ex) { }
Exceptions.printStackTrace(ex);
} catch (NoProductException ex) { @Override
Exceptions.printStackTrace(ex); public ExplorerManager getExplorerManager() {
} catch (SAXException ex) { return nodesManager;
Exceptions.printStackTrace(ex); }
} catch (Exception ex) {
Exceptions.printStackTrace(ex); @Override
} public void update(Observable o, Object arg) {
if(arg instanceof SelectionChanged ){
} SelectionChanged event = (SelectionChanged) arg;
/** if(event.getNewSelection().isEmpty()){
* Raw implementation , just to prototype the editor return;
*/ }
@Override ArrayList<String> path = new ArrayList<String>();
public void componentHidden() { GElement parent = event.getElement();
String path = this.obj.getPrimaryFile().getPath(); while(parent!=null){
try { path.add(parent.getID());
this.editor.saveGui(path); parent = parent.getParent();
} catch (FileNotFoundException ex) { }
Exceptions.printStackTrace(ex);
} catch (JAXBException ex) { Node result = nodesManager.getRootContext();
Exceptions.printStackTrace(ex);
} for(int i=path.size()-1;i>=0 && result!=null;i--){
} result = result.getChildren().findChild(path.get(i));
}
@Override try {
public void componentActivated() { if(result!=null){
} nodesManager.setSelectedNodes(new Node[]{result});
}
@Override } catch (PropertyVetoException ex) {
public void componentDeactivated() { Exceptions.printStackTrace(ex);
} }
}
@Override }
public UndoRedo getUndoRedo() {
return UndoRedo.NONE; @Override
} public void propertyChange(PropertyChangeEvent evt) {
if(evt.getPropertyName().equals(DataObject.PROP_MODIFIED)){
@Override boolean old = (Boolean)evt.getOldValue();
public void setMultiViewCallback(MultiViewElementCallback callback) { boolean nev = (Boolean)evt.getNewValue();
this.callback = callback; if(old && !nev){
} this.loadGui();
}
@Override }
public CloseOperationState canCloseElement() {
return CloseOperationState.STATE_OK; }
}
private void loadGui() {
@Override try {
public ExplorerManager getExplorerManager() { ProgressHandle handle = ProgressHandleFactory.createHandle("Loading the gui file");
return nodesManager; InputStream is = this.obj.getPrimaryFile().getInputStream();
}
ProjectAssetManager mgr = this.obj.getLookup().lookup(ProjectAssetManager.class);
@Override String assetPath = mgr.getAssetFolder().getPath();
public void update(Observable o, Object arg) { this.editor.createNewGui(nifty,is,new File(assetPath));
jada.ngeditor.listeners.actions.Action act = ( jada.ngeditor.listeners.actions.Action) arg; this.view.newGui(this.editor.getGui());
if(act.getType() == jada.ngeditor.listeners.actions.Action.SEL){ nodesManager.setRootContext(new GUINode(this.editor.getGui()));
ArrayList<String> path = new ArrayList<String>(); this.editor.getGui().getSelection().addObserver(this);
GElement parent = act.getGUIElement(); Collection<GLayer> layers1 = this.editor.getGui().getLayers();
while(parent!=null){ guiID = this.editor.getGui().getGUIid();
path.add(parent.getID()); DefaultComboBoxModel<GLayer> model = new DefaultComboBoxModel<GLayer>(layers1.toArray(new GLayer[0]));
parent = parent.getParent(); layers.setModel(model);
} layers.setSelectedItem(this.editor.getCurrentLayer());
Node result = nodesManager.getRootContext(); handle.finish();
} catch (ParserConfigurationException ex) {
for(int i=path.size()-1;i>=0 && result!=null;i--){ Exceptions.printStackTrace(ex);
result = result.getChildren().findChild(path.get(i)); } catch (JAXBException ex) {
} Exceptions.printStackTrace(ex);
try { } catch (ClassNotFoundException ex) {
if(result!=null){ Exceptions.printStackTrace(ex);
nodesManager.setSelectedNodes(new Node[]{result}); } catch (IOException ex) {
} Exceptions.printStackTrace(ex);
} catch (PropertyVetoException ex) { } catch (NoProductException ex) {
Exceptions.printStackTrace(ex); Exceptions.printStackTrace(ex);
} } catch (SAXException ex) {
} Exceptions.printStackTrace(ex);
} } catch (Exception ex) {
} Exceptions.printStackTrace(ex);
}
}
}

View File

@ -1,10 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE filesystem PUBLIC "-//NetBeans//DTD Filesystem 1.2//EN" "http://www.netbeans.org/dtds/filesystem-1_2.dtd"> <!DOCTYPE filesystem PUBLIC "-//NetBeans//DTD Filesystem 1.2//EN" "http://www.netbeans.org/dtds/filesystem-1_2.dtd">
<filesystem> <filesystem>
<folder name="NiftyPalette"> <folder name="NiftyPalette">
<folder name="Items"> <folder name="Items">
<file name="Screen" url="com/jme3/gde/gui/palette/Screen.xml"> <file name="Screen" url="com/jme3/gde/gui/palette/Screen.xml">
</file> </file>
</folder> </folder>
</folder> </folder>
</filesystem> <folder name="Navigator">
<folder name="Panels">
<folder name="text">
<folder name="x-niftygui+xml">
<file name="org-netbeans-modules-xml-text-navigator-XMLNavigatorPanel.instance"/>
</folder>
</folder>
</folder>
</folder>
</filesystem>

View File

@ -1,97 +1,117 @@
/* /*
* To change this template, choose Tools | Templates * To change this template, choose Tools | Templates
* and open the template in the editor. * and open the template in the editor.
*/ */
package com.jme3.gde.gui.nodes; package com.jme3.gde.gui.nodes;
import jada.ngeditor.model.elements.GElement; import com.jme3.gde.gui.propertyeditors.ResourceEditor;
import java.beans.PropertyEditor; import com.jme3.gde.gui.propertyeditors.SizeEditor;
import java.lang.reflect.InvocationTargetException; import jada.ngeditor.model.elements.GElement;
import java.util.Map.Entry; import java.beans.PropertyEditor;
import org.openide.nodes.AbstractNode; import java.lang.reflect.InvocationTargetException;
import org.openide.nodes.Children; import java.util.Map.Entry;
import org.openide.nodes.Node; import org.openide.nodes.AbstractNode;
import org.openide.nodes.Sheet; import org.openide.nodes.Children;
import org.openide.nodes.Node;
/** import org.openide.nodes.Sheet;
* import sun.beans.editors.BoolEditor;
* @author cris import sun.beans.editors.BooleanEditor;
*/
public class GElementNode extends AbstractNode{ /**
private final GElement element; *
* @author cris
public GElementNode(GElement element) { */
super(Children.create(new GElementChildFactory(element), false)); public class GElementNode extends AbstractNode{
private final GElement element;
this.element = element;
this.setName(element.getID()); public GElementNode(GElement element) {
super(Children.create(new GElementChildFactory(element), false));
}
this.element = element;
public GElement getGelement(){ this.setName(element.getID());
return element;
} }
public void updateChildren(){ public GElement getGelement(){
return element;
} }
@Override
protected Sheet createSheet() { public void updateChildren(){
Sheet s = super.createSheet();
Sheet.Set set = s.get(Sheet.PROPERTIES); }
if (set == null) { @Override
set = Sheet.createPropertiesSet(); protected Sheet createSheet() {
s.put(set); Sheet s = super.createSheet();
} Sheet.Set set = s.get(Sheet.PROPERTIES);
set.setName("Element Properties"); if (set == null) {
set.setShortDescription("You can set element properties"); set = Sheet.createPropertiesSet();
for(Entry<String,String> pair : this.element.listAttributes().entrySet()){ s.put(set);
set.put(new ElementAttributeProperty(element,pair.getKey())); }
} set.setName("Element Properties");
s.put(set); set.setShortDescription("You can set element properties");
return s; for(Entry<String,String> pair : this.element.listAttributes().entrySet()){
} final ElementAttributeProperty elementAttributeProperty = new ElementAttributeProperty(element,pair.getKey());
pickEditor(pair, elementAttributeProperty);
public class ElementAttributeProperty extends Node.Property { set.put(elementAttributeProperty);
}
private String attributeName; s.put(set);
private GElement element; return s;
}
public ElementAttributeProperty(GElement element, String attributeName) {
super(String.class); private void pickEditor(Entry<String, String> pair, final ElementAttributeProperty elementAttributeProperty) {
this.element = element; if(pair.getKey().equals("width")||pair.getKey().equals("height") || pair.getKey().equals("x") || pair.getKey().equals("y") ){
this.attributeName = attributeName; elementAttributeProperty.setPropertyEditor(new SizeEditor());
this.setName(attributeName); }else if(pair.getKey().equals("filename")){
this.setDisplayName(attributeName); elementAttributeProperty.setPropertyEditor(new ResourceEditor());
}
}
}
@Override
public boolean canRead() { public class ElementAttributeProperty extends Node.Property {
return true;
} private String attributeName;
private GElement element;
@Override private PropertyEditor editor;
public String getValue() throws IllegalAccessException, InvocationTargetException{
return element.getAttribute(attributeName); public ElementAttributeProperty(GElement element, String attributeName) {
} super(String.class);
this.element = element;
@Override this.attributeName = attributeName;
public boolean canWrite() { this.setName(attributeName);
return true; this.setDisplayName(attributeName);
}
}
@Override
public PropertyEditor getPropertyEditor() { @Override
return super.getPropertyEditor(); //To change body of generated methods, choose Tools | Templates. public boolean canRead() {
} return true;
}
@Override
@Override public String getValue() throws IllegalAccessException, InvocationTargetException{
public void setValue(Object val) throws IllegalAccessException, IllegalArgumentException { return element.getAttribute(attributeName);
element.addAttribute(attributeName, val.toString()); }
element.refresh();
} @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();
}
};
}

View File

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

View File

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