SDK:
- cleanup some packages, move some classes - better names for some classes git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@7772 75d07b2b-3a1a-0410-a2c5-0572b91ccdca
This commit is contained in:
parent
b446c5c56d
commit
6144a86e41
@ -248,8 +248,10 @@
|
|||||||
<package>com.jme3.gde.core.filters.actions</package>
|
<package>com.jme3.gde.core.filters.actions</package>
|
||||||
<package>com.jme3.gde.core.filters.impl</package>
|
<package>com.jme3.gde.core.filters.impl</package>
|
||||||
<package>com.jme3.gde.core.j2seproject</package>
|
<package>com.jme3.gde.core.j2seproject</package>
|
||||||
|
<package>com.jme3.gde.core.nodes</package>
|
||||||
<package>com.jme3.gde.core.properties</package>
|
<package>com.jme3.gde.core.properties</package>
|
||||||
<package>com.jme3.gde.core.scene</package>
|
<package>com.jme3.gde.core.scene</package>
|
||||||
|
<package>com.jme3.gde.core.scene.actions</package>
|
||||||
<package>com.jme3.gde.core.scene.controller</package>
|
<package>com.jme3.gde.core.scene.controller</package>
|
||||||
<package>com.jme3.gde.core.scene.processors</package>
|
<package>com.jme3.gde.core.scene.processors</package>
|
||||||
<package>com.jme3.gde.core.sceneexplorer</package>
|
<package>com.jme3.gde.core.sceneexplorer</package>
|
||||||
|
@ -31,8 +31,8 @@
|
|||||||
*/
|
*/
|
||||||
package com.jme3.gde.core.filters;
|
package com.jme3.gde.core.filters;
|
||||||
|
|
||||||
import com.jme3.gde.core.sceneexplorer.nodes.properties.SceneExplorerProperty;
|
import com.jme3.gde.core.properties.SceneExplorerProperty;
|
||||||
import com.jme3.gde.core.sceneexplorer.nodes.properties.ScenePropertyChangeListener;
|
import com.jme3.gde.core.properties.ScenePropertyChangeListener;
|
||||||
import com.jme3.gde.core.util.PropertyUtils;
|
import com.jme3.gde.core.util.PropertyUtils;
|
||||||
import com.jme3.post.Filter;
|
import com.jme3.post.Filter;
|
||||||
import java.beans.PropertyDescriptor;
|
import java.beans.PropertyDescriptor;
|
||||||
|
@ -84,49 +84,49 @@
|
|||||||
<Component class="javax.swing.JLabel" name="jLabel1">
|
<Component class="javax.swing.JLabel" name="jLabel1">
|
||||||
<Properties>
|
<Properties>
|
||||||
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||||
<ResourceString bundle="com/jme3/gde/core/properties/Bundle.properties" key="AssetsPropertiesPanel.jLabel1.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
<ResourceString bundle="com/jme3/gde/core/j2seproject/Bundle.properties" key="AssetsPropertiesPanel.jLabel1.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
</Property>
|
</Property>
|
||||||
</Properties>
|
</Properties>
|
||||||
</Component>
|
</Component>
|
||||||
<Component class="javax.swing.JTextField" name="jTextField1">
|
<Component class="javax.swing.JTextField" name="jTextField1">
|
||||||
<Properties>
|
<Properties>
|
||||||
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||||
<ResourceString bundle="com/jme3/gde/core/properties/Bundle.properties" key="AssetsPropertiesPanel.jTextField1.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
<ResourceString bundle="com/jme3/gde/core/j2seproject/Bundle.properties" key="AssetsPropertiesPanel.jTextField1.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
</Property>
|
</Property>
|
||||||
</Properties>
|
</Properties>
|
||||||
</Component>
|
</Component>
|
||||||
<Component class="javax.swing.JLabel" name="jLabel2">
|
<Component class="javax.swing.JLabel" name="jLabel2">
|
||||||
<Properties>
|
<Properties>
|
||||||
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||||
<ResourceString bundle="com/jme3/gde/core/properties/Bundle.properties" key="AssetsPropertiesPanel.jLabel2.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
<ResourceString bundle="com/jme3/gde/core/j2seproject/Bundle.properties" key="AssetsPropertiesPanel.jLabel2.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
</Property>
|
</Property>
|
||||||
</Properties>
|
</Properties>
|
||||||
</Component>
|
</Component>
|
||||||
<Component class="javax.swing.JTextField" name="jTextField2">
|
<Component class="javax.swing.JTextField" name="jTextField2">
|
||||||
<Properties>
|
<Properties>
|
||||||
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||||
<ResourceString bundle="com/jme3/gde/core/properties/Bundle.properties" key="AssetsPropertiesPanel.jTextField2.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
<ResourceString bundle="com/jme3/gde/core/j2seproject/Bundle.properties" key="AssetsPropertiesPanel.jTextField2.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
</Property>
|
</Property>
|
||||||
</Properties>
|
</Properties>
|
||||||
</Component>
|
</Component>
|
||||||
<Component class="javax.swing.JCheckBox" name="jCheckBox1">
|
<Component class="javax.swing.JCheckBox" name="jCheckBox1">
|
||||||
<Properties>
|
<Properties>
|
||||||
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||||
<ResourceString bundle="com/jme3/gde/core/properties/Bundle.properties" key="AssetsPropertiesPanel.jCheckBox1.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
<ResourceString bundle="com/jme3/gde/core/j2seproject/Bundle.properties" key="AssetsPropertiesPanel.jCheckBox1.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
</Property>
|
</Property>
|
||||||
</Properties>
|
</Properties>
|
||||||
</Component>
|
</Component>
|
||||||
<Component class="javax.swing.JLabel" name="jLabel3">
|
<Component class="javax.swing.JLabel" name="jLabel3">
|
||||||
<Properties>
|
<Properties>
|
||||||
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||||
<ResourceString bundle="com/jme3/gde/core/properties/Bundle.properties" key="AssetsPropertiesPanel.jLabel3.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
<ResourceString bundle="com/jme3/gde/core/j2seproject/Bundle.properties" key="AssetsPropertiesPanel.jLabel3.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
</Property>
|
</Property>
|
||||||
</Properties>
|
</Properties>
|
||||||
</Component>
|
</Component>
|
||||||
<Component class="javax.swing.JTextField" name="jTextField3">
|
<Component class="javax.swing.JTextField" name="jTextField3">
|
||||||
<Properties>
|
<Properties>
|
||||||
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||||
<ResourceString bundle="com/jme3/gde/core/properties/Bundle.properties" key="AssetsPropertiesPanel.jTextField3.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
<ResourceString bundle="com/jme3/gde/core/j2seproject/Bundle.properties" key="AssetsPropertiesPanel.jTextField3.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
</Property>
|
</Property>
|
||||||
</Properties>
|
</Properties>
|
||||||
</Component>
|
</Component>
|
@ -35,7 +35,7 @@
|
|||||||
*
|
*
|
||||||
* Created on 25.04.2010, 00:25:08
|
* Created on 25.04.2010, 00:25:08
|
||||||
*/
|
*/
|
||||||
package com.jme3.gde.core.properties;
|
package com.jme3.gde.core.j2seproject;
|
||||||
|
|
||||||
import com.jme3.gde.core.assets.AssetsLookupProvider;
|
import com.jme3.gde.core.assets.AssetsLookupProvider;
|
||||||
import java.awt.event.ActionEvent;
|
import java.awt.event.ActionEvent;
|
@ -29,7 +29,7 @@
|
|||||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
package com.jme3.gde.core.properties;
|
package com.jme3.gde.core.j2seproject;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
@ -0,0 +1,38 @@
|
|||||||
|
# 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.
|
||||||
|
|
||||||
|
LBL_Config_assets=Assets
|
||||||
|
AssetsPropertiesPanel.jLabel2.text=Assets JAR Excludes:
|
||||||
|
AssetsPropertiesPanel.jTextField1.text=jTextField1
|
||||||
|
AssetsPropertiesPanel.jLabel1.text=Assets JAR Name:
|
||||||
|
AssetsPropertiesPanel.jTextField2.text=jTextField2
|
||||||
|
AssetsPropertiesPanel.jCheckBox1.text=Compress Assets JAR
|
||||||
|
AssetsPropertiesPanel.jLabel3.text=Assets Folder Location:
|
||||||
|
AssetsPropertiesPanel.jTextField3.text=jTextField3
|
@ -30,7 +30,7 @@
|
|||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package com.jme3.gde.core.sceneexplorer.nodes;
|
package com.jme3.gde.core.nodes;
|
||||||
|
|
||||||
import org.openide.util.lookup.AbstractLookup;
|
import org.openide.util.lookup.AbstractLookup;
|
||||||
import org.openide.util.lookup.InstanceContent;
|
import org.openide.util.lookup.InstanceContent;
|
||||||
@ -39,11 +39,11 @@ import org.openide.util.lookup.InstanceContent;
|
|||||||
*
|
*
|
||||||
* @author normenhansen
|
* @author normenhansen
|
||||||
*/
|
*/
|
||||||
public class SceneExplorerLookup extends AbstractLookup{
|
public class DynamicLookup extends AbstractLookup{
|
||||||
private static final long serialVersionUID = 1212314412L;
|
private static final long serialVersionUID = 1212314412L;
|
||||||
private InstanceContent instanceContent;
|
private InstanceContent instanceContent;
|
||||||
|
|
||||||
public SceneExplorerLookup(InstanceContent instanceContent) {
|
public DynamicLookup(InstanceContent instanceContent) {
|
||||||
super(instanceContent);
|
super(instanceContent);
|
||||||
this.instanceContent = instanceContent;
|
this.instanceContent = instanceContent;
|
||||||
instanceContent.add(this);
|
instanceContent.add(this);
|
@ -29,68 +29,64 @@
|
|||||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
package com.jme3.gde.core.sceneexplorer.nodes;
|
package com.jme3.gde.core.properties;
|
||||||
|
|
||||||
import com.jme3.asset.ModelKey;
|
import com.jme3.animation.AnimControl;
|
||||||
import com.jme3.gde.core.scene.SceneApplication;
|
import com.jme3.gde.core.scene.SceneApplication;
|
||||||
import com.jme3.scene.AssetLinkNode;
|
import java.beans.PropertyEditor;
|
||||||
import java.io.IOException;
|
import java.lang.reflect.InvocationTargetException;
|
||||||
import java.util.concurrent.Callable;
|
import java.util.concurrent.Callable;
|
||||||
import java.util.concurrent.ExecutionException;
|
import java.util.concurrent.ExecutionException;
|
||||||
import javax.swing.Action;
|
import org.openide.nodes.PropertySupport;
|
||||||
import org.openide.actions.DeleteAction;
|
|
||||||
import org.openide.nodes.AbstractNode;
|
|
||||||
import org.openide.nodes.Children;
|
|
||||||
import org.openide.util.Exceptions;
|
import org.openide.util.Exceptions;
|
||||||
import org.openide.util.actions.SystemAction;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @author normenhansen
|
* @author normenhansen
|
||||||
*/
|
*/
|
||||||
public class JmeAssetLinkChild extends AbstractNode {
|
public class AnimationProperty extends PropertySupport.ReadWrite<String> {
|
||||||
|
|
||||||
private ModelKey key;
|
private AnimControl control;
|
||||||
private AssetLinkNode linkNode;
|
private String anim = "null";
|
||||||
|
|
||||||
public JmeAssetLinkChild(ModelKey key, AssetLinkNode linkNode) {
|
public AnimationProperty(AnimControl node) {
|
||||||
super(Children.LEAF);
|
super("Animation Control", String.class, "Animation Control", "");
|
||||||
this.key = key;
|
this.control = node;
|
||||||
this.linkNode = linkNode;
|
|
||||||
this.setName(key.getName());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Action[] getActions(boolean context) {
|
public String getValue() throws IllegalAccessException, InvocationTargetException {
|
||||||
return new SystemAction[]{
|
return anim;
|
||||||
SystemAction.get(DeleteAction.class)
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean canDestroy() {
|
public void setValue(final String val) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException {
|
||||||
return true;
|
if (control == null) {
|
||||||
}
|
return;
|
||||||
|
}
|
||||||
@Override
|
|
||||||
public void destroy() throws IOException {
|
|
||||||
super.destroy();
|
|
||||||
try {
|
try {
|
||||||
SceneApplication.getApplication().enqueue(new Callable<Void>() {
|
SceneApplication.getApplication().enqueue(new Callable<Void>() {
|
||||||
|
|
||||||
public Void call() throws Exception {
|
public Void call() throws Exception {
|
||||||
linkNode.detachLinkedChild(key);
|
if ("null".equals(val)) {
|
||||||
|
control.clearChannels();
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
anim = val;
|
||||||
|
control.clearChannels();
|
||||||
|
control.createChannel().setAnim(val);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}).get();
|
}).get();
|
||||||
JmeSpatial node = ((JmeSpatial) getParentNode());
|
|
||||||
if (node != null) {
|
|
||||||
node.refresh(false);
|
|
||||||
}
|
|
||||||
} catch (InterruptedException ex) {
|
} catch (InterruptedException ex) {
|
||||||
Exceptions.printStackTrace(ex);
|
Exceptions.printStackTrace(ex);
|
||||||
} catch (ExecutionException ex) {
|
} catch (ExecutionException ex) {
|
||||||
Exceptions.printStackTrace(ex);
|
Exceptions.printStackTrace(ex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public PropertyEditor getPropertyEditor() {
|
||||||
|
return new AnimationPropertyEditor(control);
|
||||||
|
}
|
||||||
}
|
}
|
@ -0,0 +1,131 @@
|
|||||||
|
/*
|
||||||
|
* 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.properties;
|
||||||
|
|
||||||
|
import com.jme3.animation.AnimControl;
|
||||||
|
import java.awt.Component;
|
||||||
|
import java.awt.Graphics;
|
||||||
|
import java.awt.Rectangle;
|
||||||
|
import java.beans.PropertyChangeEvent;
|
||||||
|
import java.beans.PropertyChangeListener;
|
||||||
|
import java.beans.PropertyEditor;
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.LinkedList;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author normenhansen
|
||||||
|
*/
|
||||||
|
public class AnimationPropertyEditor implements PropertyEditor {
|
||||||
|
|
||||||
|
private LinkedList<PropertyChangeListener> listeners = new LinkedList<PropertyChangeListener>();
|
||||||
|
private String animName;
|
||||||
|
private AnimControl control;
|
||||||
|
|
||||||
|
public AnimationPropertyEditor(AnimControl control) {
|
||||||
|
this.control = control;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setValue(Object value) {
|
||||||
|
if (value instanceof String) {
|
||||||
|
animName = (String) value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public Object getValue() {
|
||||||
|
return animName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isPaintable() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void paintValue(Graphics gfx, Rectangle box) {
|
||||||
|
throw new UnsupportedOperationException("Not supported yet.");
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getJavaInitializationString() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAsText() {
|
||||||
|
return animName.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAsText(String text) throws IllegalArgumentException {
|
||||||
|
String old = animName;
|
||||||
|
if ("".equals(text)) {
|
||||||
|
animName = "null";
|
||||||
|
}
|
||||||
|
animName = text;
|
||||||
|
notifyListeners(old, animName);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getTags() {
|
||||||
|
if(control==null)return new String[]{"none"};
|
||||||
|
Collection<String> names = control.getAnimationNames();
|
||||||
|
String[] strings = new String[names.size() + 1];
|
||||||
|
strings[0] = "null";
|
||||||
|
int i = 1;
|
||||||
|
for (Iterator<String> it = names.iterator(); it.hasNext();) {
|
||||||
|
strings[i] = it.next();
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
return strings;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Component getCustomEditor() {
|
||||||
|
// return new AnimationPanel(control);
|
||||||
|
throw new UnsupportedOperationException("Not supported yet.");
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean supportsCustomEditor() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addPropertyChangeListener(PropertyChangeListener listener) {
|
||||||
|
listeners.add(listener);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void removePropertyChangeListener(PropertyChangeListener listener) {
|
||||||
|
listeners.remove(listener);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void notifyListeners(String before, String after) {
|
||||||
|
for (Iterator<PropertyChangeListener> it = listeners.iterator(); it.hasNext();) {
|
||||||
|
PropertyChangeListener propertyChangeListener = it.next();
|
||||||
|
//TODO: check what the "programmatic name" is supposed to be here.. for now its Quaternion
|
||||||
|
propertyChangeListener.propertyChange(new PropertyChangeEvent(this, null, before, after));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,102 @@
|
|||||||
|
/*
|
||||||
|
* 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.properties;
|
||||||
|
|
||||||
|
import com.jme3.audio.AudioData;
|
||||||
|
import com.jme3.audio.AudioKey;
|
||||||
|
import com.jme3.audio.AudioNode;
|
||||||
|
import com.jme3.gde.core.scene.SceneApplication;
|
||||||
|
import com.jme3.gde.core.scene.SceneRequest;
|
||||||
|
import java.beans.PropertyEditor;
|
||||||
|
import java.lang.reflect.InvocationTargetException;
|
||||||
|
import java.util.concurrent.Callable;
|
||||||
|
import java.util.concurrent.ExecutionException;
|
||||||
|
import org.openide.nodes.PropertySupport;
|
||||||
|
import org.openide.util.Exceptions;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author normenhansen
|
||||||
|
*/
|
||||||
|
public class AudioDataProperty extends PropertySupport.ReadWrite<String> {
|
||||||
|
|
||||||
|
private AudioNode node;
|
||||||
|
|
||||||
|
public AudioDataProperty(AudioNode node) {
|
||||||
|
super("Audio Data", String.class, "Audio Data", "");
|
||||||
|
this.node = node;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getValue() throws IllegalAccessException, InvocationTargetException {
|
||||||
|
if (node.getAudioData() != null) {
|
||||||
|
return node.getAudioData().toString();
|
||||||
|
} else {
|
||||||
|
return "null";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setValue(final String val) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException {
|
||||||
|
if ("null".equals(val)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (node.getAudioData() == null) {
|
||||||
|
// val = val.replace('[', ' ').trim();
|
||||||
|
// val = val.replace(']', ' ').trim();
|
||||||
|
// final String[] strings = val.split(",");
|
||||||
|
try {
|
||||||
|
SceneApplication.getApplication().enqueue(new Callable<Void>() {
|
||||||
|
|
||||||
|
public Void call() throws Exception {
|
||||||
|
SceneRequest request = SceneApplication.getApplication().getCurrentSceneRequest();
|
||||||
|
AudioKey key = new AudioKey(val, false);
|
||||||
|
AudioData localMaterial = request.getManager().loadAudio(key);
|
||||||
|
if (localMaterial != null) {
|
||||||
|
node.setAudioData(localMaterial, key);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}).get();
|
||||||
|
} catch (InterruptedException ex) {
|
||||||
|
Exceptions.printStackTrace(ex);
|
||||||
|
} catch (ExecutionException ex) {
|
||||||
|
Exceptions.printStackTrace(ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public PropertyEditor getPropertyEditor() {
|
||||||
|
return new AudioDataPropertyEditor();
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,123 @@
|
|||||||
|
/*
|
||||||
|
* 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.properties;
|
||||||
|
|
||||||
|
import com.jme3.audio.AudioData;
|
||||||
|
import com.jme3.gde.core.scene.SceneApplication;
|
||||||
|
import com.jme3.gde.core.scene.SceneRequest;
|
||||||
|
import java.awt.Component;
|
||||||
|
import java.awt.Graphics;
|
||||||
|
import java.awt.Rectangle;
|
||||||
|
import java.beans.PropertyChangeEvent;
|
||||||
|
import java.beans.PropertyChangeListener;
|
||||||
|
import java.beans.PropertyEditor;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.LinkedList;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author normenhansen
|
||||||
|
*/
|
||||||
|
public class AudioDataPropertyEditor implements PropertyEditor {
|
||||||
|
|
||||||
|
private LinkedList<PropertyChangeListener> listeners = new LinkedList<PropertyChangeListener>();
|
||||||
|
private String material;
|
||||||
|
|
||||||
|
public void setValue(Object value) {
|
||||||
|
if (value instanceof String) {
|
||||||
|
material = (String) value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public Object getValue() {
|
||||||
|
return material;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isPaintable() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void paintValue(Graphics gfx, Rectangle box) {
|
||||||
|
throw new UnsupportedOperationException("Not supported yet.");
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getJavaInitializationString() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAsText() {
|
||||||
|
return material.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAsText(String text) throws IllegalArgumentException {
|
||||||
|
String old=material;
|
||||||
|
if ("".equals(text)) {
|
||||||
|
material = "null";
|
||||||
|
}
|
||||||
|
material = text;
|
||||||
|
notifyListeners(old, material);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getTags() {
|
||||||
|
if ("null".equals(material)) {
|
||||||
|
SceneRequest request = SceneApplication.getApplication().getCurrentSceneRequest();
|
||||||
|
if(request==null) return new String[]{};
|
||||||
|
String[] mats = request.getManager().getSounds();
|
||||||
|
return mats;
|
||||||
|
}
|
||||||
|
return new String[]{"can set only once"};
|
||||||
|
}
|
||||||
|
|
||||||
|
public Component getCustomEditor() {
|
||||||
|
throw new UnsupportedOperationException("Not supported yet.");
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean supportsCustomEditor() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addPropertyChangeListener(PropertyChangeListener listener) {
|
||||||
|
listeners.add(listener);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void removePropertyChangeListener(PropertyChangeListener listener) {
|
||||||
|
listeners.remove(listener);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void notifyListeners(String before, String after) {
|
||||||
|
for (Iterator<PropertyChangeListener> it = listeners.iterator(); it.hasNext();) {
|
||||||
|
PropertyChangeListener propertyChangeListener = it.next();
|
||||||
|
//TODO: check what the "programmatic name" is supposed to be here.. for now its Quaternion
|
||||||
|
propertyChangeListener.propertyChange(new PropertyChangeEvent(this, null, before, after));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,38 +1,9 @@
|
|||||||
# Copyright (c) 2009-2010 jMonkeyEngine
|
ColorRGBADialog.jButton1.text=OK
|
||||||
# All rights reserved.
|
ColorRGBADialog.jButton2.text=Cancel
|
||||||
#
|
ColorRGBADialog.alphaLabel.text=Alpha:
|
||||||
# Redistribution and use in source and binary forms, with or without
|
AnimationPanel.pauseButton.text=
|
||||||
# modification, are permitted provided that the following conditions are
|
AnimationPanel.playButton.text=
|
||||||
# met:
|
TextureBrowser.cancelButton.text=Cancel
|
||||||
#
|
TextureBrowser.okButton.text=Ok
|
||||||
# * Redistributions of source code must retain the above copyright
|
TextureBrowser.imagePreviewLabel.text=
|
||||||
# notice, this list of conditions and the following disclaimer.
|
TextureBrowser.title=Texture Browser
|
||||||
#
|
|
||||||
# * 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.
|
|
||||||
|
|
||||||
LBL_Config_assets=Assets
|
|
||||||
AssetsPropertiesPanel.jLabel2.text=Assets JAR Excludes:
|
|
||||||
AssetsPropertiesPanel.jTextField1.text=jTextField1
|
|
||||||
AssetsPropertiesPanel.jLabel1.text=Assets JAR Name:
|
|
||||||
AssetsPropertiesPanel.jTextField2.text=jTextField2
|
|
||||||
AssetsPropertiesPanel.jCheckBox1.text=Compress Assets JAR
|
|
||||||
AssetsPropertiesPanel.jLabel3.text=Assets Folder Location:
|
|
||||||
AssetsPropertiesPanel.jTextField3.text=jTextField3
|
|
@ -0,0 +1,97 @@
|
|||||||
|
<?xml version="1.1" encoding="UTF-8" ?>
|
||||||
|
|
||||||
|
<Form version="1.5" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JDialogFormInfo">
|
||||||
|
<Properties>
|
||||||
|
<Property name="defaultCloseOperation" type="int" value="2"/>
|
||||||
|
</Properties>
|
||||||
|
<SyntheticProperties>
|
||||||
|
<SyntheticProperty name="formSizePolicy" type="int" value="1"/>
|
||||||
|
</SyntheticProperties>
|
||||||
|
<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="false"/>
|
||||||
|
<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">
|
||||||
|
<Group type="102" alignment="1" attributes="0">
|
||||||
|
<Component id="jToolBar1" pref="320" max="32767" attributes="0"/>
|
||||||
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
|
<Component id="jButton2" min="-2" max="-2" attributes="0"/>
|
||||||
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
|
<Component id="jButton1" min="-2" max="-2" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
<Component id="jColorChooser1" alignment="0" pref="496" max="32767" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
</DimensionLayout>
|
||||||
|
<DimensionLayout dim="1">
|
||||||
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
|
<Group type="102" alignment="1" attributes="0">
|
||||||
|
<Component id="jColorChooser1" pref="380" max="32767" attributes="0"/>
|
||||||
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
|
<Group type="103" groupAlignment="1" attributes="0">
|
||||||
|
<Group type="103" groupAlignment="3" attributes="0">
|
||||||
|
<Component id="jButton1" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
|
<Component id="jButton2" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
<Component id="jToolBar1" min="-2" pref="25" max="-2" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
</Group>
|
||||||
|
</Group>
|
||||||
|
</DimensionLayout>
|
||||||
|
</Layout>
|
||||||
|
<SubComponents>
|
||||||
|
<Component class="javax.swing.JColorChooser" name="jColorChooser1">
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JButton" name="jButton1">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||||
|
<ResourceString bundle="com/jme3/gde/core/properties/Bundle.properties" key="ColorRGBADialog.jButton1.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
|
</Property>
|
||||||
|
</Properties>
|
||||||
|
<Events>
|
||||||
|
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="jButton1ActionPerformed"/>
|
||||||
|
</Events>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JButton" name="jButton2">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||||
|
<ResourceString bundle="com/jme3/gde/core/properties/Bundle.properties" key="ColorRGBADialog.jButton2.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
|
</Property>
|
||||||
|
</Properties>
|
||||||
|
<Events>
|
||||||
|
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="jButton2ActionPerformed"/>
|
||||||
|
</Events>
|
||||||
|
</Component>
|
||||||
|
<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>
|
||||||
|
<Component class="javax.swing.JLabel" name="alphaLabel">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||||
|
<ResourceString bundle="com/jme3/gde/core/properties/Bundle.properties" key="ColorRGBADialog.alphaLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
|
</Property>
|
||||||
|
</Properties>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JSlider" name="alphaSlider">
|
||||||
|
<Properties>
|
||||||
|
<Property name="value" type="int" value="100"/>
|
||||||
|
</Properties>
|
||||||
|
</Component>
|
||||||
|
</SubComponents>
|
||||||
|
</Container>
|
||||||
|
</SubComponents>
|
||||||
|
</Form>
|
@ -0,0 +1,155 @@
|
|||||||
|
/*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* ColorRGBADialog.java
|
||||||
|
*
|
||||||
|
* Created on 06.04.2010, 20:58:59
|
||||||
|
*/
|
||||||
|
package com.jme3.gde.core.properties;
|
||||||
|
|
||||||
|
import com.jme3.math.ColorRGBA;
|
||||||
|
import java.awt.Color;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author normenhansen
|
||||||
|
*/
|
||||||
|
public class ColorRGBADialog extends javax.swing.JDialog {
|
||||||
|
|
||||||
|
private ColorRGBAPropertyEditor editor;
|
||||||
|
|
||||||
|
/** Creates new form ColorRGBADialog */
|
||||||
|
public ColorRGBADialog(java.awt.Frame parent, boolean modal, ColorRGBAPropertyEditor editor) {
|
||||||
|
super(parent, modal);
|
||||||
|
this.editor = editor;
|
||||||
|
initComponents();
|
||||||
|
alphaSlider.setValue(Math.round(((ColorRGBA)editor.getValue()).getAlpha()*100));
|
||||||
|
}
|
||||||
|
|
||||||
|
public ColorRGBA setColor() {
|
||||||
|
Color cColor = jColorChooser1.getColor();
|
||||||
|
ColorRGBA color = new ColorRGBA();
|
||||||
|
float[] floats = new float[4];
|
||||||
|
cColor.getComponents(floats);
|
||||||
|
color.set(floats[0], floats[1], floats[2], ((float)alphaSlider.getValue())/100.0f);
|
||||||
|
ColorRGBA color2 = new ColorRGBA((ColorRGBA) editor.getValue());
|
||||||
|
editor.setValue(color);
|
||||||
|
editor.notifyListeners(color2, color);
|
||||||
|
return color;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** This method is called from within the constructor to
|
||||||
|
* initialize the form.
|
||||||
|
* WARNING: Do NOT modify this code. The content of this method is
|
||||||
|
* always regenerated by the Form Editor.
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
|
||||||
|
private void initComponents() {
|
||||||
|
|
||||||
|
jColorChooser1 = new javax.swing.JColorChooser();
|
||||||
|
jButton1 = new javax.swing.JButton();
|
||||||
|
jButton2 = new javax.swing.JButton();
|
||||||
|
jToolBar1 = new javax.swing.JToolBar();
|
||||||
|
alphaLabel = new javax.swing.JLabel();
|
||||||
|
alphaSlider = new javax.swing.JSlider();
|
||||||
|
|
||||||
|
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
|
||||||
|
|
||||||
|
jButton1.setText(org.openide.util.NbBundle.getMessage(ColorRGBADialog.class, "ColorRGBADialog.jButton1.text")); // NOI18N
|
||||||
|
jButton1.addActionListener(new java.awt.event.ActionListener() {
|
||||||
|
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
||||||
|
jButton1ActionPerformed(evt);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
jButton2.setText(org.openide.util.NbBundle.getMessage(ColorRGBADialog.class, "ColorRGBADialog.jButton2.text")); // NOI18N
|
||||||
|
jButton2.addActionListener(new java.awt.event.ActionListener() {
|
||||||
|
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
||||||
|
jButton2ActionPerformed(evt);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
jToolBar1.setFloatable(false);
|
||||||
|
jToolBar1.setRollover(true);
|
||||||
|
|
||||||
|
alphaLabel.setText(org.openide.util.NbBundle.getMessage(ColorRGBADialog.class, "ColorRGBADialog.alphaLabel.text")); // NOI18N
|
||||||
|
jToolBar1.add(alphaLabel);
|
||||||
|
|
||||||
|
alphaSlider.setValue(100);
|
||||||
|
jToolBar1.add(alphaSlider);
|
||||||
|
|
||||||
|
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
|
||||||
|
getContentPane().setLayout(layout);
|
||||||
|
layout.setHorizontalGroup(
|
||||||
|
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
|
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
|
||||||
|
.addComponent(jToolBar1, javax.swing.GroupLayout.DEFAULT_SIZE, 320, Short.MAX_VALUE)
|
||||||
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||||
|
.addComponent(jButton2)
|
||||||
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||||
|
.addComponent(jButton1))
|
||||||
|
.addComponent(jColorChooser1, javax.swing.GroupLayout.DEFAULT_SIZE, 496, Short.MAX_VALUE)
|
||||||
|
);
|
||||||
|
layout.setVerticalGroup(
|
||||||
|
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
|
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
|
||||||
|
.addComponent(jColorChooser1, javax.swing.GroupLayout.DEFAULT_SIZE, 380, Short.MAX_VALUE)
|
||||||
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||||
|
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
|
||||||
|
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
||||||
|
.addComponent(jButton1)
|
||||||
|
.addComponent(jButton2))
|
||||||
|
.addComponent(jToolBar1, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE)))
|
||||||
|
);
|
||||||
|
|
||||||
|
pack();
|
||||||
|
}// </editor-fold>//GEN-END:initComponents
|
||||||
|
|
||||||
|
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
|
||||||
|
setColor();
|
||||||
|
dispose();
|
||||||
|
}//GEN-LAST:event_jButton1ActionPerformed
|
||||||
|
|
||||||
|
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton2ActionPerformed
|
||||||
|
dispose();
|
||||||
|
}//GEN-LAST:event_jButton2ActionPerformed
|
||||||
|
// Variables declaration - do not modify//GEN-BEGIN:variables
|
||||||
|
private javax.swing.JLabel alphaLabel;
|
||||||
|
private javax.swing.JSlider alphaSlider;
|
||||||
|
private javax.swing.JButton jButton1;
|
||||||
|
private javax.swing.JButton jButton2;
|
||||||
|
private javax.swing.JColorChooser jColorChooser1;
|
||||||
|
private javax.swing.JToolBar jToolBar1;
|
||||||
|
// End of variables declaration//GEN-END:variables
|
||||||
|
}
|
@ -0,0 +1,125 @@
|
|||||||
|
/*
|
||||||
|
* 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.properties;
|
||||||
|
|
||||||
|
import com.jme3.math.ColorRGBA;
|
||||||
|
import java.awt.Component;
|
||||||
|
import java.awt.Graphics;
|
||||||
|
import java.awt.Rectangle;
|
||||||
|
import java.beans.PropertyChangeEvent;
|
||||||
|
import java.beans.PropertyChangeListener;
|
||||||
|
import java.beans.PropertyEditor;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.LinkedList;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author normenhansen
|
||||||
|
*/
|
||||||
|
public class ColorRGBAPropertyEditor implements PropertyEditor {
|
||||||
|
|
||||||
|
private LinkedList<PropertyChangeListener> listeners = new LinkedList<PropertyChangeListener>();
|
||||||
|
private ColorRGBA color = new ColorRGBA();
|
||||||
|
|
||||||
|
public void setValue(Object value) {
|
||||||
|
if (value instanceof ColorRGBA) {
|
||||||
|
color.set((ColorRGBA) value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public Object getValue() {
|
||||||
|
return color;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isPaintable() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void paintValue(Graphics gfx, Rectangle box) {
|
||||||
|
throw new UnsupportedOperationException("Not supported yet.");
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getJavaInitializationString() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAsText() {
|
||||||
|
return "[" + color.r + ", " + color.g + ", " + color.b + ", " + color.a + "]";
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAsText(String text) throws IllegalArgumentException {
|
||||||
|
text = text.replace('[', ' ');
|
||||||
|
text = text.replace(']', ' ');
|
||||||
|
String[] values = text.split(",");
|
||||||
|
ColorRGBA old=color;
|
||||||
|
if (values.length != 4) {
|
||||||
|
throw (new IllegalArgumentException("String not correct"));
|
||||||
|
}
|
||||||
|
float[] floats = new float[4];
|
||||||
|
for (int i = 0; i < values.length; i++) {
|
||||||
|
String string = values[i];
|
||||||
|
floats[i] = Float.parseFloat(string);
|
||||||
|
}
|
||||||
|
color.set(floats[0], floats[1], floats[2], floats[3]);
|
||||||
|
notifyListeners(old, color);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getTags() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Component getCustomEditor() {
|
||||||
|
ColorRGBADialog dialog = new ColorRGBADialog(null, true, this);
|
||||||
|
dialog.setLocationRelativeTo(null);
|
||||||
|
return dialog;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean supportsCustomEditor() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addPropertyChangeListener(PropertyChangeListener listener) {
|
||||||
|
listeners.add(listener);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void removePropertyChangeListener(PropertyChangeListener listener) {
|
||||||
|
listeners.remove(listener);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void notifyListeners(ColorRGBA before, ColorRGBA after) {
|
||||||
|
for (Iterator<PropertyChangeListener> it = listeners.iterator(); it.hasNext();) {
|
||||||
|
PropertyChangeListener propertyChangeListener = it.next();
|
||||||
|
//TODO: check what the "programmatic name" is supposed to be here.. for now its ColorRGBA
|
||||||
|
propertyChangeListener.propertyChange(new PropertyChangeEvent(this, null, before, after));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,186 @@
|
|||||||
|
/*
|
||||||
|
* 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.properties;
|
||||||
|
|
||||||
|
import com.jme3.effect.shapes.EmitterBoxShape;
|
||||||
|
import com.jme3.effect.shapes.EmitterPointShape;
|
||||||
|
import com.jme3.effect.shapes.EmitterShape;
|
||||||
|
import com.jme3.effect.shapes.EmitterSphereShape;
|
||||||
|
import com.jme3.math.Vector3f;
|
||||||
|
import java.awt.Component;
|
||||||
|
import java.awt.Graphics;
|
||||||
|
import java.awt.Rectangle;
|
||||||
|
import java.beans.PropertyChangeEvent;
|
||||||
|
import java.beans.PropertyChangeListener;
|
||||||
|
import java.beans.PropertyEditor;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.LinkedList;
|
||||||
|
import org.openide.awt.StatusDisplayer;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author normenhansen
|
||||||
|
*/
|
||||||
|
public class EmitterShapePropertyEditor implements PropertyEditor {
|
||||||
|
|
||||||
|
private LinkedList<PropertyChangeListener> listeners = new LinkedList<PropertyChangeListener>();
|
||||||
|
private EmitterShape emitter;// = new EmitterPointShape(Vector3f.ZERO);
|
||||||
|
|
||||||
|
public void setValue(Object value) {
|
||||||
|
if (value instanceof EmitterShape) {
|
||||||
|
emitter = (EmitterShape) value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public Object getValue() {
|
||||||
|
return emitter;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isPaintable() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void paintValue(Graphics gfx, Rectangle box) {
|
||||||
|
throw new UnsupportedOperationException("Not supported yet.");
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getJavaInitializationString() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAsText() {
|
||||||
|
if (emitter == null) {
|
||||||
|
return "null";
|
||||||
|
}
|
||||||
|
if (emitter instanceof EmitterBoxShape) {
|
||||||
|
EmitterBoxShape shape = (EmitterBoxShape) emitter;
|
||||||
|
return "[Box, "
|
||||||
|
+ shape.getMin().x
|
||||||
|
+ ", "
|
||||||
|
+ shape.getMin().y
|
||||||
|
+ ", "
|
||||||
|
+ shape.getMin().z
|
||||||
|
+ ", "
|
||||||
|
+ shape.getMin().x + shape.getLen().x
|
||||||
|
+ ", "
|
||||||
|
+ shape.getMin().x + shape.getLen().y
|
||||||
|
+ ", "
|
||||||
|
+ shape.getMin().x + shape.getLen().z
|
||||||
|
+ "]";
|
||||||
|
} else if (emitter instanceof EmitterPointShape) {
|
||||||
|
EmitterPointShape shape = (EmitterPointShape) emitter;
|
||||||
|
return "[Point, "
|
||||||
|
+ shape.getPoint().x
|
||||||
|
+ ", "
|
||||||
|
+ shape.getPoint().y
|
||||||
|
+ ", "
|
||||||
|
+ shape.getPoint().z
|
||||||
|
+ "]";
|
||||||
|
} else if (emitter instanceof EmitterSphereShape) {
|
||||||
|
EmitterSphereShape shape = (EmitterSphereShape) emitter;
|
||||||
|
return "[Sphere, "
|
||||||
|
+ shape.getCenter().x
|
||||||
|
+ ", "
|
||||||
|
+ shape.getCenter().y
|
||||||
|
+ ", "
|
||||||
|
+ shape.getCenter().z
|
||||||
|
+ ", "
|
||||||
|
+ shape.getRadius()
|
||||||
|
+ "]";
|
||||||
|
}
|
||||||
|
return emitter.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAsText(String text) throws IllegalArgumentException {
|
||||||
|
text = text.replace('[', ' ').trim();
|
||||||
|
text = text.replace(']', ' ').trim();
|
||||||
|
String[] strings = text.split(",");
|
||||||
|
EmitterShape old=emitter;
|
||||||
|
if (strings.length == 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if ("box".equals(strings[0].trim().toLowerCase())) {
|
||||||
|
if (strings.length == 7) {
|
||||||
|
StatusDisplayer.getDefault().setStatusText("try set parameterized box shape");
|
||||||
|
emitter = new EmitterBoxShape(
|
||||||
|
new Vector3f(Float.parseFloat(strings[1]), Float.parseFloat(strings[2]), Float.parseFloat(strings[3])), new Vector3f(Float.parseFloat(strings[4]), Float.parseFloat(strings[5]), Float.parseFloat(strings[6])));
|
||||||
|
} else {
|
||||||
|
StatusDisplayer.getDefault().setStatusText("try set standard box shape");
|
||||||
|
emitter = new EmitterBoxShape(new Vector3f(-.5f, -.5f, -.5f), new Vector3f(.5f, .5f, .5f));
|
||||||
|
}
|
||||||
|
} else if ("point".equals(strings[0].trim().toLowerCase())) {
|
||||||
|
if (strings.length == 4) {
|
||||||
|
emitter = new EmitterPointShape(
|
||||||
|
new Vector3f(Float.parseFloat(strings[1]), Float.parseFloat(strings[2]), Float.parseFloat(strings[3])));
|
||||||
|
} else {
|
||||||
|
emitter = new EmitterPointShape(Vector3f.ZERO);
|
||||||
|
}
|
||||||
|
} else if ("sphere".equals(strings[0].trim().toLowerCase())) {
|
||||||
|
if (strings.length == 5) {
|
||||||
|
emitter = new EmitterSphereShape(
|
||||||
|
new Vector3f(Float.parseFloat(strings[1]), Float.parseFloat(strings[2]), Float.parseFloat(strings[3])), Float.parseFloat(strings[4]));
|
||||||
|
} else {
|
||||||
|
emitter = new EmitterSphereShape(Vector3f.ZERO, .5f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
notifyListeners(old, emitter);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getTags() {
|
||||||
|
// String[] mats = new String[]{"[Point]", "[Sphere]", "[Box]"};
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Component getCustomEditor() {
|
||||||
|
throw new UnsupportedOperationException("Not supported yet.");
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean supportsCustomEditor() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addPropertyChangeListener(PropertyChangeListener listener) {
|
||||||
|
listeners.add(listener);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void removePropertyChangeListener(PropertyChangeListener listener) {
|
||||||
|
listeners.remove(listener);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void notifyListeners(EmitterShape before, EmitterShape after) {
|
||||||
|
for (Iterator<PropertyChangeListener> it = listeners.iterator(); it.hasNext();) {
|
||||||
|
PropertyChangeListener propertyChangeListener = it.next();
|
||||||
|
//TODO: check what the "programmatic name" is supposed to be here.. for now its Quaternion
|
||||||
|
propertyChangeListener.propertyChange(new PropertyChangeEvent(this, null, before, after));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,124 @@
|
|||||||
|
/*
|
||||||
|
* 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.properties;
|
||||||
|
|
||||||
|
import com.jme3.math.Matrix3f;
|
||||||
|
import java.awt.Component;
|
||||||
|
import java.awt.Graphics;
|
||||||
|
import java.awt.Rectangle;
|
||||||
|
import java.beans.PropertyChangeEvent;
|
||||||
|
import java.beans.PropertyChangeListener;
|
||||||
|
import java.beans.PropertyEditor;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.LinkedList;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author normenhansen
|
||||||
|
*/
|
||||||
|
public class Matrix3fPropertyEditor implements PropertyEditor {
|
||||||
|
|
||||||
|
private LinkedList<PropertyChangeListener> listeners = new LinkedList<PropertyChangeListener>();
|
||||||
|
private Matrix3f vector = new Matrix3f();
|
||||||
|
|
||||||
|
public void setValue(Object value) {
|
||||||
|
if (value instanceof Matrix3f) {
|
||||||
|
vector.set((Matrix3f) value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public Object getValue() {
|
||||||
|
return vector;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isPaintable() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void paintValue(Graphics gfx, Rectangle box) {
|
||||||
|
throw new UnsupportedOperationException("Not supported yet.");
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getJavaInitializationString() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAsText() {
|
||||||
|
return vector.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAsText(String text) throws IllegalArgumentException {
|
||||||
|
text = text.replace('[', ' ');
|
||||||
|
text = text.replace(']', ' ');
|
||||||
|
String[] values = text.split(",");
|
||||||
|
if (values.length != 3) {
|
||||||
|
throw (new IllegalArgumentException("String not correct"));
|
||||||
|
}
|
||||||
|
float[] floats = new float[3];
|
||||||
|
for (int i = 0; i < values.length; i++) {
|
||||||
|
String string = values[i];
|
||||||
|
floats[i] = Float.parseFloat(string);
|
||||||
|
}
|
||||||
|
Matrix3f old = new Matrix3f();
|
||||||
|
old.set(vector);
|
||||||
|
// vector.set(floats[0], floats[1], floats[2]);
|
||||||
|
notifyListeners(old, vector);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getTags() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Component getCustomEditor() {
|
||||||
|
throw new UnsupportedOperationException("Not supported yet.");
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean supportsCustomEditor() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addPropertyChangeListener(PropertyChangeListener listener) {
|
||||||
|
listeners.add(listener);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void removePropertyChangeListener(PropertyChangeListener listener) {
|
||||||
|
listeners.remove(listener);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void notifyListeners(Matrix3f before, Matrix3f after) {
|
||||||
|
for (Iterator<PropertyChangeListener> it = listeners.iterator(); it.hasNext();) {
|
||||||
|
PropertyChangeListener propertyChangeListener = it.next();
|
||||||
|
//TODO: check what the "programmatic name" is supposed to be here.. for now its Matrix3f
|
||||||
|
propertyChangeListener.propertyChange(new PropertyChangeEvent(this, null, before, after));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,125 @@
|
|||||||
|
/*
|
||||||
|
* 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.properties;
|
||||||
|
|
||||||
|
import com.jme3.math.Quaternion;
|
||||||
|
import java.awt.Component;
|
||||||
|
import java.awt.Graphics;
|
||||||
|
import java.awt.Rectangle;
|
||||||
|
import java.beans.PropertyChangeEvent;
|
||||||
|
import java.beans.PropertyChangeListener;
|
||||||
|
import java.beans.PropertyEditor;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.LinkedList;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author normenhansen
|
||||||
|
*/
|
||||||
|
public class QuaternionPropertyEditor implements PropertyEditor {
|
||||||
|
|
||||||
|
private LinkedList<PropertyChangeListener> listeners = new LinkedList<PropertyChangeListener>();
|
||||||
|
private Quaternion quaternion = new Quaternion();
|
||||||
|
|
||||||
|
public void setValue(Object value) {
|
||||||
|
if (value instanceof Quaternion) {
|
||||||
|
quaternion.set((Quaternion) value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public Object getValue() {
|
||||||
|
return quaternion;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isPaintable() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void paintValue(Graphics gfx, Rectangle box) {
|
||||||
|
throw new UnsupportedOperationException("Not supported yet.");
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getJavaInitializationString() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAsText() {
|
||||||
|
float[] angles=quaternion.toAngles(new float[3]);
|
||||||
|
return "[" + (float)Math.toDegrees(angles[0]) + ", " + (float)Math.toDegrees(angles[1]) + ", " + (float)Math.toDegrees(angles[2]) + "]";
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAsText(String text) throws IllegalArgumentException {
|
||||||
|
text = text.replace('[', ' ');
|
||||||
|
text = text.replace(']', ' ');
|
||||||
|
String[] values = text.split(",");
|
||||||
|
if (values.length != 3) {
|
||||||
|
throw (new IllegalArgumentException("String not correct"));
|
||||||
|
}
|
||||||
|
float[] floats = new float[3];
|
||||||
|
for (int i = 0; i < values.length; i++) {
|
||||||
|
String string = values[i];
|
||||||
|
floats[i] = (float)Math.toRadians(Float.parseFloat(string));
|
||||||
|
}
|
||||||
|
Quaternion old=new Quaternion();
|
||||||
|
old.set(quaternion);
|
||||||
|
quaternion.fromAngles(floats);
|
||||||
|
notifyListeners(old,quaternion);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getTags() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Component getCustomEditor() {
|
||||||
|
throw new UnsupportedOperationException("Not supported yet.");
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean supportsCustomEditor() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addPropertyChangeListener(PropertyChangeListener listener) {
|
||||||
|
listeners.add(listener);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void removePropertyChangeListener(PropertyChangeListener listener) {
|
||||||
|
listeners.remove(listener);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void notifyListeners(Quaternion before, Quaternion after) {
|
||||||
|
for (Iterator<PropertyChangeListener> it = listeners.iterator(); it.hasNext();) {
|
||||||
|
PropertyChangeListener propertyChangeListener = it.next();
|
||||||
|
//TODO: check what the "programmatic name" is supposed to be here.. for now its Quaternion
|
||||||
|
propertyChangeListener.propertyChange(new PropertyChangeEvent(this, null, before, after));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,209 @@
|
|||||||
|
/*
|
||||||
|
* 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.properties;
|
||||||
|
|
||||||
|
import com.jme3.effect.shapes.EmitterShape;
|
||||||
|
import com.jme3.gde.core.scene.SceneApplication;
|
||||||
|
import com.jme3.gde.core.undoredo.AbstractUndoableSceneEdit;
|
||||||
|
import com.jme3.gde.core.undoredo.SceneUndoRedoManager;
|
||||||
|
import com.jme3.math.ColorRGBA;
|
||||||
|
import com.jme3.math.Matrix3f;
|
||||||
|
import com.jme3.math.Quaternion;
|
||||||
|
import com.jme3.math.Vector2f;
|
||||||
|
import com.jme3.math.Vector3f;
|
||||||
|
import java.lang.reflect.InvocationTargetException;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.LinkedList;
|
||||||
|
import java.util.concurrent.Callable;
|
||||||
|
import java.util.concurrent.ExecutionException;
|
||||||
|
import java.util.logging.Level;
|
||||||
|
import java.util.logging.Logger;
|
||||||
|
import org.openide.nodes.PropertySupport;
|
||||||
|
import org.openide.util.Exceptions;
|
||||||
|
import org.openide.util.Lookup;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author normenhansen
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
public class SceneExplorerProperty<T> extends PropertySupport.Reflection<T> {
|
||||||
|
|
||||||
|
protected LinkedList<ScenePropertyChangeListener> listeners = new LinkedList<ScenePropertyChangeListener>();
|
||||||
|
|
||||||
|
public SceneExplorerProperty(T instance, Class valueType, String getter, String setter) throws NoSuchMethodException {
|
||||||
|
this(instance, valueType, getter, setter, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public SceneExplorerProperty(T instance, Class valueType, String getter, String setter, ScenePropertyChangeListener listener) throws NoSuchMethodException {
|
||||||
|
super(instance, valueType, getter, setter);
|
||||||
|
addPropertyChangeListener(listener);
|
||||||
|
if (valueType == Vector3f.class) {
|
||||||
|
setPropertyEditorClass(Vector3fPropertyEditor.class);
|
||||||
|
} else if (valueType == Quaternion.class) {
|
||||||
|
setPropertyEditorClass(QuaternionPropertyEditor.class);
|
||||||
|
} else if (valueType == Matrix3f.class) {
|
||||||
|
setPropertyEditorClass(Matrix3fPropertyEditor.class);
|
||||||
|
} else if (valueType == ColorRGBA.class) {
|
||||||
|
setPropertyEditorClass(ColorRGBAPropertyEditor.class);
|
||||||
|
} else if (valueType == EmitterShape.class) {
|
||||||
|
setPropertyEditorClass(EmitterShapePropertyEditor.class);
|
||||||
|
} else if (valueType == Vector2f.class) {
|
||||||
|
setPropertyEditorClass(Vector2fPropertyEditor.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (SceneExplorerPropertyEditor di : Lookup.getDefault().lookupAll(SceneExplorerPropertyEditor.class)) {
|
||||||
|
di.setEditor(valueType, this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public T getValue() throws IllegalAccessException, IllegalArgumentException, InvocationTargetException {
|
||||||
|
return super.getValue();
|
||||||
|
// try {
|
||||||
|
// return SceneApplication.getApplication().enqueue(new Callable<T>() {
|
||||||
|
//
|
||||||
|
// public T call() throws Exception {
|
||||||
|
// return getSuperValue();
|
||||||
|
// }
|
||||||
|
// }).get();
|
||||||
|
// } catch (InterruptedException ex) {
|
||||||
|
// Exceptions.printStackTrace(ex);
|
||||||
|
// } catch (ExecutionException ex) {
|
||||||
|
// Exceptions.printStackTrace(ex);
|
||||||
|
// }
|
||||||
|
// return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private T getSuperValue() {
|
||||||
|
try {
|
||||||
|
return super.getValue();
|
||||||
|
} catch (IllegalAccessException ex) {
|
||||||
|
Exceptions.printStackTrace(ex);
|
||||||
|
} catch (IllegalArgumentException ex) {
|
||||||
|
Exceptions.printStackTrace(ex);
|
||||||
|
} catch (InvocationTargetException ex) {
|
||||||
|
Exceptions.printStackTrace(ex);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setValue(final T val) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException {
|
||||||
|
try {
|
||||||
|
notifyListeners(getSuperValue(), val);
|
||||||
|
SceneApplication.getApplication().enqueue(new Callable<Void>() {
|
||||||
|
|
||||||
|
public Void call() throws Exception {
|
||||||
|
setSuperValue(val);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}).get();
|
||||||
|
} catch (InterruptedException ex) {
|
||||||
|
Exceptions.printStackTrace(ex);
|
||||||
|
} catch (ExecutionException ex) {
|
||||||
|
Exceptions.printStackTrace(ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setSuperValue(T val, boolean undo) {
|
||||||
|
try {
|
||||||
|
if (undo) {
|
||||||
|
try {
|
||||||
|
Object oldValue = getSuperValue();
|
||||||
|
if (oldValue.getClass().getMethod("clone") != null) {
|
||||||
|
addUndo(oldValue.getClass().getMethod("clone").invoke(oldValue), val);
|
||||||
|
Logger.getLogger(SceneExplorerProperty.class.getName()).log(Level.INFO, "Add cloned undo {0}", oldValue.getClass().getMethod("clone").invoke(oldValue));
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
addUndo(getSuperValue(), val);
|
||||||
|
Logger.getLogger(SceneExplorerProperty.class.getName()).log(Level.INFO, "Add undo {0}", getSuperValue());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
super.setValue(val);
|
||||||
|
} catch (IllegalAccessException ex) {
|
||||||
|
Exceptions.printStackTrace(ex);
|
||||||
|
} catch (IllegalArgumentException ex) {
|
||||||
|
Exceptions.printStackTrace(ex);
|
||||||
|
} catch (InvocationTargetException ex) {
|
||||||
|
Exceptions.printStackTrace(ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setSuperValue(T val) {
|
||||||
|
setSuperValue(val, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void addUndo(final Object before, final Object after) {
|
||||||
|
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
|
||||||
|
public void sceneUndo() {
|
||||||
|
Logger.getLogger(SceneExplorerProperty.class.getName()).log(Level.INFO, "Do undo {0}", before);
|
||||||
|
setSuperValue((T) before, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void sceneRedo() {
|
||||||
|
setSuperValue((T) after, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void awtUndo() {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void awtRedo() {
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addPropertyChangeListener(ScenePropertyChangeListener listener) {
|
||||||
|
listeners.add(listener);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void removePropertyChangeListener(ScenePropertyChangeListener listener) {
|
||||||
|
listeners.remove(listener);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void notifyListeners(Object before, Object after) {
|
||||||
|
for (Iterator<ScenePropertyChangeListener> it = listeners.iterator(); it.hasNext();) {
|
||||||
|
ScenePropertyChangeListener propertyChangeListener = it.next();
|
||||||
|
propertyChangeListener.propertyChange(getName(), before, after);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,41 @@
|
|||||||
|
/*
|
||||||
|
* 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.properties;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author normenhansen
|
||||||
|
*/
|
||||||
|
public interface SceneExplorerPropertyEditor {
|
||||||
|
public void setEditor(Class valueType, SceneExplorerProperty prop);
|
||||||
|
}
|
@ -0,0 +1,41 @@
|
|||||||
|
/*
|
||||||
|
* 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.properties;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author normenhansen
|
||||||
|
*/
|
||||||
|
public interface ScenePropertyChangeListener {
|
||||||
|
public void propertyChange(String property, Object oldValue, Object newValue);
|
||||||
|
}
|
@ -0,0 +1,128 @@
|
|||||||
|
<?xml version="1.1" encoding="UTF-8" ?>
|
||||||
|
|
||||||
|
<Form version="1.5" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JDialogFormInfo">
|
||||||
|
<Properties>
|
||||||
|
<Property name="defaultCloseOperation" type="int" value="2"/>
|
||||||
|
<Property name="title" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||||
|
<ResourceString bundle="com/jme3/gde/core/assets/Bundle.properties" key="TextureBrowser.title" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
|
</Property>
|
||||||
|
</Properties>
|
||||||
|
<SyntheticProperties>
|
||||||
|
<SyntheticProperty name="formSizePolicy" type="int" value="1"/>
|
||||||
|
</SyntheticProperties>
|
||||||
|
<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="false"/>
|
||||||
|
<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">
|
||||||
|
<Group type="102" alignment="1" attributes="0">
|
||||||
|
<EmptySpace pref="357" max="32767" attributes="0"/>
|
||||||
|
<Component id="cancelButton" min="-2" max="-2" attributes="0"/>
|
||||||
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
|
<Component id="okButton" min="-2" max="-2" attributes="0"/>
|
||||||
|
<EmptySpace min="-2" pref="17" max="-2" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
<Component id="jPanel1" alignment="0" max="32767" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
</DimensionLayout>
|
||||||
|
<DimensionLayout dim="1">
|
||||||
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
|
<Group type="102" alignment="1" attributes="0">
|
||||||
|
<Component id="jPanel1" max="32767" attributes="0"/>
|
||||||
|
<EmptySpace type="unrelated" max="-2" attributes="0"/>
|
||||||
|
<Group type="103" groupAlignment="3" attributes="0">
|
||||||
|
<Component id="okButton" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
|
<Component id="cancelButton" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
</Group>
|
||||||
|
</Group>
|
||||||
|
</DimensionLayout>
|
||||||
|
</Layout>
|
||||||
|
<SubComponents>
|
||||||
|
<Component class="javax.swing.JButton" name="cancelButton">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||||
|
<ResourceString bundle="com/jme3/gde/core/properties/Bundle.properties" key="TextureBrowser.cancelButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
|
</Property>
|
||||||
|
</Properties>
|
||||||
|
<Events>
|
||||||
|
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="cancelButtonActionPerformed"/>
|
||||||
|
</Events>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JButton" name="okButton">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||||
|
<ResourceString bundle="com/jme3/gde/core/properties/Bundle.properties" key="TextureBrowser.okButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
|
</Property>
|
||||||
|
</Properties>
|
||||||
|
<Events>
|
||||||
|
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="okButtonActionPerformed"/>
|
||||||
|
</Events>
|
||||||
|
</Component>
|
||||||
|
<Container class="javax.swing.JPanel" name="jPanel1">
|
||||||
|
|
||||||
|
<Layout>
|
||||||
|
<DimensionLayout dim="0">
|
||||||
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
|
<Group type="102" alignment="0" attributes="0">
|
||||||
|
<Component id="jScrollPane1" pref="264" max="32767" attributes="0"/>
|
||||||
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
|
<Component id="jScrollPane2" pref="267" max="32767" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
</Group>
|
||||||
|
</DimensionLayout>
|
||||||
|
<DimensionLayout dim="1">
|
||||||
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
|
<Component id="jScrollPane2" alignment="0" pref="299" max="32767" attributes="0"/>
|
||||||
|
<Component id="jScrollPane1" alignment="1" pref="299" max="32767" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
</DimensionLayout>
|
||||||
|
</Layout>
|
||||||
|
<SubComponents>
|
||||||
|
<Container class="javax.swing.JScrollPane" name="jScrollPane1">
|
||||||
|
<AuxValues>
|
||||||
|
<AuxValue name="autoScrollPane" type="java.lang.Boolean" value="true"/>
|
||||||
|
</AuxValues>
|
||||||
|
|
||||||
|
<Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
|
||||||
|
<SubComponents>
|
||||||
|
<Component class="javax.swing.JList" name="textureList">
|
||||||
|
<Properties>
|
||||||
|
<Property name="selectionMode" type="int" value="0"/>
|
||||||
|
<Property name="selectionModel" type="javax.swing.ListSelectionModel" editor="org.netbeans.modules.form.RADConnectionPropertyEditor">
|
||||||
|
<Connection code="new ToggleSelectionModel()" type="code"/>
|
||||||
|
</Property>
|
||||||
|
</Properties>
|
||||||
|
<Events>
|
||||||
|
<EventHandler event="valueChanged" listener="javax.swing.event.ListSelectionListener" parameters="javax.swing.event.ListSelectionEvent" handler="textureListValueChanged"/>
|
||||||
|
</Events>
|
||||||
|
</Component>
|
||||||
|
</SubComponents>
|
||||||
|
</Container>
|
||||||
|
<Container class="javax.swing.JScrollPane" name="jScrollPane2">
|
||||||
|
|
||||||
|
<Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
|
||||||
|
<SubComponents>
|
||||||
|
<Component class="javax.swing.JLabel" name="imagePreviewLabel">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||||
|
<ResourceString bundle="com/jme3/gde/core/properties/Bundle.properties" key="TextureBrowser.imagePreviewLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
|
</Property>
|
||||||
|
</Properties>
|
||||||
|
</Component>
|
||||||
|
</SubComponents>
|
||||||
|
</Container>
|
||||||
|
</SubComponents>
|
||||||
|
</Container>
|
||||||
|
</SubComponents>
|
||||||
|
</Form>
|
@ -0,0 +1,264 @@
|
|||||||
|
/*
|
||||||
|
* 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.properties;
|
||||||
|
|
||||||
|
import Model.DDSImageFile;
|
||||||
|
import com.jme3.gde.core.assets.ProjectAssetManager;
|
||||||
|
import com.jme3.texture.Texture;
|
||||||
|
import java.awt.image.BufferedImage;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.logging.Logger;
|
||||||
|
import javax.swing.DefaultListSelectionModel;
|
||||||
|
import javax.swing.Icon;
|
||||||
|
import javax.swing.ImageIcon;
|
||||||
|
import jme3tools.converters.ImageToAwt;
|
||||||
|
import org.openide.filesystems.FileUtil;
|
||||||
|
import org.openide.util.Exceptions;
|
||||||
|
import org.openide.util.ImageUtilities;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Displays all textures in the ProjectAssetManager,
|
||||||
|
* lets you select one, and shows a preview of it.
|
||||||
|
*
|
||||||
|
* The user can de-select the currently selected texture to specify they
|
||||||
|
* do not want a texture, and in that case null is returned.
|
||||||
|
*
|
||||||
|
* @author bowens
|
||||||
|
*/
|
||||||
|
public class TextureBrowser extends javax.swing.JDialog {
|
||||||
|
|
||||||
|
private ProjectAssetManager assetManager;
|
||||||
|
private TexturePropertyEditor editor;
|
||||||
|
|
||||||
|
|
||||||
|
public TextureBrowser(java.awt.Frame parent, boolean modal, ProjectAssetManager assetManager, TexturePropertyEditor editor) {
|
||||||
|
super(parent, modal);
|
||||||
|
this.assetManager = assetManager;
|
||||||
|
this.editor = editor;
|
||||||
|
initComponents();
|
||||||
|
loadAvailableTextures();
|
||||||
|
setSelectedTexture((Texture)editor.getValue());
|
||||||
|
setLocationRelativeTo(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** This method is called from within the constructor to
|
||||||
|
* initialize the form.
|
||||||
|
* WARNING: Do NOT modify this code. The content of this method is
|
||||||
|
* always regenerated by the Form Editor.
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
|
||||||
|
private void initComponents() {
|
||||||
|
|
||||||
|
cancelButton = new javax.swing.JButton();
|
||||||
|
okButton = new javax.swing.JButton();
|
||||||
|
jPanel1 = new javax.swing.JPanel();
|
||||||
|
jScrollPane1 = new javax.swing.JScrollPane();
|
||||||
|
textureList = new javax.swing.JList();
|
||||||
|
jScrollPane2 = new javax.swing.JScrollPane();
|
||||||
|
imagePreviewLabel = new javax.swing.JLabel();
|
||||||
|
|
||||||
|
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
|
||||||
|
setTitle(org.openide.util.NbBundle.getMessage(TextureBrowser.class, "TextureBrowser.title")); // NOI18N
|
||||||
|
|
||||||
|
cancelButton.setText(org.openide.util.NbBundle.getMessage(TextureBrowser.class, "TextureBrowser.cancelButton.text")); // NOI18N
|
||||||
|
cancelButton.addActionListener(new java.awt.event.ActionListener() {
|
||||||
|
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
||||||
|
cancelButtonActionPerformed(evt);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
okButton.setText(org.openide.util.NbBundle.getMessage(TextureBrowser.class, "TextureBrowser.okButton.text")); // NOI18N
|
||||||
|
okButton.addActionListener(new java.awt.event.ActionListener() {
|
||||||
|
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
||||||
|
okButtonActionPerformed(evt);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
textureList.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
|
||||||
|
textureList.setSelectionModel(new ToggleSelectionModel());
|
||||||
|
textureList.addListSelectionListener(new javax.swing.event.ListSelectionListener() {
|
||||||
|
public void valueChanged(javax.swing.event.ListSelectionEvent evt) {
|
||||||
|
textureListValueChanged(evt);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
jScrollPane1.setViewportView(textureList);
|
||||||
|
|
||||||
|
imagePreviewLabel.setText(org.openide.util.NbBundle.getMessage(TextureBrowser.class, "TextureBrowser.imagePreviewLabel.text")); // NOI18N
|
||||||
|
jScrollPane2.setViewportView(imagePreviewLabel);
|
||||||
|
|
||||||
|
javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
|
||||||
|
jPanel1.setLayout(jPanel1Layout);
|
||||||
|
jPanel1Layout.setHorizontalGroup(
|
||||||
|
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
|
.addGroup(jPanel1Layout.createSequentialGroup()
|
||||||
|
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 264, Short.MAX_VALUE)
|
||||||
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||||
|
.addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 267, Short.MAX_VALUE))
|
||||||
|
);
|
||||||
|
jPanel1Layout.setVerticalGroup(
|
||||||
|
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
|
.addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 299, Short.MAX_VALUE)
|
||||||
|
.addComponent(jScrollPane1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 299, Short.MAX_VALUE)
|
||||||
|
);
|
||||||
|
|
||||||
|
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
|
||||||
|
getContentPane().setLayout(layout);
|
||||||
|
layout.setHorizontalGroup(
|
||||||
|
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
|
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
|
||||||
|
.addContainerGap(357, Short.MAX_VALUE)
|
||||||
|
.addComponent(cancelButton)
|
||||||
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||||
|
.addComponent(okButton)
|
||||||
|
.addGap(17, 17, 17))
|
||||||
|
.addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
||||||
|
);
|
||||||
|
layout.setVerticalGroup(
|
||||||
|
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
|
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
|
||||||
|
.addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
||||||
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
|
||||||
|
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
||||||
|
.addComponent(okButton)
|
||||||
|
.addComponent(cancelButton)))
|
||||||
|
);
|
||||||
|
|
||||||
|
pack();
|
||||||
|
}// </editor-fold>//GEN-END:initComponents
|
||||||
|
|
||||||
|
private void okButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_okButtonActionPerformed
|
||||||
|
setTexture();
|
||||||
|
dispose();
|
||||||
|
}//GEN-LAST:event_okButtonActionPerformed
|
||||||
|
|
||||||
|
private void cancelButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cancelButtonActionPerformed
|
||||||
|
dispose();
|
||||||
|
}//GEN-LAST:event_cancelButtonActionPerformed
|
||||||
|
|
||||||
|
private void textureListValueChanged(javax.swing.event.ListSelectionEvent evt) {//GEN-FIRST:event_textureListValueChanged
|
||||||
|
selectionChanged();
|
||||||
|
}//GEN-LAST:event_textureListValueChanged
|
||||||
|
|
||||||
|
private void setTexture() {
|
||||||
|
if (textureList.getSelectedIndex() > -1) {
|
||||||
|
textureList.getSelectedValue();
|
||||||
|
String selected = (String) textureList.getSelectedValue();
|
||||||
|
Texture tex = assetManager.loadTexture(selected);
|
||||||
|
editor.setValue(tex);
|
||||||
|
editor.setAsText(selected);
|
||||||
|
} else {
|
||||||
|
editor.setValue(null);
|
||||||
|
editor.setAsText(null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Variables declaration - do not modify//GEN-BEGIN:variables
|
||||||
|
private javax.swing.JButton cancelButton;
|
||||||
|
private javax.swing.JLabel imagePreviewLabel;
|
||||||
|
private javax.swing.JPanel jPanel1;
|
||||||
|
private javax.swing.JScrollPane jScrollPane1;
|
||||||
|
private javax.swing.JScrollPane jScrollPane2;
|
||||||
|
private javax.swing.JButton okButton;
|
||||||
|
private javax.swing.JList textureList;
|
||||||
|
// End of variables declaration//GEN-END:variables
|
||||||
|
|
||||||
|
private void loadAvailableTextures() {
|
||||||
|
if (assetManager == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
textureList.setListData(assetManager.getTextures());
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void selectionChanged() {
|
||||||
|
if (textureList.getSelectedIndex() > -1) {
|
||||||
|
String selected = (String) textureList.getSelectedValue();
|
||||||
|
Texture tex = assetManager.loadTexture(selected);
|
||||||
|
Icon newicon = null;
|
||||||
|
if(selected.endsWith(".dds")||selected.endsWith(".DDS")){
|
||||||
|
try {
|
||||||
|
File file = FileUtil.toFile(assetManager.getAssetFolder().getFileObject(selected));
|
||||||
|
DDSImageFile ddsImageFile = new DDSImageFile(file);
|
||||||
|
BufferedImage bufferedImage = ddsImageFile.getData();
|
||||||
|
newicon = new ImageIcon(bufferedImage);
|
||||||
|
} catch (IOException ex) {
|
||||||
|
Exceptions.printStackTrace(ex);
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
newicon = ImageUtilities.image2Icon(ImageToAwt.convert(tex.getImage(), false, true, 0));
|
||||||
|
}
|
||||||
|
imagePreviewLabel.setIcon(newicon);
|
||||||
|
} else {
|
||||||
|
imagePreviewLabel.setIcon(null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setSelectedTexture(Texture texture) {
|
||||||
|
if (texture != null) {
|
||||||
|
Logger.getLogger(TextureBrowser.class.getName()).finer("Looking for Texture: "+texture.getName());
|
||||||
|
for (int i=0; i<textureList.getModel().getSize(); i++) {
|
||||||
|
Logger.getLogger(TextureBrowser.class.getName()).finer("Texture name: "+textureList.getModel().getElementAt(i));
|
||||||
|
if (textureList.getModel().getElementAt(i).equals(texture.getName()) ) {
|
||||||
|
textureList.setSelectedIndex(i);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class ToggleSelectionModel extends DefaultListSelectionModel {
|
||||||
|
boolean gestureStarted = false;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setSelectionInterval(int index0, int index1) {
|
||||||
|
if (isSelectedIndex(index0) && !gestureStarted) {
|
||||||
|
super.removeSelectionInterval(index0, index1);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
super.setSelectionInterval(index0, index1);
|
||||||
|
}
|
||||||
|
gestureStarted = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setValueIsAdjusting(boolean isAdjusting) {
|
||||||
|
if (isAdjusting == false) {
|
||||||
|
gestureStarted = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,139 @@
|
|||||||
|
/*
|
||||||
|
* 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.properties;
|
||||||
|
|
||||||
|
import com.jme3.asset.AssetManager;
|
||||||
|
import com.jme3.gde.core.assets.ProjectAssetManager;
|
||||||
|
import com.jme3.gde.core.scene.SceneApplication;
|
||||||
|
import com.jme3.texture.Texture;
|
||||||
|
import java.awt.Component;
|
||||||
|
import java.awt.Graphics;
|
||||||
|
import java.awt.Rectangle;
|
||||||
|
import java.beans.PropertyChangeListener;
|
||||||
|
import java.beans.PropertyEditor;
|
||||||
|
import java.util.LinkedList;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author bowens
|
||||||
|
*/
|
||||||
|
public class TexturePropertyEditor implements PropertyEditor {
|
||||||
|
|
||||||
|
private LinkedList<PropertyChangeListener> listeners = new LinkedList<PropertyChangeListener>();
|
||||||
|
private Texture texture;
|
||||||
|
private AssetManager manager;
|
||||||
|
private String assetKey;
|
||||||
|
|
||||||
|
public TexturePropertyEditor() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public TexturePropertyEditor(Texture texture) {
|
||||||
|
this.texture = texture;
|
||||||
|
}
|
||||||
|
|
||||||
|
public TexturePropertyEditor(AssetManager manager) {
|
||||||
|
this.manager = manager;
|
||||||
|
}
|
||||||
|
|
||||||
|
public TexturePropertyEditor(Texture texture, AssetManager manager) {
|
||||||
|
this.texture = texture;
|
||||||
|
this.manager = manager;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setValue(Object value) {
|
||||||
|
if (value instanceof Texture) {
|
||||||
|
texture = (Texture) value;
|
||||||
|
} else {
|
||||||
|
texture = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public Object getValue() {
|
||||||
|
return texture;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isPaintable() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void paintValue(Graphics gfx, Rectangle box) {
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getJavaInitializationString() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAsText() {
|
||||||
|
// if (texture != null) {
|
||||||
|
// return texture.getName();
|
||||||
|
// }
|
||||||
|
return assetKey;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAsText(String text) throws IllegalArgumentException {
|
||||||
|
this.assetKey = text;
|
||||||
|
//TODO: load texture if not done.. maybe load here instead of panel..
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getTags() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Component getCustomEditor() {
|
||||||
|
ProjectAssetManager currentProjectAssetManager = null;
|
||||||
|
if (manager instanceof ProjectAssetManager) {
|
||||||
|
currentProjectAssetManager = (ProjectAssetManager) manager;
|
||||||
|
}
|
||||||
|
//try {
|
||||||
|
if (currentProjectAssetManager == null) {
|
||||||
|
currentProjectAssetManager = (ProjectAssetManager) SceneApplication.getApplication().getAssetManager();
|
||||||
|
}
|
||||||
|
TextureBrowser textureBrowser = new TextureBrowser(null, true, currentProjectAssetManager, this);
|
||||||
|
return textureBrowser;
|
||||||
|
//} catch (Exception e) {
|
||||||
|
//Logger.getLogger(this.getClass().getName()).log(Level.SEVERE, e.getMessage()+" Could not get project asset manager!", e);
|
||||||
|
//return null;
|
||||||
|
//}
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean supportsCustomEditor() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addPropertyChangeListener(PropertyChangeListener listener) {
|
||||||
|
listeners.add(listener);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void removePropertyChangeListener(PropertyChangeListener listener) {
|
||||||
|
listeners.remove(listener);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,144 @@
|
|||||||
|
/*
|
||||||
|
* 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.properties;
|
||||||
|
|
||||||
|
import com.jme3.gde.core.scene.SceneApplication;
|
||||||
|
import com.jme3.scene.Spatial;
|
||||||
|
import java.beans.PropertyEditor;
|
||||||
|
import java.lang.reflect.InvocationTargetException;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.LinkedList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.concurrent.Callable;
|
||||||
|
import java.util.concurrent.ExecutionException;
|
||||||
|
import org.openide.nodes.PropertySupport;
|
||||||
|
import org.openide.util.Exceptions;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author normenhansen
|
||||||
|
*/
|
||||||
|
public class UserDataProperty extends PropertySupport.ReadWrite<String> {
|
||||||
|
|
||||||
|
private Spatial spatial;
|
||||||
|
private String name = "null";
|
||||||
|
private int type = 0;
|
||||||
|
private List<ScenePropertyChangeListener> listeners = new LinkedList<ScenePropertyChangeListener>();
|
||||||
|
|
||||||
|
public UserDataProperty(Spatial node, String name) {
|
||||||
|
super(name, String.class, name, "");
|
||||||
|
this.spatial = node;
|
||||||
|
this.name = name;
|
||||||
|
this.type = getObjectType(node.getUserData(name));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int getObjectType(Object type) {
|
||||||
|
if (type instanceof Integer) {
|
||||||
|
return 0;
|
||||||
|
} else if (type instanceof Float) {
|
||||||
|
return 1;
|
||||||
|
} else if (type instanceof Boolean) {
|
||||||
|
return 2;
|
||||||
|
} else if (type instanceof String) {
|
||||||
|
return 3;
|
||||||
|
} else if (type instanceof Long) {
|
||||||
|
return 4;
|
||||||
|
} else {
|
||||||
|
throw new IllegalArgumentException("Unsupported type: " + type);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getValue() throws IllegalAccessException, InvocationTargetException {
|
||||||
|
return spatial.getUserData(name) + "";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setValue(final String val) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException {
|
||||||
|
if (spatial == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
SceneApplication.getApplication().enqueue(new Callable<Void>() {
|
||||||
|
|
||||||
|
public Void call() throws Exception {
|
||||||
|
switch (type) {
|
||||||
|
case 0:
|
||||||
|
spatial.setUserData(name, Integer.parseInt(val));
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
spatial.setUserData(name, Float.parseFloat(val));
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
spatial.setUserData(name, Boolean.parseBoolean(val));
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
spatial.setUserData(name, val);
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
spatial.setUserData(name, Long.parseLong(val));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}).get();
|
||||||
|
notifyListeners(null, val);
|
||||||
|
} catch (InterruptedException ex) {
|
||||||
|
Exceptions.printStackTrace(ex);
|
||||||
|
} catch (ExecutionException ex) {
|
||||||
|
Exceptions.printStackTrace(ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public PropertyEditor getPropertyEditor() {
|
||||||
|
return null;
|
||||||
|
// return new AnimationPropertyEditor(control);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addPropertyChangeListener(ScenePropertyChangeListener listener) {
|
||||||
|
listeners.add(listener);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void removePropertyChangeListener(ScenePropertyChangeListener listener) {
|
||||||
|
listeners.remove(listener);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void notifyListeners(Object before, Object after) {
|
||||||
|
for (Iterator<ScenePropertyChangeListener> it = listeners.iterator(); it.hasNext();) {
|
||||||
|
ScenePropertyChangeListener propertyChangeListener = it.next();
|
||||||
|
propertyChangeListener.propertyChange(getName(), before, after);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,124 @@
|
|||||||
|
/*
|
||||||
|
* 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.properties;
|
||||||
|
|
||||||
|
import com.jme3.math.Vector2f;
|
||||||
|
import java.awt.Component;
|
||||||
|
import java.awt.Graphics;
|
||||||
|
import java.awt.Rectangle;
|
||||||
|
import java.beans.PropertyChangeEvent;
|
||||||
|
import java.beans.PropertyChangeListener;
|
||||||
|
import java.beans.PropertyEditor;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.LinkedList;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author normenhansen
|
||||||
|
*/
|
||||||
|
public class Vector2fPropertyEditor implements PropertyEditor {
|
||||||
|
|
||||||
|
private LinkedList<PropertyChangeListener> listeners = new LinkedList<PropertyChangeListener>();
|
||||||
|
private Vector2f vector = new Vector2f();
|
||||||
|
|
||||||
|
public void setValue(Object value) {
|
||||||
|
if (value instanceof Vector2f) {
|
||||||
|
vector.set((Vector2f) value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public Object getValue() {
|
||||||
|
return vector;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isPaintable() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void paintValue(Graphics gfx, Rectangle box) {
|
||||||
|
throw new UnsupportedOperationException("Not supported yet.");
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getJavaInitializationString() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAsText() {
|
||||||
|
return "[" + vector.x + ", " + vector.y + "]";
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAsText(String text) throws IllegalArgumentException {
|
||||||
|
text = text.replace('[', ' ');
|
||||||
|
text = text.replace(']', ' ');
|
||||||
|
String[] values = text.split(",");
|
||||||
|
if (values.length != 2) {
|
||||||
|
throw (new IllegalArgumentException("String not correct"));
|
||||||
|
}
|
||||||
|
float[] floats = new float[2];
|
||||||
|
for (int i = 0; i < values.length; i++) {
|
||||||
|
String string = values[i];
|
||||||
|
floats[i] = Float.parseFloat(string);
|
||||||
|
}
|
||||||
|
Vector2f old = new Vector2f();
|
||||||
|
old.set(vector);
|
||||||
|
vector.set(floats[0], floats[1]);
|
||||||
|
notifyListeners(old, vector);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getTags() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Component getCustomEditor() {
|
||||||
|
throw new UnsupportedOperationException("Not supported yet.");
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean supportsCustomEditor() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addPropertyChangeListener(PropertyChangeListener listener) {
|
||||||
|
listeners.add(listener);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void removePropertyChangeListener(PropertyChangeListener listener) {
|
||||||
|
listeners.remove(listener);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void notifyListeners(Vector2f before, Vector2f after) {
|
||||||
|
for (Iterator<PropertyChangeListener> it = listeners.iterator(); it.hasNext();) {
|
||||||
|
PropertyChangeListener propertyChangeListener = it.next();
|
||||||
|
//TODO: check what the "programmatic name" is supposed to be here.. for now its Vector2f
|
||||||
|
propertyChangeListener.propertyChange(new PropertyChangeEvent(this, null, before, after));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,124 @@
|
|||||||
|
/*
|
||||||
|
* 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.properties;
|
||||||
|
|
||||||
|
import com.jme3.math.Vector3f;
|
||||||
|
import java.awt.Component;
|
||||||
|
import java.awt.Graphics;
|
||||||
|
import java.awt.Rectangle;
|
||||||
|
import java.beans.PropertyChangeEvent;
|
||||||
|
import java.beans.PropertyChangeListener;
|
||||||
|
import java.beans.PropertyEditor;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.LinkedList;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author normenhansen
|
||||||
|
*/
|
||||||
|
public class Vector3fPropertyEditor implements PropertyEditor {
|
||||||
|
|
||||||
|
private LinkedList<PropertyChangeListener> listeners = new LinkedList<PropertyChangeListener>();
|
||||||
|
private Vector3f vector = new Vector3f();
|
||||||
|
|
||||||
|
public void setValue(Object value) {
|
||||||
|
if (value instanceof Vector3f) {
|
||||||
|
vector.set((Vector3f) value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public Object getValue() {
|
||||||
|
return vector;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isPaintable() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void paintValue(Graphics gfx, Rectangle box) {
|
||||||
|
throw new UnsupportedOperationException("Not supported yet.");
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getJavaInitializationString() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAsText() {
|
||||||
|
return "[" + vector.x + ", " + vector.y + ", " + vector.z + "]";
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAsText(String text) throws IllegalArgumentException {
|
||||||
|
text = text.replace('[', ' ');
|
||||||
|
text = text.replace(']', ' ');
|
||||||
|
String[] values = text.split(",");
|
||||||
|
if (values.length != 3) {
|
||||||
|
throw (new IllegalArgumentException("String not correct"));
|
||||||
|
}
|
||||||
|
float[] floats = new float[3];
|
||||||
|
for (int i = 0; i < values.length; i++) {
|
||||||
|
String string = values[i];
|
||||||
|
floats[i] = Float.parseFloat(string);
|
||||||
|
}
|
||||||
|
Vector3f old = new Vector3f();
|
||||||
|
old.set(vector);
|
||||||
|
vector.set(floats[0], floats[1], floats[2]);
|
||||||
|
notifyListeners(old, vector);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getTags() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Component getCustomEditor() {
|
||||||
|
throw new UnsupportedOperationException("Not supported yet.");
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean supportsCustomEditor() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addPropertyChangeListener(PropertyChangeListener listener) {
|
||||||
|
listeners.add(listener);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void removePropertyChangeListener(PropertyChangeListener listener) {
|
||||||
|
listeners.remove(listener);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void notifyListeners(Vector3f before, Vector3f after) {
|
||||||
|
for (Iterator<PropertyChangeListener> it = listeners.iterator(); it.hasNext();) {
|
||||||
|
PropertyChangeListener propertyChangeListener = it.next();
|
||||||
|
//TODO: check what the "programmatic name" is supposed to be here.. for now its Vector3f
|
||||||
|
propertyChangeListener.propertyChange(new PropertyChangeEvent(this, null, before, after));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -29,7 +29,7 @@
|
|||||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
package com.jme3.gde.core.sceneexplorer.nodes.actions;
|
package com.jme3.gde.core.scene.actions;
|
||||||
|
|
||||||
import com.jme3.gde.core.scene.SceneApplication;
|
import com.jme3.gde.core.scene.SceneApplication;
|
||||||
import com.jme3.gde.core.sceneexplorer.nodes.AbstractSceneExplorerNode;
|
import com.jme3.gde.core.sceneexplorer.nodes.AbstractSceneExplorerNode;
|
@ -31,12 +31,17 @@
|
|||||||
*/
|
*/
|
||||||
package com.jme3.gde.core.sceneexplorer.nodes;
|
package com.jme3.gde.core.sceneexplorer.nodes;
|
||||||
|
|
||||||
import com.jme3.gde.core.sceneexplorer.nodes.properties.SceneExplorerProperty;
|
import com.jme3.gde.core.nodes.DynamicLookup;
|
||||||
import com.jme3.gde.core.sceneexplorer.nodes.properties.ScenePropertyChangeListener;
|
import com.jme3.gde.core.properties.SceneExplorerProperty;
|
||||||
|
import com.jme3.gde.core.properties.ScenePropertyChangeListener;
|
||||||
|
import com.jme3.gde.core.util.PropertyUtils;
|
||||||
|
import java.beans.PropertyDescriptor;
|
||||||
|
import java.lang.reflect.Field;
|
||||||
import org.openide.loaders.DataObject;
|
import org.openide.loaders.DataObject;
|
||||||
import org.openide.nodes.AbstractNode;
|
import org.openide.nodes.AbstractNode;
|
||||||
import org.openide.nodes.Children;
|
import org.openide.nodes.Children;
|
||||||
import org.openide.nodes.Node;
|
import org.openide.nodes.Node;
|
||||||
|
import org.openide.nodes.Sheet;
|
||||||
import org.openide.util.Exceptions;
|
import org.openide.util.Exceptions;
|
||||||
import org.openide.util.Lookup;
|
import org.openide.util.Lookup;
|
||||||
import org.openide.util.lookup.InstanceContent;
|
import org.openide.util.lookup.InstanceContent;
|
||||||
@ -55,33 +60,33 @@ public abstract class AbstractSceneExplorerNode extends AbstractNode implements
|
|||||||
protected DataObject dataObject;
|
protected DataObject dataObject;
|
||||||
|
|
||||||
public AbstractSceneExplorerNode() {
|
public AbstractSceneExplorerNode() {
|
||||||
super(Children.LEAF, new SceneExplorerLookup(new InstanceContent()));
|
super(Children.LEAF, new DynamicLookup(new InstanceContent()));
|
||||||
lookupContents = ((SceneExplorerLookup) getLookup()).getInstanceContent();
|
lookupContents = ((DynamicLookup) getLookup()).getInstanceContent();
|
||||||
}
|
}
|
||||||
|
|
||||||
public AbstractSceneExplorerNode(Children children, DataObject dataObject) {
|
public AbstractSceneExplorerNode(Children children, DataObject dataObject) {
|
||||||
super(children, new ProxyLookup(dataObject.getLookup(), new SceneExplorerLookup(new InstanceContent())));
|
super(children, new ProxyLookup(dataObject.getLookup(), new DynamicLookup(new InstanceContent())));
|
||||||
this.dataObject = dataObject;
|
this.dataObject = dataObject;
|
||||||
lookupContents = getLookup().lookup(SceneExplorerLookup.class).getInstanceContent();
|
lookupContents = getLookup().lookup(DynamicLookup.class).getInstanceContent();
|
||||||
}
|
}
|
||||||
|
|
||||||
public AbstractSceneExplorerNode(DataObject dataObject) {
|
public AbstractSceneExplorerNode(DataObject dataObject) {
|
||||||
super(Children.LEAF, new ProxyLookup(dataObject != null ? dataObject.getLookup() : Lookup.EMPTY, new SceneExplorerLookup(new InstanceContent())));
|
super(Children.LEAF, new ProxyLookup(dataObject != null ? dataObject.getLookup() : Lookup.EMPTY, new DynamicLookup(new InstanceContent())));
|
||||||
this.dataObject = dataObject;
|
this.dataObject = dataObject;
|
||||||
lookupContents = getLookup().lookup(SceneExplorerLookup.class).getInstanceContent();
|
lookupContents = getLookup().lookup(DynamicLookup.class).getInstanceContent();
|
||||||
}
|
}
|
||||||
|
|
||||||
public AbstractSceneExplorerNode(Children children) {
|
public AbstractSceneExplorerNode(Children children) {
|
||||||
//TODO: OMG!
|
//TODO: OMG!
|
||||||
super(children, children instanceof SceneExplorerChildren
|
super(children, children instanceof JmeSpatialChildren
|
||||||
? (((SceneExplorerChildren) children).getDataObject() != null
|
? (((JmeSpatialChildren) children).getDataObject() != null
|
||||||
? new ProxyLookup(((SceneExplorerChildren) children).getDataObject().getLookup(), new SceneExplorerLookup(new InstanceContent()))
|
? new ProxyLookup(((JmeSpatialChildren) children).getDataObject().getLookup(), new DynamicLookup(new InstanceContent()))
|
||||||
: new SceneExplorerLookup(new InstanceContent()))
|
: new DynamicLookup(new InstanceContent()))
|
||||||
: new SceneExplorerLookup(new InstanceContent()));
|
: new DynamicLookup(new InstanceContent()));
|
||||||
this.jmeChildren = children;
|
this.jmeChildren = children;
|
||||||
lookupContents = getLookup().lookup(SceneExplorerLookup.class).getInstanceContent();
|
lookupContents = getLookup().lookup(DynamicLookup.class).getInstanceContent();
|
||||||
if (children instanceof SceneExplorerChildren) {
|
if (children instanceof JmeSpatialChildren) {
|
||||||
this.dataObject = ((SceneExplorerChildren) children).getDataObject();
|
this.dataObject = ((JmeSpatialChildren) children).getDataObject();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -125,8 +130,8 @@ public abstract class AbstractSceneExplorerNode extends AbstractNode implements
|
|||||||
|
|
||||||
//TODO: refresh does not work
|
//TODO: refresh does not work
|
||||||
public void refresh(boolean immediate) {
|
public void refresh(boolean immediate) {
|
||||||
if (jmeChildren instanceof SceneExplorerChildren) {
|
if (jmeChildren instanceof JmeSpatialChildren) {
|
||||||
((SceneExplorerChildren) jmeChildren).refreshChildren(immediate);
|
((JmeSpatialChildren) jmeChildren).refreshChildren(immediate);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -161,6 +166,15 @@ public abstract class AbstractSceneExplorerNode extends AbstractNode implements
|
|||||||
return prop;
|
return prop;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected void createFields(Class c, Sheet.Set set, Object obj) throws SecurityException {
|
||||||
|
for (Field field : c.getDeclaredFields()) {
|
||||||
|
PropertyDescriptor prop = PropertyUtils.getPropertyDescriptor(c, field);
|
||||||
|
if (prop != null) {
|
||||||
|
set.put(makeProperty(obj, prop.getPropertyType(), prop.getReadMethod().getName(), prop.getWriteMethod().getName(), prop.getDisplayName()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void propertyChange(final String name, final Object before, final Object after) {
|
public void propertyChange(final String name, final Object before, final Object after) {
|
||||||
fireSave(true);
|
fireSave(true);
|
||||||
firePropertyChange(name, before, after);
|
firePropertyChange(name, before, after);
|
||||||
|
@ -1,98 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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.sceneexplorer.nodes;
|
|
||||||
|
|
||||||
import com.jme3.asset.ModelKey;
|
|
||||||
import com.jme3.gde.core.scene.SceneApplication;
|
|
||||||
import com.jme3.scene.AssetLinkNode;
|
|
||||||
import java.util.LinkedList;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.concurrent.Callable;
|
|
||||||
import java.util.concurrent.ExecutionException;
|
|
||||||
import org.openide.nodes.Node;
|
|
||||||
import org.openide.util.Exceptions;
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @author normenhansen
|
|
||||||
*/
|
|
||||||
public class AssetLinkChildren extends SceneExplorerChildren {
|
|
||||||
|
|
||||||
public AssetLinkChildren(AssetLinkNode spatial) {
|
|
||||||
super(spatial);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void refreshChildren(boolean immediate) {
|
|
||||||
setKeys(createKeys());
|
|
||||||
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>();
|
|
||||||
if (spatial instanceof AssetLinkNode) {
|
|
||||||
keys.addAll(((AssetLinkNode)spatial).getAssetLoaderKeys());
|
|
||||||
return keys;
|
|
||||||
}
|
|
||||||
return keys;
|
|
||||||
}
|
|
||||||
}).get();
|
|
||||||
} catch (InterruptedException ex) {
|
|
||||||
Exceptions.printStackTrace(ex);
|
|
||||||
} catch (ExecutionException ex) {
|
|
||||||
Exceptions.printStackTrace(ex);
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setReadOnly(boolean cookie) {
|
|
||||||
this.readOnly = cookie;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void addNotify() {
|
|
||||||
super.addNotify();
|
|
||||||
setKeys(createKeys());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected Node[] createNodes(Object key) {
|
|
||||||
if (key instanceof ModelKey) {
|
|
||||||
ModelKey assetKey = (ModelKey)key;
|
|
||||||
return new Node[]{new JmeAssetLinkChild(assetKey, (AssetLinkNode)spatial)};
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
@ -32,6 +32,7 @@
|
|||||||
|
|
||||||
package com.jme3.gde.core.sceneexplorer.nodes;
|
package com.jme3.gde.core.sceneexplorer.nodes;
|
||||||
|
|
||||||
|
import com.jme3.gde.core.sceneexplorer.nodes.SceneExplorerNode;
|
||||||
import com.jme3.light.AmbientLight;
|
import com.jme3.light.AmbientLight;
|
||||||
import com.jme3.math.Vector3f;
|
import com.jme3.math.Vector3f;
|
||||||
import com.jme3.scene.Spatial;
|
import com.jme3.scene.Spatial;
|
||||||
|
@ -33,7 +33,9 @@ package com.jme3.gde.core.sceneexplorer.nodes;
|
|||||||
|
|
||||||
import com.jme3.animation.AnimControl;
|
import com.jme3.animation.AnimControl;
|
||||||
import com.jme3.gde.core.scene.SceneApplication;
|
import com.jme3.gde.core.scene.SceneApplication;
|
||||||
import com.jme3.gde.core.sceneexplorer.nodes.properties.AnimationProperty;
|
import com.jme3.gde.core.sceneexplorer.nodes.AbstractSceneExplorerNode;
|
||||||
|
import com.jme3.gde.core.sceneexplorer.nodes.SceneExplorerNode;
|
||||||
|
import com.jme3.gde.core.properties.AnimationProperty;
|
||||||
import com.jme3.scene.Spatial;
|
import com.jme3.scene.Spatial;
|
||||||
import java.awt.Image;
|
import java.awt.Image;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
@ -31,17 +31,32 @@
|
|||||||
*/
|
*/
|
||||||
package com.jme3.gde.core.sceneexplorer.nodes;
|
package com.jme3.gde.core.sceneexplorer.nodes;
|
||||||
|
|
||||||
|
import com.jme3.asset.ModelKey;
|
||||||
|
import com.jme3.gde.core.scene.SceneApplication;
|
||||||
|
import com.jme3.gde.core.sceneexplorer.nodes.SceneExplorerNode;
|
||||||
import com.jme3.scene.AssetLinkNode;
|
import com.jme3.scene.AssetLinkNode;
|
||||||
import java.awt.Image;
|
import java.awt.Image;
|
||||||
|
import java.io.IOException;
|
||||||
|
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.DeleteAction;
|
||||||
import org.openide.loaders.DataObject;
|
import org.openide.loaders.DataObject;
|
||||||
|
import org.openide.nodes.AbstractNode;
|
||||||
|
import org.openide.nodes.Children;
|
||||||
|
import org.openide.nodes.Node;
|
||||||
import org.openide.nodes.Sheet;
|
import org.openide.nodes.Sheet;
|
||||||
|
import org.openide.util.Exceptions;
|
||||||
import org.openide.util.ImageUtilities;
|
import org.openide.util.ImageUtilities;
|
||||||
|
import org.openide.util.actions.SystemAction;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @author normenhansen
|
* @author normenhansen
|
||||||
*/
|
*/
|
||||||
@org.openide.util.lookup.ServiceProvider(service=SceneExplorerNode.class)
|
@org.openide.util.lookup.ServiceProvider(service = SceneExplorerNode.class)
|
||||||
public class JmeAssetLinkNode extends JmeNode {
|
public class JmeAssetLinkNode extends JmeNode {
|
||||||
|
|
||||||
private static Image smallImage =
|
private static Image smallImage =
|
||||||
@ -51,7 +66,7 @@ public class JmeAssetLinkNode extends JmeNode {
|
|||||||
public JmeAssetLinkNode() {
|
public JmeAssetLinkNode() {
|
||||||
}
|
}
|
||||||
|
|
||||||
public JmeAssetLinkNode(AssetLinkNode spatial, SceneExplorerChildren children) {
|
public JmeAssetLinkNode(AssetLinkNode spatial, JmeSpatialChildren children) {
|
||||||
super(spatial, new AssetLinkChildren(spatial));
|
super(spatial, new AssetLinkChildren(spatial));
|
||||||
getLookupContents().add(spatial);
|
getLookupContents().add(spatial);
|
||||||
this.geom = spatial;
|
this.geom = spatial;
|
||||||
@ -93,9 +108,108 @@ public class JmeAssetLinkNode extends JmeNode {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public org.openide.nodes.Node[] createNodes(Object key, DataObject key2, boolean cookie) {
|
public org.openide.nodes.Node[] createNodes(Object key, DataObject key2, boolean cookie) {
|
||||||
SceneExplorerChildren children=new SceneExplorerChildren((com.jme3.scene.Spatial)key);
|
JmeSpatialChildren children = new JmeSpatialChildren((com.jme3.scene.Spatial) key);
|
||||||
children.setReadOnly(cookie);
|
children.setReadOnly(cookie);
|
||||||
children.setDataObject(key2);
|
children.setDataObject(key2);
|
||||||
return new org.openide.nodes.Node[]{new JmeAssetLinkNode((AssetLinkNode) key, children).setReadOnly(cookie)};
|
return new org.openide.nodes.Node[]{new JmeAssetLinkNode((AssetLinkNode) key, children).setReadOnly(cookie)};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static class AssetLinkChildren extends JmeSpatialChildren {
|
||||||
|
|
||||||
|
public AssetLinkChildren(AssetLinkNode spatial) {
|
||||||
|
super(spatial);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void refreshChildren(boolean immediate) {
|
||||||
|
setKeys(createKeys());
|
||||||
|
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>();
|
||||||
|
if (spatial instanceof AssetLinkNode) {
|
||||||
|
keys.addAll(((AssetLinkNode) spatial).getAssetLoaderKeys());
|
||||||
|
return keys;
|
||||||
|
}
|
||||||
|
return keys;
|
||||||
|
}
|
||||||
|
}).get();
|
||||||
|
} catch (InterruptedException ex) {
|
||||||
|
Exceptions.printStackTrace(ex);
|
||||||
|
} catch (ExecutionException ex) {
|
||||||
|
Exceptions.printStackTrace(ex);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setReadOnly(boolean cookie) {
|
||||||
|
this.readOnly = cookie;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void addNotify() {
|
||||||
|
super.addNotify();
|
||||||
|
setKeys(createKeys());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Node[] createNodes(Object key) {
|
||||||
|
if (key instanceof ModelKey) {
|
||||||
|
ModelKey assetKey = (ModelKey) key;
|
||||||
|
return new Node[]{new JmeAssetLinkChild(assetKey, (AssetLinkNode) spatial)};
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class JmeAssetLinkChild extends AbstractNode {
|
||||||
|
|
||||||
|
private ModelKey key;
|
||||||
|
private AssetLinkNode linkNode;
|
||||||
|
|
||||||
|
public JmeAssetLinkChild(ModelKey key, AssetLinkNode linkNode) {
|
||||||
|
super(Children.LEAF);
|
||||||
|
this.key = key;
|
||||||
|
this.linkNode = linkNode;
|
||||||
|
this.setName(key.getName());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Action[] getActions(boolean context) {
|
||||||
|
return new SystemAction[]{
|
||||||
|
SystemAction.get(DeleteAction.class)
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean canDestroy() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void destroy() throws IOException {
|
||||||
|
super.destroy();
|
||||||
|
try {
|
||||||
|
SceneApplication.getApplication().enqueue(new Callable<Void>() {
|
||||||
|
|
||||||
|
public Void call() throws Exception {
|
||||||
|
linkNode.detachLinkedChild(key);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}).get();
|
||||||
|
JmeSpatial node = ((JmeSpatial) getParentNode());
|
||||||
|
if (node != null) {
|
||||||
|
node.refresh(false);
|
||||||
|
}
|
||||||
|
} catch (InterruptedException ex) {
|
||||||
|
Exceptions.printStackTrace(ex);
|
||||||
|
} catch (ExecutionException ex) {
|
||||||
|
Exceptions.printStackTrace(ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -34,7 +34,8 @@ package com.jme3.gde.core.sceneexplorer.nodes;
|
|||||||
import com.jme3.audio.AudioNode;
|
import com.jme3.audio.AudioNode;
|
||||||
import com.jme3.audio.AudioNode.Status;
|
import com.jme3.audio.AudioNode.Status;
|
||||||
import com.jme3.audio.Filter;
|
import com.jme3.audio.Filter;
|
||||||
import com.jme3.gde.core.sceneexplorer.nodes.properties.AudioDataProperty;
|
import com.jme3.gde.core.sceneexplorer.nodes.SceneExplorerNode;
|
||||||
|
import com.jme3.gde.core.properties.AudioDataProperty;
|
||||||
import com.jme3.math.Vector3f;
|
import com.jme3.math.Vector3f;
|
||||||
import java.awt.Image;
|
import java.awt.Image;
|
||||||
import org.openide.loaders.DataObject;
|
import org.openide.loaders.DataObject;
|
||||||
@ -55,7 +56,7 @@ public class JmeAudioNode extends JmeNode {
|
|||||||
public JmeAudioNode() {
|
public JmeAudioNode() {
|
||||||
}
|
}
|
||||||
|
|
||||||
public JmeAudioNode(AudioNode spatial, SceneExplorerChildren children) {
|
public JmeAudioNode(AudioNode spatial, JmeSpatialChildren children) {
|
||||||
super(spatial, children);
|
super(spatial, children);
|
||||||
getLookupContents().add(spatial);
|
getLookupContents().add(spatial);
|
||||||
this.node = spatial;
|
this.node = spatial;
|
||||||
@ -119,7 +120,7 @@ public class JmeAudioNode extends JmeNode {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public org.openide.nodes.Node[] createNodes(Object key, DataObject key2, boolean cookie) {
|
public org.openide.nodes.Node[] createNodes(Object key, DataObject key2, boolean cookie) {
|
||||||
SceneExplorerChildren children=new SceneExplorerChildren((com.jme3.scene.Spatial)key);
|
JmeSpatialChildren children=new JmeSpatialChildren((com.jme3.scene.Spatial)key);
|
||||||
children.setReadOnly(cookie);
|
children.setReadOnly(cookie);
|
||||||
children.setDataObject(key2);
|
children.setDataObject(key2);
|
||||||
return new org.openide.nodes.Node[]{new JmeAudioNode((AudioNode) key, children).setReadOnly(cookie)};
|
return new org.openide.nodes.Node[]{new JmeAudioNode((AudioNode) key, children).setReadOnly(cookie)};
|
||||||
|
@ -33,6 +33,7 @@ package com.jme3.gde.core.sceneexplorer.nodes;
|
|||||||
|
|
||||||
import com.jme3.font.BitmapFont;
|
import com.jme3.font.BitmapFont;
|
||||||
import com.jme3.font.BitmapText;
|
import com.jme3.font.BitmapText;
|
||||||
|
import com.jme3.gde.core.sceneexplorer.nodes.SceneExplorerNode;
|
||||||
import com.jme3.math.ColorRGBA;
|
import com.jme3.math.ColorRGBA;
|
||||||
import java.awt.Image;
|
import java.awt.Image;
|
||||||
import org.openide.loaders.DataObject;
|
import org.openide.loaders.DataObject;
|
||||||
@ -53,7 +54,7 @@ public class JmeBitmapText extends JmeNode {
|
|||||||
public JmeBitmapText() {
|
public JmeBitmapText() {
|
||||||
}
|
}
|
||||||
|
|
||||||
public JmeBitmapText(BitmapText spatial, SceneExplorerChildren children) {
|
public JmeBitmapText(BitmapText spatial, JmeSpatialChildren children) {
|
||||||
super(spatial, children);
|
super(spatial, children);
|
||||||
getLookupContents().add(spatial);
|
getLookupContents().add(spatial);
|
||||||
this.geom = spatial;
|
this.geom = spatial;
|
||||||
@ -100,7 +101,7 @@ public class JmeBitmapText extends JmeNode {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public org.openide.nodes.Node[] createNodes(Object key, DataObject key2, boolean cookie) {
|
public org.openide.nodes.Node[] createNodes(Object key, DataObject key2, boolean cookie) {
|
||||||
SceneExplorerChildren children=new SceneExplorerChildren((com.jme3.scene.Spatial)key);
|
JmeSpatialChildren children=new JmeSpatialChildren((com.jme3.scene.Spatial)key);
|
||||||
children.setReadOnly(cookie);
|
children.setReadOnly(cookie);
|
||||||
children.setDataObject(key2);
|
children.setDataObject(key2);
|
||||||
return new org.openide.nodes.Node[]{new JmeBitmapText((BitmapText) key, children).setReadOnly(cookie)};
|
return new org.openide.nodes.Node[]{new JmeBitmapText((BitmapText) key, children).setReadOnly(cookie)};
|
||||||
|
@ -34,6 +34,8 @@ package com.jme3.gde.core.sceneexplorer.nodes;
|
|||||||
import com.jme3.bullet.collision.shapes.CollisionShape;
|
import com.jme3.bullet.collision.shapes.CollisionShape;
|
||||||
import com.jme3.bullet.control.CharacterControl;
|
import com.jme3.bullet.control.CharacterControl;
|
||||||
import com.jme3.gde.core.scene.SceneApplication;
|
import com.jme3.gde.core.scene.SceneApplication;
|
||||||
|
import com.jme3.gde.core.sceneexplorer.nodes.AbstractSceneExplorerNode;
|
||||||
|
import com.jme3.gde.core.sceneexplorer.nodes.SceneExplorerNode;
|
||||||
import com.jme3.math.Vector3f;
|
import com.jme3.math.Vector3f;
|
||||||
import com.jme3.scene.Spatial;
|
import com.jme3.scene.Spatial;
|
||||||
import java.awt.Image;
|
import java.awt.Image;
|
||||||
|
@ -32,6 +32,7 @@
|
|||||||
|
|
||||||
package com.jme3.gde.core.sceneexplorer.nodes;
|
package com.jme3.gde.core.sceneexplorer.nodes;
|
||||||
|
|
||||||
|
import com.jme3.gde.core.sceneexplorer.nodes.SceneExplorerNode;
|
||||||
import com.jme3.light.DirectionalLight;
|
import com.jme3.light.DirectionalLight;
|
||||||
import com.jme3.math.Vector3f;
|
import com.jme3.math.Vector3f;
|
||||||
import com.jme3.scene.Spatial;
|
import com.jme3.scene.Spatial;
|
||||||
|
@ -31,9 +31,10 @@
|
|||||||
*/
|
*/
|
||||||
package com.jme3.gde.core.sceneexplorer.nodes;
|
package com.jme3.gde.core.sceneexplorer.nodes;
|
||||||
|
|
||||||
|
import com.jme3.gde.core.nodes.DynamicLookup;
|
||||||
import com.jme3.gde.core.scene.SceneApplication;
|
import com.jme3.gde.core.scene.SceneApplication;
|
||||||
import com.jme3.gde.core.sceneexplorer.nodes.properties.SceneExplorerProperty;
|
import com.jme3.gde.core.properties.SceneExplorerProperty;
|
||||||
import com.jme3.gde.core.sceneexplorer.nodes.properties.ScenePropertyChangeListener;
|
import com.jme3.gde.core.properties.ScenePropertyChangeListener;
|
||||||
import com.jme3.gde.core.util.PropertyUtils;
|
import com.jme3.gde.core.util.PropertyUtils;
|
||||||
import com.jme3.scene.Spatial;
|
import com.jme3.scene.Spatial;
|
||||||
import com.jme3.scene.control.Control;
|
import com.jme3.scene.control.Control;
|
||||||
@ -69,8 +70,8 @@ public class JmeGenericControl extends AbstractNode implements ScenePropertyChan
|
|||||||
|
|
||||||
public JmeGenericControl(Control control, DataObject dataObject) {
|
public JmeGenericControl(Control control, DataObject dataObject) {
|
||||||
//TODO: lookup content! (control etc)
|
//TODO: lookup content! (control etc)
|
||||||
super(Children.LEAF, new ProxyLookup(dataObject.getLookup(), new SceneExplorerLookup(new InstanceContent())));
|
super(Children.LEAF, new ProxyLookup(dataObject.getLookup(), new DynamicLookup(new InstanceContent())));
|
||||||
lookupContents = getLookup().lookup(SceneExplorerLookup.class).getInstanceContent();
|
lookupContents = getLookup().lookup(DynamicLookup.class).getInstanceContent();
|
||||||
this.control = control;
|
this.control = control;
|
||||||
this.dobject = dataObject;
|
this.dobject = dataObject;
|
||||||
lookupContents.add(this);
|
lookupContents.add(this);
|
||||||
|
@ -31,6 +31,7 @@
|
|||||||
*/
|
*/
|
||||||
package com.jme3.gde.core.sceneexplorer.nodes;
|
package com.jme3.gde.core.sceneexplorer.nodes;
|
||||||
|
|
||||||
|
import com.jme3.gde.core.sceneexplorer.nodes.SceneExplorerNode;
|
||||||
import com.jme3.material.Material;
|
import com.jme3.material.Material;
|
||||||
import com.jme3.scene.Geometry;
|
import com.jme3.scene.Geometry;
|
||||||
import com.jme3.scene.Mesh;
|
import com.jme3.scene.Mesh;
|
||||||
@ -53,7 +54,7 @@ public class JmeGeometry extends JmeSpatial {
|
|||||||
public JmeGeometry() {
|
public JmeGeometry() {
|
||||||
}
|
}
|
||||||
|
|
||||||
public JmeGeometry(Geometry spatial, SceneExplorerChildren children) {
|
public JmeGeometry(Geometry spatial, JmeSpatialChildren children) {
|
||||||
super(spatial, children);
|
super(spatial, children);
|
||||||
getLookupContents().add(spatial);
|
getLookupContents().add(spatial);
|
||||||
this.geom = spatial;
|
this.geom = spatial;
|
||||||
@ -100,7 +101,7 @@ public class JmeGeometry extends JmeSpatial {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public org.openide.nodes.Node[] createNodes(Object key, DataObject key2, boolean cookie) {
|
public org.openide.nodes.Node[] createNodes(Object key, DataObject key2, boolean cookie) {
|
||||||
SceneExplorerChildren children=new SceneExplorerChildren((com.jme3.scene.Spatial)key);
|
JmeSpatialChildren children=new JmeSpatialChildren((com.jme3.scene.Spatial)key);
|
||||||
children.setReadOnly(cookie);
|
children.setReadOnly(cookie);
|
||||||
children.setDataObject(key2);
|
children.setDataObject(key2);
|
||||||
return new org.openide.nodes.Node[]{new JmeGeometry((Geometry) key, children).setReadOnly(cookie)};
|
return new org.openide.nodes.Node[]{new JmeGeometry((Geometry) key, children).setReadOnly(cookie)};
|
||||||
|
@ -34,6 +34,8 @@ package com.jme3.gde.core.sceneexplorer.nodes;
|
|||||||
import com.jme3.bullet.collision.shapes.CollisionShape;
|
import com.jme3.bullet.collision.shapes.CollisionShape;
|
||||||
import com.jme3.bullet.control.GhostControl;
|
import com.jme3.bullet.control.GhostControl;
|
||||||
import com.jme3.gde.core.scene.SceneApplication;
|
import com.jme3.gde.core.scene.SceneApplication;
|
||||||
|
import com.jme3.gde.core.sceneexplorer.nodes.AbstractSceneExplorerNode;
|
||||||
|
import com.jme3.gde.core.sceneexplorer.nodes.SceneExplorerNode;
|
||||||
import com.jme3.math.Quaternion;
|
import com.jme3.math.Quaternion;
|
||||||
import com.jme3.math.Vector3f;
|
import com.jme3.math.Vector3f;
|
||||||
import com.jme3.scene.Spatial;
|
import com.jme3.scene.Spatial;
|
||||||
|
@ -32,6 +32,8 @@
|
|||||||
package com.jme3.gde.core.sceneexplorer.nodes;
|
package com.jme3.gde.core.sceneexplorer.nodes;
|
||||||
|
|
||||||
import com.jme3.gde.core.scene.SceneApplication;
|
import com.jme3.gde.core.scene.SceneApplication;
|
||||||
|
import com.jme3.gde.core.sceneexplorer.nodes.AbstractSceneExplorerNode;
|
||||||
|
import com.jme3.gde.core.sceneexplorer.nodes.SceneExplorerNode;
|
||||||
import com.jme3.light.Light;
|
import com.jme3.light.Light;
|
||||||
import com.jme3.math.ColorRGBA;
|
import com.jme3.math.ColorRGBA;
|
||||||
import com.jme3.scene.Spatial;
|
import com.jme3.scene.Spatial;
|
||||||
|
@ -32,6 +32,8 @@
|
|||||||
package com.jme3.gde.core.sceneexplorer.nodes;
|
package com.jme3.gde.core.sceneexplorer.nodes;
|
||||||
|
|
||||||
import com.jme3.gde.core.scene.SceneApplication;
|
import com.jme3.gde.core.scene.SceneApplication;
|
||||||
|
import com.jme3.gde.core.sceneexplorer.nodes.AbstractSceneExplorerNode;
|
||||||
|
import com.jme3.gde.core.sceneexplorer.nodes.SceneExplorerNode;
|
||||||
import com.jme3.light.Light;
|
import com.jme3.light.Light;
|
||||||
import com.jme3.scene.Geometry;
|
import com.jme3.scene.Geometry;
|
||||||
import com.jme3.scene.Mesh;
|
import com.jme3.scene.Mesh;
|
||||||
|
@ -32,11 +32,13 @@
|
|||||||
package com.jme3.gde.core.sceneexplorer.nodes;
|
package com.jme3.gde.core.sceneexplorer.nodes;
|
||||||
|
|
||||||
import com.jme3.gde.core.scene.SceneApplication;
|
import com.jme3.gde.core.scene.SceneApplication;
|
||||||
import com.jme3.gde.core.sceneexplorer.nodes.actions.AddControlAction;
|
import com.jme3.gde.core.sceneexplorer.nodes.ClipboardSpatial;
|
||||||
import com.jme3.gde.core.sceneexplorer.nodes.actions.AddLightAction;
|
import com.jme3.gde.core.sceneexplorer.nodes.SceneExplorerNode;
|
||||||
import com.jme3.gde.core.sceneexplorer.nodes.actions.AddSpatialAction;
|
import com.jme3.gde.core.sceneexplorer.nodes.actions.NewControlPopup;
|
||||||
|
import com.jme3.gde.core.sceneexplorer.nodes.actions.NewLightPopup;
|
||||||
|
import com.jme3.gde.core.sceneexplorer.nodes.actions.NewSpatialPopup;
|
||||||
import com.jme3.gde.core.sceneexplorer.nodes.actions.AddUserDataAction;
|
import com.jme3.gde.core.sceneexplorer.nodes.actions.AddUserDataAction;
|
||||||
import com.jme3.gde.core.sceneexplorer.nodes.actions.UseToolAction;
|
import com.jme3.gde.core.sceneexplorer.nodes.actions.ToolPopup;
|
||||||
import com.jme3.scene.Node;
|
import com.jme3.scene.Node;
|
||||||
import com.jme3.scene.Spatial;
|
import com.jme3.scene.Spatial;
|
||||||
import java.awt.Image;
|
import java.awt.Image;
|
||||||
@ -74,7 +76,7 @@ public class JmeNode extends JmeSpatial {
|
|||||||
public JmeNode() {
|
public JmeNode() {
|
||||||
}
|
}
|
||||||
|
|
||||||
public JmeNode(Node spatial, SceneExplorerChildren children) {
|
public JmeNode(Node spatial, JmeSpatialChildren children) {
|
||||||
super(spatial, children);
|
super(spatial, children);
|
||||||
getLookupContents().add(spatial);
|
getLookupContents().add(spatial);
|
||||||
this.node = spatial;
|
this.node = spatial;
|
||||||
@ -158,16 +160,16 @@ public class JmeNode extends JmeSpatial {
|
|||||||
@Override
|
@Override
|
||||||
public Action[] getActions(boolean context) {
|
public Action[] getActions(boolean context) {
|
||||||
// return super.getActions(context);
|
// return super.getActions(context);
|
||||||
if (((SceneExplorerChildren) jmeChildren).readOnly) {
|
if (((JmeSpatialChildren) jmeChildren).readOnly) {
|
||||||
return new Action[]{
|
return new Action[]{
|
||||||
SystemAction.get(CopyAction.class),};
|
SystemAction.get(CopyAction.class),};
|
||||||
} else {
|
} else {
|
||||||
return new Action[]{
|
return new Action[]{
|
||||||
new AddSpatialAction(this),
|
new NewSpatialPopup(this),
|
||||||
new AddControlAction(this),
|
new NewControlPopup(this),
|
||||||
new AddLightAction(this),
|
new NewLightPopup(this),
|
||||||
Actions.alwaysEnabled(new AddUserDataAction(this), "Add User Data", "", false),
|
Actions.alwaysEnabled(new AddUserDataAction(this), "Add User Data", "", false),
|
||||||
new UseToolAction(this),
|
new ToolPopup(this),
|
||||||
SystemAction.get(RenameAction.class),
|
SystemAction.get(RenameAction.class),
|
||||||
SystemAction.get(CopyAction.class),
|
SystemAction.get(CopyAction.class),
|
||||||
SystemAction.get(CutAction.class),
|
SystemAction.get(CutAction.class),
|
||||||
@ -186,7 +188,7 @@ public class JmeNode extends JmeSpatial {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public org.openide.nodes.Node[] createNodes(Object key, DataObject key2, boolean cookie) {
|
public org.openide.nodes.Node[] createNodes(Object key, DataObject key2, boolean cookie) {
|
||||||
SceneExplorerChildren children = new SceneExplorerChildren((com.jme3.scene.Spatial) key);
|
JmeSpatialChildren children = new JmeSpatialChildren((com.jme3.scene.Spatial) key);
|
||||||
children.setReadOnly(cookie);
|
children.setReadOnly(cookie);
|
||||||
children.setDataObject(key2);
|
children.setDataObject(key2);
|
||||||
return new org.openide.nodes.Node[]{new JmeNode((Node) key, children).setReadOnly(cookie)};
|
return new org.openide.nodes.Node[]{new JmeNode((Node) key, children).setReadOnly(cookie)};
|
||||||
|
@ -33,6 +33,7 @@ package com.jme3.gde.core.sceneexplorer.nodes;
|
|||||||
|
|
||||||
import com.jme3.effect.shapes.EmitterShape;
|
import com.jme3.effect.shapes.EmitterShape;
|
||||||
import com.jme3.effect.ParticleEmitter;
|
import com.jme3.effect.ParticleEmitter;
|
||||||
|
import com.jme3.gde.core.sceneexplorer.nodes.SceneExplorerNode;
|
||||||
import com.jme3.math.ColorRGBA;
|
import com.jme3.math.ColorRGBA;
|
||||||
import com.jme3.math.Vector3f;
|
import com.jme3.math.Vector3f;
|
||||||
import java.awt.Image;
|
import java.awt.Image;
|
||||||
@ -55,7 +56,7 @@ public class JmeParticleEmitter extends JmeGeometry{
|
|||||||
ImageUtilities.loadImage("com/jme3/gde/core/sceneexplorer/nodes/icons/particleemitter.gif");
|
ImageUtilities.loadImage("com/jme3/gde/core/sceneexplorer/nodes/icons/particleemitter.gif");
|
||||||
private ParticleEmitter geom;
|
private ParticleEmitter geom;
|
||||||
|
|
||||||
public JmeParticleEmitter(ParticleEmitter spatial, SceneExplorerChildren children) {
|
public JmeParticleEmitter(ParticleEmitter spatial, JmeSpatialChildren children) {
|
||||||
super(spatial, children);
|
super(spatial, children);
|
||||||
getLookupContents().add(spatial);
|
getLookupContents().add(spatial);
|
||||||
this.geom = spatial;
|
this.geom = spatial;
|
||||||
@ -83,27 +84,28 @@ public class JmeParticleEmitter extends JmeGeometry{
|
|||||||
return sheet;
|
return sheet;
|
||||||
}
|
}
|
||||||
|
|
||||||
set.put(makeProperty(obj, boolean.class, "isEnabled", "setEnabled", "Enabled"));
|
createFields(geom.getClass(), set, obj);
|
||||||
set.put(makeProperty(obj, EmitterShape.class, "getShape", "setShape", "Emitter Shape"));
|
// set.put(makeProperty(obj, boolean.class, "isEnabled", "setEnabled", "Enabled"));
|
||||||
set.put(makeProperty(obj, int.class, "getNumVisibleParticles", "setNumParticles", "Num Particles"));
|
// set.put(makeProperty(obj, EmitterShape.class, "getShape", "setShape", "Emitter Shape"));
|
||||||
set.put(makeProperty(obj, float.class, "getParticlesPerSec", "setParticlesPerSec", "Particles Per Sec"));
|
// set.put(makeProperty(obj, int.class, "getNumVisibleParticles", "setNumParticles", "Num Particles"));
|
||||||
set.put(makeProperty(obj, ColorRGBA.class, "getStartColor", "setStartColor", "Start Color"));
|
// set.put(makeProperty(obj, float.class, "getParticlesPerSec", "setParticlesPerSec", "Particles Per Sec"));
|
||||||
set.put(makeProperty(obj, ColorRGBA.class, "getEndColor", "setEndColor", "End Color"));
|
// set.put(makeProperty(obj, ColorRGBA.class, "getStartColor", "setStartColor", "Start Color"));
|
||||||
set.put(makeProperty(obj, float.class, "getStartSize", "setStartSize", "Start Size"));
|
// set.put(makeProperty(obj, ColorRGBA.class, "getEndColor", "setEndColor", "End Color"));
|
||||||
set.put(makeProperty(obj, float.class, "getEndSize", "setEndSize", "End Size"));
|
// set.put(makeProperty(obj, float.class, "getStartSize", "setStartSize", "Start Size"));
|
||||||
set.put(makeProperty(obj, float.class, "getHighLife", "setHighLife", "High Life"));
|
// set.put(makeProperty(obj, float.class, "getEndSize", "setEndSize", "End Size"));
|
||||||
set.put(makeProperty(obj, float.class, "getLowLife", "setLowLife", "Low Life"));
|
// set.put(makeProperty(obj, float.class, "getHighLife", "setHighLife", "High Life"));
|
||||||
set.put(makeProperty(obj, float.class, "getGravity", "setGravity", "Gravity"));
|
// set.put(makeProperty(obj, float.class, "getLowLife", "setLowLife", "Low Life"));
|
||||||
set.put(makeProperty(obj, Vector3f.class, "getInitialVelocity", "setInitialVelocity", "Initial Velocity"));
|
// set.put(makeProperty(obj, float.class, "getGravity", "setGravity", "Gravity"));
|
||||||
set.put(makeProperty(obj, Vector3f.class, "getFaceNormal", "setFaceNormal", "Face Normal"));
|
// set.put(makeProperty(obj, Vector3f.class, "getInitialVelocity", "setInitialVelocity", "Initial Velocity"));
|
||||||
set.put(makeProperty(obj, float.class, "getVelocityVariation", "setVelocityVariation", "Velocity Variation"));
|
// set.put(makeProperty(obj, Vector3f.class, "getFaceNormal", "setFaceNormal", "Face Normal"));
|
||||||
set.put(makeProperty(obj, boolean.class, "isFacingVelocity", "setFacingVelocity", "Facing Velocity"));
|
// set.put(makeProperty(obj, float.class, "getVelocityVariation", "setVelocityVariation", "Velocity Variation"));
|
||||||
set.put(makeProperty(obj, boolean.class, "isRandomAngle", "setRandomAngle", "Random Angle"));
|
// set.put(makeProperty(obj, boolean.class, "isFacingVelocity", "setFacingVelocity", "Facing Velocity"));
|
||||||
set.put(makeProperty(obj, boolean.class, "isInWorldSpace", "setInWorldSpace", "World Space"));
|
// set.put(makeProperty(obj, boolean.class, "isRandomAngle", "setRandomAngle", "Random Angle"));
|
||||||
set.put(makeProperty(obj, float.class, "getRotateSpeed", "setRotateSpeed", "Rotate Speed"));
|
// set.put(makeProperty(obj, boolean.class, "isInWorldSpace", "setInWorldSpace", "World Space"));
|
||||||
set.put(makeProperty(obj, boolean.class, "isSelectRandomImage", "setSelectRandomImage", "Select Random Image"));
|
// set.put(makeProperty(obj, float.class, "getRotateSpeed", "setRotateSpeed", "Rotate Speed"));
|
||||||
set.put(makeProperty(obj, int.class, "getImagesX", "setImagesX", "Images X"));
|
// set.put(makeProperty(obj, boolean.class, "isSelectRandomImage", "setSelectRandomImage", "Select Random Image"));
|
||||||
set.put(makeProperty(obj, int.class, "getImagesY", "setImagesY", "Images Y"));
|
// set.put(makeProperty(obj, int.class, "getImagesX", "setImagesX", "Images X"));
|
||||||
|
// set.put(makeProperty(obj, int.class, "getImagesY", "setImagesY", "Images Y"));
|
||||||
|
|
||||||
// set.put(makeProperty(obj, EmitterShape.class, "getShape", "setShape", "shape"));
|
// set.put(makeProperty(obj, EmitterShape.class, "getShape", "setShape", "shape"));
|
||||||
|
|
||||||
@ -123,7 +125,7 @@ public class JmeParticleEmitter extends JmeGeometry{
|
|||||||
}
|
}
|
||||||
|
|
||||||
public Node[] createNodes(Object key, DataObject key2, boolean cookie) {
|
public Node[] createNodes(Object key, DataObject key2, boolean cookie) {
|
||||||
SceneExplorerChildren children=new SceneExplorerChildren((com.jme3.scene.Spatial)key);
|
JmeSpatialChildren children=new JmeSpatialChildren((com.jme3.scene.Spatial)key);
|
||||||
children.setReadOnly(cookie);
|
children.setReadOnly(cookie);
|
||||||
children.setDataObject(key2);
|
children.setDataObject(key2);
|
||||||
return new Node[]{new JmeParticleEmitter((ParticleEmitter) key, children).setReadOnly(cookie)};
|
return new Node[]{new JmeParticleEmitter((ParticleEmitter) key, children).setReadOnly(cookie)};
|
||||||
|
@ -31,6 +31,7 @@
|
|||||||
*/
|
*/
|
||||||
package com.jme3.gde.core.sceneexplorer.nodes;
|
package com.jme3.gde.core.sceneexplorer.nodes;
|
||||||
|
|
||||||
|
import com.jme3.gde.core.sceneexplorer.nodes.SceneExplorerNode;
|
||||||
import com.jme3.ui.Picture;
|
import com.jme3.ui.Picture;
|
||||||
import java.awt.Image;
|
import java.awt.Image;
|
||||||
import org.openide.loaders.DataObject;
|
import org.openide.loaders.DataObject;
|
||||||
@ -51,7 +52,7 @@ public class JmePicture extends JmeGeometry {
|
|||||||
public JmePicture() {
|
public JmePicture() {
|
||||||
}
|
}
|
||||||
|
|
||||||
public JmePicture(Picture spatial, SceneExplorerChildren children) {
|
public JmePicture(Picture spatial, JmeSpatialChildren children) {
|
||||||
super(spatial, children);
|
super(spatial, children);
|
||||||
getLookupContents().add(spatial);
|
getLookupContents().add(spatial);
|
||||||
this.geom = spatial;
|
this.geom = spatial;
|
||||||
@ -95,7 +96,7 @@ public class JmePicture extends JmeGeometry {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public org.openide.nodes.Node[] createNodes(Object key, DataObject key2, boolean cookie) {
|
public org.openide.nodes.Node[] createNodes(Object key, DataObject key2, boolean cookie) {
|
||||||
SceneExplorerChildren children=new SceneExplorerChildren((com.jme3.scene.Spatial)key);
|
JmeSpatialChildren children=new JmeSpatialChildren((com.jme3.scene.Spatial)key);
|
||||||
children.setReadOnly(cookie);
|
children.setReadOnly(cookie);
|
||||||
children.setDataObject(key2);
|
children.setDataObject(key2);
|
||||||
return new org.openide.nodes.Node[]{new JmePicture((Picture) key, children).setReadOnly(cookie)};
|
return new org.openide.nodes.Node[]{new JmePicture((Picture) key, children).setReadOnly(cookie)};
|
||||||
|
@ -32,6 +32,7 @@
|
|||||||
|
|
||||||
package com.jme3.gde.core.sceneexplorer.nodes;
|
package com.jme3.gde.core.sceneexplorer.nodes;
|
||||||
|
|
||||||
|
import com.jme3.gde.core.sceneexplorer.nodes.SceneExplorerNode;
|
||||||
import com.jme3.light.PointLight;
|
import com.jme3.light.PointLight;
|
||||||
import com.jme3.math.Vector3f;
|
import com.jme3.math.Vector3f;
|
||||||
import com.jme3.scene.Spatial;
|
import com.jme3.scene.Spatial;
|
||||||
|
@ -34,6 +34,8 @@ package com.jme3.gde.core.sceneexplorer.nodes;
|
|||||||
import com.jme3.bullet.collision.shapes.CollisionShape;
|
import com.jme3.bullet.collision.shapes.CollisionShape;
|
||||||
import com.jme3.bullet.control.RigidBodyControl;
|
import com.jme3.bullet.control.RigidBodyControl;
|
||||||
import com.jme3.gde.core.scene.SceneApplication;
|
import com.jme3.gde.core.scene.SceneApplication;
|
||||||
|
import com.jme3.gde.core.sceneexplorer.nodes.AbstractSceneExplorerNode;
|
||||||
|
import com.jme3.gde.core.sceneexplorer.nodes.SceneExplorerNode;
|
||||||
import com.jme3.math.Quaternion;
|
import com.jme3.math.Quaternion;
|
||||||
import com.jme3.math.Vector3f;
|
import com.jme3.math.Vector3f;
|
||||||
import com.jme3.scene.Spatial;
|
import com.jme3.scene.Spatial;
|
||||||
|
@ -34,11 +34,14 @@ package com.jme3.gde.core.sceneexplorer.nodes;
|
|||||||
import com.jme3.bounding.BoundingVolume;
|
import com.jme3.bounding.BoundingVolume;
|
||||||
import com.jme3.export.binary.BinaryExporter;
|
import com.jme3.export.binary.BinaryExporter;
|
||||||
import com.jme3.gde.core.scene.SceneApplication;
|
import com.jme3.gde.core.scene.SceneApplication;
|
||||||
import com.jme3.gde.core.sceneexplorer.nodes.actions.AddControlAction;
|
import com.jme3.gde.core.sceneexplorer.nodes.AbstractSceneExplorerNode;
|
||||||
import com.jme3.gde.core.sceneexplorer.nodes.actions.AddLightAction;
|
import com.jme3.gde.core.sceneexplorer.nodes.ClipboardSpatial;
|
||||||
|
import com.jme3.gde.core.sceneexplorer.nodes.SceneExplorerNode;
|
||||||
|
import com.jme3.gde.core.sceneexplorer.nodes.actions.NewControlPopup;
|
||||||
|
import com.jme3.gde.core.sceneexplorer.nodes.actions.NewLightPopup;
|
||||||
import com.jme3.gde.core.sceneexplorer.nodes.actions.AddUserDataAction;
|
import com.jme3.gde.core.sceneexplorer.nodes.actions.AddUserDataAction;
|
||||||
import com.jme3.gde.core.sceneexplorer.nodes.actions.UseToolAction;
|
import com.jme3.gde.core.sceneexplorer.nodes.actions.ToolPopup;
|
||||||
import com.jme3.gde.core.sceneexplorer.nodes.properties.UserDataProperty;
|
import com.jme3.gde.core.properties.UserDataProperty;
|
||||||
import com.jme3.light.LightList;
|
import com.jme3.light.LightList;
|
||||||
import com.jme3.math.Quaternion;
|
import com.jme3.math.Quaternion;
|
||||||
import com.jme3.math.Vector3f;
|
import com.jme3.math.Vector3f;
|
||||||
@ -81,7 +84,7 @@ public class JmeSpatial extends AbstractSceneExplorerNode {
|
|||||||
public JmeSpatial() {
|
public JmeSpatial() {
|
||||||
}
|
}
|
||||||
|
|
||||||
public JmeSpatial(Spatial spatial, SceneExplorerChildren factory) {
|
public JmeSpatial(Spatial spatial, JmeSpatialChildren factory) {
|
||||||
super(factory);
|
super(factory);
|
||||||
this.jmeChildren = factory;
|
this.jmeChildren = factory;
|
||||||
this.spatial = spatial;
|
this.spatial = spatial;
|
||||||
@ -125,15 +128,15 @@ public class JmeSpatial extends AbstractSceneExplorerNode {
|
|||||||
@Override
|
@Override
|
||||||
public Action[] getActions(boolean context) {
|
public Action[] getActions(boolean context) {
|
||||||
// return super.getActions(context);
|
// return super.getActions(context);
|
||||||
if (((SceneExplorerChildren) jmeChildren).readOnly) {
|
if (((JmeSpatialChildren) jmeChildren).readOnly) {
|
||||||
return new Action[]{
|
return new Action[]{
|
||||||
SystemAction.get(CopyAction.class),};
|
SystemAction.get(CopyAction.class),};
|
||||||
} else {
|
} else {
|
||||||
return new Action[]{
|
return new Action[]{
|
||||||
new AddControlAction(this),
|
new NewControlPopup(this),
|
||||||
new AddLightAction(this),
|
new NewLightPopup(this),
|
||||||
Actions.alwaysEnabled(new AddUserDataAction(this), "Add User Data", "", false),
|
Actions.alwaysEnabled(new AddUserDataAction(this), "Add User Data", "", false),
|
||||||
new UseToolAction(this),
|
new ToolPopup(this),
|
||||||
SystemAction.get(RenameAction.class),
|
SystemAction.get(RenameAction.class),
|
||||||
SystemAction.get(CopyAction.class),
|
SystemAction.get(CopyAction.class),
|
||||||
SystemAction.get(CutAction.class),
|
SystemAction.get(CutAction.class),
|
||||||
@ -145,22 +148,22 @@ public class JmeSpatial extends AbstractSceneExplorerNode {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean canCopy() {
|
public boolean canCopy() {
|
||||||
return !((SceneExplorerChildren) jmeChildren).readOnly;
|
return !((JmeSpatialChildren) jmeChildren).readOnly;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean canCut() {
|
public boolean canCut() {
|
||||||
return !((SceneExplorerChildren) jmeChildren).readOnly;
|
return !((JmeSpatialChildren) jmeChildren).readOnly;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean canDestroy() {
|
public boolean canDestroy() {
|
||||||
return !((SceneExplorerChildren) jmeChildren).readOnly;
|
return !((JmeSpatialChildren) jmeChildren).readOnly;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean canRename() {
|
public boolean canRename() {
|
||||||
return !((SceneExplorerChildren) jmeChildren).readOnly;
|
return !((JmeSpatialChildren) jmeChildren).readOnly;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -347,7 +350,7 @@ public class JmeSpatial extends AbstractSceneExplorerNode {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public Node[] createNodes(Object key, DataObject key2, boolean cookie) {
|
public Node[] createNodes(Object key, DataObject key2, boolean cookie) {
|
||||||
SceneExplorerChildren children = new SceneExplorerChildren((com.jme3.scene.Spatial) key);
|
JmeSpatialChildren children = new JmeSpatialChildren((com.jme3.scene.Spatial) key);
|
||||||
children.setReadOnly(cookie);
|
children.setReadOnly(cookie);
|
||||||
children.setDataObject(key2);
|
children.setDataObject(key2);
|
||||||
return new Node[]{new JmeSpatial((Spatial) key, children).setReadOnly(cookie)};
|
return new Node[]{new JmeSpatial((Spatial) key, children).setReadOnly(cookie)};
|
||||||
|
@ -61,17 +61,17 @@ import org.openide.util.Lookup;
|
|||||||
*
|
*
|
||||||
* @author normenhansen
|
* @author normenhansen
|
||||||
*/
|
*/
|
||||||
public class SceneExplorerChildren extends Children.Keys<Object> {
|
public class JmeSpatialChildren extends Children.Keys<Object> {
|
||||||
|
|
||||||
protected Spatial spatial;
|
protected Spatial spatial;
|
||||||
protected boolean readOnly = true;
|
protected boolean readOnly = true;
|
||||||
protected HashMap<Object, Node> map = new HashMap<Object, Node>();
|
protected HashMap<Object, Node> map = new HashMap<Object, Node>();
|
||||||
private DataObject dataObject;
|
private DataObject dataObject;
|
||||||
|
|
||||||
public SceneExplorerChildren() {
|
public JmeSpatialChildren() {
|
||||||
}
|
}
|
||||||
|
|
||||||
public SceneExplorerChildren(Spatial spatial) {
|
public JmeSpatialChildren(Spatial spatial) {
|
||||||
this.spatial = spatial;
|
this.spatial = spatial;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -143,7 +143,7 @@ public class SceneExplorerChildren extends Children.Keys<Object> {
|
|||||||
|
|
||||||
//TODO: go down in class hierarchy if class was not found, for now old checks are fallback
|
//TODO: go down in class hierarchy if class was not found, for now old checks are fallback
|
||||||
if (key instanceof Spatial) {
|
if (key instanceof Spatial) {
|
||||||
SceneExplorerChildren children = new SceneExplorerChildren((Spatial) key);
|
JmeSpatialChildren children = new JmeSpatialChildren((Spatial) key);
|
||||||
children.setReadOnly(readOnly);
|
children.setReadOnly(readOnly);
|
||||||
children.setDataObject(dataObject);
|
children.setDataObject(dataObject);
|
||||||
if (key instanceof com.jme3.audio.AudioNode) {
|
if (key instanceof com.jme3.audio.AudioNode) {
|
@ -31,6 +31,7 @@
|
|||||||
*/
|
*/
|
||||||
package com.jme3.gde.core.sceneexplorer.nodes;
|
package com.jme3.gde.core.sceneexplorer.nodes;
|
||||||
|
|
||||||
|
import com.jme3.gde.core.sceneexplorer.nodes.SceneExplorerNode;
|
||||||
import com.jme3.terrain.geomipmap.TerrainQuad;
|
import com.jme3.terrain.geomipmap.TerrainQuad;
|
||||||
import java.awt.Image;
|
import java.awt.Image;
|
||||||
import org.openide.loaders.DataObject;
|
import org.openide.loaders.DataObject;
|
||||||
@ -51,7 +52,7 @@ public class JmeTerrainQuad extends JmeNode {
|
|||||||
public JmeTerrainQuad() {
|
public JmeTerrainQuad() {
|
||||||
}
|
}
|
||||||
|
|
||||||
public JmeTerrainQuad(TerrainQuad spatial, SceneExplorerChildren children) {
|
public JmeTerrainQuad(TerrainQuad spatial, JmeSpatialChildren children) {
|
||||||
super(spatial, children);
|
super(spatial, children);
|
||||||
getLookupContents().add(spatial);
|
getLookupContents().add(spatial);
|
||||||
this.geom = spatial;
|
this.geom = spatial;
|
||||||
@ -96,7 +97,7 @@ public class JmeTerrainQuad extends JmeNode {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public org.openide.nodes.Node[] createNodes(Object key, DataObject key2, boolean cookie) {
|
public org.openide.nodes.Node[] createNodes(Object key, DataObject key2, boolean cookie) {
|
||||||
SceneExplorerChildren children=new SceneExplorerChildren((com.jme3.scene.Spatial)key);
|
JmeSpatialChildren children=new JmeSpatialChildren((com.jme3.scene.Spatial)key);
|
||||||
children.setReadOnly(cookie);
|
children.setReadOnly(cookie);
|
||||||
children.setDataObject(key2);
|
children.setDataObject(key2);
|
||||||
return new org.openide.nodes.Node[]{new JmeTerrainQuad((TerrainQuad) key, children).setReadOnly(cookie)};
|
return new org.openide.nodes.Node[]{new JmeTerrainQuad((TerrainQuad) key, children).setReadOnly(cookie)};
|
||||||
|
@ -33,18 +33,24 @@ package com.jme3.gde.core.sceneexplorer.nodes;
|
|||||||
|
|
||||||
import com.jme3.bullet.collision.shapes.CollisionShape;
|
import com.jme3.bullet.collision.shapes.CollisionShape;
|
||||||
import com.jme3.bullet.control.VehicleControl;
|
import com.jme3.bullet.control.VehicleControl;
|
||||||
|
import com.jme3.bullet.objects.VehicleWheel;
|
||||||
import com.jme3.gde.core.scene.SceneApplication;
|
import com.jme3.gde.core.scene.SceneApplication;
|
||||||
|
import com.jme3.gde.core.sceneexplorer.nodes.AbstractSceneExplorerNode;
|
||||||
|
import com.jme3.gde.core.sceneexplorer.nodes.SceneExplorerNode;
|
||||||
import com.jme3.math.Quaternion;
|
import com.jme3.math.Quaternion;
|
||||||
import com.jme3.math.Vector3f;
|
import com.jme3.math.Vector3f;
|
||||||
import com.jme3.scene.Spatial;
|
import com.jme3.scene.Spatial;
|
||||||
import java.awt.Image;
|
import java.awt.Image;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.util.LinkedList;
|
||||||
|
import java.util.List;
|
||||||
import java.util.concurrent.Callable;
|
import java.util.concurrent.Callable;
|
||||||
import java.util.concurrent.ExecutionException;
|
import java.util.concurrent.ExecutionException;
|
||||||
import javax.swing.Action;
|
import javax.swing.Action;
|
||||||
import org.openide.actions.DeleteAction;
|
import org.openide.actions.DeleteAction;
|
||||||
import org.openide.loaders.DataObject;
|
import org.openide.loaders.DataObject;
|
||||||
import org.openide.nodes.Children;
|
import org.openide.nodes.Children;
|
||||||
|
import org.openide.nodes.Node;
|
||||||
import org.openide.nodes.Sheet;
|
import org.openide.nodes.Sheet;
|
||||||
import org.openide.util.Exceptions;
|
import org.openide.util.Exceptions;
|
||||||
import org.openide.util.ImageUtilities;
|
import org.openide.util.ImageUtilities;
|
||||||
@ -54,7 +60,7 @@ import org.openide.util.actions.SystemAction;
|
|||||||
*
|
*
|
||||||
* @author normenhansen
|
* @author normenhansen
|
||||||
*/
|
*/
|
||||||
@org.openide.util.lookup.ServiceProvider(service=SceneExplorerNode.class)
|
@org.openide.util.lookup.ServiceProvider(service = SceneExplorerNode.class)
|
||||||
public class JmeVehicleControl extends AbstractSceneExplorerNode {
|
public class JmeVehicleControl extends AbstractSceneExplorerNode {
|
||||||
|
|
||||||
private static Image smallImage =
|
private static Image smallImage =
|
||||||
@ -100,7 +106,7 @@ public class JmeVehicleControl extends AbstractSceneExplorerNode {
|
|||||||
@Override
|
@Override
|
||||||
public void destroy() throws IOException {
|
public void destroy() throws IOException {
|
||||||
super.destroy();
|
super.destroy();
|
||||||
final Spatial spat=getParentNode().getLookup().lookup(Spatial.class);
|
final Spatial spat = getParentNode().getLookup().lookup(Spatial.class);
|
||||||
try {
|
try {
|
||||||
SceneApplication.getApplication().enqueue(new Callable<Void>() {
|
SceneApplication.getApplication().enqueue(new Callable<Void>() {
|
||||||
|
|
||||||
@ -109,7 +115,7 @@ public class JmeVehicleControl extends AbstractSceneExplorerNode {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}).get();
|
}).get();
|
||||||
((AbstractSceneExplorerNode)getParentNode()).refresh(true);
|
((AbstractSceneExplorerNode) getParentNode()).refresh(true);
|
||||||
} catch (InterruptedException ex) {
|
} catch (InterruptedException ex) {
|
||||||
Exceptions.printStackTrace(ex);
|
Exceptions.printStackTrace(ex);
|
||||||
} catch (ExecutionException ex) {
|
} catch (ExecutionException ex) {
|
||||||
@ -172,4 +178,57 @@ public class JmeVehicleControl extends AbstractSceneExplorerNode {
|
|||||||
children.setDataObject(key2);
|
children.setDataObject(key2);
|
||||||
return new org.openide.nodes.Node[]{new JmeVehicleControl((VehicleControl) key, children).setReadOnly(cookie)};
|
return new org.openide.nodes.Node[]{new JmeVehicleControl((VehicleControl) key, children).setReadOnly(cookie)};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static class PhysicsVehicleChildren extends JmeSpatialChildren {
|
||||||
|
|
||||||
|
VehicleControl control;
|
||||||
|
|
||||||
|
public PhysicsVehicleChildren(VehicleControl control) {
|
||||||
|
this.control = control;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void refreshChildren(boolean immediate) {
|
||||||
|
setKeys(createKeys());
|
||||||
|
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 (int i = 0; i < control.getNumWheels(); i++) {
|
||||||
|
keys.add(control.getWheel(i));
|
||||||
|
}
|
||||||
|
return keys;
|
||||||
|
}
|
||||||
|
}).get();
|
||||||
|
} catch (InterruptedException ex) {
|
||||||
|
Exceptions.printStackTrace(ex);
|
||||||
|
} catch (ExecutionException ex) {
|
||||||
|
Exceptions.printStackTrace(ex);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setReadOnly(boolean cookie) {
|
||||||
|
this.readOnly = cookie;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void addNotify() {
|
||||||
|
super.addNotify();
|
||||||
|
setKeys(createKeys());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Node[] createNodes(Object key) {
|
||||||
|
if (key instanceof VehicleWheel) {
|
||||||
|
VehicleWheel assetKey = (VehicleWheel) key;
|
||||||
|
return new Node[]{new JmeVehicleWheel(control, assetKey)};
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -34,6 +34,8 @@ package com.jme3.gde.core.sceneexplorer.nodes;
|
|||||||
import com.jme3.bullet.control.VehicleControl;
|
import com.jme3.bullet.control.VehicleControl;
|
||||||
import com.jme3.bullet.objects.VehicleWheel;
|
import com.jme3.bullet.objects.VehicleWheel;
|
||||||
import com.jme3.gde.core.scene.SceneApplication;
|
import com.jme3.gde.core.scene.SceneApplication;
|
||||||
|
import com.jme3.gde.core.sceneexplorer.nodes.AbstractSceneExplorerNode;
|
||||||
|
import com.jme3.gde.core.sceneexplorer.nodes.SceneExplorerNode;
|
||||||
import com.jme3.light.Light;
|
import com.jme3.light.Light;
|
||||||
import com.jme3.math.Vector3f;
|
import com.jme3.math.Vector3f;
|
||||||
import java.awt.Image;
|
import java.awt.Image;
|
||||||
|
@ -41,21 +41,21 @@ import org.openide.loaders.DataObject;
|
|||||||
public class NodeUtility {
|
public class NodeUtility {
|
||||||
|
|
||||||
public static JmeNode createNode(Node node) {
|
public static JmeNode createNode(Node node) {
|
||||||
SceneExplorerChildren factory = new SceneExplorerChildren(node);
|
JmeSpatialChildren factory = new JmeSpatialChildren(node);
|
||||||
factory.setReadOnly(true);
|
factory.setReadOnly(true);
|
||||||
JmeNode jmeNode = new JmeNode(node, factory);
|
JmeNode jmeNode = new JmeNode(node, factory);
|
||||||
return jmeNode;
|
return jmeNode;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static JmeNode createNode(Node node, boolean readOnly) {
|
public static JmeNode createNode(Node node, boolean readOnly) {
|
||||||
SceneExplorerChildren factory = new SceneExplorerChildren(node);
|
JmeSpatialChildren factory = new JmeSpatialChildren(node);
|
||||||
factory.setReadOnly(readOnly);
|
factory.setReadOnly(readOnly);
|
||||||
JmeNode jmeNode = new JmeNode(node, factory);
|
JmeNode jmeNode = new JmeNode(node, factory);
|
||||||
return jmeNode;
|
return jmeNode;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static JmeNode createNode(Node node, DataObject dataObject) {
|
public static JmeNode createNode(Node node, DataObject dataObject) {
|
||||||
SceneExplorerChildren factory = new SceneExplorerChildren(node);
|
JmeSpatialChildren factory = new JmeSpatialChildren(node);
|
||||||
factory.setDataObject(dataObject);
|
factory.setDataObject(dataObject);
|
||||||
factory.setReadOnly(true);
|
factory.setReadOnly(true);
|
||||||
JmeNode jmeNode = new JmeNode(node, factory);
|
JmeNode jmeNode = new JmeNode(node, factory);
|
||||||
@ -63,7 +63,7 @@ public class NodeUtility {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static JmeNode createNode(Node node, DataObject dataObject, boolean readOnly) {
|
public static JmeNode createNode(Node node, DataObject dataObject, boolean readOnly) {
|
||||||
SceneExplorerChildren factory = new SceneExplorerChildren(node);
|
JmeSpatialChildren factory = new JmeSpatialChildren(node);
|
||||||
factory.setDataObject(dataObject);
|
factory.setDataObject(dataObject);
|
||||||
factory.setReadOnly(readOnly);
|
factory.setReadOnly(readOnly);
|
||||||
JmeNode jmeNode = new JmeNode(node, factory);
|
JmeNode jmeNode = new JmeNode(node, factory);
|
||||||
|
@ -1,99 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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.sceneexplorer.nodes;
|
|
||||||
|
|
||||||
import com.jme3.bullet.control.VehicleControl;
|
|
||||||
import com.jme3.bullet.objects.VehicleWheel;
|
|
||||||
import com.jme3.gde.core.scene.SceneApplication;
|
|
||||||
import java.util.LinkedList;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.concurrent.Callable;
|
|
||||||
import java.util.concurrent.ExecutionException;
|
|
||||||
import org.openide.nodes.Node;
|
|
||||||
import org.openide.util.Exceptions;
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @author normenhansen
|
|
||||||
*/
|
|
||||||
public class PhysicsVehicleChildren extends SceneExplorerChildren {
|
|
||||||
|
|
||||||
VehicleControl control;
|
|
||||||
|
|
||||||
public PhysicsVehicleChildren(VehicleControl control) {
|
|
||||||
this.control = control;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void refreshChildren(boolean immediate) {
|
|
||||||
setKeys(createKeys());
|
|
||||||
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 (int i = 0; i < control.getNumWheels(); i++) {
|
|
||||||
keys.add(control.getWheel(i));
|
|
||||||
}
|
|
||||||
return keys;
|
|
||||||
}
|
|
||||||
}).get();
|
|
||||||
} catch (InterruptedException ex) {
|
|
||||||
Exceptions.printStackTrace(ex);
|
|
||||||
} catch (ExecutionException ex) {
|
|
||||||
Exceptions.printStackTrace(ex);
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setReadOnly(boolean cookie) {
|
|
||||||
this.readOnly = cookie;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void addNotify() {
|
|
||||||
super.addNotify();
|
|
||||||
setKeys(createKeys());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected Node[] createNodes(Object key) {
|
|
||||||
if (key instanceof VehicleWheel) {
|
|
||||||
VehicleWheel assetKey = (VehicleWheel) key;
|
|
||||||
return new Node[]{new JmeVehicleWheel(control, assetKey)};
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
@ -45,13 +45,13 @@ import org.openide.util.actions.Presenter;
|
|||||||
*
|
*
|
||||||
* @author normenhansen
|
* @author normenhansen
|
||||||
*/
|
*/
|
||||||
public class AddControlAction extends AbstractAction implements Presenter.Popup {
|
public class NewControlPopup extends AbstractAction implements Presenter.Popup {
|
||||||
|
|
||||||
protected JmeSpatial jmeSpatial;
|
protected JmeSpatial jmeSpatial;
|
||||||
protected Node node;
|
protected Node node;
|
||||||
protected DataObject dataObject;
|
protected DataObject dataObject;
|
||||||
|
|
||||||
public AddControlAction(JmeSpatial node) {
|
public NewControlPopup(JmeSpatial node) {
|
||||||
this.jmeSpatial = node;
|
this.jmeSpatial = node;
|
||||||
this.node = node.getLookup().lookup(Node.class);
|
this.node = node.getLookup().lookup(Node.class);
|
||||||
this.dataObject = node.getLookup().lookup(DataObject.class);
|
this.dataObject = node.getLookup().lookup(DataObject.class);
|
@ -57,13 +57,13 @@ import org.openide.util.actions.Presenter;
|
|||||||
*
|
*
|
||||||
* @author normenhansen
|
* @author normenhansen
|
||||||
*/
|
*/
|
||||||
public class AddLightAction extends AbstractAction implements Presenter.Popup {
|
public class NewLightPopup extends AbstractAction implements Presenter.Popup {
|
||||||
|
|
||||||
protected JmeSpatial jmeNode;
|
protected JmeSpatial jmeNode;
|
||||||
protected Spatial node;
|
protected Spatial node;
|
||||||
protected DataObject dataObject;
|
protected DataObject dataObject;
|
||||||
|
|
||||||
public AddLightAction(JmeSpatial node) {
|
public NewLightPopup(JmeSpatial node) {
|
||||||
this.jmeNode = node;
|
this.jmeNode = node;
|
||||||
this.node = node.getLookup().lookup(Spatial.class);
|
this.node = node.getLookup().lookup(Spatial.class);
|
||||||
this.dataObject = node.getLookup().lookup(DataObject.class);
|
this.dataObject = node.getLookup().lookup(DataObject.class);
|
@ -58,13 +58,13 @@ import org.openide.util.actions.Presenter;
|
|||||||
*
|
*
|
||||||
* @author normenhansen
|
* @author normenhansen
|
||||||
*/
|
*/
|
||||||
public class AddSpatialAction extends AbstractAction implements Presenter.Popup {
|
public class NewSpatialPopup extends AbstractAction implements Presenter.Popup {
|
||||||
|
|
||||||
protected JmeNode jmeNode;
|
protected JmeNode jmeNode;
|
||||||
protected Node node;
|
protected Node node;
|
||||||
protected DataObject dataObject;
|
protected DataObject dataObject;
|
||||||
|
|
||||||
public AddSpatialAction(JmeNode node) {
|
public NewSpatialPopup(JmeNode node) {
|
||||||
this.jmeNode = node;
|
this.jmeNode = node;
|
||||||
this.node = node.getLookup().lookup(Node.class);
|
this.node = node.getLookup().lookup(Node.class);
|
||||||
this.dataObject = node.getLookup().lookup(DataObject.class);
|
this.dataObject = node.getLookup().lookup(DataObject.class);
|
@ -45,12 +45,12 @@ import org.openide.util.actions.Presenter;
|
|||||||
*
|
*
|
||||||
* @author normenhansen
|
* @author normenhansen
|
||||||
*/
|
*/
|
||||||
public class UseToolAction extends AbstractAction implements Presenter.Popup {
|
public class ToolPopup extends AbstractAction implements Presenter.Popup {
|
||||||
|
|
||||||
protected AbstractSceneExplorerNode exNode;
|
protected AbstractSceneExplorerNode exNode;
|
||||||
protected DataObject dataObject;
|
protected DataObject dataObject;
|
||||||
|
|
||||||
public UseToolAction(AbstractSceneExplorerNode node) {
|
public ToolPopup(AbstractSceneExplorerNode node) {
|
||||||
this.exNode = node;
|
this.exNode = node;
|
||||||
this.dataObject = node.getLookup().lookup(DataObject.class);
|
this.dataObject = node.getLookup().lookup(DataObject.class);
|
||||||
}
|
}
|
@ -38,8 +38,8 @@ import com.jme3.gde.core.scene.SceneApplication;
|
|||||||
import com.jme3.gde.core.scene.SceneRequest;
|
import com.jme3.gde.core.scene.SceneRequest;
|
||||||
import com.jme3.gde.core.sceneexplorer.SceneExplorerTopComponent;
|
import com.jme3.gde.core.sceneexplorer.SceneExplorerTopComponent;
|
||||||
import com.jme3.gde.core.sceneexplorer.nodes.AbstractSceneExplorerNode;
|
import com.jme3.gde.core.sceneexplorer.nodes.AbstractSceneExplorerNode;
|
||||||
import com.jme3.gde.core.sceneexplorer.nodes.properties.SceneExplorerProperty;
|
import com.jme3.gde.core.properties.SceneExplorerProperty;
|
||||||
import com.jme3.gde.core.sceneexplorer.nodes.properties.SceneExplorerPropertyEditor;
|
import com.jme3.gde.core.properties.SceneExplorerPropertyEditor;
|
||||||
import com.jme3.material.Material;
|
import com.jme3.material.Material;
|
||||||
import java.awt.Component;
|
import java.awt.Component;
|
||||||
import java.awt.Graphics;
|
import java.awt.Graphics;
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
package com.jme3.gde.materials.multiview.widgets;
|
package com.jme3.gde.materials.multiview.widgets;
|
||||||
|
|
||||||
import com.jme3.gde.core.assets.ProjectAssetManager;
|
import com.jme3.gde.core.assets.ProjectAssetManager;
|
||||||
import com.jme3.gde.core.sceneexplorer.nodes.properties.TexturePropertyEditor;
|
import com.jme3.gde.core.properties.TexturePropertyEditor;
|
||||||
import com.jme3.gde.materials.MaterialProperty;
|
import com.jme3.gde.materials.MaterialProperty;
|
||||||
import java.awt.Component;
|
import java.awt.Component;
|
||||||
|
|
||||||
|
@ -41,7 +41,7 @@ import com.jme3.gde.core.sceneexplorer.nodes.JmeNode;
|
|||||||
import com.jme3.gde.core.sceneexplorer.nodes.JmeSpatial;
|
import com.jme3.gde.core.sceneexplorer.nodes.JmeSpatial;
|
||||||
import com.jme3.gde.core.sceneexplorer.nodes.JmeTerrainQuad;
|
import com.jme3.gde.core.sceneexplorer.nodes.JmeTerrainQuad;
|
||||||
import com.jme3.gde.core.sceneexplorer.nodes.NodeUtility;
|
import com.jme3.gde.core.sceneexplorer.nodes.NodeUtility;
|
||||||
import com.jme3.gde.core.sceneexplorer.nodes.properties.TexturePropertyEditor;
|
import com.jme3.gde.core.properties.TexturePropertyEditor;
|
||||||
import com.jme3.gde.core.undoredo.AbstractUndoableSceneEdit;
|
import com.jme3.gde.core.undoredo.AbstractUndoableSceneEdit;
|
||||||
import com.jme3.gde.core.undoredo.SceneUndoRedoManager;
|
import com.jme3.gde.core.undoredo.SceneUndoRedoManager;
|
||||||
import com.jme3.gde.core.util.DataObjectSaveNode;
|
import com.jme3.gde.core.util.DataObjectSaveNode;
|
||||||
|
@ -31,7 +31,7 @@
|
|||||||
*/
|
*/
|
||||||
package com.jme3.gde.terraineditor.sky;
|
package com.jme3.gde.terraineditor.sky;
|
||||||
|
|
||||||
import com.jme3.gde.core.sceneexplorer.nodes.properties.TexturePropertyEditor;
|
import com.jme3.gde.core.properties.TexturePropertyEditor;
|
||||||
import com.jme3.texture.Texture;
|
import com.jme3.texture.Texture;
|
||||||
import java.awt.Component;
|
import java.awt.Component;
|
||||||
import javax.swing.Icon;
|
import javax.swing.Icon;
|
||||||
|
@ -32,7 +32,7 @@
|
|||||||
|
|
||||||
package com.jme3.gde.terraineditor.tools;
|
package com.jme3.gde.terraineditor.tools;
|
||||||
|
|
||||||
import com.jme3.gde.core.sceneexplorer.nodes.actions.AbstractStatefulGLToolAction;
|
import com.jme3.gde.core.scene.actions.AbstractStatefulGLToolAction;
|
||||||
import com.jme3.scene.Node;
|
import com.jme3.scene.Node;
|
||||||
import com.jme3.scene.Spatial;
|
import com.jme3.scene.Spatial;
|
||||||
import com.jme3.terrain.Terrain;
|
import com.jme3.terrain.Terrain;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user