- add workaround for unsaved scene "hanging" in save button when editor was closed

git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@8174 75d07b2b-3a1a-0410-a2c5-0572b91ccdca
3.0
nor..67 13 years ago
parent d293d00867
commit 4cc1909beb
  1. 31
      sdk/jme3-core/src/com/jme3/gde/core/scene/SceneApplication.java

@ -28,6 +28,7 @@ import com.jme3.app.Application;
import com.jme3.app.StatsView;
import com.jme3.font.BitmapFont;
import com.jme3.font.BitmapText;
import com.jme3.gde.core.assets.AssetData;
import com.jme3.gde.core.scene.controller.AbstractCameraController;
import com.jme3.gde.core.sceneexplorer.nodes.JmeSpatial;
import com.jme3.gde.core.scene.processors.WireProcessor;
@ -47,6 +48,7 @@ import com.jme3.scene.Node;
import com.jme3.scene.Spatial;
import com.jme3.scene.Spatial.CullHint;
import com.jme3.system.AppSettings;
import java.io.IOException;
import java.util.Collection;
import java.util.Iterator;
import java.util.concurrent.Callable;
@ -57,6 +59,7 @@ import org.netbeans.api.progress.ProgressHandleFactory;
import org.netbeans.spi.project.LookupProvider;
import org.openide.DialogDisplayer;
import org.openide.NotifyDescriptor;
import org.openide.NotifyDescriptor.Confirmation;
import org.openide.NotifyDescriptor.Message;
import org.openide.awt.StatusDisplayer;
import org.openide.util.Exceptions;
@ -341,6 +344,33 @@ public class SceneApplication extends Application implements LookupProvider, Loo
});
}
private void checkSave() {
if ((currentSceneRequest != null)
&& currentSceneRequest.getDataObject().isModified()) {
final SceneRequest req = currentSceneRequest;
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
Confirmation mesg = new NotifyDescriptor.Confirmation("Scene has not been saved,\ndo you want to save it?",
"Not Saved",
NotifyDescriptor.YES_NO_OPTION);
DialogDisplayer.getDefault().notify(mesg);
if (mesg.getValue() == Confirmation.YES_OPTION) {
try {
req.getDataObject().getLookup().lookup(AssetData.class).saveAsset();
} catch (IOException ex) {
Exceptions.printStackTrace(ex);
}
} else if (mesg.getValue() == Confirmation.CANCEL_OPTION) {
return;
} else if (mesg.getValue() == Confirmation.NO_OPTION) {
req.getDataObject().setModified(false);
}
}
});
}
}
/**
* method to close a scene displayed by a scene request (threadsafe)
* @param tree
@ -375,6 +405,7 @@ public class SceneApplication extends Application implements LookupProvider, Loo
return false;
}
}
checkSave();
currentSceneRequest.setDisplayed(false);
}
toolsNode.detachAllChildren();

Loading…
Cancel
Save