- commit local version of beginnigs of new SDK core api git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@9933 75d07b2b-3a1a-0410-a2c5-0572b91ccdca3.0
parent
0263c78d55
commit
f8f4a9e33e
@ -0,0 +1,66 @@ |
||||
package com.jme3.gde.core.editor; |
||||
|
||||
import com.jme3.app.SimpleApplication; |
||||
import com.jme3.app.StatsAppState; |
||||
import com.jme3.gde.core.Installer; |
||||
import com.jme3.renderer.ViewPort; |
||||
import com.jme3.scene.Node; |
||||
import com.jme3.system.AppSettings; |
||||
import com.jme3.system.awt.AwtPanel; |
||||
import com.jme3.system.awt.AwtPanelsContext; |
||||
import com.jme3.system.awt.PaintMode; |
||||
import java.util.concurrent.Callable; |
||||
import org.openide.util.NbPreferences; |
||||
|
||||
/** |
||||
* |
||||
* @author normenhansen |
||||
*/ |
||||
public class SceneApplication extends SimpleApplication { |
||||
|
||||
private AwtPanel panel; |
||||
private ViewPort overlayView; |
||||
|
||||
public SceneApplication() { |
||||
super(new StatsAppState()); |
||||
AppSettings newSetting = new AppSettings(true); |
||||
newSetting.setFrameRate(30); |
||||
if ("true".equals(NbPreferences.forModule(Installer.class).get("use_opengl_1", "false"))) { |
||||
newSetting.setRenderer(AppSettings.LWJGL_OPENGL1); |
||||
} |
||||
newSetting.setCustomRenderer(AwtPanelsContext.class); |
||||
setSettings(newSetting); |
||||
setPauseOnLostFocus(false); |
||||
setShowSettings(false); |
||||
} |
||||
|
||||
public AwtPanel getPanel() { |
||||
if (panel == null) { |
||||
panel = ((AwtPanelsContext) getContext()).createPanel(PaintMode.Accelerated); |
||||
((AwtPanelsContext) getContext()).setInputSource(panel); |
||||
attachPanel(); |
||||
} |
||||
return panel; |
||||
} |
||||
|
||||
private void attachPanel() { |
||||
enqueue(new Callable() { |
||||
public Object call() throws Exception { |
||||
panel.attachTo(true, viewPort, /*overlayView, */guiViewPort); |
||||
return null; |
||||
} |
||||
}); |
||||
} |
||||
|
||||
@Override |
||||
public Node getRootNode() { |
||||
return super.getRootNode(); |
||||
} |
||||
|
||||
@Override |
||||
public void simpleInitApp() { |
||||
overlayView = getRenderManager().createMainView("Overlay", cam); |
||||
overlayView.setClearFlags(false, true, false); |
||||
} |
||||
|
||||
} |
@ -0,0 +1,25 @@ |
||||
<?xml version="1.0" encoding="UTF-8" ?> |
||||
|
||||
<Form version="1.4" maxVersion="1.8" type="org.netbeans.modules.form.forminfo.JPanelFormInfo"> |
||||
<AuxValues> |
||||
<AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="1"/> |
||||
<AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/> |
||||
<AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/> |
||||
<AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="true"/> |
||||
<AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="true"/> |
||||
<AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/> |
||||
<AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/> |
||||
<AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/> |
||||
<AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/> |
||||
</AuxValues> |
||||
|
||||
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignBoxLayout"> |
||||
<Property name="axis" type="int" value="3"/> |
||||
</Layout> |
||||
<SubComponents> |
||||
<Container class="javax.swing.JPanel" name="scenePanel"> |
||||
|
||||
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignBoxLayout"/> |
||||
</Container> |
||||
</SubComponents> |
||||
</Form> |
@ -0,0 +1,131 @@ |
||||
package com.jme3.gde.core.editor; |
||||
|
||||
import java.io.IOException; |
||||
import javax.swing.JPanel; |
||||
import org.netbeans.api.settings.ConvertAsProperties; |
||||
import org.openide.DialogDisplayer; |
||||
import org.openide.NotifyDescriptor; |
||||
import org.openide.awt.ActionID; |
||||
import org.openide.awt.ActionReference; |
||||
import org.openide.cookies.SaveCookie; |
||||
import org.openide.loaders.DataObject; |
||||
import org.openide.loaders.OpenSupport; |
||||
import org.openide.nodes.Node; |
||||
import org.openide.util.Exceptions; |
||||
import org.openide.windows.TopComponent; |
||||
import org.openide.util.NbBundle.Messages; |
||||
import org.openide.windows.CloneableTopComponent; |
||||
|
||||
/** |
||||
* Top component which displays something. |
||||
*/ |
||||
@ConvertAsProperties( |
||||
dtd = "-//com.jme3.gde.core.editor//SceneEditor//EN", |
||||
autostore = false) |
||||
@TopComponent.Description( |
||||
preferredID = "SceneEditorTopComponent", |
||||
//iconBase="SET/PATH/TO/ICON/HERE",
|
||||
persistenceType = TopComponent.PERSISTENCE_ALWAYS) |
||||
@TopComponent.Registration(mode = "editor", openAtStartup = false) |
||||
@ActionID(category = "Window", id = "com.jme3.gde.core.editor.SceneEditorTopComponent") |
||||
@ActionReference(path = "Menu/Window" /*, position = 333 */) |
||||
@TopComponent.OpenActionRegistration( |
||||
displayName = "#CTL_SceneEditorAction", |
||||
preferredID = "SceneEditorTopComponent") |
||||
@Messages({ |
||||
"CTL_SceneEditorAction=SceneEditor", |
||||
"CTL_SceneEditorTopComponent=SceneEditor Window", |
||||
"HINT_SceneEditorTopComponent=This is a SceneEditor window" |
||||
}) |
||||
public final class SceneEditorTopComponent extends CloneableTopComponent { |
||||
|
||||
DataObject obj; |
||||
|
||||
public SceneEditorTopComponent() { |
||||
initComponents(); |
||||
setToolTipText(Bundle.HINT_SceneEditorTopComponent()); |
||||
} |
||||
|
||||
public void setDataObject(DataObject scene) { |
||||
obj = scene; |
||||
if (scene == null) { |
||||
return; |
||||
} |
||||
setName(scene.getName()); |
||||
setActivatedNodes(new Node[]{scene.getNodeDelegate()}); |
||||
} |
||||
|
||||
public JPanel getScenePanel() { |
||||
return scenePanel; |
||||
} |
||||
|
||||
/** |
||||
* This method is called from within the constructor to initialize the form. |
||||
* WARNING: Do NOT modify this code. The content of this method is always |
||||
* regenerated by the Form Editor. |
||||
*/ |
||||
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
|
||||
private void initComponents() { |
||||
|
||||
scenePanel = new javax.swing.JPanel(); |
||||
|
||||
setLayout(new javax.swing.BoxLayout(this, javax.swing.BoxLayout.PAGE_AXIS)); |
||||
|
||||
scenePanel.setLayout(new javax.swing.BoxLayout(scenePanel, javax.swing.BoxLayout.LINE_AXIS)); |
||||
add(scenePanel); |
||||
}// </editor-fold>//GEN-END:initComponents
|
||||
// Variables declaration - do not modify//GEN-BEGIN:variables
|
||||
private javax.swing.JPanel scenePanel; |
||||
// End of variables declaration//GEN-END:variables
|
||||
|
||||
@Override |
||||
public boolean canClose() { |
||||
if (obj != null && obj.isModified()) { |
||||
NotifyDescriptor.Confirmation mesg = new NotifyDescriptor.Confirmation("Scene has not been saved,\ndo you want to save it?", |
||||
"Not Saved", |
||||
NotifyDescriptor.YES_NO_CANCEL_OPTION); |
||||
DialogDisplayer.getDefault().notify(mesg); |
||||
if (mesg.getValue() == NotifyDescriptor.Confirmation.YES_OPTION) { |
||||
try { |
||||
obj.getCookie(SaveCookie.class).save(); |
||||
} catch (IOException ex) { |
||||
Exceptions.printStackTrace(ex); |
||||
} |
||||
} else if (mesg.getValue() == NotifyDescriptor.Confirmation.CANCEL_OPTION) { |
||||
return false; |
||||
} else if (mesg.getValue() == NotifyDescriptor.Confirmation.NO_OPTION) { |
||||
obj.setModified(false); |
||||
return true; |
||||
} |
||||
} |
||||
return true; |
||||
} |
||||
|
||||
@Override |
||||
public void componentOpened() { |
||||
// TODO add custom code on component opening
|
||||
} |
||||
|
||||
@Override |
||||
public void componentClosed() { |
||||
// TODO add custom code on component closing
|
||||
if (obj != null) { |
||||
OpenSupport closer = obj.getLookup().lookup(OpenSupport.class); |
||||
if (closer != null) { |
||||
closer.close(); |
||||
} |
||||
} |
||||
} |
||||
|
||||
void writeProperties(java.util.Properties p) { |
||||
// better to version settings since initial version as advocated at
|
||||
// http://wiki.apidesign.org/wiki/PropertyFiles
|
||||
p.setProperty("version", "1.0"); |
||||
// TODO store your settings
|
||||
} |
||||
|
||||
void readProperties(java.util.Properties p) { |
||||
String version = p.getProperty("version"); |
||||
// TODO read your settings according to their version
|
||||
} |
||||
} |
@ -0,0 +1,105 @@ |
||||
/* |
||||
* To change this template, choose Tools | Templates |
||||
* and open the template in the editor. |
||||
*/ |
||||
package com.jme3.gde.core.editor; |
||||
|
||||
import com.jme3.gde.core.assets.AssetData; |
||||
import com.jme3.gde.core.assets.SpatialAssetDataObject; |
||||
import com.jme3.light.DirectionalLight; |
||||
import com.jme3.scene.Spatial; |
||||
import com.jme3.system.awt.AwtPanel; |
||||
import java.util.concurrent.Callable; |
||||
import org.openide.cookies.CloseCookie; |
||||
import org.openide.cookies.OpenCookie; |
||||
import org.openide.loaders.Environment; |
||||
import org.openide.loaders.OpenSupport; |
||||
import org.openide.windows.CloneableTopComponent; |
||||
|
||||
/** |
||||
* |
||||
* @author normenhansen |
||||
*/ |
||||
public class SpatialAssetOpenSupport extends OpenSupport implements OpenCookie, CloseCookie { |
||||
|
||||
SpatialAssetDataObject dataObject; |
||||
SceneApplication app; |
||||
SceneEditorTopComponent tc; |
||||
|
||||
public SpatialAssetOpenSupport(SpatialAssetDataObject dataObject) { |
||||
super(dataObject.getPrimaryEntry()); |
||||
this.dataObject = dataObject; |
||||
} |
||||
|
||||
protected CloneableTopComponent createCloneableTopComponent() { |
||||
if (tc == null) { |
||||
tc = new SceneEditorTopComponent(); |
||||
} |
||||
return tc; |
||||
} |
||||
|
||||
@Override |
||||
public void open() { |
||||
super.open(); |
||||
if (app == null) { |
||||
app = new SceneApplication(); |
||||
tc.setDataObject(dataObject); |
||||
// dataObject.setModified(true);
|
||||
// final ProgressHandle progressHandle = ProgressHandleFactory.createHandle("Opening Scene..");
|
||||
// progressHandle.start();
|
||||
//runs new thread, needed?
|
||||
System.out.println("Judge Thread: " + Thread.currentThread().getName()); |
||||
Thread t = new Thread(new Runnable() { |
||||
public void run() { |
||||
app.start(); |
||||
//enqueue to wait until started
|
||||
app.enqueue(new Callable<Void>() { |
||||
public Void call() throws Exception { |
||||
//run on EDT
|
||||
java.awt.EventQueue.invokeLater(new Runnable() { |
||||
public void run() { |
||||
AwtPanel panel = app.getPanel(); |
||||
tc.getScenePanel().add(panel); |
||||
tc.repaint(); |
||||
} |
||||
}); |
||||
Spatial spat = (Spatial) dataObject.getLookup().lookup(AssetData.class).loadAsset(); |
||||
if (spat != null) { |
||||
app.getRootNode().attachChild(spat); |
||||
app.getRootNode().addLight(new DirectionalLight()); |
||||
} |
||||
dataObject.getLookupContents().add(app); |
||||
// progressHandle.finish();
|
||||
return null; |
||||
} |
||||
}); |
||||
} |
||||
}); |
||||
t.start(); |
||||
} |
||||
} |
||||
|
||||
@Override |
||||
public boolean close() { |
||||
System.out.println("CLOSING"); |
||||
boolean close = super.close(); |
||||
if (close && app != null) { |
||||
app.stop(); |
||||
java.awt.EventQueue.invokeLater(new Runnable() { |
||||
public void run() { |
||||
tc.getScenePanel().removeAll(); |
||||
} |
||||
}); |
||||
dataObject.getLookupContents().remove(app); |
||||
app = null; |
||||
} |
||||
return close; |
||||
} |
||||
|
||||
@Override |
||||
protected boolean canClose() { |
||||
System.out.println("CANCLOSE"); |
||||
return super.canClose(); |
||||
} |
||||
|
||||
} |
@ -0,0 +1,18 @@ |
||||
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); |
||||
} |
||||
|
||||
} |
@ -0,0 +1,32 @@ |
||||
package com.jme3.gde.core.navigator; |
||||
|
||||
import java.io.IOException; |
||||
import org.openide.loaders.DataObject; |
||||
import org.openide.nodes.AbstractNode; |
||||
import org.openide.nodes.Children; |
||||
import org.openide.util.Lookup; |
||||
|
||||
/** |
||||
* |
||||
* @author normenhansen |
||||
*/ |
||||
|
||||
|
||||
public class NavigatorNode extends AbstractNode{ |
||||
|
||||
public static NavigatorNode createNode(DataObject obj){ |
||||
return null; |
||||
} |
||||
|
||||
public NavigatorNode(Children children, Lookup lookup) { |
||||
super(children, lookup); |
||||
} |
||||
|
||||
@Override |
||||
public void destroy() throws IOException { |
||||
System.out.println("call destroy"); |
||||
super.destroy(); |
||||
} |
||||
|
||||
|
||||
} |
@ -0,0 +1,34 @@ |
||||
package com.jme3.gde.core.navigator; |
||||
|
||||
import com.jme3.gde.core.editor.SceneApplication; |
||||
import java.util.List; |
||||
import java.util.logging.Level; |
||||
import java.util.logging.Logger; |
||||
import org.openide.nodes.ChildFactory; |
||||
import org.openide.nodes.Node; |
||||
import org.openide.util.Lookup; |
||||
|
||||
/** |
||||
* |
||||
* @author normenhansen |
||||
*/ |
||||
public class NavigatorNodeChildren extends ChildFactory<Object> { |
||||
|
||||
private Lookup lookup; |
||||
|
||||
@Override |
||||
protected boolean createKeys(List<Object> toPopulate) { |
||||
SceneApplication app = lookup.lookup(SceneApplication.class); |
||||
if (app == null) { |
||||
Logger.getLogger(NavigatorNodeChildren.class.getName()).log(Level.WARNING, "Could not access SceneApplication"); |
||||
return true; |
||||
} |
||||
throw new UnsupportedOperationException("Not supported yet."); |
||||
} |
||||
|
||||
@Override |
||||
protected Node[] createNodesForKey(Object key) { |
||||
return super.createNodesForKey(key); |
||||
} |
||||
|
||||
} |
@ -0,0 +1,43 @@ |
||||
/* |
||||
* 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); |
||||
} |
@ -0,0 +1,131 @@ |
||||
package com.jme3.gde.core.navigator; |
||||
|
||||
import com.jme3.gde.core.editor.SceneApplication; |
||||
import com.jme3.gde.core.sceneexplorer.nodes.AbstractSceneExplorerNode; |
||||
import com.jme3.gde.core.sceneexplorer.nodes.NodeUtility; |
||||
import java.util.Collection; |
||||
import java.util.Iterator; |
||||
import javax.swing.Action; |
||||
import javax.swing.ActionMap; |
||||
import javax.swing.JComponent; |
||||
import javax.swing.JPanel; |
||||
import javax.swing.text.DefaultEditorKit; |
||||
import org.netbeans.spi.navigator.NavigatorPanel; |
||||
import org.openide.explorer.ExplorerManager; |
||||
import org.openide.explorer.ExplorerUtils; |
||||
import org.openide.explorer.view.BeanTreeView; |
||||
import org.openide.nodes.Node; |
||||
import org.openide.util.Lookup; |
||||
import org.openide.util.Lookup.Result; |
||||
import org.openide.util.LookupEvent; |
||||
import org.openide.util.LookupListener; |
||||
import org.openide.util.Utilities; |
||||
|
||||
/** |
||||
* |
||||
* @author normenhansen |
||||
*/ |
||||
@NavigatorPanel.Registration(displayName = "SceneExplorer", mimeType = "application/jme3model") |
||||
public class SceneNavigatorPanel extends JPanel implements NavigatorPanel, LookupListener, ExplorerManager.Provider { |
||||
|
||||
private final BeanTreeView beanTreeView = new BeanTreeView(); |
||||
private final Lookup lookup; |
||||
private transient ExplorerManager explorerManager = new ExplorerManager(); |
||||
private Lookup.Result<SceneApplication> applicationResult; |
||||
private final Result<AbstractSceneExplorerNode> nodeSelectionResult; |
||||
//ExplorerNode selection listener, does nothing
|
||||
private LookupListener listener = new LookupListener() { |
||||
private Node selectedNode; |
||||
|
||||
public void resultChanged(LookupEvent ev) { |
||||
Collection collection = nodeSelectionResult.allInstances(); |
||||
for (Iterator it = collection.iterator(); it.hasNext();) { |
||||
Object obj = it.next(); |
||||
if (obj instanceof AbstractSceneExplorerNode) { |
||||
AbstractSceneExplorerNode node = (AbstractSceneExplorerNode) obj; |
||||
if (node != null) { |
||||
if (selectedNode != null) { |
||||
selectedNode = null; |
||||
} |
||||
selectedNode = node; |
||||
return; |
||||
} |
||||
} |
||||
} |
||||
if (selectedNode != null) { |
||||
selectedNode = null; |
||||
} |
||||
} |
||||
}; |
||||
|
||||
public SceneNavigatorPanel() { |
||||
ActionMap map = getActionMap(); |
||||
Action copyAction = ExplorerUtils.actionCopy(explorerManager); |
||||
map.put(DefaultEditorKit.copyAction, copyAction); |
||||
map.put(DefaultEditorKit.cutAction, ExplorerUtils.actionCut(explorerManager)); |
||||
map.put(DefaultEditorKit.pasteAction, ExplorerUtils.actionPaste(explorerManager)); |
||||
map.put("delete", ExplorerUtils.actionDelete(explorerManager, true)); // or false
|
||||
|
||||
lookup = ExplorerUtils.createLookup(explorerManager, map); |
||||
|
||||
setLayout(new javax.swing.BoxLayout(this, javax.swing.BoxLayout.LINE_AXIS)); |
||||
add(beanTreeView); |
||||
|
||||
nodeSelectionResult = Utilities.actionsGlobalContext().lookupResult(AbstractSceneExplorerNode.class); |
||||
} |
||||
|
||||
public Lookup getLookup() { |
||||
return lookup; |
||||
} |
||||
|
||||
public String getDisplayName() { |
||||
return "SceneExplorer"; |
||||
} |
||||
|
||||
public String getDisplayHint() { |
||||
return "Hint"; |
||||
} |
||||
|
||||
public JComponent getComponent() { |
||||
return this; |
||||
} |
||||
|
||||
public void panelActivated(Lookup lkp) { |
||||
ExplorerUtils.activateActions(explorerManager, true); |
||||
applicationResult = lkp.lookupResult(SceneApplication.class); |
||||
applicationResult.addLookupListener(this); |
||||
nodeSelectionResult.addLookupListener(listener); |
||||
} |
||||
|
||||
public void panelDeactivated() { |
||||
ExplorerUtils.activateActions(explorerManager, false); |
||||
applicationResult.removeLookupListener(this); |
||||
nodeSelectionResult.removeLookupListener(listener); |
||||
explorerManager.setRootContext(Node.EMPTY); |
||||
} |
||||
|
||||
/** |
||||
* result listener for application start |
||||
*/ |
||||
public void resultChanged(LookupEvent ev) { |
||||
// System.out.println("Select Thread: " + Thread.currentThread().getName());
|
||||
Collection collection = applicationResult.allInstances(); |
||||
for (Iterator it = collection.iterator(); it.hasNext();) { |
||||
Object obj = it.next(); |
||||
if (obj instanceof SceneApplication) { |
||||
SceneApplication app = (SceneApplication) obj; |
||||
if (app != null) { |
||||
Node node = NodeUtility.createNode(((SceneApplication) app).getRootNode()); |
||||
explorerManager.setRootContext(node); |
||||
explorerManager.getRootContext().setDisplayName(node.getName()); |
||||
return; |
||||
} |
||||
} |
||||
} |
||||
explorerManager.setRootContext(Node.EMPTY); |
||||
} |
||||
|
||||
public ExplorerManager getExplorerManager() { |
||||
return explorerManager; |
||||
} |
||||
} |
@ -0,0 +1,52 @@ |
||||
/* |
||||
* 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); |
||||
} |
||||
|
||||
} |
Loading…
Reference in new issue