1
0
Fork 0
mirror of https://gitlab.com/kauron/jstudy synced 2024-11-13 07:33:44 +01:00

Settings: shortened code to load/save preferences

This commit is contained in:
Carlos Galindo 2019-09-10 18:51:25 +02:00
parent 54bcedbef1
commit 8b41dff1c5
Signed by: kauron
GPG key ID: 83E68706DEE119A3
7 changed files with 73 additions and 61 deletions

View file

@ -1,6 +1,6 @@
package es.kauron.jstudy; package es.kauron.jstudy;
import es.kauron.jstudy.model.AppConfig; import es.kauron.jstudy.model.AppPrefs;
import javafx.application.Application; import javafx.application.Application;
import javafx.fxml.FXMLLoader; import javafx.fxml.FXMLLoader;
import javafx.scene.Parent; import javafx.scene.Parent;
@ -12,13 +12,12 @@ public class Main extends Application {
@Override @Override
public void start(Stage primaryStage) throws Exception{ public void start(Stage primaryStage) throws Exception{
AppConfig.load();
Parent root = FXMLLoader.load(Main.class.getResource("view/main.fxml")); Parent root = FXMLLoader.load(Main.class.getResource("view/main.fxml"));
primaryStage.setTitle("JStudy"); primaryStage.setTitle("JStudy");
primaryStage.getIcons().add(new Image(Main.class.getResourceAsStream("img/icon.png"))); primaryStage.getIcons().add(new Image(Main.class.getResourceAsStream("img/icon.png")));
primaryStage.setScene(new Scene(root)); primaryStage.setScene(new Scene(root));
primaryStage.show(); primaryStage.show();
primaryStage.setOnHiding(event -> AppConfig.save()); primaryStage.setOnHiding(event -> AppPrefs.save());
} }

View file

@ -1,7 +1,7 @@
package es.kauron.jstudy.controller; package es.kauron.jstudy.controller;
import es.kauron.jstudy.Main; import es.kauron.jstudy.Main;
import es.kauron.jstudy.model.AppConfig; import es.kauron.jstudy.model.AppPrefs;
import es.kauron.jstudy.model.TestItem; import es.kauron.jstudy.model.TestItem;
import javafx.application.Platform; import javafx.application.Platform;
import javafx.beans.property.BooleanProperty; import javafx.beans.property.BooleanProperty;
@ -93,10 +93,10 @@ public class Controller implements Initializable {
private void onLoadAction(ActionEvent event) { private void onLoadAction(ActionEvent event) {
FileChooser chooser = new FileChooser(); FileChooser chooser = new FileChooser();
chooser.getExtensionFilters().add(new FileChooser.ExtensionFilter("JStudy file", "*.jsdb")); chooser.getExtensionFilters().add(new FileChooser.ExtensionFilter("JStudy file", "*.jsdb"));
if (AppConfig.lastDir != null && AppConfig.lastDir.exists()) chooser.setInitialDirectory(AppConfig.lastDir); if (AppPrefs.lastDir != null && AppPrefs.lastDir.exists()) chooser.setInitialDirectory(AppPrefs.lastDir);
List<File> list = chooser.showOpenMultipleDialog(root.getScene().getWindow()); List<File> list = chooser.showOpenMultipleDialog(root.getScene().getWindow());
if (list == null || list.isEmpty()) return; if (list == null || list.isEmpty()) return;
AppConfig.lastDir = list.get(0).getParentFile(); AppPrefs.lastDir = list.get(0).getParentFile();
if (list.size() > 1) { if (list.size() > 1) {
ButtonType mergeBT = new ButtonType("Merge", ButtonBar.ButtonData.APPLY); ButtonType mergeBT = new ButtonType("Merge", ButtonBar.ButtonData.APPLY);
ButtonType openBT = new ButtonType("Open", ButtonBar.ButtonData.OK_DONE); ButtonType openBT = new ButtonType("Open", ButtonBar.ButtonData.OK_DONE);
@ -138,10 +138,10 @@ public class Controller implements Initializable {
private void onImportAction(ActionEvent event) { private void onImportAction(ActionEvent event) {
FileChooser chooser = new FileChooser(); FileChooser chooser = new FileChooser();
chooser.getExtensionFilters().add(new FileChooser.ExtensionFilter("Data files (.csv, .txt)", "*.csv", "*.txt")); chooser.getExtensionFilters().add(new FileChooser.ExtensionFilter("Data files (.csv, .txt)", "*.csv", "*.txt"));
if (AppConfig.lastDir != null) chooser.setInitialDirectory(AppConfig.lastDir); if (AppPrefs.lastDir != null) chooser.setInitialDirectory(AppPrefs.lastDir);
File file = chooser.showOpenDialog(root.getScene().getWindow()); File file = chooser.showOpenDialog(root.getScene().getWindow());
if (file == null) return; if (file == null) return;
AppConfig.lastDir = file.getParentFile(); AppPrefs.lastDir = file.getParentFile();
String separator; String separator;
if (file.getName().matches(".*txt")) if (file.getName().matches(".*txt"))
separator = TestItem.TAB; separator = TestItem.TAB;

View file

@ -1,7 +1,7 @@
package es.kauron.jstudy.controller; package es.kauron.jstudy.controller;
import com.jfoenix.controls.JFXCheckBox; import com.jfoenix.controls.JFXCheckBox;
import es.kauron.jstudy.model.AppConfig; import es.kauron.jstudy.model.AppPrefs;
import javafx.fxml.FXML; import javafx.fxml.FXML;
import javafx.fxml.Initializable; import javafx.fxml.Initializable;
@ -15,9 +15,9 @@ public class SettingsController implements Initializable {
@Override @Override
public void initialize(URL location, ResourceBundle resources) { public void initialize(URL location, ResourceBundle resources) {
repeatImmediately.disableProperty().bind(repeatMistakes.selectedProperty().not()); repeatImmediately.disableProperty().bind(repeatMistakes.selectedProperty().not());
repeatImmediately.selectedProperty().bindBidirectional(AppConfig.repeatImmediately); repeatImmediately.selectedProperty().bindBidirectional(AppPrefs.repeatImmediately);
repeatMistakes.selectedProperty().bindBidirectional(AppConfig.repeatWrong); repeatMistakes.selectedProperty().bindBidirectional(AppPrefs.repeatWrong);
showFeedback.selectedProperty().bindBidirectional(AppConfig.showFeedback); showFeedback.selectedProperty().bindBidirectional(AppPrefs.showFeedback);
repeatMistakes.selectedProperty().addListener((obj, o, n) -> { repeatMistakes.selectedProperty().addListener((obj, o, n) -> {
if (!n) repeatImmediately.setSelected(false); if (!n) repeatImmediately.setSelected(false);
}); });

View file

@ -1,7 +1,7 @@
package es.kauron.jstudy.controller; package es.kauron.jstudy.controller;
import es.kauron.jstudy.Main; import es.kauron.jstudy.Main;
import es.kauron.jstudy.model.AppConfig; import es.kauron.jstudy.model.AppPrefs;
import es.kauron.jstudy.model.TestItem; import es.kauron.jstudy.model.TestItem;
import javafx.beans.property.BooleanProperty; import javafx.beans.property.BooleanProperty;
import javafx.beans.property.SimpleBooleanProperty; import javafx.beans.property.SimpleBooleanProperty;
@ -75,13 +75,13 @@ public class TableController implements Initializable {
if (file == null) { if (file == null) {
FileChooser chooser = new FileChooser(); FileChooser chooser = new FileChooser();
chooser.getExtensionFilters().add(new FileChooser.ExtensionFilter("JStudy file", "*.jsdb")); chooser.getExtensionFilters().add(new FileChooser.ExtensionFilter("JStudy file", "*.jsdb"));
if (AppConfig.lastDir != null) chooser.setInitialDirectory(AppConfig.lastDir); if (AppPrefs.lastDir != null) chooser.setInitialDirectory(AppPrefs.lastDir);
chooser.setInitialFileName(name); chooser.setInitialFileName(name);
file = chooser.showSaveDialog(table.getScene().getWindow()); file = chooser.showSaveDialog(table.getScene().getWindow());
if (!file.getName().endsWith(".jsdb")) if (!file.getName().endsWith(".jsdb"))
file = new File(file.getPath() + ".jsdb"); file = new File(file.getPath() + ".jsdb");
if (file != null) if (file != null)
AppConfig.lastDir = file.getParentFile(); AppPrefs.lastDir = file.getParentFile();
} }
if (file == null) return; if (file == null) return;
TestItem.saveTo(file, data); TestItem.saveTo(file, data);

View file

@ -1,6 +1,6 @@
package es.kauron.jstudy.controller; package es.kauron.jstudy.controller;
import es.kauron.jstudy.model.AppConfig; import es.kauron.jstudy.model.AppPrefs;
import es.kauron.jstudy.model.TestItem; import es.kauron.jstudy.model.TestItem;
import javafx.beans.property.SimpleBooleanProperty; import javafx.beans.property.SimpleBooleanProperty;
import javafx.event.ActionEvent; import javafx.event.ActionEvent;
@ -65,7 +65,7 @@ public class TestController implements Initializable {
} }
// Remove the question from the pool if the question was correctly answered or there is no repetition // Remove the question from the pool if the question was correctly answered or there is no repetition
if ((right && !correctingError.get()) || !AppConfig.repeatWrong.get()) { if ((right && !correctingError.get()) || !AppPrefs.repeatWrong.get()) {
list.remove(current); list.remove(current);
progress.setProgress(++done / (double) total); progress.setProgress(++done / (double) total);
progressLabel.setText(done + "/" + total); progressLabel.setText(done + "/" + total);
@ -74,10 +74,10 @@ public class TestController implements Initializable {
return; return;
} }
chooseQuestion(); chooseQuestion();
} else if (!AppConfig.repeatImmediately.get()) { } else if (!AppPrefs.repeatImmediately.get()) {
chooseQuestion(); chooseQuestion();
} }
correctingError.set(!right && AppConfig.repeatImmediately.get()); correctingError.set(!right && AppPrefs.repeatImmediately.get());
setQuestion(); setQuestion();
} }

View file

@ -1,42 +0,0 @@
package es.kauron.jstudy.model;
import javafx.beans.property.BooleanProperty;
import javafx.beans.property.SimpleBooleanProperty;
import java.io.File;
import java.util.prefs.BackingStoreException;
import java.util.prefs.Preferences;
public class AppConfig {
public static BooleanProperty repeatWrong, showFeedback, repeatImmediately;
public static File lastDir;
public static void save() {
Preferences prefs = Preferences.userRoot();
prefs.putBoolean("repeatWrong", repeatWrong.get());
prefs.putBoolean("showFeedback", showFeedback.get());
prefs.putBoolean("repeatImmediately", repeatImmediately.get());
prefs.put("lastDir", lastDir == null ? "" : lastDir.getAbsolutePath());
try {
prefs.flush();
} catch (BackingStoreException e) {
e.printStackTrace();
}
}
public static void load() {
Preferences prefs = Preferences.userRoot();
repeatWrong = new SimpleBooleanProperty(prefs.getBoolean("repeatWrong", true));
showFeedback = new SimpleBooleanProperty(prefs.getBoolean("showFeedback", true));
repeatImmediately = new SimpleBooleanProperty(prefs.getBoolean("repeatImmediately", false));
repeatWrong.addListener((obj, o, n) -> save());
showFeedback.addListener((obj, o, n) -> save());
repeatImmediately.addListener((obj, o, n) -> save());
String dirPath = prefs.get("lastDir", "");
if (!dirPath.isEmpty()) lastDir = new File(dirPath);
}
public static String printValues() {
return String.format("repeatWrong=%b\nshowFeedback=%b", repeatWrong, showFeedback);
}
}

View file

@ -0,0 +1,55 @@
package es.kauron.jstudy.model;
import javafx.beans.property.SimpleBooleanProperty;
import java.io.File;
import java.util.prefs.BackingStoreException;
import java.util.prefs.Preferences;
public class AppPrefs {
private static final Preferences prefs = Preferences.userRoot();
public static final BooleanPref repeatWrong = new BooleanPref(false, "repeatWrong");
public static final BooleanPref showFeedback = new BooleanPref(true, "showFeedback");
public static final BooleanPref repeatImmediately = new BooleanPref(false, "repeatImmediately");
public static File lastDir;
static {
// Load data (booleanprefs are loaded automatically)
String dirPath = prefs.get("lastDir", "");
if (!dirPath.isEmpty()) lastDir = new File(dirPath);
}
private static void flushPrefs() {
try {
prefs.flush();
} catch (BackingStoreException e) {
e.printStackTrace();
}
}
public static void save() {
Preferences prefs = Preferences.userRoot();
prefs.put("lastDir", lastDir == null ? "" : lastDir.getAbsolutePath());
flushPrefs();
}
public static String printValues() {
return String.format("repeatWrong=%b\nshowFeedback=%b", repeatWrong, showFeedback);
}
public static class BooleanPref extends SimpleBooleanProperty {
private final String name;
BooleanPref(boolean defValue, String name) {
super(defValue);
this.name = name;
set(prefs.getBoolean(name, defValue));
addListener((obj, o, n) -> this.save());
}
void save() {
prefs.putBoolean(name, get());
flushPrefs();
}
}
}