Fix options not updating after different tries
This commit is contained in:
parent
abb742bcc6
commit
0f09497275
@ -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();
|
||||
}
|
||||
}
|
||||
|
@ -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();
|
||||
|
Loading…
x
Reference in New Issue
Block a user