From 25a234971519e5c6add6eb8f5dcab18bebe26f72 Mon Sep 17 00:00:00 2001 From: gered Date: Sat, 28 Jan 2017 15:13:24 -0500 Subject: [PATCH] add setting for specifying a custom default splits path probably not terribly useful for most people, but for those like me who keep their splits in Dropbox, it is handy --- src/main/java/org/fenix/llanfair/Actions.java | 7 +- .../java/org/fenix/llanfair/Language.java | 4 ++ .../org/fenix/llanfair/config/Settings.java | 4 ++ .../org/fenix/llanfair/dialog/TabGeneral.java | 66 +++++++++++++++++++ .../java/org/fenix/utils/UserSettings.java | 16 ++++- src/main/resources/language.properties | 4 ++ 6 files changed, 95 insertions(+), 6 deletions(-) diff --git a/src/main/java/org/fenix/llanfair/Actions.java b/src/main/java/org/fenix/llanfair/Actions.java index b7533d0..b251f47 100644 --- a/src/main/java/org/fenix/llanfair/Actions.java +++ b/src/main/java/org/fenix/llanfair/Actions.java @@ -56,7 +56,7 @@ final class Actions { master = owner; file = null; - fileChooser = new JFileChooser(UserSettings.getSplitsPath()); + fileChooser = new JFileChooser(UserSettings.getSplitsPath(this.file)); fileChooser.setFileFilter(new FileNameExtensionFilter("" + Language.RUN_FILE_FILTER, "lfs")); lastUnsplit = 0L; @@ -254,10 +254,7 @@ final class Actions { private File selectFile(FILE_CHOOSER_TYPE dialogType) { int action = -1; - if (this.file == null) - fileChooser.setCurrentDirectory(new File(UserSettings.getSplitsPath())); - else - fileChooser.setCurrentDirectory(this.file); + fileChooser.setCurrentDirectory(new File(UserSettings.getSplitsPath(this.file))); if (dialogType == FILE_CHOOSER_TYPE.OPEN) action = fileChooser.showOpenDialog(master); diff --git a/src/main/java/org/fenix/llanfair/Language.java b/src/main/java/org/fenix/llanfair/Language.java index c953481..c28a32d 100644 --- a/src/main/java/org/fenix/llanfair/Language.java +++ b/src/main/java/org/fenix/llanfair/Language.java @@ -19,6 +19,8 @@ public enum Language { // Settings > Generic setting_alwaysOnTop, + setting_useDefaultSplitsPath, + setting_customSplitsPath, setting_language, setting_viewerLanguage, setting_recentFiles, @@ -145,6 +147,7 @@ public enum Language { error_import_run, error_window_width, error_max_recent_files, + error_splits_path, // Actions action_accept, @@ -252,6 +255,7 @@ public enum Language { RUN_FILE_FILTER, SEGMENT, SEGMENTS, + SELECT_SPLITS_DIR, SPLIT, TIME, UNTITLED, diff --git a/src/main/java/org/fenix/llanfair/config/Settings.java b/src/main/java/org/fenix/llanfair/config/Settings.java index da3d1b1..fd4a3f8 100644 --- a/src/main/java/org/fenix/llanfair/config/Settings.java +++ b/src/main/java/org/fenix/llanfair/config/Settings.java @@ -40,6 +40,8 @@ public class Settings { public static final Property warnOnReset = new Property<>( "warnOnReset" ); public static final Property windowUserResizable = new Property<>( "windowUserResizable" ); public static final Property windowWidth = new Property<>( "windowWidth" ); + public static final Property useDefaultSplitsPath = new Property<>( "useDefaultSplitsPath" ); + public static final Property customSplitsPath = new Property<>( "customSplitsPath" ); /* COLOR properties */ @@ -222,6 +224,8 @@ public class Settings { setDefault( warnOnReset.key, true, force ); setDefault( windowUserResizable.key, true, force ); setDefault( windowWidth.key, null, force ); + setDefault( useDefaultSplitsPath.key, true, force ); + setDefault( customSplitsPath.key, null, force ); setDefault( colorBackground.key, Color.decode("0x000000"), force ); setDefault( colorForeground.key, Color.decode( "0xc0c0c0" ), force ); diff --git a/src/main/java/org/fenix/llanfair/dialog/TabGeneral.java b/src/main/java/org/fenix/llanfair/dialog/TabGeneral.java index 605ce55..7c2421a 100644 --- a/src/main/java/org/fenix/llanfair/dialog/TabGeneral.java +++ b/src/main/java/org/fenix/llanfair/dialog/TabGeneral.java @@ -5,12 +5,14 @@ import org.fenix.llanfair.Llanfair; import org.fenix.llanfair.config.Accuracy; import org.fenix.llanfair.config.Compare; import org.fenix.llanfair.config.Settings; +import org.fenix.utils.UserSettings; import org.fenix.utils.gui.GBC; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import java.io.File; import java.util.Enumeration; import java.util.Locale; @@ -30,6 +32,12 @@ public class TabGeneral extends SettingsTab implements ActionListener { private JLabel alwaysOnTopText; + private JCheckBox useDefaultSplitsPath; + + private JTextField customSplitsPath; + + private JButton selectCustomSplitsPath; + private ButtonGroup compare; private JLabel compareText; @@ -63,6 +71,22 @@ public class TabGeneral extends SettingsTab implements ActionListener { alwaysOnTop = new JCheckBox("" + Language.setting_alwaysOnTop); alwaysOnTop.setSelected(Settings.alwaysOnTop.get()); + useDefaultSplitsPath = new JCheckBox("" + Language.setting_useDefaultSplitsPath); + useDefaultSplitsPath.setSelected(Settings.useDefaultSplitsPath.get()); + useDefaultSplitsPath.addActionListener(this); + + String path = UserSettings.getSplitsPath(null); + if (path == null) + path = ""; + + customSplitsPath = new JTextField(path); + customSplitsPath.setEnabled(!Settings.useDefaultSplitsPath.get()); + customSplitsPath.setColumns(30); + + selectCustomSplitsPath = new JButton("" + Language.SELECT_SPLITS_DIR); + selectCustomSplitsPath.addActionListener(this); + selectCustomSplitsPath.setEnabled(!Settings.useDefaultSplitsPath.get()); + compare = new ButtonGroup(); Compare setCmp = Settings.compareMethod.get(); for (Compare method : Compare.values()) { @@ -133,6 +157,24 @@ public class TabGeneral extends SettingsTab implements ActionListener { Settings.warnOnReset.set(warnOnReset.isSelected()); } else if (source.equals(windowUserResizable)) { windowSize.setEnabled(!windowUserResizable.isSelected()); + } else if (source.equals(useDefaultSplitsPath)) { + Settings.useDefaultSplitsPath.set(useDefaultSplitsPath.isSelected()); + if (useDefaultSplitsPath.isEnabled()) + Settings.customSplitsPath.set(null); + String path = UserSettings.getSplitsPath(null); + if (path == null) + path = ""; + customSplitsPath.setText(path); + boolean enabled = !Settings.useDefaultSplitsPath.get(); + customSplitsPath.setEnabled(enabled); + selectCustomSplitsPath.setEnabled(enabled); + } else if (source.equals(selectCustomSplitsPath)) { + JFileChooser chooser = new JFileChooser(); + chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); + int action = chooser.showOpenDialog(this); + if (action == JFileChooser.APPROVE_OPTION) { + customSplitsPath.setText(chooser.getSelectedFile().toString()); + } } } @@ -164,6 +206,14 @@ public class TabGeneral extends SettingsTab implements ActionListener { } Settings.maxRecentFiles.set(numRecentFiles); + + if (!Settings.useDefaultSplitsPath.get()) { + String path = customSplitsPath.getText().trim(); + if (!new File(path).exists()) { + throw new InvalidSettingException(this, customSplitsPath, "" + Language.error_splits_path); + } + Settings.customSplitsPath.set(path); + } } /** @@ -187,6 +237,22 @@ public class TabGeneral extends SettingsTab implements ActionListener { add(alwaysOnTop, GBC.grid(1, 0).anchor(GBC.LINE_START)); add(warnOnReset, GBC.grid(1, 1).anchor(GBC.LINE_START)); + JPanel panelSplitsPath = new JPanel(new GridBagLayout()); { + panelSplitsPath.add( + useDefaultSplitsPath, + GBC.grid(0, 0, 2, 1).anchor(GBC.LINE_START) + ); + panelSplitsPath.add( + customSplitsPath, + GBC.grid(0, 1).anchor(GBC.LINE_START).insets(0, 5) + ); + panelSplitsPath.add( + selectCustomSplitsPath, + GBC.grid(1, 1).anchor(GBC.LINE_START) + ); + }; + add(panelSplitsPath, GBC.grid(1, 2).anchor(GBC.LINE_START)); + //add(languageText, GBC.grid(0, 2).anchor(GBC.LINE_END).insets(10, 10)); //add(language, GBC.grid(1, 2).fill(GBC.HORIZONTAL)); diff --git a/src/main/java/org/fenix/utils/UserSettings.java b/src/main/java/org/fenix/utils/UserSettings.java index ceb1729..23bdeb1 100644 --- a/src/main/java/org/fenix/utils/UserSettings.java +++ b/src/main/java/org/fenix/utils/UserSettings.java @@ -1,5 +1,7 @@ package org.fenix.utils; +import org.fenix.llanfair.config.Settings; + import java.io.File; public class UserSettings { @@ -31,7 +33,19 @@ public class UserSettings { * Returns the path to the location where splits can be saved in. This is * located as a subdirectory within the user settings directory. */ - public static String getSplitsPath() { + public static String getDefaultSplitsPath() { return splitsPath.getPath(); } + + public static String getSplitsPath(File selectedFile) { + if (selectedFile != null) + return selectedFile.toString(); + else { + if (Settings.useDefaultSplitsPath.get()) + return UserSettings.getDefaultSplitsPath(); + else + return Settings.customSplitsPath.get(); + } + } + } diff --git a/src/main/resources/language.properties b/src/main/resources/language.properties index 12dc2f1..66d6ae2 100644 --- a/src/main/resources/language.properties +++ b/src/main/resources/language.properties @@ -1,5 +1,7 @@ # Settings > Generic setting_alwaysOnTop = Always on Top +setting_useDefaultSplitsPath = Use Default Splits Directory +setting_customSplitsPath = Splits Directory setting_language = Language setting_viewerLanguage = Viewer's Language setting_recentFiles = @@ -126,6 +128,7 @@ error_write_file = You do not have permission to write in that folder. error_import_run = "{0}" isn't a recognized run file. error_window_width = Window Width must be a positive integer. error_max_recent_files = Recent files limit must be a positive integer. +error_splits_path = Splits Directory cannot be read or does not exist. # Actions action_accept = @@ -226,6 +229,7 @@ RUN_TITLE = Run Title RUN_FILE_FILTER = Llanfair Run Splits SEGMENT = Time (Segment) SEGMENTS = Segments +SELECT_SPLITS_DIR = Choose ... SPLIT = Split: TIME = Time (Split) UNTITLED =