Dave Jarvis' Repositories

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

save and restore opened files

AuthorKarl Tauber <email>
Date2015-07-24 18:43:05 GMT+0200
Commit42da8236a81a6ce09ca66a677f886eff5bf552fe
Parente4c1139
Delta78 lines added, 7 lines removed, 71-line increase
src/main/java/org/markdownwriterfx/util/Utils.java
package org.markdownwriterfx.util;
+import java.util.ArrayList;
import java.util.Set;
+import java.util.prefs.Preferences;
import javafx.geometry.Orientation;
import javafx.scene.Node;
import javafx.scene.control.ScrollBar;
/**
* @author Karl Tauber
*/
public class Utils
{
+ public static String[] getPrefsStrings(Preferences prefs, String key) {
+ ArrayList<String> arr = new ArrayList<String>();
+ for (int i = 0; i < 10000; i++) {
+ String s = prefs.get(key + (i + 1), null);
+ if (s == null)
+ break;
+ arr.add(s);
+ }
+ return arr.toArray(new String[arr.size()]);
+ }
+
+ public static void putPrefsStrings(Preferences prefs, String key, String[] strings) {
+ for (int i = 0; i < strings.length; i++)
+ prefs.put(key + (i + 1), strings[i]);
+
+ for (int i = strings.length; prefs.get(key + (i + 1), null) != null; i++)
+ prefs.remove(key + (i + 1));
+ }
+
public static ScrollBar findVScrollBar(Node node) {
Set<Node> scrollBars = node.lookupAll(".scroll-bar");
src/main/java/org/markdownwriterfx/FileEditorTabPane.java
import java.io.File;
import java.nio.file.Path;
+import java.util.ArrayList;
import java.util.List;
+import java.util.prefs.Preferences;
import javafx.beans.property.ReadOnlyBooleanProperty;
import javafx.beans.property.ReadOnlyBooleanWrapper;
import javafx.stage.FileChooser;
import javafx.stage.FileChooser.ExtensionFilter;
+import org.markdownwriterfx.util.Utils;
/**
}
});
+
+ // re-open files
+ restoreState();
}
return null;
- FileEditor[] fileEditors = new FileEditor[selectedFiles.size()];
- for (int i = 0; i < selectedFiles.size(); i++) {
- fileEditors[i] = createFileEditor(selectedFiles.get(i).toPath());
+ return openEditors(selectedFiles, 0);
+ }
+
+ FileEditor[] openEditors(List<File> files, int activeIndex) {
+ FileEditor[] fileEditors = new FileEditor[files.size()];
+ for (int i = 0; i < files.size(); i++) {
+ fileEditors[i] = createFileEditor(files.get(i).toPath());
Tab tab = fileEditors[i].getTab();
tabPane.getTabs().add(tab);
// select first file
- if (i == 0)
+ if (i == activeIndex)
tabPane.getSelectionModel().select(tab);
}
return false;
}
+
+ saveState(allEditors, activeEditor);
return tabPane.getTabs().isEmpty();
fileChooser.setInitialDirectory(new File("."));
return fileChooser;
+ }
+
+ private void restoreState() {
+ Preferences state = MarkdownWriterFXApp.getState();
+ String[] fileNames = Utils.getPrefsStrings(state, "file");
+ String activeFileName = state.get("activeFile", null);
+
+ int activeIndex = 0;
+ ArrayList<File> files = new ArrayList<>(fileNames.length);
+ for (String fileName : fileNames) {
+ File file = new File(fileName);
+ if (file.exists()) {
+ files.add(file);
+
+ if (fileName.equals(activeFileName))
+ activeIndex = files.size() - 1;
+ }
+ }
+
+ if (files.isEmpty()) {
+ newEditor();
+ return;
+ }
+
+ openEditors(files, activeIndex);
+ }
+
+ private void saveState(FileEditor[] allEditors, FileEditor activeEditor) {
+ ArrayList<String> fileNames = new ArrayList<>(allEditors.length);
+ for (FileEditor fileEditor : allEditors) {
+ if (fileEditor.getPath() != null)
+ fileNames.add(fileEditor.getPath().toString());
+ }
+
+ Preferences state = MarkdownWriterFXApp.getState();
+ Utils.putPrefsStrings(state, "file", fileNames.toArray(new String[fileNames.size()]));
+ if (activeEditor != null && activeEditor.getPath() != null)
+ state.put("activeFile", activeEditor.getPath().toString());
+ else
+ state.remove("activeFile");
}
}
src/main/java/org/markdownwriterfx/MainWindow.java
private final FileEditorTabPane fileEditorTabPane;
- public MainWindow() {
+ MainWindow() {
fileEditorTabPane = new FileEditorTabPane(this);
});
});
-
- fileNew();
}