- Make SceneEditor Controller good example of the async AWT/GL therading model of the SDK

git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@9355 75d07b2b-3a1a-0410-a2c5-0572b91ccdca
3.0
nor..67 13 years ago
parent 77fc3e3eee
commit 352ee2083b
  1. 31
      sdk/jme3-scenecomposer/src/com/jme3/gde/scenecomposer/SceneEditorController.java

@ -54,7 +54,8 @@ import org.openide.util.Exceptions;
import org.openide.util.Lookup; import org.openide.util.Lookup;
/** /**
* * Example of a class that edits the scene, logic happens on the AWT side,
* do.. methods do not use global variables.
* @author normenhansen * @author normenhansen
*/ */
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
@ -210,11 +211,10 @@ public class SceneEditorController implements PropertyChangeListener, NodeListen
} }
Vector3f after = new Vector3f(localTranslation); Vector3f after = new Vector3f(localTranslation);
selected.setLocalTranslation(localTranslation); selected.setLocalTranslation(localTranslation);
AbstractSceneExplorerNode selectedSpat = this.selectedSpat; moveUndo(selected, before, after);
moveUndo(selected, before, after, selectedSpat);
} }
private void moveUndo(final Spatial spatial, final Vector3f before, final Vector3f after, final AbstractSceneExplorerNode parentNode) { private void moveUndo(final Spatial spatial, final Vector3f before, final Vector3f after) {
if (spatial != null && before != null) { if (spatial != null && before != null) {
Lookup.getDefault().lookup(SceneUndoRedoManager.class).addEdit(this, new AbstractUndoableSceneEdit() { Lookup.getDefault().lookup(SceneUndoRedoManager.class).addEdit(this, new AbstractUndoableSceneEdit() {
@ -261,10 +261,10 @@ public class SceneEditorController implements PropertyChangeListener, NodeListen
Vector3f before = new Vector3f(selected.getLocalTranslation()); Vector3f before = new Vector3f(selected.getLocalTranslation());
selected.setLocalTranslation(before.add(translation)); selected.setLocalTranslation(before.add(translation));
Vector3f after = new Vector3f(selected.getLocalTranslation()); Vector3f after = new Vector3f(selected.getLocalTranslation());
nudgeUndo(selected, before, after, selectedSpat); nudgeUndo(selected, before, after);
} }
private void nudgeUndo(final Spatial spatial, final Vector3f before, final Vector3f after, final AbstractSceneExplorerNode parentNode) { private void nudgeUndo(final Spatial spatial, final Vector3f before, final Vector3f after) {
if (spatial != null && before != null) { if (spatial != null && before != null) {
Lookup.getDefault().lookup(SceneUndoRedoManager.class).addEdit(this, new AbstractUndoableSceneEdit() { Lookup.getDefault().lookup(SceneUndoRedoManager.class).addEdit(this, new AbstractUndoableSceneEdit() {
@ -311,10 +311,10 @@ public class SceneEditorController implements PropertyChangeListener, NodeListen
Quaternion before = new Quaternion(selected.getLocalRotation()); Quaternion before = new Quaternion(selected.getLocalRotation());
selected.rotate(rotation); selected.rotate(rotation);
Quaternion after = new Quaternion(selected.getLocalRotation()); Quaternion after = new Quaternion(selected.getLocalRotation());
rotateUndo(selected, before, after, selectedSpat); rotateUndo(selected, before, after);
} }
private void rotateUndo(final Spatial spatial, final Quaternion before, final Quaternion after, final AbstractSceneExplorerNode parentNode) { private void rotateUndo(final Spatial spatial, final Quaternion before, final Quaternion after) {
if (spatial != null && before != null) { if (spatial != null && before != null) {
Lookup.getDefault().lookup(SceneUndoRedoManager.class).addEdit(this, new AbstractUndoableSceneEdit() { Lookup.getDefault().lookup(SceneUndoRedoManager.class).addEdit(this, new AbstractUndoableSceneEdit() {
@ -422,8 +422,7 @@ public class SceneEditorController implements PropertyChangeListener, NodeListen
parent.attachChild(selected); parent.attachChild(selected);
} }
refreshSelected(); refreshSelected();
AbstractSceneExplorerNode selectedSpat = this.selectedSpat; addControlUndo(parent, control, jmeRootNode);
addControlUndo(parent, control, selectedSpat);
} }
public void createDynamicPhysicsMeshForSelectedSpatial(final float weight) { public void createDynamicPhysicsMeshForSelectedSpatial(final float weight) {
@ -463,8 +462,7 @@ public class SceneEditorController implements PropertyChangeListener, NodeListen
parent.attachChild(selected); parent.attachChild(selected);
} }
refreshSelected(); refreshSelected();
AbstractSceneExplorerNode selectedSpat = this.selectedSpat; addControlUndo(parent, control, jmeRootNode);
addControlUndo(parent, control, selectedSpat);
} }
public void createCharacterControlForSelectedSpatial(final boolean auto, final float radius, final float height) { public void createCharacterControlForSelectedSpatial(final boolean auto, final float radius, final float height) {
@ -509,8 +507,7 @@ public class SceneEditorController implements PropertyChangeListener, NodeListen
parent.attachChild(selected); parent.attachChild(selected);
} }
refreshSelected(); refreshSelected();
AbstractSceneExplorerNode selectedSpat = this.selectedSpat; addControlUndo(parent, control, jmeRootNode);
addControlUndo(parent, control, selectedSpat);
} }
private void addControlUndo(final Node undoParent, final Control undoControl, final AbstractSceneExplorerNode parentNode) { private void addControlUndo(final Node undoParent, final Control undoControl, final AbstractSceneExplorerNode parentNode) {
@ -583,7 +580,7 @@ public class SceneEditorController implements PropertyChangeListener, NodeListen
} }
} }
refreshSelected(); refreshSelected();
addSpatialUndo(selected, linkNode, null, selectedSpat); addSpatialUndo(selected, linkNode, null, jmeRootNode);
} catch (Exception ex) { } catch (Exception ex) {
Confirmation msg = new NotifyDescriptor.Confirmation( Confirmation msg = new NotifyDescriptor.Confirmation(
"Error importing " + file.getName() + "\n" + ex.toString(), "Error importing " + file.getName() + "\n" + ex.toString(),
@ -632,7 +629,7 @@ public class SceneEditorController implements PropertyChangeListener, NodeListen
selected.worldToLocal(location, localVec); selected.worldToLocal(location, localVec);
linkNode.setLocalTranslation(localVec); linkNode.setLocalTranslation(localVec);
} }
addSpatialUndo(selected, linkNode, null, selectedSpat); addSpatialUndo(selected, linkNode, null, jmeRootNode);
} }
refreshSelected(); refreshSelected();
} catch (Exception ex) { } catch (Exception ex) {
@ -682,7 +679,7 @@ public class SceneEditorController implements PropertyChangeListener, NodeListen
} }
} }
refreshSelected(); refreshSelected();
addSpatialUndo(selected, file, null, selectedSpat); addSpatialUndo(selected, file, null, jmeRootNode);
} catch (Exception ex) { } catch (Exception ex) {
Confirmation msg = new NotifyDescriptor.Confirmation( Confirmation msg = new NotifyDescriptor.Confirmation(
"Error importing " + file.getName() + "\n" + ex.toString(), "Error importing " + file.getName() + "\n" + ex.toString(),

Loading…
Cancel
Save