From b79a6fb852af9f5b6328b33f2a48778c0f439969 Mon Sep 17 00:00:00 2001 From: SiboVG Date: Sat, 2 Jul 2022 14:19:24 +0200 Subject: [PATCH] Focus most commonly edited parameter after preset selection --- .../openrocket/gui/adaptors/PresetModel.java | 2 ++ .../gui/configdialog/BodyTubeConfig.java | 9 +++++++++ .../gui/configdialog/InnerTubeConfig.java | 14 ++++++------- .../gui/configdialog/LaunchLugConfig.java | 1 + .../gui/configdialog/MassComponentConfig.java | 1 + .../gui/configdialog/ParachuteConfig.java | 1 + .../gui/configdialog/RingComponentConfig.java | 7 +++++++ .../configdialog/RocketComponentConfig.java | 20 +++++++++++++++++++ .../gui/configdialog/ShockCordConfig.java | 1 + .../gui/configdialog/StreamerConfig.java | 1 + .../gui/configdialog/TubeFinSetConfig.java | 1 + 11 files changed, 51 insertions(+), 7 deletions(-) diff --git a/swing/src/net/sf/openrocket/gui/adaptors/PresetModel.java b/swing/src/net/sf/openrocket/gui/adaptors/PresetModel.java index 5fb2355d7..e62eac2d5 100644 --- a/swing/src/net/sf/openrocket/gui/adaptors/PresetModel.java +++ b/swing/src/net/sf/openrocket/gui/adaptors/PresetModel.java @@ -8,6 +8,7 @@ import javax.swing.ComboBoxModel; import javax.swing.SwingUtilities; import net.sf.openrocket.database.ComponentPresetDatabase; +import net.sf.openrocket.gui.configdialog.RocketComponentConfig; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -90,6 +91,7 @@ public class PresetModel extends AbstractListModel implements ComboBoxModel, Com } else { document.addUndoPosition("Use Preset " + component.getComponentName()); component.loadPreset((ComponentPreset) item); + ((RocketComponentConfig) parent).setFocusElement(); } } diff --git a/swing/src/net/sf/openrocket/gui/configdialog/BodyTubeConfig.java b/swing/src/net/sf/openrocket/gui/configdialog/BodyTubeConfig.java index 9ab43f596..39fbaa2ba 100644 --- a/swing/src/net/sf/openrocket/gui/configdialog/BodyTubeConfig.java +++ b/swing/src/net/sf/openrocket/gui/configdialog/BodyTubeConfig.java @@ -6,6 +6,8 @@ import javax.swing.JDialog; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JSpinner; +import javax.swing.JTextField; +import javax.swing.SwingUtilities; import net.miginfocom.swing.MigLayout; import net.sf.openrocket.document.OpenRocketDocument; @@ -23,6 +25,12 @@ import net.sf.openrocket.rocketcomponent.SymmetricComponent; import net.sf.openrocket.startup.Application; import net.sf.openrocket.unit.UnitGroup; +import java.awt.event.FocusEvent; +import java.awt.event.FocusListener; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; +import java.util.Arrays; + @SuppressWarnings("serial") public class BodyTubeConfig extends RocketComponentConfig { @@ -43,6 +51,7 @@ public class BodyTubeConfig extends RocketComponentConfig { JSpinner spin = new JSpinner(length.getSpinnerModel()); spin.setEditor(new SpinnerEditor(spin)); + focusElement = spin; panel.add(spin, "growx"); panel.add(new UnitSelector(length), "growx"); diff --git a/swing/src/net/sf/openrocket/gui/configdialog/InnerTubeConfig.java b/swing/src/net/sf/openrocket/gui/configdialog/InnerTubeConfig.java index e5595286f..3e3ddb3cb 100644 --- a/swing/src/net/sf/openrocket/gui/configdialog/InnerTubeConfig.java +++ b/swing/src/net/sf/openrocket/gui/configdialog/InnerTubeConfig.java @@ -64,7 +64,6 @@ public class InnerTubeConfig extends RocketComponentConfig { super(d, c, parent); //// General and General properties - JPanel rightPanel = new JPanel(new MigLayout()); JPanel panel = new JPanel(new MigLayout("gap rel unrel", "[][65lp::][30lp::][]", "")); DoubleModel m; @@ -86,7 +85,7 @@ public class InnerTubeConfig extends RocketComponentConfig { panel.add(spin, "growx"); panel.add(new UnitSelector(od), "growx"); - panel.add(new BasicSlider(od.getSliderModel(0, 0.04, 0.2)), "w 100lp, wrap"); + panel.add(new BasicSlider(od.getSliderModel(0, 0.04, 0.2)), "wmin 100lp, growx, wrap"); if (od.isAutomaticAvailable()) { JCheckBox check = new JCheckBox(od.getAutomaticAction()); @@ -106,7 +105,7 @@ public class InnerTubeConfig extends RocketComponentConfig { panel.add(spin, "growx"); panel.add(new UnitSelector(m), "growx"); - panel.add(new BasicSlider(m.getSliderModel(new DoubleModel(0), od)), "w 100lp, wrap"); + panel.add(new BasicSlider(m.getSliderModel(new DoubleModel(0), od)), "wmin 100lp, growx, wrap"); if (m.isAutomaticAvailable()) { JCheckBox check = new JCheckBox(m.getAutomaticAction()); @@ -127,7 +126,7 @@ public class InnerTubeConfig extends RocketComponentConfig { panel.add(spin, "growx"); panel.add(new UnitSelector(m), "growx"); - panel.add(new BasicSlider(m.getSliderModel(0, 0.01)), "w 100lp, wrap"); + panel.add(new BasicSlider(m.getSliderModel(0, 0.01)), "wmin 100lp, growx, wrap"); //// Inner tube length @@ -138,14 +137,15 @@ public class InnerTubeConfig extends RocketComponentConfig { spin = new JSpinner(m.getSpinnerModel()); spin.setEditor(new SpinnerEditor(spin)); + focusElement = spin; panel.add(spin, "growx"); panel.add(new UnitSelector(m), "growx"); - panel.add(new BasicSlider(m.getSliderModel(0, 0.1, 1.0)), "w 100lp, wrap"); + panel.add(new BasicSlider(m.getSliderModel(0, 0.1, 1.0)), "wmin 100lp, growx, wrap"); //// Material panel.add(materialPanel(Material.Type.BULK), - "spanx 3, growx, wrap 15lp"); + "spanx 4, growx, wrap 15lp"); //// Right side of panel ---- @@ -174,7 +174,7 @@ public class InnerTubeConfig extends RocketComponentConfig { panel2.add(new BasicSlider(m.getSliderModel( new DoubleModel(component.getParent(), "Length", -1.0, UnitGroup.UNITS_NONE), new DoubleModel(component.getParent(), "Length"))), - "w 100lp, wrap"); + "wmin 100lp, growx, wrap"); diff --git a/swing/src/net/sf/openrocket/gui/configdialog/LaunchLugConfig.java b/swing/src/net/sf/openrocket/gui/configdialog/LaunchLugConfig.java index eedab2730..8302641bb 100644 --- a/swing/src/net/sf/openrocket/gui/configdialog/LaunchLugConfig.java +++ b/swing/src/net/sf/openrocket/gui/configdialog/LaunchLugConfig.java @@ -45,6 +45,7 @@ public class LaunchLugConfig extends RocketComponentConfig { JSpinner spin = new JSpinner(m.getSpinnerModel()); spin.setEditor(new SpinnerEditor(spin)); + focusElement = spin; panel.add(spin, "growx"); panel.add(new UnitSelector(m), "growx"); diff --git a/swing/src/net/sf/openrocket/gui/configdialog/MassComponentConfig.java b/swing/src/net/sf/openrocket/gui/configdialog/MassComponentConfig.java index 5e7d185ec..23102e1f9 100644 --- a/swing/src/net/sf/openrocket/gui/configdialog/MassComponentConfig.java +++ b/swing/src/net/sf/openrocket/gui/configdialog/MassComponentConfig.java @@ -138,6 +138,7 @@ public class MassComponentConfig extends RocketComponentConfig { m = new DoubleModel(component, "AxialOffset", UnitGroup.UNITS_LENGTH); spin = new JSpinner(m.getSpinnerModel()); spin.setEditor(new SpinnerEditor(spin)); + focusElement = spin; panel2.add(spin, "growx"); panel2.add(new UnitSelector(m), "growx"); diff --git a/swing/src/net/sf/openrocket/gui/configdialog/ParachuteConfig.java b/swing/src/net/sf/openrocket/gui/configdialog/ParachuteConfig.java index f63abcc16..38fdffc3b 100644 --- a/swing/src/net/sf/openrocket/gui/configdialog/ParachuteConfig.java +++ b/swing/src/net/sf/openrocket/gui/configdialog/ParachuteConfig.java @@ -163,6 +163,7 @@ public class ParachuteConfig extends RecoveryDeviceConfig { m = new DoubleModel(component, "AxialOffset", UnitGroup.UNITS_LENGTH); spin = new JSpinner(m.getSpinnerModel()); spin.setEditor(new SpinnerEditor(spin)); + focusElement = spin; panel.add(spin, "growx"); panel.add(new UnitSelector(m), "growx"); diff --git a/swing/src/net/sf/openrocket/gui/configdialog/RingComponentConfig.java b/swing/src/net/sf/openrocket/gui/configdialog/RingComponentConfig.java index f10ea3caa..27c2a4282 100644 --- a/swing/src/net/sf/openrocket/gui/configdialog/RingComponentConfig.java +++ b/swing/src/net/sf/openrocket/gui/configdialog/RingComponentConfig.java @@ -20,6 +20,7 @@ import net.sf.openrocket.l10n.Translator; import net.sf.openrocket.material.Material; import net.sf.openrocket.rocketcomponent.EngineBlock; import net.sf.openrocket.rocketcomponent.RocketComponent; +import net.sf.openrocket.rocketcomponent.ThicknessRingComponent; import net.sf.openrocket.rocketcomponent.position.AxialMethod; import net.sf.openrocket.startup.Application; import net.sf.openrocket.unit.UnitGroup; @@ -116,6 +117,9 @@ public class RingComponentConfig extends RocketComponentConfig { spin = new JSpinner(m.getSpinnerModel()); spin.setEditor(new SpinnerEditor(spin)); + if (component instanceof ThicknessRingComponent) { + focusElement = spin; + } panel.add(spin, "growx"); panel.add(new UnitSelector(m), "growx"); @@ -139,6 +143,9 @@ public class RingComponentConfig extends RocketComponentConfig { m = new DoubleModel(component, "AxialOffset", UnitGroup.UNITS_LENGTH); spin = new JSpinner(m.getSpinnerModel()); spin.setEditor(new SpinnerEditor(spin)); + if (!(component instanceof ThicknessRingComponent)) { + focusElement = spin; + } panel.add(spin, "growx"); panel.add(new UnitSelector(m), "growx"); diff --git a/swing/src/net/sf/openrocket/gui/configdialog/RocketComponentConfig.java b/swing/src/net/sf/openrocket/gui/configdialog/RocketComponentConfig.java index 976e2945a..ebc57f128 100644 --- a/swing/src/net/sf/openrocket/gui/configdialog/RocketComponentConfig.java +++ b/swing/src/net/sf/openrocket/gui/configdialog/RocketComponentConfig.java @@ -22,6 +22,7 @@ import javax.swing.JSpinner; import javax.swing.JTabbedPane; import javax.swing.JTextArea; import javax.swing.JTextField; +import javax.swing.SwingUtilities; import net.miginfocom.swing.MigLayout; import net.sf.openrocket.document.OpenRocketDocument; @@ -61,6 +62,7 @@ public class RocketComponentConfig extends JPanel { private JComboBox presetComboBox; private PresetModel presetModel; + protected Component focusElement = null; // Element that will be focused on after a preset is selected protected final JTextField componentNameField; protected JTextArea commentTextArea; @@ -702,6 +704,24 @@ public class RocketComponentConfig extends JPanel { } } } + + /** + * Requests focus for the focus element that should be active after a preset is selected. + */ + public void setFocusElement() { + if (focusElement != null) { + SwingUtilities.invokeLater(new Runnable() { + public void run() { + if (focusElement instanceof JSpinner) { + SpinnerEditor ed = (SpinnerEditor) ((JSpinner)focusElement).getEditor(); + ed.getTextField().requestFocusInWindow(); + } else { + focusElement.requestFocusInWindow(); + } + } + }); + } + } protected void register(Invalidatable model) { diff --git a/swing/src/net/sf/openrocket/gui/configdialog/ShockCordConfig.java b/swing/src/net/sf/openrocket/gui/configdialog/ShockCordConfig.java index 624738a95..a7a6e8a78 100644 --- a/swing/src/net/sf/openrocket/gui/configdialog/ShockCordConfig.java +++ b/swing/src/net/sf/openrocket/gui/configdialog/ShockCordConfig.java @@ -80,6 +80,7 @@ public class ShockCordConfig extends RocketComponentConfig { m = new DoubleModel(component, "AxialOffset", UnitGroup.UNITS_LENGTH); spin = new JSpinner(m.getSpinnerModel()); spin.setEditor(new SpinnerEditor(spin)); + focusElement = spin; panel2.add(spin, "growx"); panel2.add(new UnitSelector(m), "growx"); diff --git a/swing/src/net/sf/openrocket/gui/configdialog/StreamerConfig.java b/swing/src/net/sf/openrocket/gui/configdialog/StreamerConfig.java index c4f6e2d65..504c6e712 100644 --- a/swing/src/net/sf/openrocket/gui/configdialog/StreamerConfig.java +++ b/swing/src/net/sf/openrocket/gui/configdialog/StreamerConfig.java @@ -149,6 +149,7 @@ public class StreamerConfig extends RecoveryDeviceConfig { m = new DoubleModel(component, "AxialOffset", UnitGroup.UNITS_LENGTH); spin = new JSpinner(m.getSpinnerModel()); spin.setEditor(new SpinnerEditor(spin)); + focusElement = spin; panel.add(spin, "growx"); panel.add(new UnitSelector(m), "growx"); diff --git a/swing/src/net/sf/openrocket/gui/configdialog/TubeFinSetConfig.java b/swing/src/net/sf/openrocket/gui/configdialog/TubeFinSetConfig.java index a005d11e2..e9de11352 100644 --- a/swing/src/net/sf/openrocket/gui/configdialog/TubeFinSetConfig.java +++ b/swing/src/net/sf/openrocket/gui/configdialog/TubeFinSetConfig.java @@ -54,6 +54,7 @@ public class TubeFinSetConfig extends RocketComponentConfig { spin = new JSpinner(m.getSpinnerModel()); spin.setEditor(new SpinnerEditor(spin)); + focusElement = spin; panel.add(spin, "growx"); panel.add(new UnitSelector(m), "growx");