Fix options not updating after different tries

This commit is contained in:
SiboVG 2023-04-07 01:47:29 +02:00
parent abb742bcc6
commit 0f09497275
2 changed files with 39 additions and 19 deletions

View File

@ -18,6 +18,9 @@ public class PreferencesOptionPanel extends JPanel {
private static final Translator trans = Application.getTranslator();
private static final Preferences prefs = Application.getPreferences();
private final JCheckBox exportUserDirectories;
private final JCheckBox exportWindowInfo;
public PreferencesOptionPanel() {
super(new MigLayout("fill, ins 0"));
@ -25,7 +28,7 @@ public class PreferencesOptionPanel extends JPanel {
panel.setBorder(BorderFactory.createTitledBorder(trans.get("PreferencesOptionPanel.title")));
// Export user directories
JCheckBox exportUserDirectories = new JCheckBox(trans.get("PreferencesOptionPanel.checkbox.userDirectories"));
exportUserDirectories = new JCheckBox(trans.get("PreferencesOptionPanel.checkbox.userDirectories"));
exportUserDirectories.setToolTipText(trans.get("PreferencesOptionPanel.checkbox.userDirectories.ttip"));
exportUserDirectories.setSelected(prefs.getExportUserDirectories());
exportUserDirectories.addItemListener(new ItemListener() {
@ -37,7 +40,7 @@ public class PreferencesOptionPanel extends JPanel {
panel.add(exportUserDirectories, "wrap");
// Export window information (position, size...)
JCheckBox exportWindowInfo = new JCheckBox(trans.get("PreferencesOptionPanel.checkbox.windowInfo"));
exportWindowInfo = new JCheckBox(trans.get("PreferencesOptionPanel.checkbox.windowInfo"));
exportWindowInfo.setToolTipText(trans.get("PreferencesOptionPanel.checkbox.windowInfo.ttip"));
exportWindowInfo.setSelected(prefs.getExportWindowInformation());
exportWindowInfo.addItemListener(new ItemListener() {
@ -51,4 +54,12 @@ public class PreferencesOptionPanel extends JPanel {
this.add(panel, "growx, north");
}
public boolean isIgnoreUserDirectories() {
return !exportUserDirectories.isSelected();
}
public boolean isIgnoreWindowInformation() {
return !exportWindowInfo.isSelected();
}
}

View File

@ -44,29 +44,14 @@ public abstract class PreferencesExporter {
private static final List<String> prefixKeysToIgnore = new ArrayList<>(); // Preference keys to ignore when exporting user directories (= keys that start with these prefixes), e.g.
private static final List<String> nodesToIgnore = new ArrayList<>(); // Preferences nodes that should not be exported
static {
if (!prefs.getExportUserDirectories()) {
keysToIgnore.add(net.sf.openrocket.startup.Preferences.USER_THRUST_CURVES_KEY);
keysToIgnore.add(net.sf.openrocket.startup.Preferences.DEFAULT_DIRECTORY);
prefixKeysToIgnore.add(MRUDesignFile.MRU_FILE_LIST_PROPERTY);
}
if (!prefs.getExportWindowInformation()) {
nodesToIgnore.add(SwingPreferences.NODE_WINDOWS);
nodesToIgnore.add(SwingPreferences.NODE_TABLES);
}
keysToIgnore.add(SwingPreferences.UPDATE_PLATFORM); // Don't export platform-specific settings
}
public static boolean exportPreferences(Window parent, Preferences preferences) {
JFileChooser chooser = new SaveFileChooser();
chooser.setDialogTitle(trans.get("PreferencesExporter.chooser.title"));
chooser.setAcceptAllFileFilterUsed(false);
chooser.setFileFilter(FileHelper.XML_FILTER);
chooser.setCurrentDirectory(((SwingPreferences) Application.getPreferences()).getDefaultDirectory());
chooser.setAccessory(new PreferencesOptionPanel());
PreferencesOptionPanel options = new PreferencesOptionPanel();
chooser.setAccessory(options);
// TODO: update this dynamically instead of hard-coded values
// The macOS file chooser has an issue where it does not update its size when the accessory is added.
@ -96,6 +81,11 @@ public abstract class PreferencesExporter {
return false;
}
// Decide which keys/nodes to ignore
boolean ignoreUserDirectories = options.isIgnoreUserDirectories();
boolean ignoreWindowInformation = options.isIgnoreWindowInformation();
fillIgnoreKeys(ignoreUserDirectories, ignoreWindowInformation);
try (FileOutputStream fos = new FileOutputStream(newFile)) {
if (keysToIgnore.isEmpty() && nodesToIgnore.isEmpty() && prefixKeysToIgnore.isEmpty()) {
// Export all preferences
@ -112,6 +102,25 @@ public abstract class PreferencesExporter {
return true;
}
private static void fillIgnoreKeys(boolean ignoreUserDirectories, boolean ignoreWindowInformation) {
keysToIgnore.clear();
prefixKeysToIgnore.clear();
nodesToIgnore.clear();
if (ignoreUserDirectories) {
keysToIgnore.add(net.sf.openrocket.startup.Preferences.USER_THRUST_CURVES_KEY);
keysToIgnore.add(net.sf.openrocket.startup.Preferences.DEFAULT_DIRECTORY);
prefixKeysToIgnore.add(MRUDesignFile.MRU_FILE_LIST_PROPERTY);
}
if (ignoreWindowInformation) {
nodesToIgnore.add(SwingPreferences.NODE_WINDOWS);
nodesToIgnore.add(SwingPreferences.NODE_TABLES);
}
keysToIgnore.add(SwingPreferences.UPDATE_PLATFORM); // Don't export platform-specific settings
}
private static void exportFilteredPreferences(Preferences preferences, FileOutputStream fos) throws BackingStoreException, IOException {
// Filter out user directories
Preferences root = Preferences.userRoot();