From 0f094972751b662af42e5e5551bd1c33af23cce8 Mon Sep 17 00:00:00 2001 From: SiboVG Date: Fri, 7 Apr 2023 01:47:29 +0200 Subject: [PATCH] Fix options not updating after different tries --- .../components/PreferencesOptionPanel.java | 15 ++++++- .../gui/util/PreferencesExporter.java | 43 +++++++++++-------- 2 files changed, 39 insertions(+), 19 deletions(-) diff --git a/swing/src/net/sf/openrocket/gui/components/PreferencesOptionPanel.java b/swing/src/net/sf/openrocket/gui/components/PreferencesOptionPanel.java index 63790e681..a87e7a19b 100644 --- a/swing/src/net/sf/openrocket/gui/components/PreferencesOptionPanel.java +++ b/swing/src/net/sf/openrocket/gui/components/PreferencesOptionPanel.java @@ -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(); + } } diff --git a/swing/src/net/sf/openrocket/gui/util/PreferencesExporter.java b/swing/src/net/sf/openrocket/gui/util/PreferencesExporter.java index 1dc895587..ab40b7114 100644 --- a/swing/src/net/sf/openrocket/gui/util/PreferencesExporter.java +++ b/swing/src/net/sf/openrocket/gui/util/PreferencesExporter.java @@ -44,29 +44,14 @@ public abstract class PreferencesExporter { private static final List prefixKeysToIgnore = new ArrayList<>(); // Preference keys to ignore when exporting user directories (= keys that start with these prefixes), e.g. private static final List 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();