diff --git a/core/resources/l10n/messages.properties b/core/resources/l10n/messages.properties index 0a33eaaef..842f0fdc7 100644 --- a/core/resources/l10n/messages.properties +++ b/core/resources/l10n/messages.properties @@ -289,6 +289,8 @@ pref.dlg.lbl.PositiontoinsertStages = Position to insert new stages: pref.dlg.lbl.Confirmdeletion = Confirm deletion of simulations. pref.dlg.checkbox.Runsimulations = Run out-dated simulations when you open the simulation tab. pref.dlg.checkbox.Updateestimates = Update estimated flight parameters in design window +pref.dlg.checkbox.AlwaysOpenLeftmost = Always open leftmost tab when opening a component edit dialog +pref.dlg.checkbox.AlwaysOpenLeftmost.ttip = If checked, a component edit dialog will always pop up with the first tab selected.
If unchecked, the previous selected tab will be used. pref.dlg.lbl.User-definedthrust = User-defined thrust curves: pref.dlg.lbl.Windspeed = Wind speed pref.dlg.Allthrustcurvefiles = All thrust curve files (*.eng; *.rse; *.zip; directories) diff --git a/core/src/net/sf/openrocket/startup/Preferences.java b/core/src/net/sf/openrocket/startup/Preferences.java index dd30d8e60..64f1de5a0 100644 --- a/core/src/net/sf/openrocket/startup/Preferences.java +++ b/core/src/net/sf/openrocket/startup/Preferences.java @@ -67,6 +67,7 @@ public abstract class Preferences implements ChangeSource { // Node names public static final String PREFERRED_THRUST_CURVE_MOTOR_NODE = "preferredThrustCurveMotors"; private static final String AUTO_OPEN_LAST_DESIGN = "AUTO_OPEN_LAST_DESIGN"; + private static final String OPEN_LEFTMOST_DESIGN_TAB = "OPEN_LEFTMOST_DESIGN_TAB"; private static final String SHOW_ROCKSIM_FORMAT_WARNING = "SHOW_ROCKSIM_FORMAT_WARNING"; //Preferences related to 3D graphics @@ -452,6 +453,22 @@ public abstract class Preferences implements ChangeSource { public final boolean isAutoOpenLastDesignOnStartupEnabled() { return this.getBoolean(AUTO_OPEN_LAST_DESIGN, false); } + + /** + * Enable/Disable the opening the leftmost tab on the component design panel, or using the tab that was opened last time. + */ + public final void setAlwaysOpenLeftmostTab(boolean enabled) { + this.putBoolean(OPEN_LEFTMOST_DESIGN_TAB, enabled); + } + + /** + * Answer if the always open leftmost tab is enabled. + * + * @return true if the application should always open the leftmost tab in the component design panel. + */ + public final boolean isAlwaysOpenLeftmostTab() { + return this.getBoolean(OPEN_LEFTMOST_DESIGN_TAB, false); + } /** * Return the OpenRocket unique ID. diff --git a/swing/src/net/sf/openrocket/gui/configdialog/ComponentConfigDialog.java b/swing/src/net/sf/openrocket/gui/configdialog/ComponentConfigDialog.java index e66129c6c..fbf92a046 100644 --- a/swing/src/net/sf/openrocket/gui/configdialog/ComponentConfigDialog.java +++ b/swing/src/net/sf/openrocket/gui/configdialog/ComponentConfigDialog.java @@ -12,6 +12,7 @@ import javax.swing.JDialog; import net.sf.openrocket.document.OpenRocketDocument; import net.sf.openrocket.gui.util.GUIUtil; +import net.sf.openrocket.gui.util.SwingPreferences; import net.sf.openrocket.l10n.Translator; import net.sf.openrocket.rocketcomponent.ComponentChangeEvent; import net.sf.openrocket.rocketcomponent.ComponentChangeListener; @@ -39,6 +40,8 @@ public class ComponentConfigDialog extends JDialog implements ComponentChangeLis private OpenRocketDocument document = null; private RocketComponent component = null; private RocketComponentConfig configurator = null; + + private static String previousSelectedTab = null; // Name of the previous selected tab private final Window parent; private static final Translator trans = Application.getTranslator(); @@ -102,6 +105,9 @@ public class ComponentConfigDialog extends JDialog implements ComponentChangeLis configurator = getDialogContents(); this.setContentPane(configurator); configurator.updateFields(); + + // Set the selected tab + configurator.setSelectedTab(previousSelectedTab); //// configuration setTitle(trans.get("ComponentCfgDlg.configuration1") + " " + component.getComponentName() + " " + trans.get("ComponentCfgDlg.configuration")); @@ -204,11 +210,18 @@ public class ComponentConfigDialog extends JDialog implements ComponentChangeLis * @param document the document to configure. * @param component the component to configure. * @param listeners config listeners for the component + * @param rememberPreviousTab if true, the previous tab will be remembered and used for the new dialog */ public static void showDialog(Window parent, OpenRocketDocument document, - RocketComponent component, List listeners) { - if (dialog != null) + RocketComponent component, List listeners, boolean rememberPreviousTab) { + if (dialog != null) { + previousSelectedTab = dialog.getSelectedTabName(); dialog.dispose(); + } + final SwingPreferences preferences = (SwingPreferences) Application.getPreferences(); + if (preferences.isAlwaysOpenLeftmostTab() || !rememberPreviousTab) { + previousSelectedTab = null; + } dialog = new ComponentConfigDialog(parent, document, component, listeners); dialog.setVisible(true); @@ -220,19 +233,51 @@ public class ComponentConfigDialog extends JDialog implements ComponentChangeLis /** * A singleton configuration dialog. Will create and show a new dialog if one has not * previously been used, or update the dialog and show it if a previous one exists. + * By default, the previous tab is remembered. + * + * @param document the document to configure. + * @param component the component to configure. + * @param listeners config listeners for the component + */ + public static void showDialog(Window parent, OpenRocketDocument document, + RocketComponent component, List listeners) { + ComponentConfigDialog.showDialog(parent, document, component, listeners, true); + } + + /** + * A singleton configuration dialog. Will create and show a new dialog if one has not + * previously been used, or update the dialog and show it if a previous one exists. + * + * @param document the document to configure. + * @param component the component to configure. + * @param rememberPreviousTab if true, the previous tab will be remembered and used for the new dialog + */ + public static void showDialog(Window parent, OpenRocketDocument document, + RocketComponent component, boolean rememberPreviousTab) { + ComponentConfigDialog.showDialog(parent, document, component, null, rememberPreviousTab); + } + + /** + * A singleton configuration dialog. Will create and show a new dialog if one has not + * previously been used, or update the dialog and show it if a previous one exists. + * By default, the previous tab is remembered. * * @param document the document to configure. * @param component the component to configure. */ public static void showDialog(Window parent, OpenRocketDocument document, RocketComponent component) { - ComponentConfigDialog.showDialog(parent, document, component, null); + ComponentConfigDialog.showDialog(parent, document, component, null, true); + } + + static void showDialog(RocketComponent component, List listeners, boolean rememberPreviousTab) { + showDialog(dialog.parent, dialog.document, component, listeners, rememberPreviousTab); } /* package */ static void showDialog(RocketComponent component, List listeners) { - showDialog(dialog.parent, dialog.document, component, listeners); + showDialog(dialog.parent, dialog.document, component, listeners, true); } /* package */ @@ -256,5 +301,13 @@ public class ComponentConfigDialog extends JDialog implements ComponentChangeLis public static boolean isDialogVisible() { return (dialog != null) && (dialog.isVisible()); } + + public String getSelectedTabName() { + if (configurator != null) { + return configurator.getSelectedTabName(); + } else { + return null; + } + } } diff --git a/swing/src/net/sf/openrocket/gui/configdialog/RocketComponentConfig.java b/swing/src/net/sf/openrocket/gui/configdialog/RocketComponentConfig.java index 12ce67e1f..f49741d82 100644 --- a/swing/src/net/sf/openrocket/gui/configdialog/RocketComponentConfig.java +++ b/swing/src/net/sf/openrocket/gui/configdialog/RocketComponentConfig.java @@ -268,6 +268,26 @@ public class RocketComponentConfig extends JPanel { } return subPanel; } + + public String getSelectedTabName() { + if (tabbedPane != null) { + return tabbedPane.getTitleAt(tabbedPane.getSelectedIndex()); + } else { + return ""; + } + } + + public void setSelectedTab(String tabName) { + if (tabbedPane != null) { + for (int i = 0; i < tabbedPane.getTabCount(); i++) { + if (tabbedPane.getTitleAt(i).equals(tabName)) { + tabbedPane.setSelectedIndex(i); + return; + } + } + tabbedPane.setSelectedIndex(0); + } + } protected JPanel instanceablePanel( Instanceable inst ){ JPanel panel = new JPanel( new MigLayout("fill")); diff --git a/swing/src/net/sf/openrocket/gui/dialogs/preferences/DesignPreferencesPanel.java b/swing/src/net/sf/openrocket/gui/dialogs/preferences/DesignPreferencesPanel.java index b877f96e2..08ef4acb1 100644 --- a/swing/src/net/sf/openrocket/gui/dialogs/preferences/DesignPreferencesPanel.java +++ b/swing/src/net/sf/openrocket/gui/dialogs/preferences/DesignPreferencesPanel.java @@ -90,6 +90,21 @@ public class DesignPreferencesPanel extends PreferencesPanel { }); this.add(autoOpenDesignFile, "wrap, growx, span 2"); + // // Always open leftmost tab when opening a component edit dialog + final JCheckBox alwaysOpenLeftmostTab = new JCheckBox( + trans.get("pref.dlg.checkbox.AlwaysOpenLeftmost")); + + alwaysOpenLeftmostTab.setSelected(preferences.isAlwaysOpenLeftmostTab()); + alwaysOpenLeftmostTab.setToolTipText(trans.get("pref.dlg.checkbox.AlwaysOpenLeftmost.ttip")); + alwaysOpenLeftmostTab.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + preferences.setAlwaysOpenLeftmostTab(alwaysOpenLeftmostTab + .isSelected()); + } + }); + this.add(alwaysOpenLeftmostTab, "wrap, growx, span 2"); + // // Update flight estimates in the design window final JCheckBox updateEstimates = new JCheckBox( trans.get("pref.dlg.checkbox.Updateestimates")); @@ -102,6 +117,5 @@ public class DesignPreferencesPanel extends PreferencesPanel { } }); this.add(updateEstimates, "wrap, growx, sg combos "); - } } diff --git a/swing/src/net/sf/openrocket/gui/main/ComponentAddButtons.java b/swing/src/net/sf/openrocket/gui/main/ComponentAddButtons.java index 9e4871848..8ed2338c9 100644 --- a/swing/src/net/sf/openrocket/gui/main/ComponentAddButtons.java +++ b/swing/src/net/sf/openrocket/gui/main/ComponentAddButtons.java @@ -488,7 +488,7 @@ public class ComponentAddButtons extends JPanel implements Scrollable { } } - ComponentConfigDialog.showDialog(parent, document, component); + ComponentConfigDialog.showDialog(parent, document, component, false); } }