- MAJOR overhaul of the SceneExplorer node updates, updates are no longer blocking or reading from another thread - Some issues with enums still - simplified, improved and more versatile SceneExplorerProperty class git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@10083 75d07b2b-3a1a-0410-a2c5-0572b91ccdca3.0
parent
f77b953fff
commit
81a08d6c49
@ -1,18 +0,0 @@ |
||||
package com.jme3.gde.core.navigator; |
||||
|
||||
import com.jme3.app.state.AbstractAppState; |
||||
|
||||
/** |
||||
* |
||||
* @author normenhansen |
||||
*/ |
||||
|
||||
|
||||
public class DataScanner extends AbstractAppState{ |
||||
|
||||
@Override |
||||
public void update(float tpf) { |
||||
super.update(tpf); |
||||
} |
||||
|
||||
} |
@ -1,43 +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.navigator; |
||||
|
||||
import com.jme3.gde.core.properties.*; |
||||
|
||||
/** |
||||
* |
||||
* @author normenhansen |
||||
*/ |
||||
public interface SceneChangeListener { |
||||
public void propertyChange(String property, Object oldValue, Object newValue); |
||||
} |
@ -1,52 +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.navigator; |
||||
|
||||
import org.openide.nodes.PropertySupport; |
||||
import org.openide.util.Lookup; |
||||
|
||||
/** |
||||
* |
||||
* @author normenhansen |
||||
*/ |
||||
@SuppressWarnings("unchecked") |
||||
public class SceneProperty<T> extends PropertySupport.Reflection<T> { |
||||
|
||||
Lookup lookup; |
||||
Object _originalValue; |
||||
|
||||
public SceneProperty(Lookup lookup, Object instance, Class<T> valueType, String property) throws NoSuchMethodException { |
||||
super(instance, valueType, property); |
||||
DataScanner scanner = lookup.lookup(DataScanner.class); |
||||
} |
||||
|
||||
} |
@ -0,0 +1,125 @@ |
||||
/* |
||||
* Copyright (c) 2003-2012 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.scene; |
||||
|
||||
import com.jme3.app.Application; |
||||
import com.jme3.app.state.AbstractAppState; |
||||
import com.jme3.app.state.AppStateManager; |
||||
import com.jme3.gde.core.sceneexplorer.nodes.AbstractSceneExplorerNode; |
||||
import java.util.Collection; |
||||
import java.util.Collections; |
||||
import java.util.Iterator; |
||||
import java.util.LinkedList; |
||||
import java.util.List; |
||||
import org.openide.util.Lookup.Result; |
||||
import org.openide.util.LookupEvent; |
||||
import org.openide.util.LookupListener; |
||||
import org.openide.util.Utilities; |
||||
|
||||
/** |
||||
* |
||||
* @author normenhansen |
||||
*/ |
||||
public class NodeSyncAppState extends AbstractAppState implements LookupListener { |
||||
|
||||
private final List<AbstractSceneExplorerNode> newNodes = Collections.synchronizedList(new LinkedList<AbstractSceneExplorerNode>()); |
||||
private final List<AbstractSceneExplorerNode> oldNodes = Collections.synchronizedList(new LinkedList<AbstractSceneExplorerNode>()); |
||||
private final Result<AbstractSceneExplorerNode> nodeSelectionResult; |
||||
private AbstractSceneExplorerNode node; |
||||
private float timeStep = 1; |
||||
private float timer = 0; |
||||
|
||||
public NodeSyncAppState() { |
||||
nodeSelectionResult = Utilities.actionsGlobalContext().lookupResult(AbstractSceneExplorerNode.class); |
||||
} |
||||
|
||||
@Override |
||||
public void initialize(AppStateManager stateManager, Application app) { |
||||
super.initialize(stateManager, app); |
||||
nodeSelectionResult.addLookupListener(this); |
||||
} |
||||
|
||||
@Override |
||||
public void update(float tpf) { |
||||
super.update(tpf); |
||||
synchronized (newNodes) { |
||||
for (Iterator<AbstractSceneExplorerNode> it = newNodes.iterator(); it.hasNext();) { |
||||
AbstractSceneExplorerNode abstractSceneExplorerNode = it.next(); |
||||
abstractSceneExplorerNode.syncSceneData(); |
||||
it.remove(); |
||||
} |
||||
} |
||||
timer += tpf; |
||||
if (timer > timeStep) { |
||||
timer = 0; |
||||
AbstractSceneExplorerNode node = this.node; |
||||
if (initialized && node != null) { |
||||
node.syncSceneData(); |
||||
} |
||||
} |
||||
synchronized (oldNodes) { |
||||
for (Iterator<AbstractSceneExplorerNode> it = oldNodes.iterator(); it.hasNext();) { |
||||
AbstractSceneExplorerNode abstractSceneExplorerNode = it.next(); |
||||
abstractSceneExplorerNode.syncSceneData(); |
||||
it.remove(); |
||||
} |
||||
} |
||||
} |
||||
|
||||
public void resultChanged(LookupEvent ev) { |
||||
Collection collection = nodeSelectionResult.allInstances(); |
||||
AbstractSceneExplorerNode newNode = null; |
||||
for (Iterator it = collection.iterator(); it.hasNext();) { |
||||
Object object = it.next(); |
||||
if (object instanceof AbstractSceneExplorerNode) { |
||||
if (object != null) { |
||||
synchronized (newNodes) { |
||||
newNodes.add((AbstractSceneExplorerNode) object); |
||||
} |
||||
} |
||||
newNode = (AbstractSceneExplorerNode) object; |
||||
} |
||||
} |
||||
if (node != null) { |
||||
synchronized (oldNodes) { |
||||
oldNodes.add(node); |
||||
} |
||||
} |
||||
node = newNode; |
||||
} |
||||
|
||||
@Override |
||||
public void cleanup() { |
||||
nodeSelectionResult.removeLookupListener(this); |
||||
super.cleanup(); |
||||
} |
||||
} |
Loading…
Reference in new issue