- Create "New Control" and "New Spatial" abstract classes that allow showing a Wizard before creation

- Fix freeze of Add Skybox.. in Terrain Editor

git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@7138 75d07b2b-3a1a-0410-a2c5-0572b91ccdca
3.0
nor..67 14 years ago
parent 228a207aaf
commit 197d793cc8
  1. 119
      sdk/jme3-core/src/com/jme3/gde/core/sceneexplorer/nodes/actions/AbstractNewControlWizardAction.java
  2. 119
      sdk/jme3-core/src/com/jme3/gde/core/sceneexplorer/nodes/actions/AbstractNewSpatialWizardAction.java
  3. 42
      sdk/jme3-terrain-editor/src/com/jme3/gde/terraineditor/sky/AddSkyboxAction.java

@ -0,0 +1,119 @@
/*
* 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.actions;
import com.jme3.gde.core.scene.SceneApplication;
import com.jme3.gde.core.sceneexplorer.nodes.JmeSpatial;
import com.jme3.gde.core.undoredo.AbstractUndoableSceneEdit;
import com.jme3.gde.core.undoredo.SceneUndoRedoManager;
import com.jme3.scene.Spatial;
import com.jme3.scene.control.Control;
import java.awt.event.ActionEvent;
import java.util.concurrent.Callable;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.undo.CannotRedoException;
import javax.swing.undo.CannotUndoException;
import org.openide.loaders.DataObject;
import org.openide.util.Lookup;
/**
*
* @author normenhansen
*/
public abstract class AbstractNewControlWizardAction implements NewControlAction {
protected String name = "*";
protected abstract Object showWizard(Spatial spatial);
protected abstract Control doCreateControl(Spatial spatial, Object configuration);
protected Action makeAction(final JmeSpatial rootNode, final DataObject dataObject) {
final Spatial spatial = rootNode.getLookup().lookup(Spatial.class);
return new AbstractAction(name) {
public void actionPerformed(ActionEvent e) {
final Object obj=showWizard(spatial);
SceneApplication.getApplication().enqueue(new Callable<Void>() {
public Void call() throws Exception {
final Control attachControl = doCreateControl(spatial, obj);
if (spatial != null && attachControl != null) {
spatial.addControl(attachControl);
Lookup.getDefault().lookup(SceneUndoRedoManager.class).addEdit(this, new AbstractUndoableSceneEdit() {
@Override
public void sceneUndo() throws CannotUndoException {
spatial.removeControl(attachControl);
}
@Override
public void sceneRedo() throws CannotRedoException {
spatial.addControl(attachControl);
}
@Override
public void awtRedo() {
dataObject.setModified(true);
rootNode.refresh(true);
}
@Override
public void awtUndo() {
dataObject.setModified(true);
rootNode.refresh(true);
}
});
setModified();
}
return null;
}
});
}
protected void setModified() {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
dataObject.setModified(true);
rootNode.refresh(true);
}
});
}
};
}
public Action getAction(JmeSpatial rootNode, DataObject dataObject) {
return makeAction(rootNode, dataObject);
}
}

@ -0,0 +1,119 @@
/*
* 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.actions;
import com.jme3.gde.core.scene.SceneApplication;
import com.jme3.gde.core.sceneexplorer.nodes.JmeNode;
import com.jme3.gde.core.undoredo.AbstractUndoableSceneEdit;
import com.jme3.gde.core.undoredo.SceneUndoRedoManager;
import com.jme3.scene.Node;
import com.jme3.scene.Spatial;
import java.awt.event.ActionEvent;
import java.util.concurrent.Callable;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.undo.CannotRedoException;
import javax.swing.undo.CannotUndoException;
import org.openide.loaders.DataObject;
import org.openide.util.Lookup;
/**
*
* @author normenhansen
*/
public abstract class AbstractNewSpatialWizardAction implements NewSpatialAction {
protected String name = "*";
protected abstract Object showWizard(Spatial spatial);
protected abstract Spatial doCreateSpatial(Node parent, Object configuration);
protected Action makeAction(final JmeNode rootNode, final DataObject dataObject) {
final Node node = rootNode.getLookup().lookup(Node.class);
return new AbstractAction(name) {
public void actionPerformed(ActionEvent e) {
final Object obj=showWizard(node);
SceneApplication.getApplication().enqueue(new Callable<Void>() {
public Void call() throws Exception {
final Spatial attachSpatial = doCreateSpatial(node, obj);
if (node != null && attachSpatial != null) {
node.attachChild(attachSpatial);
Lookup.getDefault().lookup(SceneUndoRedoManager.class).addEdit(this, new AbstractUndoableSceneEdit() {
@Override
public void sceneUndo() throws CannotUndoException {
attachSpatial.removeFromParent();
}
@Override
public void sceneRedo() throws CannotRedoException {
node.attachChild(attachSpatial);
}
@Override
public void awtRedo() {
dataObject.setModified(true);
rootNode.refresh(true);
}
@Override
public void awtUndo() {
dataObject.setModified(true);
rootNode.refresh(true);
}
});
setModified();
}
return null;
}
});
}
protected void setModified() {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
dataObject.setModified(true);
rootNode.refresh(true);
}
});
}
};
}
public Action getAction(JmeNode rootNode, DataObject dataObject) {
return makeAction(rootNode, dataObject);
}
}

