From 1809a23f443ddb6c991813700d1f2f0acaca2450 Mon Sep 17 00:00:00 2001 From: "rem..om" Date: Sat, 2 Jul 2011 07:59:21 +0000 Subject: [PATCH] SDK - Filter Editor : - Added a disable/enable filter item in the context menu in the filter explorer (default action) - Changed filter icon and created a propper package for filter related icons - Filter icon now switch from enabled to disabled git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@7805 75d07b2b-3a1a-0410-a2c5-0572b91ccdca --- .../gde/core/filters/AbstractFilterNode.java | 59 +++++++++++++-- .../filters/FilterExplorerTopComponent.java | 2 +- .../core/filters/FilterPostProcessorNode.java | 2 +- .../filters/actions/EnableFiterAction.java | 68 ++++++++++++++++++ .../gde/core/filters/icons/crossedEye.gif | Bin 0 -> 1022 bytes .../com/jme3/gde/core/filters/icons/eye.gif | Bin 0 -> 990 bytes sdk/jme3-core/src/com/jme3/gde/core/layer.xml | 2 +- .../src/com/jme3/gde/core/objects_082.gif | Bin 225 -> 0 bytes .../sceneviewer/SceneViewerTopComponent.form | 2 +- .../sceneviewer/SceneViewerTopComponent.java | 2 +- 10 files changed, 126 insertions(+), 11 deletions(-) create mode 100644 sdk/jme3-core/src/com/jme3/gde/core/filters/actions/EnableFiterAction.java create mode 100644 sdk/jme3-core/src/com/jme3/gde/core/filters/icons/crossedEye.gif create mode 100644 sdk/jme3-core/src/com/jme3/gde/core/filters/icons/eye.gif delete mode 100644 sdk/jme3-core/src/com/jme3/gde/core/objects_082.gif diff --git a/sdk/jme3-core/src/com/jme3/gde/core/filters/AbstractFilterNode.java b/sdk/jme3-core/src/com/jme3/gde/core/filters/AbstractFilterNode.java index 3094513ad..babb7c174 100644 --- a/sdk/jme3-core/src/com/jme3/gde/core/filters/AbstractFilterNode.java +++ b/sdk/jme3-core/src/com/jme3/gde/core/filters/AbstractFilterNode.java @@ -31,22 +31,27 @@ */ package com.jme3.gde.core.filters; +import com.jme3.gde.core.filters.actions.EnableFiterAction; import com.jme3.gde.core.properties.SceneExplorerProperty; import com.jme3.gde.core.properties.ScenePropertyChangeListener; import com.jme3.gde.core.util.PropertyUtils; import com.jme3.post.Filter; + +import java.awt.Image; import java.beans.PropertyDescriptor; import java.io.IOException; import java.lang.reflect.Field; -import java.lang.reflect.Method; import javax.swing.Action; import org.openide.actions.DeleteAction; +import org.openide.actions.RenameAction; +import org.openide.awt.Actions; import org.openide.loaders.DataObject; 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 org.openide.util.ImageUtilities; import org.openide.util.actions.SystemAction; /** @@ -59,6 +64,31 @@ public abstract class AbstractFilterNode extends AbstractNode implements FilterN protected boolean readOnly = false; protected DataObject dataObject; protected Filter filter; + private static Image icon; + private static final String ICON_ENABLED = "com/jme3/gde/core/filters/icons/eye.gif"; + private static final String ICON_DISABLED = "com/jme3/gde/core/filters/icons/crossedEye.gif"; + + @Override + public Image getIcon(int type) { + return icon; + + } + + @Override + public Image getOpenedIcon(int type) { + return icon; + } + + public void toggleIcon(boolean enabled) { + if (enabled) { + icon = ImageUtilities.loadImage(ICON_ENABLED); + + } else { + icon = ImageUtilities.loadImage(ICON_DISABLED); + + } + fireIconChange(); + } public AbstractFilterNode() { super(Children.LEAF); @@ -68,18 +98,27 @@ public abstract class AbstractFilterNode extends AbstractNode implements FilterN super(Children.LEAF); this.filter = filter; setName(filter.getName()); + icon = ImageUtilities.loadImage(ICON_ENABLED); + setIconBaseWithExtension(ICON_ENABLED); + } @Override public Action[] getActions(boolean context) { return new Action[]{ - SystemAction.get(DeleteAction.class) + SystemAction.get(RenameAction.class), + Actions.alwaysEnabled(SystemAction.get(DeleteAction.class), "Delete", "", false), + Actions.alwaysEnabled(new EnableFiterAction(this), "Toggle enabled", "", false) }; } + @Override + public Action getPreferredAction() { + return Actions.alwaysEnabled(new EnableFiterAction(this), "Toggle enabled", "", false); + } + @Override public boolean canDestroy() { -// return !readOnly; return true; } @@ -88,6 +127,7 @@ public abstract class AbstractFilterNode extends AbstractNode implements FilterN super.destroy(); FilterPostProcessorNode nod = (FilterPostProcessorNode) getParentNode(); nod.removeFilter(filter); + fireSave(true); } protected void fireSave(boolean modified) { @@ -168,18 +208,25 @@ public abstract class AbstractFilterNode extends AbstractNode implements FilterN protected void createFields(Class c, Sheet.Set set, Object obj) throws SecurityException { for (Field field : c.getDeclaredFields()) { - PropertyDescriptor prop=PropertyUtils.getPropertyDescriptor(c, field); - if(prop!=null){ - set.put(makeProperty(obj, prop.getPropertyType() , prop.getReadMethod().getName(), prop.getWriteMethod().getName(), prop.getDisplayName())); + PropertyDescriptor prop = PropertyUtils.getPropertyDescriptor(c, field); + if (prop != null) { + set.put(makeProperty(obj, prop.getPropertyType(), prop.getReadMethod().getName(), prop.getWriteMethod().getName(), prop.getDisplayName())); } } } public void propertyChange(final String name, final Object before, final Object after) { + if (name.equals("Enabled")) { + toggleIcon((Boolean)after); + } fireSave(true); firePropertyChange(name, before, after); } + public Filter getFilter() { + return filter; + } + public abstract Class getExplorerObjectClass(); public abstract Node[] createNodes(Object key, DataObject dataObject, boolean readOnly); diff --git a/sdk/jme3-core/src/com/jme3/gde/core/filters/FilterExplorerTopComponent.java b/sdk/jme3-core/src/com/jme3/gde/core/filters/FilterExplorerTopComponent.java index c22d2aa8e..6ac330f68 100644 --- a/sdk/jme3-core/src/com/jme3/gde/core/filters/FilterExplorerTopComponent.java +++ b/sdk/jme3-core/src/com/jme3/gde/core/filters/FilterExplorerTopComponent.java @@ -56,7 +56,7 @@ import org.openide.nodes.Node; @ConvertAsProperties(dtd = "-//com.jme3.gde.core.filters//FilterExplorer//EN", autostore = false) @TopComponent.Description(preferredID = "FilterExplorerTopComponent", -iconBase = "com/jme3/gde/core/objects_082.gif", +iconBase = "com/jme3/gde/core/filters/icons/eye.gif", persistenceType = TopComponent.PERSISTENCE_ALWAYS) @TopComponent.Registration(mode = "navigator", openAtStartup = true) @ActionID(category = "Window", id = "com.jme3.gde.core.filters.FilterExplorerTopComponent") diff --git a/sdk/jme3-core/src/com/jme3/gde/core/filters/FilterPostProcessorNode.java b/sdk/jme3-core/src/com/jme3/gde/core/filters/FilterPostProcessorNode.java index 9900dca22..642a61f40 100644 --- a/sdk/jme3-core/src/com/jme3/gde/core/filters/FilterPostProcessorNode.java +++ b/sdk/jme3-core/src/com/jme3/gde/core/filters/FilterPostProcessorNode.java @@ -58,7 +58,7 @@ public class FilterPostProcessorNode extends AbstractNode { private FilterDataObject dataObject; private static Image smallImage = - ImageUtilities.loadImage("com/jme3/gde/core/objects_082.gif"); + ImageUtilities.loadImage("com/jme3/gde/core/filters/icons/eye.gif"); private FilterPostProcessor fpp; public FilterPostProcessorNode(FilterDataObject dataObject) { diff --git a/sdk/jme3-core/src/com/jme3/gde/core/filters/actions/EnableFiterAction.java b/sdk/jme3-core/src/com/jme3/gde/core/filters/actions/EnableFiterAction.java new file mode 100644 index 000000000..61d48b99d --- /dev/null +++ b/sdk/jme3-core/src/com/jme3/gde/core/filters/actions/EnableFiterAction.java @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2009-2010 jMonkeyEngine + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * * Neither the name of 'jMonkeyEngine' nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package com.jme3.gde.core.filters.actions; + +/** + * + * @author Nehon + */ +import com.jme3.gde.core.filters.AbstractFilterNode; +import com.jme3.gde.core.scene.SceneApplication; +import com.jme3.post.Filter; +import java.awt.event.ActionListener; +import java.awt.event.ActionEvent; +import java.util.concurrent.Callable; +import java.util.logging.Logger; + +public class EnableFiterAction implements ActionListener { + + private final AbstractFilterNode context; + + public EnableFiterAction(AbstractFilterNode context) { + this.context = context; + } + + public void actionPerformed(ActionEvent ev) { + + SceneApplication.getApplication().enqueue(new Callable() { + + public Void call() throws Exception { + Filter filter=context.getFilter(); + filter.setEnabled(!filter.isEnabled()); + Logger.getLogger(EnableFiterAction.class.getName()).info( (filter.isEnabled()?"Enabled":"Disabled")+" "+filter.getName()); + context.propertyChange("Enabled", !filter.isEnabled(), filter.isEnabled()); + + return null; + } + }); + } +} diff --git a/sdk/jme3-core/src/com/jme3/gde/core/filters/icons/crossedEye.gif b/sdk/jme3-core/src/com/jme3/gde/core/filters/icons/crossedEye.gif new file mode 100644 index 0000000000000000000000000000000000000000..9721567d5fd0f3278aae63ecb2af43ff443e0ccc GIT binary patch literal 1022 zcmeH`{WH^X9Kb*OerGceHPfzNA`^Et`XST}m1kBRlIX769hNk5d8llD=<<|~?&Rs5 zx|kNOPK488dFbq{u!O7BurNDQR=W|t>pSoANAz2-f8cfZx_d>O3g`JIF%c7OmLj8O005Kj{m8swiAq(Q;P;~l-7hd-I=pP> z*q2MKi%xP%eGCQz5QJK-1`fwuer-e=x58ueOE6uqUBSr|xftuYj-aSWJJm``B(t-# zpit-y--g8KO=H4`N!1z&Adx^v$CgoRu~>czyuoOMnwshKu+``jYXqn_fpfKaFb5fA zGIhWif*^Xck1Tg33YBUBp7ohOj>3}Q3(@!RJEJ!$lZ)<>8{^==H@4HNQR z*my}>7t^I7FrQb%y3En%1-kl14;)NFQD!G1JtEsW{vdPfo@LGo~Y}CQu+w;89>uzz3&+#69mNqnG4}+Ul{p3m^<>G?B9cif$Cd~J%sgDp8< zzkYptb$#iYdrw!p99tA~?%cW4_diV9b^H7O|BBhm{{H+}Hg%$A^}fef*PqzE&0;&tnSb0~p3*yg=JG{% z)}=pM<8`W8^v}Mqb9bN0$w+^CaQM^z|HmHx&uH!bwB3Ja5yQ9Lp|^L{2llK^?3wXm zPtLAd;m<$+$2Ya@y8iZLyJ*SsOR|{@-~Rc(tC-=;nKQtEVi*PV3IWBREQ|~cZ45df z3qg5;fnzrVFQ<&hh6M+kIfSLw7(8iUWM<)5@*pw5b+!gG+Yg7JrhqnuLbi2+iEZb4 zZ4&>TsodOro=L3D=SJcs=Tk!Zf(I-nC_X>L&ExOnu)yf)2?^zbNh=hEl~0Ru`F?xx zfuXgHRUxVChv1d;!wPy88zx-%q&k7c*6fnSLxUu?4qY#+ISCEPO;eeqxVEflZ1bHd z&%_+U*s{ov$(-xm4uz%%j0YK7rD_-)e)dd|VdCRz2wYLTP)}Q=OU~9nfx#L8OwLYa literal 0 HcmV?d00001 diff --git a/sdk/jme3-core/src/com/jme3/gde/core/layer.xml b/sdk/jme3-core/src/com/jme3/gde/core/layer.xml index d6de1295e..76ebc2ae6 100644 --- a/sdk/jme3-core/src/com/jme3/gde/core/layer.xml +++ b/sdk/jme3-core/src/com/jme3/gde/core/layer.xml @@ -188,7 +188,7 @@ - + diff --git a/sdk/jme3-core/src/com/jme3/gde/core/objects_082.gif b/sdk/jme3-core/src/com/jme3/gde/core/objects_082.gif deleted file mode 100644 index d3b22ce4f3246b505f17e048ea65440a186aef1b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 225 zcmZ?wbhEHb6krfwI3msP|Nnmt6MNP<{~6NG#HSZ9Xia|h_S1(i-`{-v`t|!S$PlZBCiL7G7aBnGmRfi>=dT3<@$yo^=rk{;|^car6R!kt45EN5;om>yJ7uGA=L zIM&8sAdxeL+pVyKiNlBG(6b8>N|tY@R$AO(nQ$sMV4ogirwgOH#*w?a4;CHJ*J)r> T)pKaEZd5lg)alk%WUvMRLC9PL diff --git a/sdk/jme3-core/src/com/jme3/gde/core/sceneviewer/SceneViewerTopComponent.form b/sdk/jme3-core/src/com/jme3/gde/core/sceneviewer/SceneViewerTopComponent.form index 0dd8d7a34..a019274f3 100644 --- a/sdk/jme3-core/src/com/jme3/gde/core/sceneviewer/SceneViewerTopComponent.form +++ b/sdk/jme3-core/src/com/jme3/gde/core/sceneviewer/SceneViewerTopComponent.form @@ -53,7 +53,7 @@ - + diff --git a/sdk/jme3-core/src/com/jme3/gde/core/sceneviewer/SceneViewerTopComponent.java b/sdk/jme3-core/src/com/jme3/gde/core/sceneviewer/SceneViewerTopComponent.java index 4365b5e45..54a589367 100644 --- a/sdk/jme3-core/src/com/jme3/gde/core/sceneviewer/SceneViewerTopComponent.java +++ b/sdk/jme3-core/src/com/jme3/gde/core/sceneviewer/SceneViewerTopComponent.java @@ -118,7 +118,7 @@ public final class SceneViewerTopComponent extends TopComponent { }); jToolBar1.add(enableCamLight); - jToggleButton1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/jme3/gde/core/objects_082.gif"))); // NOI18N + jToggleButton1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/jme3/gde/core/filters/icons/eye.gif"))); // NOI18N org.openide.awt.Mnemonics.setLocalizedText(jToggleButton1, org.openide.util.NbBundle.getMessage(SceneViewerTopComponent.class, "SceneViewerTopComponent.jToggleButton1.text")); // NOI18N jToggleButton1.setToolTipText(org.openide.util.NbBundle.getMessage(SceneViewerTopComponent.class, "SceneViewerTopComponent.jToggleButton1.toolTipText")); // NOI18N jToggleButton1.setFocusable(false);