From 5df388bafdcda792028194a9607add5fffa8b295 Mon Sep 17 00:00:00 2001 From: SiboVG Date: Thu, 26 May 2022 12:53:50 +0200 Subject: [PATCH] [#898] Change RocketPanel ribbon layout to be two-row + add CG/CP checkbox --- core/resources/l10n/messages.properties | 3 ++ .../gui/components/StageSelector.java | 2 +- .../gui/scalefigure/RocketPanel.java | 39 +++++++++++++++---- 3 files changed, 36 insertions(+), 8 deletions(-) diff --git a/core/resources/l10n/messages.properties b/core/resources/l10n/messages.properties index 3366c7044..c86da5006 100644 --- a/core/resources/l10n/messages.properties +++ b/core/resources/l10n/messages.properties @@ -53,6 +53,9 @@ RocketPanel.FigTypeAct.Unfinished = 3D Unfinished RocketPanel.lbl.Flightcfg = Flight configuration: RocketPanel.lbl.infoMessage = Click to select    Shift+click to select other    Double-click to edit    Click+drag to move RocketPanel.lbl.ViewType = View Type: +RocketPanel.lbl.Zoom = Zoom: +RocketPanel.checkbox.ShowCGCP = Show CG/CP +RocketPanel.lbl.Stages = Stages: ! BasicFrame BasicFrame.tab.Rocketdesign = Rocket design diff --git a/swing/src/net/sf/openrocket/gui/components/StageSelector.java b/swing/src/net/sf/openrocket/gui/components/StageSelector.java index bbccdf739..da1aace86 100644 --- a/swing/src/net/sf/openrocket/gui/components/StageSelector.java +++ b/swing/src/net/sf/openrocket/gui/components/StageSelector.java @@ -28,7 +28,7 @@ public class StageSelector extends JPanel implements StateChangeListener { private List buttons = new ArrayList(); public StageSelector(Rocket _rkt) { - super(new MigLayout("gap 0!")); + super(new MigLayout("gap 0!, insets 0")); this.rocket = _rkt; updateButtons( this.rocket.getSelectedConfiguration() ); diff --git a/swing/src/net/sf/openrocket/gui/scalefigure/RocketPanel.java b/swing/src/net/sf/openrocket/gui/scalefigure/RocketPanel.java index 551944835..4e0dbf508 100644 --- a/swing/src/net/sf/openrocket/gui/scalefigure/RocketPanel.java +++ b/swing/src/net/sf/openrocket/gui/scalefigure/RocketPanel.java @@ -31,6 +31,7 @@ import net.sf.openrocket.aerodynamics.AerodynamicCalculator; import net.sf.openrocket.aerodynamics.BarrowmanCalculator; import net.sf.openrocket.aerodynamics.FlightConditions; import net.sf.openrocket.aerodynamics.WarningSet; +import net.sf.openrocket.arch.SystemInfo; import net.sf.openrocket.document.OpenRocketDocument; import net.sf.openrocket.document.Simulation; import net.sf.openrocket.document.events.SimulationChangeEvent; @@ -298,6 +299,13 @@ public class RocketPanel extends JPanel implements TreeSelectionListener, Change setPreferredSize(new Dimension(800, 300)); + // MacOS has a larger y gap than other OS'es, so this fixes that + int gap = 0; + if (SystemInfo.getPlatform() == SystemInfo.Platform.MAC_OS) { + gap = -10; + } + JPanel ribbon = new JPanel(new MigLayout(String.format("inset 0, gapy %d, fill", gap))); + // View Type drop-down ComboBoxModel cm = new DefaultComboBoxModel(VIEW_TYPE.values()) { @@ -315,26 +323,42 @@ public class RocketPanel extends JPanel implements TreeSelectionListener, Change } } }; - add(new JLabel(trans.get("RocketPanel.lbl.ViewType")), "spanx, split"); - add(new JComboBox(cm)); + ribbon.add(new JLabel(trans.get("RocketPanel.lbl.ViewType")), "cell 0 0"); + ribbon.add(new JComboBox(cm), "cell 0 1"); // Zoom level selector scaleSelector = new ScaleSelector(scrollPane); - add(scaleSelector); + ribbon.add(new JLabel(trans.get("RocketPanel.lbl.Zoom")), "cell 1 0, center"); + ribbon.add(scaleSelector, "cell 1 1"); + + // Show CG/CP + JCheckBox showCGCP = new JCheckBox(); + showCGCP.setText(trans.get("RocketPanel.checkbox.ShowCGCP")); + showCGCP.setSelected(true); + ribbon.add(showCGCP, "cell 2 1, gapleft para"); + + // Vertical separator + JSeparator sep = new JSeparator(SwingConstants.VERTICAL); + Dimension d_sep = sep.getPreferredSize(); + d_sep.height = (int) (0.7 * ribbon.getPreferredSize().height); + sep.setPreferredSize(d_sep); + ribbon.add(sep, "cell 3 0, spany 2, gapleft para, gapright para"); // Stage selector StageSelector stageSelector = new StageSelector( rkt ); rkt.addChangeListener(stageSelector); - add(stageSelector); + ribbon.add(new JLabel(trans.get("RocketPanel.lbl.Stages")), "cell 4 0, pushx"); + ribbon.add(stageSelector, "cell 4 1, pushx"); // Flight configuration selector //// Flight configuration: JLabel label = new JLabel(trans.get("RocketPanel.lbl.Flightcfg")); - label.setHorizontalAlignment(JLabel.RIGHT); - add(label, "growx, right"); + ribbon.add(label, "cell 5 0"); final ConfigurationComboBox configComboBox = new ConfigurationComboBox(rkt); - add(configComboBox, "wrap, width 16%, wmin 100"); + ribbon.add(configComboBox, "cell 5 1, width 16%, wmin 100"); + + add(ribbon, "growx, span, wrap"); // Create slider and scroll pane rotationModel = new DoubleModel(figure, "Rotation", UnitGroup.UNITS_ANGLE, 0, 2 * Math.PI); @@ -350,6 +374,7 @@ public class RocketPanel extends JPanel implements TreeSelectionListener, Change JLabel l = new JLabel("360" + Chars.DEGREE); Dimension d = l.getPreferredSize(); + // TODO: tooltip add(rotationSlider = new BasicSlider(rotationModel.getSliderModel(0, 2 * Math.PI), JSlider.VERTICAL, true), "ax 50%, wrap, width " + (d.width + 6) + "px:null:null, growy"); rotationSlider.addChangeListener(new ChangeListener() {