From 81ba23a2e248b67f91f2cbe731b85a5b3e60aa9d Mon Sep 17 00:00:00 2001 From: relu91 Date: Tue, 19 Aug 2014 15:00:46 +0200 Subject: [PATCH] Bug fixing --- sdk/jme3-gui/nbproject/project.properties | 18 +- .../release/modules/ext/Nifty-Editor0.5.9.jar | Bin 6848932 -> 6855071 bytes .../src/com/jme3/gde/gui/Navigator.java | 402 ++++++----- .../jme3/gde/gui/NiftyGuiVisualElement.java | 669 +++++++++--------- .../com/jme3/gde/gui/nodes/GElementNode.java | 245 ++++--- 5 files changed, 671 insertions(+), 663 deletions(-) diff --git a/sdk/jme3-gui/nbproject/project.properties b/sdk/jme3-gui/nbproject/project.properties index f82a1a43d..8b6690b3e 100644 --- a/sdk/jme3-gui/nbproject/project.properties +++ b/sdk/jme3-gui/nbproject/project.properties @@ -1,9 +1,9 @@ -file.reference.swingtonifty.jar=release/modules/ext/swingtonifty.jar -#Thu, 25 Aug 2011 20:26:49 +0200 -javac.source=1.6 -javac.compilerargs=-Xlint -Xlint:-serial -license.file=../license-jme.txt -nbm.homepage=http://www.jmonkeyengine.com -nbm.module.author=Normen Hansen,Cristiano Aguzzi -nbm.needs.restart=true -spec.version.base=3.1.5 +file.reference.swingtonifty.jar=release/modules/ext/swingtonifty.jar +#Thu, 25 Aug 2011 20:26:49 +0200 +javac.source=1.6 +javac.compilerargs=-Xlint -Xlint:-serial +license.file=../license-jme.txt +nbm.homepage=http://www.jmonkeyengine.com +nbm.module.author=Normen Hansen,Cristiano Aguzzi +nbm.needs.restart=true +spec.version.base=3.2 diff --git a/sdk/jme3-gui/release/modules/ext/Nifty-Editor0.5.9.jar b/sdk/jme3-gui/release/modules/ext/Nifty-Editor0.5.9.jar index c452067249a735d739d13b426c4b49adbb2009c0..36800860447b491f00d488234561c292677b25d5 100644 GIT binary patch delta 56503 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%0DOLcbB2hF7v%MegH7C_YYRQ_hiQ(ne!f_ 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 Ns?OwN8y>yG68hT) za_RXhilZg;{OJ?zV^#YA{`uMy)?AQ7#zKyG+)q)iwsX0!8Jtr;OWT@ax?JkC6}pHV z0>@34EDA^?OAQX9dVW9^DbI)XYqYh%v26STWy>> z=LqlZZklwGBO|Pp&lTnw8t$i5Fv($j!NUnCauEgSG$vX$nAyg;G7hb0-RmJPGQwSWYY<(#-^_RQF7hWLYYL@TwJ3CJ zauF5?>uyTZ*pyd^&GZ~MX_JB;T}%7$iAJ?@S&wFQzW#(Rov1`FaZT@-*ZRCS>EJrE z<;F+cYl`1izD3}v*UjVRi$LS%OYmp%T%YJqHwHXau4@7r170nogs)*g%DE^~f$I~L z@azSLK+y&cUuGAJ+Y`Lv(Op^ee_dy;PsEDVTajAL(zd^NZoijr;XMIB-6U>LaN{k{yK8 z7ls#eIhtsVoyQR#X(_Y*KPw_92wa~OG24Gk!%tj*(kCy_4J^JNd>*zaj4y}yTvn0= ze?Tv}!+z%a3$1cU^&Wl;6k<_O-c|gy%tWp=V>U4XDHg^(HF+^-`#g;&-^TK4kiL-7 z_*r}yD4$&ZVLyz&93_v^PYPGi!EC+oVhLyva!`IluwHr@hSnslamK(u-_&K6+v?}E z#_3d}X~rYUq7t(aL7Ww4rzp0?rWrQi3guaVW?K-KYe7yHjE(9GGG*MrucT!t?dulq z8=V?x^f`}KN=~f<1#X#6Nx2>tv<86xO!=c1*bljbMz~7-ZLjc(^RJzS1p|f)%D7A< zBvW1f(mtCywA#D%JRJ{=;~qt_(OXwUigj)O0@~_mx93!Pamo7E==Nq&>IkqMCbt-t z@(>2RR10!9*$uRSihL2f=p}XrV>R~FJ8^NX37&W5~)WWS>HXJMO{mybM;?ekHKQdAOw^=;ZLlO{riC5JTlMO7Sb8n?1GBWoc?NGRd0MFJy@tp+NWJvk;^V7lUU%bu2 zyEvDYQ0wC|DnE|(B{Tf8DoDZoMh@Y~?Za+ntzlwrnY4VQzgvIz?2rIzF2n6DjXAAv zoMJe3|4s!%@MJU_-VL)<&6$UEks0i%Vlg9S8B8S=oWa?f`l1l+_30)XXGmJ(zcxGR zUWEZ0$(JAokVnDdvPqLDj&$)bAAvxoQrD9G!^8a|Pzw{E{x*I`8#1Ifo>3Z)N7%kO z#){h`G%NWwb!I%p4}|RgqY6Qi)lTd$-d-ui$S%#^j*OJWf(EYG9fPyP(=BXR@F&?6=%WneG z6Lw35wp1>AKdWFzMriMRny?TEJ4-lgM2>AlO#SuY=EqSaB2snc|i?NI>x}>9UN0De&kmhPL&k$CKRmU_AWQyYwjf&`NYsA>r?5e9cMd4V*%yep z^qqx^KasSab&mhVn%fw>maHAuWqX(D#yV_V4SBxjvW*3s=hSI|_bGsGMBatCzhzg( zp}pb(YWGZ1_QrYSH&Q~d3aw(ciLm(K=109$5ViW;u3F;m3?U!^wRq44C2Xo&23UBo zx8>RSQH++Goz@(?00Ayj2RkfL=o}IxvN>TD4jGUM*~}I&UV>YIL<>aFuR$|!NS)D; zc*1Aw)UenhNU@!d-I8C3;Bhg_BC`KM5k{Qc5RL9;*n7(c6UIVs%9u2e=3rO_;>kiz_p_L=R}~=jLG44LrM|W%9Pct1FV!|! z9LwWiWO=ke>Bu+%s1n!sLXDATDNIj)yl0f6G5xB=$y|><&^tQI<<}sVjgmy4cfPbv zmF?eUj=nmTE;K{0qenr(ow%i?lcuYm%Fj!=USccb@>s$6b&za47}eerXa{Q!iocbw zF(c{r=a5;DuyJM>e&BApaED%37|-N_QVTyow4pgNV^$^a%L;oggG{XT?o?irvO{$8 zqv(FYe#i+#8p&n>BDViweB$CE$|Hv|=+i@z_IGpruTOksWee+$`DuaSg7hQSmZWC< zCUP4{;bZ&mBM;dP{QvyAMEd~y;on>KvE%%SHslWDayne;hN1Oo);sWvoFZ%Q^CYiG?!xlBsHI-Y82eLNYF?6t)N7f2PD0ge7c zYD!7RNeY$=Gm2G#)`1{4IxkPYsoqsyb~+;;0jmFg+$T3iBDJ!&!11(sn0GJprv3J? z%&_Gz-`CkoD&YsGxhPr#4kyr9lu0_%);fWIX&2A4CsBLZD1m=^{~7J<*~5j;od(?+ zV}Jbxk#Jjhz3Z;elJB1m6vU@C5>+)5sx=KVVa{_Hf4TV-^*d2W;mh11f+wvsVfucO zEk(qqA`+Ji%cZAA641By>#g7C3cN4)pxn_v_;>vJk3Q-fBsI4f<}V;g`xognk7uo) zAntQj$k)w&`0*bgu5-sG&$*8F$4cne?3LG|QBcCBAmr;wKlGCv-HW8x%Y4V{y>iH_ zX4viU`A7fqZj|SSuZC7<PYIgM6sXYMN33PUq14Ml z$||rTZWcCvU?@U8ZW{CB+bvC3X&Vur9xL?ZPP#K#{QfHyrPB`z7&ML1QgrG+$Csud zT+66P*bmbq&zRk5l49JnL&JnAzJ>QiS`lY$r1H9ZI1qyKrD=nwJrC zO;5SzZH>t@nxvKYQHjY#d(>ht^qEL(C3GqoROpf+uEH4AU?lv7{5>HEw?3$@airOW zmo~3q{18Vk#Z(sLSC0|ezf|g9o>a`+lx^gml?5}a2C7Qq?*W!~&hkPKF+ON?|>Y4*@E2W+r z??r~|@3cLn)a5El6A{%Vt7-EGm{w`I#y~6@Ge39BZ!S7PYu3*7#F+id0P} zCupPXVQ9(KKy|j5E@ceG^+Kaw$p8Wj>CgFUvXNxNazzO{`K8fWWDN4!R3-A-6t+l> zOYv@1na0T4esyF7a*MQSh>LbI8G5Ee*xHUmwK7Wjv|T3`FM`h*trw4pK-}HnM9TpUhC)b0>L((x0ha;w2Ux zWa2mprc8#A7p3iRE&Y?HhES!_0udL@Wt#OIr9$X3s?xG7hKLt!hmh!8M09=i|4UJuR%_kqG-)k!~ga}2A6H8f{=~U zrt0sbe4~79FsryKusdo{T2+Xerhof>r(-NWYM4f@F$1aXCk~uM(#BcEB{P7>^lyPlBiEVDy)YJwhcsu?1%hP z-EW6m^98czglWBF=wT=G1t?K$VTsvxl#LJlB#0^UQ!X3A?n{q3cU-EbqiN*4RD>MK zk%KM2PF+Z^SP!XQ2C=OTddLsuX>#vyf^c$0d3hkVvB2viS`}gQcY+MjY3z5?v4%I( zWRgh+zTGJwom%t3*EDUhN!s=(KzY^O##9KRoz=xjuQsm)UFMngHfhrgL(Z0MS?r>* z$Eb5Y+tH%4KE;PU!b{Y#r-YGmdb+X_2kY6*LtK8B^bl8L6l3Y_~_p%ufE6IdqtP0kleGn z%%m|K&3Bj(9M8d-o{&bs@421#uzajFv{Rl{vbTBdY8^EL@?-%bdqi!Dh_gV~z5R$8FVMHzV;_vD^@9MeuP2+SW*Oxzri~3g>aY+5PboMz31<$puuIa%`JH;AjcAAR zYM9Y_4b%SOx`IgM`aYCq3#vBJPz+|@dtu#VuP7A4KM3{mNUlQjtETFc$IsDVx1J7? zur+5j#{Wk}YD5N}SXfSp!OilF1SS;5B*sW|-3$vef}>{08C>K*l` zG~|=+6<=ErFUM)djgs9@8gd#gzO_;^L$h6TcRj5ICB+`4v6EU11yJ5H{?v?cdO!S7 z?s#XH<32l1d@GD=5Df7$#zk8;T|2@goFi+=SG_Y~F&B8U<%s|$bP8DBdt(<@u4ePk zDQO|crrMu1dd7bP62)#BC_i#=#@Zbpc_=7R2)^bTqx@Gdi5{jNCuPt7_dMI70r`u! z{{9+B8leE@@1CRvk`_oKfXq0_GrhUiH#!K--CMu)3$ungFD~EZpllMF#PTMb5AO63 zmQ;07_H9UvB>q_s!RUQz+DAn`q=6)spq+ffh$t#)Expr&!2vQC@? z9_XcRNmE&lJcd9^+y$(%}LiSjqM6~Enf$Nx2CABxrcaOEcWQgYnRho=Vv9CH+fR>J~INLW>9FSUz`A?ea2Rt62aN(QXq$1TY{Q^D7?yo1w!PI&|7Nt1|hn0|^NKOx!B_~)i2`3z)DTO$G zCmgiC$}9_QEpey03k3ID>srro z7su3EQ3wsIJNx`MtfTfb2SxcXrMrkGSVlyvp!_S1?U?Z=4suUuhDH6}(?bqgV-I;v zai889K&kwejiZ*P@*eVhk)P_^bejgtFK$;Rf}TE35Vv!~RQS!VOW~1;wf?k*D35(n znIGPKex*8G82u8%SwpgfAO8H#*gVoG4`R}|O|o6oL@aH7bstW3*F5{KuGSy>(o+KM zdF)X>v1*3`mQ15I#H7hMyjME_&ZEb)XZX&oSD)Gz~jLo>|@(1D~ zKgeYu$Y%GF6Q3(u=p?;=vjBC%0Drj_!pdqoA5I;k*cabSf1-j#FsL`T*j80qeULV1 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 delta 51057 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

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