- make SceneComposer reload scene automatically on ClassPath change

git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@8632 75d07b2b-3a1a-0410-a2c5-0572b91ccdca
3.0
nor..67 13 years ago
parent c350e33214
commit 2df43b3baa
  1. 102
      sdk/jme3-scenecomposer/src/com/jme3/gde/scenecomposer/SceneComposerTopComponent.java

@ -70,7 +70,7 @@ public final class SceneComposerTopComponent extends TopComponent implements Sce
private SceneRequest sentRequest;
private SceneRequest currentRequest;
private HelpCtx ctx = new HelpCtx("sdk.scene_composer");
// private ProjectAssetManager.ClassPathChangeListener listener;
private ProjectAssetManager.ClassPathChangeListener listener;
public SceneComposerTopComponent() {
initComponents();
@ -912,62 +912,62 @@ private void scaleButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-F
toolController.refreshNonSpatialMarkers();
editorController.setTerrainLodCamera();
// final SpatialAssetDataObject dobj = ((SpatialAssetDataObject) currentRequest.getDataObject());
// listener = new ProjectAssetManager.ClassPathChangeListener() {
//
// public void classPathChanged(final ProjectAssetManager manager) {
// if (dobj.isModified()) {
// Confirmation msg = new NotifyDescriptor.Confirmation(
// "Classes have been changed, reload scene?",
// NotifyDescriptor.OK_CANCEL_OPTION,
// NotifyDescriptor.ERROR_MESSAGE);
// Object result = DialogDisplayer.getDefault().notify(msg);
// if (!NotifyDescriptor.OK_OPTION.equals(result)) {
// return;
// }
// }
// Runnable call = new Runnable() {
//
// public void run() {
// ProgressHandle progressHandle = ProgressHandleFactory.createHandle("Opening in SceneComposer");
// progressHandle.start();
// try {
// manager.clearCache();
// final Spatial asset = dobj.loadAsset();
// if (asset != null) {
// java.awt.EventQueue.invokeLater(new Runnable() {
//
// public void run() {
// SceneComposerTopComponent composer = SceneComposerTopComponent.findInstance();
// composer.openScene(asset, dobj, manager);
// }
// });
// } else {
// Confirmation msg = new NotifyDescriptor.Confirmation(
// "Error opening " + dobj.getPrimaryFile().getNameExt(),
// NotifyDescriptor.OK_CANCEL_OPTION,
// NotifyDescriptor.ERROR_MESSAGE);
// DialogDisplayer.getDefault().notify(msg);
// }
// } finally {
// progressHandle.finish();
// }
// }
// };
// new Thread(call).start();
// }
// };
// currentRequest.getManager().addClassPathEventListener(listener);
final SpatialAssetDataObject dobj = ((SpatialAssetDataObject) currentRequest.getDataObject());
listener = new ProjectAssetManager.ClassPathChangeListener() {
public void classPathChanged(final ProjectAssetManager manager) {
if (dobj.isModified()) {
Confirmation msg = new NotifyDescriptor.Confirmation(
"Classes have been changed, reload scene?",
NotifyDescriptor.OK_CANCEL_OPTION,
NotifyDescriptor.ERROR_MESSAGE);
Object result = DialogDisplayer.getDefault().notify(msg);
if (!NotifyDescriptor.OK_OPTION.equals(result)) {
return;
}
}
Runnable call = new Runnable() {
public void run() {
ProgressHandle progressHandle = ProgressHandleFactory.createHandle("Opening in SceneComposer");
progressHandle.start();
try {
manager.clearCache();
final Spatial asset = dobj.loadAsset();
if (asset != null) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
SceneComposerTopComponent composer = SceneComposerTopComponent.findInstance();
composer.openScene(asset, dobj, manager);
}
});
} else {
Confirmation msg = new NotifyDescriptor.Confirmation(
"Error opening " + dobj.getPrimaryFile().getNameExt(),
NotifyDescriptor.OK_CANCEL_OPTION,
NotifyDescriptor.ERROR_MESSAGE);
DialogDisplayer.getDefault().notify(msg);
}
} finally {
progressHandle.finish();
}
}
};
new Thread(call).start();
}
};
currentRequest.getManager().addClassPathEventListener(listener);
}
}
public void sceneClosed(SceneRequest request) {
if (request.equals(currentRequest)) {
setActivatedNodes(new org.openide.nodes.Node[]{});
// if (currentRequest != null) {
// currentRequest.getManager().removeClassPathEventListener(listener);
// listener = null;
// }
if (request != null) {
request.getManager().removeClassPathEventListener(listener);
listener = null;
}
SceneApplication.getApplication().removeSceneListener(this);
currentRequest = null;
setSceneInfo(null, null, false);

Loading…
Cancel
Save