@ -6,7 +6,7 @@ package com.jme3.gde.terraineditor.sky;
import com.jme3.asset.AssetManager; import com.jme3.asset.AssetManager;
import com.jme3.gde.core.scene.SceneApplication; import com.jme3.gde.core.scene.SceneApplication;
import com.jme3.gde.core.sceneexplorer.nodes.actions.AbstractNewSpatialAction; import com.jme3.gde.core.sceneexplorer.nodes.actions.AbstractNewSpatialWizardAction;
import com.jme3.gde.core.sceneexplorer.nodes.actions.NewSpatialAction; import com.jme3.gde.core.sceneexplorer.nodes.actions.NewSpatialAction;
import com.jme3.math.Vector3f; import com.jme3.math.Vector3f;
import com.jme3.scene.Node; import com.jme3.scene.Node;
@ -27,7 +27,7 @@ import org.openide.util.Exceptions;
* @author normenhansen * @author normenhansen
*/ */
@org.openide.util.lookup.ServiceProvider(service = NewSpatialAction.class) @org.openide.util.lookup.ServiceProvider(service = NewSpatialAction.class)
public class AddSkyboxAction extends AbstractNewSpatialAction { public class AddSkyboxAction extends AbstractNewSpatialWizardAction {
private WizardDescriptor.Panel[] panels; private WizardDescriptor.Panel[] panels;
@ -36,28 +36,24 @@ public class AddSkyboxAction extends AbstractNewSpatialAction {
} }
@Override @Override
protected Spatial doCreateSpatial(Node parent) { protected Object showWizard(Spatial spatial) {
try { WizardDescriptor wizardDescriptor = new WizardDescriptor(getPanels());
final WizardDescriptor wizardDescriptor = new WizardDescriptor(getPanels()); wizardDescriptor.setTitleFormat(new MessageFormat("{0}"));
java.awt.EventQueue.invokeAndWait(new Runnable() { wizardDescriptor.setTitle("Skybox Wizard");
Dialog dialog = DialogDisplayer.getDefault().createDialog(wizardDescriptor);
dialog.setVisible(true);
dialog.toFront();
boolean cancelled = wizardDescriptor.getValue() != WizardDescriptor.FINISH_OPTION;
if (!cancelled) {
return wizardDescriptor;
}
return null;
}
public void run() { @Override
// {0} will be replaced by WizardDesriptor.Panel.getComponent().getName() protected Spatial doCreateSpatial(Node parent, Object properties) {
wizardDescriptor.setTitleFormat(new MessageFormat("{0}")); if (properties != null) {
wizardDescriptor.setTitle("Skybox Wizard"); return generateSkybox((WizardDescriptor) properties);
Dialog dialog = DialogDisplayer.getDefault().createDialog(wizardDescriptor);
dialog.setVisible(true);
dialog.toFront();
}
});
boolean cancelled = wizardDescriptor.getValue() != WizardDescriptor.FINISH_OPTION;
if (!cancelled) {
return generateSkybox(wizardDescriptor);
}
} catch (InterruptedException ex) {
Exceptions.printStackTrace(ex);
} catch (InvocationTargetException ex) {
Exceptions.printStackTrace(ex);
} }
return null; return null;
} }

Loading…
Cancel
Save