use of org.rstudio.studio.client.workbench.model.UnsavedChangesItem in project rstudio by rstudio.
the class SourceWindow method getUnsavedChanges.
private JsArray<UnsavedChangesItem> getUnsavedChanges() {
JsArray<UnsavedChangesItem> items = JsArray.createArray().cast();
ArrayList<UnsavedChangesTarget> targets = sourceShim_.getUnsavedChanges(Source.TYPE_FILE_BACKED);
for (UnsavedChangesTarget target : targets) {
items.push(UnsavedChangesItem.create(target));
}
return items;
}
use of org.rstudio.studio.client.workbench.model.UnsavedChangesItem in project rstudio by rstudio.
the class SourceWindowManager method handleUnsavedChangesBeforeExit.
public void handleUnsavedChangesBeforeExit(ArrayList<UnsavedChangesTarget> targets, Command onCompleted) {
// accumulate the unsaved change targets that represent satellite windows
final JsArray<UnsavedChangesItem> items = JsArray.createArray().cast();
for (UnsavedChangesTarget target : targets) {
if (target instanceof UnsavedChangesItem) {
items.push((UnsavedChangesItem) target);
}
}
// let each window have a crack at saving the targets (the windows will
// discard any targets they don't own)
doForAllSourceWindows(new SourceWindowCommand() {
@Override
public void execute(String windowId, WindowEx window, Command continuation) {
handleUnsavedChangesBeforeExit(window, items, continuation);
}
}, onCompleted);
}
use of org.rstudio.studio.client.workbench.model.UnsavedChangesItem in project rstudio by rstudio.
the class ApplicationQuit method handleUnsavedChanges.
public static void handleUnsavedChanges(final int saveAction, String caption, boolean forceSaveAll, final SourceShim sourceShim, final WorkbenchContext workbenchContext, final UnsavedChangesTarget globalEnvTarget, final QuitContext quitContext) {
// see what the unsaved changes situation is and prompt accordingly
ArrayList<UnsavedChangesTarget> unsavedSourceDocs = sourceShim.getUnsavedChanges(Source.TYPE_FILE_BACKED);
// force save all
if (forceSaveAll) {
// save all unsaved documents and then quit
sourceShim.handleUnsavedChangesBeforeExit(unsavedSourceDocs, new Command() {
@Override
public void execute() {
boolean saveChanges = saveAction != SaveAction.NOSAVE;
quitContext.onReadyToQuit(saveChanges);
}
});
return;
} else // no unsaved changes at all
if (saveAction != SaveAction.SAVEASK && unsavedSourceDocs.size() == 0) {
// define quit operation
final Operation quitOperation = new Operation() {
public void execute() {
quitContext.onReadyToQuit(saveAction == SaveAction.SAVE);
}
};
// if this is a quit session then we always prompt
if (ApplicationAction.isQuit()) {
RStudioGinjector.INSTANCE.getGlobalDisplay().showYesNoMessage(MessageDialog.QUESTION, caption, "Are you sure you want to quit the R session?", quitOperation, true);
} else {
quitOperation.execute();
}
return;
}
// just an unsaved environment
if (unsavedSourceDocs.size() == 0 && workbenchContext != null) {
// confirm quit and do it
String prompt = "Save workspace image to " + workbenchContext.getREnvironmentPath() + "?";
RStudioGinjector.INSTANCE.getGlobalDisplay().showYesNoMessage(GlobalDisplay.MSG_QUESTION, caption, prompt, true, new Operation() {
public void execute() {
quitContext.onReadyToQuit(true);
}
}, new Operation() {
public void execute() {
quitContext.onReadyToQuit(false);
}
}, new Operation() {
public void execute() {
}
}, "Save", "Don't Save", true);
} else // must be from the main window in web mode)
if (saveAction != SaveAction.SAVEASK && unsavedSourceDocs.size() == 1 && (Desktop.isDesktop() || !(unsavedSourceDocs.get(0) instanceof UnsavedChangesItem))) {
sourceShim.saveWithPrompt(unsavedSourceDocs.get(0), sourceShim.revertUnsavedChangesBeforeExitCommand(new Command() {
@Override
public void execute() {
quitContext.onReadyToQuit(saveAction == SaveAction.SAVE);
}
}), null);
} else // multiple save targets
{
ArrayList<UnsavedChangesTarget> unsaved = new ArrayList<UnsavedChangesTarget>();
if (saveAction == SaveAction.SAVEASK && globalEnvTarget != null)
unsaved.add(globalEnvTarget);
unsaved.addAll(unsavedSourceDocs);
new UnsavedChangesDialog(caption, unsaved, new OperationWithInput<UnsavedChangesDialog.Result>() {
@Override
public void execute(Result result) {
ArrayList<UnsavedChangesTarget> saveTargets = result.getSaveTargets();
// remote global env target from list (if specified) and
// compute the saveChanges value
boolean saveGlobalEnv = saveAction == SaveAction.SAVE;
if (saveAction == SaveAction.SAVEASK && globalEnvTarget != null)
saveGlobalEnv = saveTargets.remove(globalEnvTarget);
final boolean saveChanges = saveGlobalEnv;
// save specified documents and then quit
sourceShim.handleUnsavedChangesBeforeExit(saveTargets, new Command() {
@Override
public void execute() {
quitContext.onReadyToQuit(saveChanges);
}
});
}
}, // no cancel operation
null).showModal();
}
}
use of org.rstudio.studio.client.workbench.model.UnsavedChangesItem in project rstudio by rstudio.
the class SourceWindow method saveWithPrompt.
private void saveWithPrompt(JavaScriptObject jsoItem, Command onCompleted) {
UnsavedChangesItem item = jsoItem.cast();
sourceShim_.saveWithPrompt(item, onCompleted, null);
}
Aggregations