- add Filter Explorer for editig and previewing j3f files containting post filters (WIP, only FogFilter available atm)
- add function to preview post filters in the sceneviewer git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@7707 75d07b2b-3a1a-0410-a2c5-0572b91ccdca3.0
parent
c658d4933a
commit
0674c80727
@ -0,0 +1,12 @@ |
|||||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||||
|
<!-- |
||||||
|
To change this template, choose Tools | Templates |
||||||
|
and open the template in the editor. |
||||||
|
--> |
||||||
|
<!DOCTYPE MIME-resolver PUBLIC "-//NetBeans//DTD MIME Resolver 1.0//EN" "http://www.netbeans.org/dtds/mime-resolver-1_0.dtd"> |
||||||
|
<MIME-resolver> |
||||||
|
<file> |
||||||
|
<ext name="j3f"/> |
||||||
|
<resolver mime="application/jme3filterpostprocessor"/> |
||||||
|
</file> |
||||||
|
</MIME-resolver> |
@ -0,0 +1,58 @@ |
|||||||
|
/* |
||||||
|
* 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.assets; |
||||||
|
|
||||||
|
import com.jme3.gde.core.filters.FilterPostProcessorNode; |
||||||
|
import com.jme3.post.FilterPostProcessor; |
||||||
|
import java.io.IOException; |
||||||
|
import org.openide.filesystems.FileObject; |
||||||
|
import org.openide.loaders.DataObjectExistsException; |
||||||
|
import org.openide.loaders.MultiFileLoader; |
||||||
|
|
||||||
|
/** |
||||||
|
* |
||||||
|
* @author normenhansen |
||||||
|
*/ |
||||||
|
public class FilterDataObject extends AssetDataObject { |
||||||
|
|
||||||
|
public FilterDataObject(FileObject pf, MultiFileLoader loader) throws DataObjectExistsException, IOException { |
||||||
|
super(pf, loader); |
||||||
|
getLookupContents().add(new FilterPostProcessorNode(this)); |
||||||
|
saveExtension = "j3f"; |
||||||
|
getLookup().lookup(AssetData.class).setExtension("j3f"); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public FilterPostProcessor loadAsset() { |
||||||
|
return (FilterPostProcessor) super.loadAsset(); |
||||||
|
} |
||||||
|
} |
Binary file not shown.
@ -0,0 +1,159 @@ |
|||||||
|
/* |
||||||
|
* 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; |
||||||
|
|
||||||
|
import com.jme3.gde.core.sceneexplorer.nodes.properties.SceneExplorerProperty; |
||||||
|
import com.jme3.gde.core.sceneexplorer.nodes.properties.ScenePropertyChangeListener; |
||||||
|
import com.jme3.post.Filter; |
||||||
|
import java.io.IOException; |
||||||
|
import javax.swing.Action; |
||||||
|
import org.openide.actions.CopyAction; |
||||||
|
import org.openide.actions.CutAction; |
||||||
|
import org.openide.actions.DeleteAction; |
||||||
|
import org.openide.actions.PasteAction; |
||||||
|
import org.openide.actions.RenameAction; |
||||||
|
import org.openide.loaders.DataObject; |
||||||
|
import org.openide.nodes.AbstractNode; |
||||||
|
import org.openide.nodes.Children; |
||||||
|
import org.openide.nodes.Node; |
||||||
|
import org.openide.util.Exceptions; |
||||||
|
import org.openide.util.actions.SystemAction; |
||||||
|
|
||||||
|
/** |
||||||
|
* |
||||||
|
* @author normenhansen |
||||||
|
*/ |
||||||
|
public abstract class AbstractFilterNode extends AbstractNode implements FilterNode, ScenePropertyChangeListener { |
||||||
|
|
||||||
|
protected boolean readOnly = false; |
||||||
|
protected DataObject dataObject; |
||||||
|
protected Filter filter; |
||||||
|
|
||||||
|
public AbstractFilterNode() { |
||||||
|
super(Children.LEAF); |
||||||
|
} |
||||||
|
|
||||||
|
public AbstractFilterNode(Filter filter) { |
||||||
|
super(Children.LEAF); |
||||||
|
this.filter = filter; |
||||||
|
setName(filter.getName()); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public Action[] getActions(boolean context) { |
||||||
|
// return super.getActions(context);
|
||||||
|
return new Action[]{ |
||||||
|
SystemAction.get(DeleteAction.class) |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean canDestroy() { |
||||||
|
return !readOnly; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void destroy() throws IOException { |
||||||
|
super.destroy(); |
||||||
|
FilterPostProcessorNode nod = (FilterPostProcessorNode) getParentNode(); |
||||||
|
nod.removeFilter(filter); |
||||||
|
} |
||||||
|
|
||||||
|
protected void fireSave(boolean modified) { |
||||||
|
if (dataObject != null) { |
||||||
|
dataObject.setModified(true); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* returns the PropertySet with the given name (mostly Class.name) |
||||||
|
* @param name |
||||||
|
* @return The PropertySet or null if no PropertySet by that name exists |
||||||
|
*/ |
||||||
|
public PropertySet getPropertySet(String name) { |
||||||
|
for (int i = 0; i < getPropertySets().length; i++) { |
||||||
|
PropertySet propertySet = getPropertySets()[i]; |
||||||
|
if (propertySet.getName().equals(name)) { |
||||||
|
return propertySet; |
||||||
|
} |
||||||
|
} |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* @param saveCookie the saveCookie to set |
||||||
|
*/ |
||||||
|
public AbstractFilterNode setReadOnly(boolean readOnly) { |
||||||
|
this.readOnly = readOnly; |
||||||
|
return this; |
||||||
|
} |
||||||
|
|
||||||
|
public void refreshProperties() { |
||||||
|
setSheet(createSheet()); |
||||||
|
} |
||||||
|
|
||||||
|
protected Property<?> makeProperty(Object obj, Class returntype, String method, String name) { |
||||||
|
Property<?> prop = null; |
||||||
|
try { |
||||||
|
prop = new SceneExplorerProperty(getExplorerObjectClass().cast(obj), returntype, method, null); |
||||||
|
prop.setName(name); |
||||||
|
} catch (NoSuchMethodException ex) { |
||||||
|
Exceptions.printStackTrace(ex); |
||||||
|
} |
||||||
|
return prop; |
||||||
|
} |
||||||
|
|
||||||
|
protected Property<?> makeProperty(Object obj, Class returntype, String method, String setter, String name) { |
||||||
|
Property<?> prop = null; |
||||||
|
try { |
||||||
|
if (readOnly) { |
||||||
|
prop = new SceneExplorerProperty(getExplorerObjectClass().cast(obj), returntype, method, null); |
||||||
|
} else { |
||||||
|
prop = new SceneExplorerProperty(getExplorerObjectClass().cast(obj), returntype, method, setter, this); |
||||||
|
} |
||||||
|
prop.setName(name); |
||||||
|
|
||||||
|
} catch (NoSuchMethodException ex) { |
||||||
|
Exceptions.printStackTrace(ex); |
||||||
|
} |
||||||
|
return prop; |
||||||
|
} |
||||||
|
|
||||||
|
public void propertyChange(final String name, final Object before, final Object after) { |
||||||
|
fireSave(true); |
||||||
|
firePropertyChange(name, before, after); |
||||||
|
} |
||||||
|
|
||||||
|
public abstract Class<?> getExplorerObjectClass(); |
||||||
|
|
||||||
|
public abstract Node[] createNodes(Object key, DataObject dataObject, boolean readOnly); |
||||||
|
} |
@ -0,0 +1,107 @@ |
|||||||
|
/* |
||||||
|
* 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; |
||||||
|
|
||||||
|
import com.jme3.gde.core.filters.actions.NewFilterAction; |
||||||
|
import com.jme3.gde.core.undoredo.AbstractUndoableSceneEdit; |
||||||
|
import com.jme3.gde.core.undoredo.SceneUndoRedoManager; |
||||||
|
import com.jme3.post.Filter; |
||||||
|
import com.jme3.post.FilterPostProcessor; |
||||||
|
import java.awt.event.ActionEvent; |
||||||
|
import javax.swing.AbstractAction; |
||||||
|
import javax.swing.JMenu; |
||||||
|
import javax.swing.JMenuItem; |
||||||
|
import javax.swing.undo.CannotRedoException; |
||||||
|
import javax.swing.undo.CannotUndoException; |
||||||
|
import org.openide.util.Lookup; |
||||||
|
import org.openide.util.actions.Presenter; |
||||||
|
|
||||||
|
/** |
||||||
|
* |
||||||
|
* @author normenhansen |
||||||
|
*/ |
||||||
|
public class AddFilterAction extends AbstractAction implements Presenter.Popup { |
||||||
|
|
||||||
|
protected FilterPostProcessorNode filterNode; |
||||||
|
|
||||||
|
public AddFilterAction(FilterPostProcessorNode node) { |
||||||
|
this.filterNode = node; |
||||||
|
} |
||||||
|
|
||||||
|
public void actionPerformed(ActionEvent e) { |
||||||
|
} |
||||||
|
|
||||||
|
public JMenuItem getPopupPresenter() { |
||||||
|
JMenu result = new JMenu("Add Filter.."); |
||||||
|
for (NewFilterAction di : Lookup.getDefault().lookupAll(NewFilterAction.class)) { |
||||||
|
result.add(new JMenuItem(di.getAction(filterNode))); |
||||||
|
} |
||||||
|
return result; |
||||||
|
} |
||||||
|
|
||||||
|
private void addFilterUndo(final FilterPostProcessor fpp, final Filter filter) { |
||||||
|
//add undo
|
||||||
|
if (fpp != null && filter != null) { |
||||||
|
Lookup.getDefault().lookup(SceneUndoRedoManager.class).addEdit(this, new AbstractUndoableSceneEdit() { |
||||||
|
|
||||||
|
@Override |
||||||
|
public void sceneUndo() throws CannotUndoException { |
||||||
|
fpp.removeFilter(filter); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void sceneRedo() throws CannotRedoException { |
||||||
|
fpp.addFilter(filter); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void awtRedo() { |
||||||
|
filterNode.refresh(); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void awtUndo() { |
||||||
|
filterNode.refresh(); |
||||||
|
} |
||||||
|
}); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
private void setModified() { |
||||||
|
java.awt.EventQueue.invokeLater(new Runnable() { |
||||||
|
|
||||||
|
public void run() { |
||||||
|
filterNode.refresh(); |
||||||
|
} |
||||||
|
}); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,3 @@ |
|||||||
|
CTL_FilterExplorerAction=FilterExplorer |
||||||
|
CTL_FilterExplorerTopComponent=FilterExplorer Window |
||||||
|
HINT_FilterExplorerTopComponent=This is a FilterExplorer window |
@ -0,0 +1,67 @@ |
|||||||
|
<?xml version="1.1" encoding="UTF-8" ?> |
||||||
|
|
||||||
|
<Form version="1.5" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JPanelFormInfo"> |
||||||
|
<AuxValues> |
||||||
|
<AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="1"/> |
||||||
|
<AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/> |
||||||
|
<AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/> |
||||||
|
<AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="true"/> |
||||||
|
<AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="true"/> |
||||||
|
<AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/> |
||||||
|
<AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/> |
||||||
|
<AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/> |
||||||
|
<AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/> |
||||||
|
</AuxValues> |
||||||
|
|
||||||
|
<Layout> |
||||||
|
<DimensionLayout dim="0"> |
||||||
|
<Group type="103" groupAlignment="0" attributes="0"> |
||||||
|
<Component id="jToolBar1" alignment="0" pref="400" max="32767" attributes="0"/> |
||||||
|
<Component id="jScrollPane1" alignment="0" pref="400" max="32767" attributes="0"/> |
||||||
|
</Group> |
||||||
|
</DimensionLayout> |
||||||
|
<DimensionLayout dim="1"> |
||||||
|
<Group type="103" groupAlignment="0" attributes="0"> |
||||||
|
<Group type="102" alignment="0" attributes="0"> |
||||||
|
<Component id="jToolBar1" min="-2" pref="25" max="-2" attributes="0"/> |
||||||
|
<EmptySpace max="-2" attributes="0"/> |
||||||
|
<Component id="jScrollPane1" pref="267" max="32767" attributes="0"/> |
||||||
|
</Group> |
||||||
|
</Group> |
||||||
|
</DimensionLayout> |
||||||
|
</Layout> |
||||||
|
<SubComponents> |
||||||
|
<Container class="javax.swing.JScrollPane" name="jScrollPane1"> |
||||||
|
<AuxValues> |
||||||
|
<AuxValue name="JavaCodeGenerator_CreateCodeCustom" type="java.lang.String" value="new BeanTreeView();"/> |
||||||
|
</AuxValues> |
||||||
|
|
||||||
|
<Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/> |
||||||
|
</Container> |
||||||
|
<Container class="javax.swing.JToolBar" name="jToolBar1"> |
||||||
|
<Properties> |
||||||
|
<Property name="floatable" type="boolean" value="false"/> |
||||||
|
<Property name="rollover" type="boolean" value="true"/> |
||||||
|
</Properties> |
||||||
|
|
||||||
|
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignBoxLayout"/> |
||||||
|
<SubComponents> |
||||||
|
<Container class="javax.swing.JPanel" name="jPanel1"> |
||||||
|
|
||||||
|
<Layout> |
||||||
|
<DimensionLayout dim="0"> |
||||||
|
<Group type="103" groupAlignment="0" attributes="0"> |
||||||
|
<EmptySpace min="0" pref="392" max="32767" attributes="0"/> |
||||||
|
</Group> |
||||||
|
</DimensionLayout> |
||||||
|
<DimensionLayout dim="1"> |
||||||
|
<Group type="103" groupAlignment="0" attributes="0"> |
||||||
|
<EmptySpace min="0" pref="21" max="32767" attributes="0"/> |
||||||
|
</Group> |
||||||
|
</DimensionLayout> |
||||||
|
</Layout> |
||||||
|
</Container> |
||||||
|
</SubComponents> |
||||||
|
</Container> |
||||||
|
</SubComponents> |
||||||
|
</Form> |
@ -0,0 +1,222 @@ |
|||||||
|
/* |
||||||
|
* 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; |
||||||
|
|
||||||
|
import com.jme3.gde.core.assets.FilterDataObject; |
||||||
|
import com.jme3.gde.core.scene.SceneApplication; |
||||||
|
import com.jme3.post.FilterPostProcessor; |
||||||
|
import java.util.concurrent.Callable; |
||||||
|
import java.util.logging.Logger; |
||||||
|
import org.openide.util.NbBundle; |
||||||
|
import org.openide.windows.TopComponent; |
||||||
|
import org.openide.windows.WindowManager; |
||||||
|
import org.netbeans.api.settings.ConvertAsProperties; |
||||||
|
import org.openide.awt.ActionID; |
||||||
|
import org.openide.awt.ActionReference; |
||||||
|
import org.openide.explorer.ExplorerManager; |
||||||
|
import org.openide.explorer.ExplorerUtils; |
||||||
|
import org.openide.explorer.view.BeanTreeView; |
||||||
|
import org.openide.nodes.Node; |
||||||
|
|
||||||
|
/** |
||||||
|
* Top component which displays something. |
||||||
|
*/ |
||||||
|
@ConvertAsProperties(dtd = "-//com.jme3.gde.core.filters//FilterExplorer//EN", |
||||||
|
autostore = false) |
||||||
|
@TopComponent.Description(preferredID = "FilterExplorerTopComponent", |
||||||
|
iconBase="com/jme3/gde/core/objects_082.gif", |
||||||
|
persistenceType = TopComponent.PERSISTENCE_ALWAYS) |
||||||
|
@TopComponent.Registration(mode = "navigator", openAtStartup = true) |
||||||
|
@ActionID(category = "Window", id = "com.jme3.gde.core.filters.FilterExplorerTopComponent") |
||||||
|
@ActionReference(path = "Menu/Window" /*, position = 333 */) |
||||||
|
@TopComponent.OpenActionRegistration(displayName = "#CTL_FilterExplorerAction", |
||||||
|
preferredID = "FilterExplorerTopComponent") |
||||||
|
public final class FilterExplorerTopComponent extends TopComponent implements ExplorerManager.Provider { |
||||||
|
|
||||||
|
private static FilterExplorerTopComponent instance; |
||||||
|
private static final String PREFERRED_ID = "FilterExplorerTopComponent"; |
||||||
|
private transient ExplorerManager explorerManager = new ExplorerManager(); |
||||||
|
private FilterDataObject currentFile; |
||||||
|
private FilterPostProcessorNode node; |
||||||
|
private boolean added = false; |
||||||
|
|
||||||
|
public FilterExplorerTopComponent() { |
||||||
|
initComponents(); |
||||||
|
setName(NbBundle.getMessage(FilterExplorerTopComponent.class, "CTL_FilterExplorerTopComponent")); |
||||||
|
setToolTipText(NbBundle.getMessage(FilterExplorerTopComponent.class, "HINT_FilterExplorerTopComponent")); |
||||||
|
associateLookup(ExplorerUtils.createLookup(explorerManager, getActionMap())); |
||||||
|
} |
||||||
|
|
||||||
|
/** 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. |
||||||
|
*/ |
||||||
|
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
|
||||||
|
private void initComponents() { |
||||||
|
|
||||||
|
jScrollPane1 = new BeanTreeView(); |
||||||
|
jToolBar1 = new javax.swing.JToolBar(); |
||||||
|
jPanel1 = new javax.swing.JPanel(); |
||||||
|
|
||||||
|
jToolBar1.setFloatable(false); |
||||||
|
jToolBar1.setRollover(true); |
||||||
|
|
||||||
|
javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1); |
||||||
|
jPanel1.setLayout(jPanel1Layout); |
||||||
|
jPanel1Layout.setHorizontalGroup( |
||||||
|
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) |
||||||
|
.addGap(0, 392, Short.MAX_VALUE) |
||||||
|
); |
||||||
|
jPanel1Layout.setVerticalGroup( |
||||||
|
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) |
||||||
|
.addGap(0, 21, Short.MAX_VALUE) |
||||||
|
); |
||||||
|
|
||||||
|
jToolBar1.add(jPanel1); |
||||||
|
|
||||||
|
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); |
||||||
|
this.setLayout(layout); |
||||||
|
layout.setHorizontalGroup( |
||||||
|
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) |
||||||
|
.addComponent(jToolBar1, javax.swing.GroupLayout.DEFAULT_SIZE, 400, Short.MAX_VALUE) |
||||||
|
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 400, Short.MAX_VALUE) |
||||||
|
); |
||||||
|
layout.setVerticalGroup( |
||||||
|
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) |
||||||
|
.addGroup(layout.createSequentialGroup() |
||||||
|
.addComponent(jToolBar1, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE) |
||||||
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) |
||||||
|
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 267, Short.MAX_VALUE)) |
||||||
|
); |
||||||
|
}// </editor-fold>//GEN-END:initComponents
|
||||||
|
// Variables declaration - do not modify//GEN-BEGIN:variables
|
||||||
|
private javax.swing.JPanel jPanel1; |
||||||
|
private javax.swing.JScrollPane jScrollPane1; |
||||||
|
private javax.swing.JToolBar jToolBar1; |
||||||
|
// End of variables declaration//GEN-END:variables
|
||||||
|
|
||||||
|
@Override |
||||||
|
public void componentOpened() { |
||||||
|
// TODO add custom code on component opening
|
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void componentClosed() { |
||||||
|
// TODO add custom code on component closing
|
||||||
|
//explorerManager.setRootContext(Node.EMPTY);
|
||||||
|
setActivatedNodes(new Node[]{}); |
||||||
|
} |
||||||
|
|
||||||
|
void writeProperties(java.util.Properties p) { |
||||||
|
// better to version settings since initial version as advocated at
|
||||||
|
// http://wiki.apidesign.org/wiki/PropertyFiles
|
||||||
|
p.setProperty("version", "1.0"); |
||||||
|
// TODO store your settings
|
||||||
|
} |
||||||
|
|
||||||
|
void readProperties(java.util.Properties p) { |
||||||
|
String version = p.getProperty("version"); |
||||||
|
// TODO read your settings according to their version
|
||||||
|
} |
||||||
|
|
||||||
|
public void loadFile(FilterDataObject object) { |
||||||
|
explorerManager.setRootContext(object.getLookup().lookup(FilterPostProcessorNode.class)); |
||||||
|
node = object.getLookup().lookup(FilterPostProcessorNode.class); |
||||||
|
setActivatedNodes(new Node[]{object.getNodeDelegate()}); |
||||||
|
open(); |
||||||
|
if (currentFile != null && added) { |
||||||
|
setFilterEnabled(false); |
||||||
|
} |
||||||
|
currentFile = object; |
||||||
|
if (added) { |
||||||
|
setFilterEnabled(true); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public synchronized void setFilterEnabled(final boolean enabled) { |
||||||
|
if (added == enabled) { |
||||||
|
return; |
||||||
|
} |
||||||
|
added = enabled; |
||||||
|
if (currentFile != null) { |
||||||
|
final FilterPostProcessor fpp = this.node.getFilterPostProcessor(); |
||||||
|
SceneApplication.getApplication().enqueue(new Callable() { |
||||||
|
|
||||||
|
public Object call() throws Exception { |
||||||
|
if (enabled) { |
||||||
|
SceneApplication.getApplication().getViewPort().removeProcessor(fpp); |
||||||
|
} else { |
||||||
|
SceneApplication.getApplication().getViewPort().addProcessor(fpp); |
||||||
|
} |
||||||
|
return null; |
||||||
|
} |
||||||
|
}); |
||||||
|
|
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Gets default instance. Do not use directly: reserved for *.settings files only, |
||||||
|
* i.e. deserialization routines; otherwise you could get a non-deserialized instance. |
||||||
|
* To obtain the singleton instance, use {@link #findInstance}. |
||||||
|
*/ |
||||||
|
public static synchronized FilterExplorerTopComponent getDefault() { |
||||||
|
if (instance == null) { |
||||||
|
instance = new FilterExplorerTopComponent(); |
||||||
|
} |
||||||
|
return instance; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Obtain the SceneExplorerTopComponent instance. Never call {@link #getDefault} directly! |
||||||
|
*/ |
||||||
|
public static synchronized FilterExplorerTopComponent findInstance() { |
||||||
|
TopComponent win = WindowManager.getDefault().findTopComponent(PREFERRED_ID); |
||||||
|
if (win == null) { |
||||||
|
Logger.getLogger(FilterExplorerTopComponent.class.getName()).warning( |
||||||
|
"Cannot find " + PREFERRED_ID + " component. It will not be located properly in the window system."); |
||||||
|
return getDefault(); |
||||||
|
} |
||||||
|
if (win instanceof FilterExplorerTopComponent) { |
||||||
|
return (FilterExplorerTopComponent) win; |
||||||
|
} |
||||||
|
Logger.getLogger(FilterExplorerTopComponent.class.getName()).warning( |
||||||
|
"There seem to be multiple components with the '" + PREFERRED_ID |
||||||
|
+ "' ID. That is a potential source of errors and unexpected behavior."); |
||||||
|
return getDefault(); |
||||||
|
} |
||||||
|
|
||||||
|
public ExplorerManager getExplorerManager() { |
||||||
|
return explorerManager; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,47 @@ |
|||||||
|
/* |
||||||
|
* 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; |
||||||
|
|
||||||
|
import org.openide.loaders.DataObject; |
||||||
|
import org.openide.nodes.Node; |
||||||
|
|
||||||
|
/** |
||||||
|
* |
||||||
|
* @author normenhansen |
||||||
|
*/ |
||||||
|
public interface FilterNode{ |
||||||
|
|
||||||
|
public Class<?> getExplorerObjectClass(); |
||||||
|
|
||||||
|
public Node[] createNodes(Object key, DataObject dataObject, boolean readOnly); |
||||||
|
|
||||||
|
} |
@ -0,0 +1,203 @@ |
|||||||
|
/* |
||||||
|
* 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; |
||||||
|
|
||||||
|
import com.jme3.gde.core.assets.FilterDataObject; |
||||||
|
import com.jme3.gde.core.scene.SceneApplication; |
||||||
|
import com.jme3.post.Filter; |
||||||
|
import com.jme3.post.FilterPostProcessor; |
||||||
|
import java.awt.Image; |
||||||
|
import java.util.Iterator; |
||||||
|
import java.util.LinkedList; |
||||||
|
import java.util.List; |
||||||
|
import java.util.concurrent.Callable; |
||||||
|
import java.util.concurrent.ExecutionException; |
||||||
|
import javax.swing.Action; |
||||||
|
import org.openide.actions.CopyAction; |
||||||
|
import org.openide.actions.CutAction; |
||||||
|
import org.openide.actions.DeleteAction; |
||||||
|
import org.openide.actions.PasteAction; |
||||||
|
import org.openide.actions.RenameAction; |
||||||
|
import org.openide.nodes.AbstractNode; |
||||||
|
import org.openide.nodes.Children; |
||||||
|
import org.openide.nodes.Node; |
||||||
|
import org.openide.util.Exceptions; |
||||||
|
import org.openide.util.ImageUtilities; |
||||||
|
import org.openide.util.Lookup; |
||||||
|
import org.openide.util.actions.SystemAction; |
||||||
|
|
||||||
|
/** |
||||||
|
* |
||||||
|
* @author normenhansen |
||||||
|
*/ |
||||||
|
public class FilterPostProcessorNode extends AbstractNode { |
||||||
|
|
||||||
|
private FilterDataObject dataObject; |
||||||
|
private static Image smallImage = |
||||||
|
ImageUtilities.loadImage("com/jme3/gde/core/objects_082.gif"); |
||||||
|
private FilterPostProcessor fpp; |
||||||
|
|
||||||
|
public FilterPostProcessorNode(FilterDataObject dataObject) { |
||||||
|
super(new FilterChildren(dataObject)); |
||||||
|
this.dataObject = dataObject; |
||||||
|
setName(dataObject.getName()); |
||||||
|
((FilterChildren) getChildren()).setFilterPostProcessorNode(this); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public Image getIcon(int type) { |
||||||
|
return smallImage; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public Image getOpenedIcon(int type) { |
||||||
|
return smallImage; |
||||||
|
} |
||||||
|
|
||||||
|
public FilterPostProcessor getFilterPostProcessor() { |
||||||
|
if (fpp == null) { |
||||||
|
this.fpp = dataObject.loadAsset(); |
||||||
|
} |
||||||
|
return fpp; |
||||||
|
} |
||||||
|
|
||||||
|
public void refresh() { |
||||||
|
java.awt.EventQueue.invokeLater(new Runnable() { |
||||||
|
|
||||||
|
public void run() { |
||||||
|
((FilterChildren) getChildren()).addNotify(); |
||||||
|
((FilterChildren) getChildren()).doRefresh(); |
||||||
|
} |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
public void addFilter(final Filter filter) { |
||||||
|
SceneApplication.getApplication().enqueue(new Callable<Object>() { |
||||||
|
|
||||||
|
public Object call() throws Exception { |
||||||
|
getFilterPostProcessor().addFilter(filter); |
||||||
|
return null; |
||||||
|
} |
||||||
|
}); |
||||||
|
setModified(); |
||||||
|
refresh(); |
||||||
|
} |
||||||
|
|
||||||
|
public void removeFilter(final Filter filter) { |
||||||
|
SceneApplication.getApplication().enqueue(new Callable<Object>() { |
||||||
|
|
||||||
|
public Object call() throws Exception { |
||||||
|
getFilterPostProcessor().removeFilter(filter); |
||||||
|
return null; |
||||||
|
} |
||||||
|
}); |
||||||
|
setModified(); |
||||||
|
refresh(); |
||||||
|
} |
||||||
|
|
||||||
|
protected void setModified() { |
||||||
|
java.awt.EventQueue.invokeLater(new Runnable() { |
||||||
|
|
||||||
|
public void run() { |
||||||
|
dataObject.setModified(true); |
||||||
|
} |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public Action[] getActions(boolean context) { |
||||||
|
// return super.getActions(context);
|
||||||
|
return new Action[]{ |
||||||
|
new AddFilterAction(this) |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
public static class FilterChildren extends Children.Keys<Object> { |
||||||
|
|
||||||
|
private FilterDataObject dataObject; |
||||||
|
private FilterPostProcessorNode node; |
||||||
|
private boolean readOnly = false; |
||||||
|
|
||||||
|
public FilterChildren(FilterDataObject dataObject) { |
||||||
|
this.dataObject = dataObject; |
||||||
|
} |
||||||
|
|
||||||
|
public void setFilterPostProcessorNode(FilterPostProcessorNode node) { |
||||||
|
this.node = node; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected void addNotify() { |
||||||
|
super.addNotify(); |
||||||
|
setKeys(createKeys()); |
||||||
|
} |
||||||
|
|
||||||
|
protected void doRefresh() { |
||||||
|
refresh(); |
||||||
|
} |
||||||
|
|
||||||
|
protected List<Object> createKeys() { |
||||||
|
try { |
||||||
|
return SceneApplication.getApplication().enqueue(new Callable<List<Object>>() { |
||||||
|
|
||||||
|
public List<Object> call() throws Exception { |
||||||
|
List<Object> keys = new LinkedList<Object>(); |
||||||
|
for (Iterator it = node.getFilterPostProcessor().getFilterIterator(); it.hasNext();) { |
||||||
|
Filter filter = (Filter) it.next(); |
||||||
|
keys.add(filter); |
||||||
|
} |
||||||
|
return keys; |
||||||
|
} |
||||||
|
}).get(); |
||||||
|
} catch (InterruptedException ex) { |
||||||
|
Exceptions.printStackTrace(ex); |
||||||
|
} catch (ExecutionException ex) { |
||||||
|
Exceptions.printStackTrace(ex); |
||||||
|
} |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected Node[] createNodes(Object t) { |
||||||
|
Filter filter = (Filter) t; |
||||||
|
for (FilterNode di : Lookup.getDefault().lookupAll(FilterNode.class)) { |
||||||
|
if (di.getExplorerObjectClass().getName().equals(filter.getClass().getName())) { |
||||||
|
Node[] ret = di.createNodes(filter, dataObject, readOnly); |
||||||
|
if (ret != null) { |
||||||
|
return ret; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
return new Node[]{}; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,83 @@ |
|||||||
|
/* |
||||||
|
* 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; |
||||||
|
|
||||||
|
import com.jme3.math.ColorRGBA; |
||||||
|
import com.jme3.post.filters.FogFilter; |
||||||
|
import org.openide.loaders.DataObject; |
||||||
|
import org.openide.nodes.Node; |
||||||
|
import org.openide.nodes.Sheet; |
||||||
|
|
||||||
|
/** |
||||||
|
* |
||||||
|
* @author normenhansen |
||||||
|
*/ |
||||||
|
@org.openide.util.lookup.ServiceProvider(service = FilterNode.class) |
||||||
|
public class JmeFogFilter extends AbstractFilterNode { |
||||||
|
|
||||||
|
public JmeFogFilter() { |
||||||
|
} |
||||||
|
|
||||||
|
public JmeFogFilter(FogFilter filter, DataObject object, boolean readOnly) { |
||||||
|
super(filter); |
||||||
|
this.dataObject = object; |
||||||
|
this.readOnly = readOnly; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected Sheet createSheet() { |
||||||
|
Sheet sheet = super.createSheet(); |
||||||
|
Sheet.Set set = Sheet.createPropertiesSet(); |
||||||
|
set.setDisplayName("Fog"); |
||||||
|
set.setName(Node.class.getName()); |
||||||
|
FogFilter obj = (FogFilter) filter; |
||||||
|
if (obj == null) { |
||||||
|
return sheet; |
||||||
|
} |
||||||
|
set.put(makeProperty(obj, float.class, "getFogDistance", "setFogDistance", "Distance")); |
||||||
|
set.put(makeProperty(obj, float.class, "getFogDensity", "setFogDensity", "Density")); |
||||||
|
set.put(makeProperty(obj, ColorRGBA.class, "getFogColor", "setFogColor", "Color")); |
||||||
|
sheet.put(set); |
||||||
|
return sheet; |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public Class<?> getExplorerObjectClass() { |
||||||
|
return FogFilter.class; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public Node[] createNodes(Object key, DataObject dataObject, boolean readOnly) { |
||||||
|
return new Node[]{new JmeFogFilter((FogFilter) key, dataObject, readOnly)}; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,63 @@ |
|||||||
|
/* |
||||||
|
* 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; |
||||||
|
|
||||||
|
import com.jme3.gde.core.assets.FilterDataObject; |
||||||
|
import java.awt.event.ActionListener; |
||||||
|
import java.awt.event.ActionEvent; |
||||||
|
|
||||||
|
import org.openide.awt.ActionRegistration; |
||||||
|
import org.openide.awt.ActionReference; |
||||||
|
import org.openide.awt.ActionReferences; |
||||||
|
import org.openide.awt.ActionID; |
||||||
|
import org.openide.util.NbBundle.Messages; |
||||||
|
|
||||||
|
@ActionID(category = "Filters", |
||||||
|
id = "com.jme3.gde.core.filters.OpenFilterAction") |
||||||
|
@ActionRegistration(displayName = "#CTL_OpenFilterAction") |
||||||
|
@ActionReferences({ |
||||||
|
@ActionReference(path = "Loaders/application/jme3filterpostprocessor/Actions", position = 10) |
||||||
|
}) |
||||||
|
@Messages("CTL_OpenFilterAction=Open Filter") |
||||||
|
public final class OpenFilterAction implements ActionListener { |
||||||
|
|
||||||
|
private final FilterDataObject context; |
||||||
|
|
||||||
|
public OpenFilterAction(FilterDataObject context) { |
||||||
|
this.context = context; |
||||||
|
} |
||||||
|
|
||||||
|
public void actionPerformed(ActionEvent ev) { |
||||||
|
// TODO use context
|
||||||
|
FilterExplorerTopComponent.findInstance().loadFile(context); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,104 @@ |
|||||||
|
/* |
||||||
|
* 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; |
||||||
|
|
||||||
|
import com.bulletphysics.collision.broadphase.Dbvt.Node; |
||||||
|
import com.jme3.gde.core.filters.FilterPostProcessorNode; |
||||||
|
import com.jme3.gde.core.scene.SceneApplication; |
||||||
|
import com.jme3.gde.core.undoredo.AbstractUndoableSceneEdit; |
||||||
|
import com.jme3.gde.core.undoredo.SceneUndoRedoManager; |
||||||
|
import com.jme3.post.Filter; |
||||||
|
import java.awt.event.ActionEvent; |
||||||
|
import java.util.concurrent.Callable; |
||||||
|
import javax.swing.AbstractAction; |
||||||
|
import javax.swing.Action; |
||||||
|
import javax.swing.undo.CannotRedoException; |
||||||
|
import javax.swing.undo.CannotUndoException; |
||||||
|
import org.openide.loaders.DataObject; |
||||||
|
import org.openide.util.Lookup; |
||||||
|
|
||||||
|
/** |
||||||
|
* |
||||||
|
* @author normenhansen |
||||||
|
*/ |
||||||
|
public abstract class AbstractNewFilterAction implements NewFilterAction { |
||||||
|
|
||||||
|
protected String name = "*"; |
||||||
|
|
||||||
|
protected abstract Filter doCreateFilter(); |
||||||
|
|
||||||
|
protected Action makeAction(final FilterPostProcessorNode rootNode) { |
||||||
|
return new AbstractAction(name) { |
||||||
|
|
||||||
|
public void actionPerformed(ActionEvent e) { |
||||||
|
SceneApplication.getApplication().enqueue(new Callable<Void>() { |
||||||
|
|
||||||
|
public Void call() throws Exception { |
||||||
|
final Filter filter = doCreateFilter(); |
||||||
|
if (filter != null && rootNode != null) { |
||||||
|
rootNode.addFilter(filter); |
||||||
|
SceneUndoRedoManager undoRedo = Lookup.getDefault().lookup(SceneUndoRedoManager.class); |
||||||
|
if(undoRedo==null) return null; |
||||||
|
undoRedo.addEdit(this, new AbstractUndoableSceneEdit() { |
||||||
|
|
||||||
|
@Override |
||||||
|
public void sceneUndo() throws CannotUndoException { |
||||||
|
rootNode.removeFilter(filter); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void sceneRedo() throws CannotRedoException { |
||||||
|
rootNode.addFilter(filter); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void awtRedo() { |
||||||
|
// rootNode.refresh();
|
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void awtUndo() { |
||||||
|
// rootNode.refresh();
|
||||||
|
} |
||||||
|
}); |
||||||
|
} |
||||||
|
return null; |
||||||
|
} |
||||||
|
}); |
||||||
|
} |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
public Action getAction(FilterPostProcessorNode rootNode) { |
||||||
|
return makeAction(rootNode); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,105 @@ |
|||||||
|
/* |
||||||
|
* 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; |
||||||
|
|
||||||
|
import com.jme3.gde.core.filters.FilterPostProcessorNode; |
||||||
|
import com.jme3.gde.core.scene.SceneApplication; |
||||||
|
import com.jme3.gde.core.undoredo.AbstractUndoableSceneEdit; |
||||||
|
import com.jme3.gde.core.undoredo.SceneUndoRedoManager; |
||||||
|
import com.jme3.post.Filter; |
||||||
|
import com.jme3.post.FilterPostProcessor; |
||||||
|
import java.awt.event.ActionEvent; |
||||||
|
import java.util.concurrent.Callable; |
||||||
|
import javax.swing.AbstractAction; |
||||||
|
import javax.swing.Action; |
||||||
|
import javax.swing.undo.CannotRedoException; |
||||||
|
import javax.swing.undo.CannotUndoException; |
||||||
|
import org.openide.util.Lookup; |
||||||
|
|
||||||
|
/** |
||||||
|
* |
||||||
|
* @author normenhansen |
||||||
|
*/ |
||||||
|
public abstract class AbstractNewFilterWizardAction implements NewFilterAction{ |
||||||
|
protected String name = "*"; |
||||||
|
|
||||||
|
protected abstract Object showWizard(org.openide.nodes.Node node); |
||||||
|
|
||||||
|
protected abstract Filter doCreateFilter(FilterPostProcessor parent, Object configuration); |
||||||
|
|
||||||
|
protected Action makeAction(final FilterPostProcessorNode rootNode) { |
||||||
|
return new AbstractAction(name) { |
||||||
|
|
||||||
|
public void actionPerformed(ActionEvent e) { |
||||||
|
final Object obj = showWizard(rootNode); |
||||||
|
SceneApplication.getApplication().enqueue(new Callable<Void>() { |
||||||
|
|
||||||
|
public Void call() throws Exception { |
||||||
|
final Filter filter = doCreateFilter(rootNode.getFilterPostProcessor(), obj); |
||||||
|
if (filter != null) { |
||||||
|
rootNode.addFilter(filter); |
||||||
|
SceneUndoRedoManager undoRedo = Lookup.getDefault().lookup(SceneUndoRedoManager.class); |
||||||
|
if(undoRedo==null) return null; |
||||||
|
undoRedo.addEdit(this, new AbstractUndoableSceneEdit() { |
||||||
|
|
||||||
|
@Override |
||||||
|
public void sceneUndo() throws CannotUndoException { |
||||||
|
rootNode.removeFilter(filter); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void sceneRedo() throws CannotRedoException { |
||||||
|
rootNode.addFilter(filter); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void awtRedo() { |
||||||
|
// rootNode.refresh();
|
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void awtUndo() { |
||||||
|
// rootNode.refresh();
|
||||||
|
} |
||||||
|
}); |
||||||
|
} |
||||||
|
return null; } |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
public Action getAction(FilterPostProcessorNode rootNode) { |
||||||
|
return makeAction(rootNode); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,44 @@ |
|||||||
|
/* |
||||||
|
* 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; |
||||||
|
|
||||||
|
import com.jme3.gde.core.filters.FilterPostProcessorNode; |
||||||
|
import javax.swing.Action; |
||||||
|
|
||||||
|
/** |
||||||
|
* |
||||||
|
* @author normenhansen |
||||||
|
*/ |
||||||
|
public interface NewFilterAction { |
||||||
|
|
||||||
|
public Action getAction(FilterPostProcessorNode rootNode); |
||||||
|
} |
@ -0,0 +1,54 @@ |
|||||||
|
/* |
||||||
|
* 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.impl; |
||||||
|
|
||||||
|
import com.jme3.gde.core.filters.actions.AbstractNewFilterAction; |
||||||
|
import com.jme3.gde.core.filters.actions.NewFilterAction; |
||||||
|
import com.jme3.post.Filter; |
||||||
|
import com.jme3.post.filters.FogFilter; |
||||||
|
|
||||||
|
/** |
||||||
|
* |
||||||
|
* @author normenhansen |
||||||
|
*/ |
||||||
|
@org.openide.util.lookup.ServiceProvider(service = NewFilterAction.class) |
||||||
|
public class NewFogFilterAction extends AbstractNewFilterAction { |
||||||
|
|
||||||
|
public NewFogFilterAction() { |
||||||
|
name = "Fog Filter"; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected Filter doCreateFilter() { |
||||||
|
return new FogFilter(); |
||||||
|
} |
||||||
|
} |
After Width: | Height: | Size: 225 B |
Loading…
Reference in new issue