Dave Jarvis' Repositories

git clone https://repo.autonoma.ca/repo/keenwrite.git

improved user experience of saving all modified tabs and closing all tabs (no longer close unmodified tabs before saving modified tabs)

AuthorKarl Tauber <email>
Date2015-12-30 14:44:44 GMT+0100
Commita914014c248c8167157e54b137b1adc193f5e046
Parent1d7b732
Delta33 lines added, 22 lines removed, 11-line increase
src/main/java/org/markdownwriterfx/FileEditor.java
} catch (IOException ex) {
Alert alert = mainWindow.createAlert(AlertType.ERROR, "Load",
- "Failed to load '%s'.\n\nReason: %s", path, ex.getMessage());
+ "Failed to load ''{0}''.\n\nReason: {1}", path, ex.getMessage());
alert.showAndWait();
}
} catch (IOException ex) {
Alert alert = mainWindow.createAlert(AlertType.ERROR, "Save",
- "Failed to save '%s'.\n\nReason: %s", path.get(), ex.getMessage());
+ "Failed to save ''{0}''.\n\nReason: {1}", path.get(), ex.getMessage());
alert.showAndWait();
return false;
src/main/java/org/markdownwriterfx/FileEditorTabPane.java
FileEditor fileEditor = (FileEditor) tabPane.getTabs().get(0).getUserData();
if (fileEditor.getPath() == null && !fileEditor.isModified())
- closeEditor(fileEditor);
+ closeEditor(fileEditor, false);
}
Alert alert = mainWindow.createAlert(AlertType.CONFIRMATION, "Close",
- "'%s' has been modified. Save changes?", fileEditor.getTab().getText());
+ "''{0}'' has been modified. Save changes?", fileEditor.getTab().getText());
alert.getButtonTypes().setAll(ButtonType.YES, ButtonType.NO, ButtonType.CANCEL);
ButtonType result = alert.showAndWait().get();
if (result != ButtonType.YES)
return (result == ButtonType.NO);
return saveEditor(fileEditor);
}
- boolean closeEditor(FileEditor fileEditor) {
+ boolean closeEditor(FileEditor fileEditor, boolean save) {
if (fileEditor == null)
return true;
Tab tab = fileEditor.getTab();
- Event event = new Event(tab,tab,Tab.TAB_CLOSE_REQUEST_EVENT);
- Event.fireEvent(tab, event);
- if (event.isConsumed())
- return false;
+ if (save) {
+ Event event = new Event(tab,tab,Tab.TAB_CLOSE_REQUEST_EVENT);
+ Event.fireEvent(tab, event);
+ if (event.isConsumed())
+ return false;
+ }
tabPane.getTabs().remove(tab);
FileEditor activeEditor = activeFileEditor.get();
- // try to close active tab first because in case user decides to cancel,
- // then the other tabs stay open
- if (activeEditor != null && !closeEditor(activeEditor))
+ // try to save active tab first because in case the user decides to cancel,
+ // then it stays active
+ if (activeEditor != null && !canCloseEditor(activeEditor))
return false;
-
- // select first tab
- if (!tabPane.getTabs().isEmpty())
- tabPane.getSelectionModel().select(0);
- // try to close all tabs
- for (FileEditor fileEditor : allEditors) {
+ // save modified tabs
+ for (int i = 0; i < allEditors.length; i++) {
+ FileEditor fileEditor = allEditors[i];
if (fileEditor == activeEditor)
continue;
- if (!closeEditor(fileEditor))
+ if (fileEditor.isModified()) {
+ // activate the modified tab to make its modified content visible to the user
+ tabPane.getSelectionModel().select(i);
+
+ if (!canCloseEditor(fileEditor))
+ return false;
+ }
+ }
+
+ // close all tabs
+ for (FileEditor fileEditor : allEditors) {
+ if (!closeEditor(fileEditor, false))
return false;
}
src/main/java/org/markdownwriterfx/MainWindow.java
package org.markdownwriterfx;
+import java.text.MessageFormat;
+import java.util.function.Function;
import javafx.beans.binding.Bindings;
import javafx.beans.binding.BooleanBinding;
import org.markdownwriterfx.util.ActionUtils;
import static de.jensd.fx.glyphs.fontawesome.FontAwesomeIcon.*;
-import java.util.function.Function;
/**
alert.setTitle(title);
alert.setHeaderText(null);
- alert.setContentText(String.format(contentTextFormat, contentTextArgs));
+ alert.setContentText(MessageFormat.format(contentTextFormat, contentTextArgs));
alert.initOwner(getScene().getWindow());
return alert;
private void fileClose() {
- fileEditorTabPane.closeEditor(fileEditorTabPane.getActiveFileEditor());
+ fileEditorTabPane.closeEditor(fileEditorTabPane.getActiveFileEditor(), true);
}