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
This commit is contained in:
Gered 2017-01-28 15:13:24 -05:00
parent 1b1d8b2330
commit 25a2349715
6 changed files with 95 additions and 6 deletions

View file

@ -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);

View file

@ -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,

View file

@ -40,6 +40,8 @@ public class Settings {
public static final Property<Boolean> warnOnReset = new Property<>( "warnOnReset" );
public static final Property<Boolean> windowUserResizable = new Property<>( "windowUserResizable" );
public static final Property<Integer> windowWidth = new Property<>( "windowWidth" );
public static final Property<Boolean> useDefaultSplitsPath = new Property<>( "useDefaultSplitsPath" );
public static final Property<String> 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 );

View file

@ -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));

View file

@ -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();
}
}
}

View file

@ -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 = <untitled>