- 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-0572b91ccdca
This commit is contained in:
parent
c658d4933a
commit
0674c80727
@ -4,5 +4,5 @@ OpenIDE-Module-Implementation-Version: 0
|
|||||||
OpenIDE-Module-Install: com/jme3/gde/core/Installer.class
|
OpenIDE-Module-Install: com/jme3/gde/core/Installer.class
|
||||||
OpenIDE-Module-Layer: com/jme3/gde/core/layer.xml
|
OpenIDE-Module-Layer: com/jme3/gde/core/layer.xml
|
||||||
OpenIDE-Module-Localizing-Bundle: com/jme3/gde/core/Bundle.properties
|
OpenIDE-Module-Localizing-Bundle: com/jme3/gde/core/Bundle.properties
|
||||||
OpenIDE-Module-Requires: org.netbeans.api.javahelp.Help
|
OpenIDE-Module-Requires: org.netbeans.api.javahelp.Help, org.openide.windows.WindowManager
|
||||||
|
|
||||||
|
@ -3,6 +3,8 @@ OpenIDE-Module-Long-Description=\
|
|||||||
This plugin provides the core functions of jMonkeyPlatform.
|
This plugin provides the core functions of jMonkeyPlatform.
|
||||||
OpenIDE-Module-Name=jMonkeyPlatform Core
|
OpenIDE-Module-Name=jMonkeyPlatform Core
|
||||||
OpenIDE-Module-Short-Description=The jMonkeyPlatform Core Plugin
|
OpenIDE-Module-Short-Description=The jMonkeyPlatform Core Plugin
|
||||||
|
Services/MIMEResolver/FilterPostProcessorResolver.xml=FilterPostProcessor Files
|
||||||
Services/MIMEResolver/JMEBinaryModelResolver.xml=JMEBinaryModel Files
|
Services/MIMEResolver/JMEBinaryModelResolver.xml=JMEBinaryModel Files
|
||||||
Menu/Help/jmewiki.url=Browse Help online
|
Menu/Help/jmewiki.url=Browse Help online
|
||||||
Menu/Help/help-main.xml=Browse Help locally
|
Menu/Help/help-main.xml=Browse Help locally
|
||||||
|
Templates/Other/filter.j3f=Empty FilterPostProcessor file
|
||||||
|
@ -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();
|
||||||
|
}
|
||||||
|
}
|
BIN
sdk/jme3-core/src/com/jme3/gde/core/filter.j3f
Normal file
BIN
sdk/jme3-core/src/com/jme3/gde/core/filter.j3f
Normal file
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);
|
||||||
|
}
|
107
sdk/jme3-core/src/com/jme3/gde/core/filters/AddFilterAction.java
Normal file
107
sdk/jme3-core/src/com/jme3/gde/core/filters/AddFilterAction.java
Normal file
@ -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;
|
||||||
|
}
|
||||||
|
}
|
47
sdk/jme3-core/src/com/jme3/gde/core/filters/FilterNode.java
Normal file
47
sdk/jme3-core/src/com/jme3/gde/core/filters/FilterNode.java
Normal file
@ -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();
|
||||||
|
}
|
||||||
|
}
|
@ -131,6 +131,70 @@
|
|||||||
</folder>
|
</folder>
|
||||||
<folder name="Loaders">
|
<folder name="Loaders">
|
||||||
<folder name="application">
|
<folder name="application">
|
||||||
|
<folder name="jme3filterpostprocessor">
|
||||||
|
<folder name="Actions">
|
||||||
|
<file name="org-openide-actions-CopyAction.shadow">
|
||||||
|
<attr name="originalFile" stringvalue="Actions/Edit/org-openide-actions-CopyAction.instance"/>
|
||||||
|
<attr name="position" intvalue="300"/>
|
||||||
|
</file>
|
||||||
|
<file name="org-openide-actions-CutAction.shadow">
|
||||||
|
<attr name="originalFile" stringvalue="Actions/Edit/org-openide-actions-CutAction.instance"/>
|
||||||
|
<attr name="position" intvalue="200"/>
|
||||||
|
</file>
|
||||||
|
<file name="org-openide-actions-DeleteAction.shadow">
|
||||||
|
<attr name="originalFile" stringvalue="Actions/Edit/org-openide-actions-DeleteAction.instance"/>
|
||||||
|
<attr name="position" intvalue="500"/>
|
||||||
|
</file>
|
||||||
|
<file name="org-openide-actions-FileSystemAction.shadow">
|
||||||
|
<attr name="originalFile" stringvalue="Actions/System/org-openide-actions-FileSystemAction.instance"/>
|
||||||
|
<attr name="position" intvalue="1000"/>
|
||||||
|
</file>
|
||||||
|
<file name="org-openide-actions-PropertiesAction.shadow">
|
||||||
|
<attr name="originalFile" stringvalue="Actions/System/org-openide-actions-PropertiesAction.instance"/>
|
||||||
|
<attr name="position" intvalue="1300"/>
|
||||||
|
</file>
|
||||||
|
<file name="org-openide-actions-RenameAction.shadow">
|
||||||
|
<attr name="originalFile" stringvalue="Actions/System/org-openide-actions-RenameAction.instance"/>
|
||||||
|
<attr name="position" intvalue="600"/>
|
||||||
|
</file>
|
||||||
|
<file name="org-openide-actions-SaveAsTemplateAction.shadow">
|
||||||
|
<attr name="originalFile" stringvalue="Actions/System/org-openide-actions-SaveAsTemplateAction.instance"/>
|
||||||
|
<attr name="position" intvalue="800"/>
|
||||||
|
</file>
|
||||||
|
<file name="org-openide-actions-ToolsAction.shadow">
|
||||||
|
<attr name="originalFile" stringvalue="Actions/System/org-openide-actions-ToolsAction.instance"/>
|
||||||
|
<attr name="position" intvalue="1200"/>
|
||||||
|
</file>
|
||||||
|
<file name="sep-1.instance">
|
||||||
|
<attr name="instanceClass" stringvalue="javax.swing.JSeparator"/>
|
||||||
|
<attr name="position" intvalue="100"/>
|
||||||
|
</file>
|
||||||
|
<file name="sep-2.instance">
|
||||||
|
<attr name="instanceClass" stringvalue="javax.swing.JSeparator"/>
|
||||||
|
<attr name="position" intvalue="400"/>
|
||||||
|
</file>
|
||||||
|
<file name="sep-3.instance">
|
||||||
|
<attr name="instanceClass" stringvalue="javax.swing.JSeparator"/>
|
||||||
|
<attr name="position" intvalue="700"/>
|
||||||
|
</file>
|
||||||
|
<file name="sep-4.instance">
|
||||||
|
<attr name="instanceClass" stringvalue="javax.swing.JSeparator"/>
|
||||||
|
<attr name="position" intvalue="900"/>
|
||||||
|
</file>
|
||||||
|
<file name="sep-5.instance">
|
||||||
|
<attr name="instanceClass" stringvalue="javax.swing.JSeparator"/>
|
||||||
|
<attr name="position" intvalue="1100"/>
|
||||||
|
</file>
|
||||||
|
</folder>
|
||||||
|
<folder name="Factories">
|
||||||
|
<file name="FilterPostProcessorDataLoader.instance">
|
||||||
|
<attr name="SystemFileSystem.icon" urlvalue="nbresloc:/com/jme3/gde/core/objects_082.gif"/>
|
||||||
|
<attr name="dataObjectClass" stringvalue="com.jme3.gde.core.assets.FilterDataObject"/>
|
||||||
|
<attr name="instanceCreate" methodvalue="org.openide.loaders.DataLoaderPool.factory"/>
|
||||||
|
<attr name="mimeType" stringvalue="application/jme3filterpostprocessor"/>
|
||||||
|
</file>
|
||||||
|
</folder>
|
||||||
|
</folder>
|
||||||
<folder name="jme3model">
|
<folder name="jme3model">
|
||||||
<folder name="Actions">
|
<folder name="Actions">
|
||||||
<file name="org-openide-actions-CopyAction.shadow">
|
<file name="org-openide-actions-CopyAction.shadow">
|
||||||
@ -220,6 +284,12 @@
|
|||||||
</folder>
|
</folder>
|
||||||
</folder>
|
</folder>
|
||||||
<folder name="Templates">
|
<folder name="Templates">
|
||||||
|
<folder name="Filters">
|
||||||
|
<file name="filter.j3f" url="filter.j3f">
|
||||||
|
<attr name="displayName" bundlevalue="com.jme3.gde.core.Bundle#Templates/Other/filter.j3f"/>
|
||||||
|
<attr name="template" boolvalue="true"/>
|
||||||
|
</file>
|
||||||
|
</folder>
|
||||||
<folder name="Project">
|
<folder name="Project">
|
||||||
<folder name="Samples">
|
<folder name="Samples">
|
||||||
<file name="Standard_hidden"/>
|
<file name="Standard_hidden"/>
|
||||||
@ -238,6 +308,9 @@
|
|||||||
<file name="org-netbeans-modules-java-helpset.xml_hidden"/>
|
<file name="org-netbeans-modules-java-helpset.xml_hidden"/>
|
||||||
</folder>
|
</folder>
|
||||||
<folder name="MIMEResolver">
|
<folder name="MIMEResolver">
|
||||||
|
<file name="FilterPostProcessorResolver.xml" url="FilterPostProcessorResolver.xml">
|
||||||
|
<attr name="displayName" bundlevalue="com.jme3.gde.core.Bundle#Services/MIMEResolver/FilterPostProcessorResolver.xml"/>
|
||||||
|
</file>
|
||||||
<file name="JMEBinaryModelResolver.xml" url="JMEBinaryModelResolver.xml">
|
<file name="JMEBinaryModelResolver.xml" url="JMEBinaryModelResolver.xml">
|
||||||
<attr name="displayName" bundlevalue="com.jme3.gde.core.Bundle#Services/MIMEResolver/JMEBinaryModelResolver.xml"/>
|
<attr name="displayName" bundlevalue="com.jme3.gde.core.Bundle#Services/MIMEResolver/JMEBinaryModelResolver.xml"/>
|
||||||
</file>
|
</file>
|
||||||
|
BIN
sdk/jme3-core/src/com/jme3/gde/core/objects_082.gif
Normal file
BIN
sdk/jme3-core/src/com/jme3/gde/core/objects_082.gif
Normal file
Binary file not shown.
After Width: | Height: | Size: 225 B |
@ -161,7 +161,12 @@ public class SceneExplorerProperty<T> extends PropertySupport.Reflection<T> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected void addUndo(final Object before, final Object after) {
|
protected void addUndo(final Object before, final Object after) {
|
||||||
Lookup.getDefault().lookup(SceneUndoRedoManager.class).addEdit(this, new AbstractUndoableSceneEdit() {
|
SceneUndoRedoManager undoRedo=Lookup.getDefault().lookup(SceneUndoRedoManager.class);
|
||||||
|
if(undoRedo==null){
|
||||||
|
Logger.getLogger(SceneExplorerProperty.class.getName()).log(Level.WARNING, "Cannot access SceneUndoRedoManager");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
undoRedo.addEdit(this, new AbstractUndoableSceneEdit() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void sceneUndo() {
|
public void sceneUndo() {
|
||||||
|
@ -7,3 +7,5 @@ SceneViewerTopComponent.enableWireframe.toolTipText=Toggle wireframe mode
|
|||||||
SceneViewerTopComponent.enableWireframe.text=
|
SceneViewerTopComponent.enableWireframe.text=
|
||||||
SceneViewerTopComponent.enableStats.toolTipText=Display Stats
|
SceneViewerTopComponent.enableStats.toolTipText=Display Stats
|
||||||
SceneViewerTopComponent.enableStats.text=
|
SceneViewerTopComponent.enableStats.text=
|
||||||
|
SceneViewerTopComponent.jToggleButton1.text=
|
||||||
|
SceneViewerTopComponent.jToggleButton1.toolTipText=show post filter effects
|
||||||
|
@ -50,6 +50,27 @@
|
|||||||
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="enableCamLightActionPerformed"/>
|
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="enableCamLightActionPerformed"/>
|
||||||
</Events>
|
</Events>
|
||||||
</Component>
|
</Component>
|
||||||
|
<Component class="javax.swing.JToggleButton" name="jToggleButton1">
|
||||||
|
<Properties>
|
||||||
|
<Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
|
||||||
|
<Image iconType="3" name="/com/jme3/gde/core/objects_082.gif"/>
|
||||||
|
</Property>
|
||||||
|
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||||
|
<ResourceString bundle="com/jme3/gde/core/sceneviewer/Bundle.properties" key="SceneViewerTopComponent.jToggleButton1.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
|
</Property>
|
||||||
|
<Property name="toolTipText" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||||
|
<ResourceString bundle="com/jme3/gde/core/sceneviewer/Bundle.properties" key="SceneViewerTopComponent.jToggleButton1.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
|
</Property>
|
||||||
|
<Property name="focusable" type="boolean" value="false"/>
|
||||||
|
<Property name="horizontalTextPosition" type="int" value="0"/>
|
||||||
|
<Property name="verticalTextPosition" type="int" value="3"/>
|
||||||
|
</Properties>
|
||||||
|
<Events>
|
||||||
|
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="jToggleButton1ActionPerformed"/>
|
||||||
|
</Events>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JToolBar$Separator" name="jSeparator1">
|
||||||
|
</Component>
|
||||||
<Component class="javax.swing.JToggleButton" name="enableWireframe">
|
<Component class="javax.swing.JToggleButton" name="enableWireframe">
|
||||||
<Properties>
|
<Properties>
|
||||||
<Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
|
<Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
|
||||||
|
@ -31,6 +31,7 @@
|
|||||||
*/
|
*/
|
||||||
package com.jme3.gde.core.sceneviewer;
|
package com.jme3.gde.core.sceneviewer;
|
||||||
|
|
||||||
|
import com.jme3.gde.core.filters.FilterExplorerTopComponent;
|
||||||
import com.jme3.gde.core.scene.SceneApplication;
|
import com.jme3.gde.core.scene.SceneApplication;
|
||||||
import com.jme3.system.JmeCanvasContext;
|
import com.jme3.system.JmeCanvasContext;
|
||||||
import java.awt.Canvas;
|
import java.awt.Canvas;
|
||||||
@ -92,6 +93,8 @@ public final class SceneViewerTopComponent extends TopComponent {
|
|||||||
|
|
||||||
jToolBar1 = new javax.swing.JToolBar();
|
jToolBar1 = new javax.swing.JToolBar();
|
||||||
enableCamLight = new javax.swing.JToggleButton();
|
enableCamLight = new javax.swing.JToggleButton();
|
||||||
|
jToggleButton1 = new javax.swing.JToggleButton();
|
||||||
|
jSeparator1 = new javax.swing.JToolBar.Separator();
|
||||||
enableWireframe = new javax.swing.JToggleButton();
|
enableWireframe = new javax.swing.JToggleButton();
|
||||||
jPanel1 = new javax.swing.JPanel();
|
jPanel1 = new javax.swing.JPanel();
|
||||||
enableStats = new javax.swing.JToggleButton();
|
enableStats = new javax.swing.JToggleButton();
|
||||||
@ -115,6 +118,20 @@ public final class SceneViewerTopComponent extends TopComponent {
|
|||||||
});
|
});
|
||||||
jToolBar1.add(enableCamLight);
|
jToolBar1.add(enableCamLight);
|
||||||
|
|
||||||
|
jToggleButton1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/jme3/gde/core/objects_082.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);
|
||||||
|
jToggleButton1.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
|
||||||
|
jToggleButton1.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
|
||||||
|
jToggleButton1.addActionListener(new java.awt.event.ActionListener() {
|
||||||
|
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
||||||
|
jToggleButton1ActionPerformed(evt);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
jToolBar1.add(jToggleButton1);
|
||||||
|
jToolBar1.add(jSeparator1);
|
||||||
|
|
||||||
enableWireframe.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/jme3/gde/core/sceneviewer/icons/box_color.gif"))); // NOI18N
|
enableWireframe.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/jme3/gde/core/sceneviewer/icons/box_color.gif"))); // NOI18N
|
||||||
org.openide.awt.Mnemonics.setLocalizedText(enableWireframe, org.openide.util.NbBundle.getMessage(SceneViewerTopComponent.class, "SceneViewerTopComponent.enableWireframe.text")); // NOI18N
|
org.openide.awt.Mnemonics.setLocalizedText(enableWireframe, org.openide.util.NbBundle.getMessage(SceneViewerTopComponent.class, "SceneViewerTopComponent.enableWireframe.text")); // NOI18N
|
||||||
enableWireframe.setToolTipText(org.openide.util.NbBundle.getMessage(SceneViewerTopComponent.class, "SceneViewerTopComponent.enableWireframe.toolTipText")); // NOI18N
|
enableWireframe.setToolTipText(org.openide.util.NbBundle.getMessage(SceneViewerTopComponent.class, "SceneViewerTopComponent.enableWireframe.toolTipText")); // NOI18N
|
||||||
@ -162,11 +179,18 @@ public final class SceneViewerTopComponent extends TopComponent {
|
|||||||
private void enableStatsActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_enableStatsActionPerformed
|
private void enableStatsActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_enableStatsActionPerformed
|
||||||
app.enableStats(enableStats.isSelected());
|
app.enableStats(enableStats.isSelected());
|
||||||
}//GEN-LAST:event_enableStatsActionPerformed
|
}//GEN-LAST:event_enableStatsActionPerformed
|
||||||
|
|
||||||
|
private void jToggleButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jToggleButton1ActionPerformed
|
||||||
|
FilterExplorerTopComponent.findInstance().setFilterEnabled(jToggleButton1.isSelected());
|
||||||
|
}//GEN-LAST:event_jToggleButton1ActionPerformed
|
||||||
|
|
||||||
// Variables declaration - do not modify//GEN-BEGIN:variables
|
// Variables declaration - do not modify//GEN-BEGIN:variables
|
||||||
private javax.swing.JToggleButton enableCamLight;
|
private javax.swing.JToggleButton enableCamLight;
|
||||||
private javax.swing.JToggleButton enableStats;
|
private javax.swing.JToggleButton enableStats;
|
||||||
private javax.swing.JToggleButton enableWireframe;
|
private javax.swing.JToggleButton enableWireframe;
|
||||||
private javax.swing.JPanel jPanel1;
|
private javax.swing.JPanel jPanel1;
|
||||||
|
private javax.swing.JToolBar.Separator jSeparator1;
|
||||||
|
private javax.swing.JToggleButton jToggleButton1;
|
||||||
private javax.swing.JToolBar jToolBar1;
|
private javax.swing.JToolBar jToolBar1;
|
||||||
private javax.swing.JPanel oGLPanel;
|
private javax.swing.JPanel oGLPanel;
|
||||||
// End of variables declaration//GEN-END:variables
|
// End of variables declaration//GEN-END:variables
|
||||||
|
Loading…
x
Reference in New Issue
Block a user