From 5df388bafdcda792028194a9607add5fffa8b295 Mon Sep 17 00:00:00 2001 From: SiboVG Date: Thu, 26 May 2022 12:53:50 +0200 Subject: [PATCH 1/9] [#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() { From 18a690d8299154268404d4e8ded6313f629f06e6 Mon Sep 17 00:00:00 2001 From: SiboVG Date: Thu, 26 May 2022 17:18:17 +0200 Subject: [PATCH 2/9] [#1168] Implement Show/hide CG/CP markings --- .../gui/figure3d/RocketFigure3d.java | 14 +++++++++++-- .../gui/scalefigure/RocketFigure.java | 17 ++++++++++++++-- .../gui/scalefigure/RocketPanel.java | 20 ++++++++++++++++++- 3 files changed, 46 insertions(+), 5 deletions(-) diff --git a/swing/src/net/sf/openrocket/gui/figure3d/RocketFigure3d.java b/swing/src/net/sf/openrocket/gui/figure3d/RocketFigure3d.java index c2557f914..76c29cc4a 100644 --- a/swing/src/net/sf/openrocket/gui/figure3d/RocketFigure3d.java +++ b/swing/src/net/sf/openrocket/gui/figure3d/RocketFigure3d.java @@ -83,6 +83,7 @@ public class RocketFigure3d extends JPanel implements GLEventListener { private Overlay extrasOverlay, caretOverlay; private BufferedImage cgCaretRaster, cpCaretRaster; private volatile boolean redrawExtras = true; + private boolean drawCarets = true; private final ArrayList relativeExtra = new ArrayList(); private final ArrayList absoluteExtra = new ArrayList(); @@ -324,7 +325,9 @@ public class RocketFigure3d extends JPanel implements GLEventListener { rr.render(drawable, configuration, selection); drawExtras(gl, glu); - drawCarets(gl, glu); + if (drawCarets) { + drawCarets(gl, glu); + } // GLJPanel with GLSL Flipper relies on this: gl.glFrontFace(GL.GL_CCW); @@ -709,5 +712,12 @@ public class RocketFigure3d extends JPanel implements GLEventListener { }); } } - + + public boolean isDrawCarets() { + return drawCarets; + } + + public void setDrawCarets(boolean drawCarets) { + this.drawCarets = drawCarets; + } } diff --git a/swing/src/net/sf/openrocket/gui/scalefigure/RocketFigure.java b/swing/src/net/sf/openrocket/gui/scalefigure/RocketFigure.java index 5275d8ad0..b5a530268 100644 --- a/swing/src/net/sf/openrocket/gui/scalefigure/RocketFigure.java +++ b/swing/src/net/sf/openrocket/gui/scalefigure/RocketFigure.java @@ -72,6 +72,8 @@ public class RocketFigure extends AbstractScaleFigure { private double rotation; private Transformation axialRotation; + + private boolean drawCarets = true; /** * The shapes to be drawn are stored in this Priority Queue, where the first shape to be drawn is the one with @@ -320,9 +322,12 @@ public class RocketFigure extends AbstractScaleFigure { // Draw relative extras - for (FigureElement e : relativeExtra) { - e.paint(g2, scale); + if (drawCarets) { + for (FigureElement e : relativeExtra) { + e.paint(g2, scale); + } } + // Draw absolute extras g2.setTransform(baseTransform); @@ -487,4 +492,12 @@ public class RocketFigure extends AbstractScaleFigure { } } + public boolean isDrawCarets() { + return drawCarets; + } + + public void setDrawCarets(boolean drawCarets) { + this.drawCarets = drawCarets; + } + } diff --git a/swing/src/net/sf/openrocket/gui/scalefigure/RocketPanel.java b/swing/src/net/sf/openrocket/gui/scalefigure/RocketPanel.java index 4e0dbf508..e8e8a7dda 100644 --- a/swing/src/net/sf/openrocket/gui/scalefigure/RocketPanel.java +++ b/swing/src/net/sf/openrocket/gui/scalefigure/RocketPanel.java @@ -5,6 +5,8 @@ import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.Font; import java.awt.Point; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; import java.awt.event.InputEvent; import java.awt.event.MouseEvent; import java.util.ArrayList; @@ -120,6 +122,7 @@ public class RocketPanel extends JPanel implements TreeSelectionListener, Change private final ScaleScrollPane scrollPane; private final JPanel figureHolder; + private JLabel zoomLabel; private JLabel infoMessage; @@ -259,6 +262,7 @@ public class RocketPanel extends JPanel implements TreeSelectionListener, Change figureHolder.add(figure3d, BorderLayout.CENTER); rotationSlider.setEnabled(false); scaleSelector.setEnabled(false); + zoomLabel.repaint(); // Makes sure the zoom label is above the scaleSelector revalidate(); figureHolder.revalidate(); @@ -328,7 +332,8 @@ public class RocketPanel extends JPanel implements TreeSelectionListener, Change // Zoom level selector scaleSelector = new ScaleSelector(scrollPane); - ribbon.add(new JLabel(trans.get("RocketPanel.lbl.Zoom")), "cell 1 0, center"); + zoomLabel = new JLabel(trans.get("RocketPanel.lbl.Zoom")); + ribbon.add(zoomLabel, "cell 1 0, center"); ribbon.add(scaleSelector, "cell 1 1"); // Show CG/CP @@ -337,6 +342,19 @@ public class RocketPanel extends JPanel implements TreeSelectionListener, Change showCGCP.setSelected(true); ribbon.add(showCGCP, "cell 2 1, gapleft para"); + showCGCP.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + if (figure != null) { + figure.setDrawCarets(showCGCP.isSelected()); + } + if (figure3d != null) { + figure3d.setDrawCarets(showCGCP.isSelected()); + } + updateFigures(); + } + }); + // Vertical separator JSeparator sep = new JSeparator(SwingConstants.VERTICAL); Dimension d_sep = sep.getPreferredSize(); From 93d38cfbacc995ee3a4e670fe59516073b6de15d Mon Sep 17 00:00:00 2001 From: SiboVG Date: Thu, 26 May 2022 17:26:29 +0200 Subject: [PATCH 3/9] Add tooltip to rotation slider --- core/resources/l10n/messages.properties | 1 + .../src/net/sf/openrocket/gui/scalefigure/RocketPanel.java | 6 ++++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/core/resources/l10n/messages.properties b/core/resources/l10n/messages.properties index c86da5006..dd2557c41 100644 --- a/core/resources/l10n/messages.properties +++ b/core/resources/l10n/messages.properties @@ -56,6 +56,7 @@ RocketPanel.lbl.ViewType = View Type: RocketPanel.lbl.Zoom = Zoom: RocketPanel.checkbox.ShowCGCP = Show CG/CP RocketPanel.lbl.Stages = Stages: +RocketPanel.ttip.Rotation = Change the rocket's roll rotation (only affects the rocket view) ! BasicFrame BasicFrame.tab.Rocketdesign = Rocket design diff --git a/swing/src/net/sf/openrocket/gui/scalefigure/RocketPanel.java b/swing/src/net/sf/openrocket/gui/scalefigure/RocketPanel.java index e8e8a7dda..04b6f5d57 100644 --- a/swing/src/net/sf/openrocket/gui/scalefigure/RocketPanel.java +++ b/swing/src/net/sf/openrocket/gui/scalefigure/RocketPanel.java @@ -383,16 +383,16 @@ public class RocketPanel extends JPanel implements TreeSelectionListener, Change UnitSelector us = new UnitSelector(rotationModel, true); us.setHorizontalAlignment(JLabel.CENTER); add(us, "alignx 50%, growx"); + us.setToolTipText(trans.get("RocketPanel.ttip.Rotation")); // Add the rocket figure add(figureHolder, "grow, spany 2, wmin 300lp, hmin 100lp, wrap"); // Add rotation slider - // Minimum size to fit "360deg" + // Dummy label to find the minimum size to fit "360deg" 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() { @@ -401,6 +401,8 @@ public class RocketPanel extends JPanel implements TreeSelectionListener, Change updateExtras(); } }); + rotationSlider.setToolTipText(trans.get("RocketPanel.ttip.Rotation")); + //// Click to select    Shift+click to select other    Double-click to edit    Click+drag to move infoMessage = new JLabel(trans.get("RocketPanel.lbl.infoMessage")); From 675878ff55a2bc16a493c622e978606eab6686ae Mon Sep 17 00:00:00 2001 From: SiboVG Date: Thu, 26 May 2022 17:31:45 +0200 Subject: [PATCH 4/9] Fix zoomlabel bug --- swing/src/net/sf/openrocket/gui/scalefigure/RocketPanel.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/swing/src/net/sf/openrocket/gui/scalefigure/RocketPanel.java b/swing/src/net/sf/openrocket/gui/scalefigure/RocketPanel.java index 04b6f5d57..1f1d3f6ba 100644 --- a/swing/src/net/sf/openrocket/gui/scalefigure/RocketPanel.java +++ b/swing/src/net/sf/openrocket/gui/scalefigure/RocketPanel.java @@ -262,11 +262,12 @@ public class RocketPanel extends JPanel implements TreeSelectionListener, Change figureHolder.add(figure3d, BorderLayout.CENTER); rotationSlider.setEnabled(false); scaleSelector.setEnabled(false); - zoomLabel.repaint(); // Makes sure the zoom label is above the scaleSelector revalidate(); figureHolder.revalidate(); + zoomLabel.repaint(); // Makes sure the zoom label is above the scaleSelector + figure3d.repaint(); } From 0c09ea5ce067e51dd335828796e41bfd7aeed382 Mon Sep 17 00:00:00 2001 From: SiboVG Date: Tue, 31 May 2022 01:12:36 +0200 Subject: [PATCH 5/9] Make app ribbon y gap smaller for Windows --- swing/src/net/sf/openrocket/gui/scalefigure/RocketPanel.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/swing/src/net/sf/openrocket/gui/scalefigure/RocketPanel.java b/swing/src/net/sf/openrocket/gui/scalefigure/RocketPanel.java index 1f1d3f6ba..241d7047e 100644 --- a/swing/src/net/sf/openrocket/gui/scalefigure/RocketPanel.java +++ b/swing/src/net/sf/openrocket/gui/scalefigure/RocketPanel.java @@ -304,10 +304,12 @@ 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 + // MacOS and Windows have a larger y gap than Linux, so this fixes that int gap = 0; if (SystemInfo.getPlatform() == SystemInfo.Platform.MAC_OS) { gap = -10; + } else if (SystemInfo.getPlatform() == SystemInfo.Platform.WINDOWS) { + gap = -5; } JPanel ribbon = new JPanel(new MigLayout(String.format("inset 0, gapy %d, fill", gap))); From d1656c29543bce13bc3616b3b5a114fa19976504 Mon Sep 17 00:00:00 2001 From: SiboVG Date: Tue, 31 May 2022 01:19:45 +0200 Subject: [PATCH 6/9] Reduce gap between zoom buttons and zoom selector --- .../net/sf/openrocket/gui/scalefigure/ScaleSelector.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/swing/src/net/sf/openrocket/gui/scalefigure/ScaleSelector.java b/swing/src/net/sf/openrocket/gui/scalefigure/ScaleSelector.java index c2b0eb06f..e1900abc1 100644 --- a/swing/src/net/sf/openrocket/gui/scalefigure/ScaleSelector.java +++ b/swing/src/net/sf/openrocket/gui/scalefigure/ScaleSelector.java @@ -54,7 +54,7 @@ public class ScaleSelector extends JPanel { setZoomText(); } }); - add(button, "gap"); + add(button); // Zoom level selector String[] settings = SCALE_LABELS; @@ -94,7 +94,7 @@ public class ScaleSelector extends JPanel { update(); } }); - add(scaleSelector, "gap rel"); + add(scaleSelector); // Zoom in button button = new SelectColorButton(Icons.ZOOM_IN); @@ -107,7 +107,7 @@ public class ScaleSelector extends JPanel { update(); } }); - add(button, "gapleft rel"); + add(button); } From d482c62f2e654c1fb82ad76145577bd642f2e8b4 Mon Sep 17 00:00:00 2001 From: SiboVG Date: Tue, 31 May 2022 01:21:03 +0200 Subject: [PATCH 7/9] Clean up code a bit --- .../sf/openrocket/gui/scalefigure/ScaleSelector.java | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/swing/src/net/sf/openrocket/gui/scalefigure/ScaleSelector.java b/swing/src/net/sf/openrocket/gui/scalefigure/ScaleSelector.java index e1900abc1..12143b15a 100644 --- a/swing/src/net/sf/openrocket/gui/scalefigure/ScaleSelector.java +++ b/swing/src/net/sf/openrocket/gui/scalefigure/ScaleSelector.java @@ -36,7 +36,7 @@ public class ScaleSelector extends JPanel { } private final ScaleScrollPane scrollPane; - private JComboBox scaleSelector; + private final JComboBox scaleSelector; public ScaleSelector(ScaleScrollPane scroll) { super(new MigLayout()); @@ -57,9 +57,7 @@ public class ScaleSelector extends JPanel { add(button); // Zoom level selector - String[] settings = SCALE_LABELS; - - scaleSelector = new JComboBox<>(settings); + scaleSelector = new JComboBox<>(SCALE_LABELS); scaleSelector.setEditable(true); setZoomText(); scaleSelector.addActionListener(new ActionListener() { @@ -67,6 +65,7 @@ public class ScaleSelector extends JPanel { public void actionPerformed(ActionEvent e) { try { String text = (String) scaleSelector.getSelectedItem(); + if (text == null) return; text = text.replaceAll("%", "").trim(); if (text.toLowerCase(Locale.getDefault()).startsWith(SCALE_FIT.toLowerCase(Locale.getDefault()))){ @@ -144,8 +143,7 @@ public class ScaleSelector extends JPanel { } if (currentScale > SCALE_LEVELS[SCALE_LEVELS.length / 2]) { // scale is large, give next full 100% - double nextScale = Math.floor(currentScale + 1.05); - return nextScale; + return Math.floor(currentScale + 1.05); } return currentScale * 1.5; } From ac57e0851d9ebf736ef7650a45fe7dcb3652dee2 Mon Sep 17 00:00:00 2001 From: SiboVG Date: Tue, 31 May 2022 01:33:53 +0200 Subject: [PATCH 8/9] Fix gapy on macOS and Windows The problem was that the scaleSelector had a padding around it. Setting the insets to 0 removes that and fixes the y gap issue --- .../openrocket/gui/scalefigure/RocketPanel.java | 17 +++-------------- .../gui/scalefigure/ScaleSelector.java | 2 +- 2 files changed, 4 insertions(+), 15 deletions(-) diff --git a/swing/src/net/sf/openrocket/gui/scalefigure/RocketPanel.java b/swing/src/net/sf/openrocket/gui/scalefigure/RocketPanel.java index 241d7047e..a2372139a 100644 --- a/swing/src/net/sf/openrocket/gui/scalefigure/RocketPanel.java +++ b/swing/src/net/sf/openrocket/gui/scalefigure/RocketPanel.java @@ -122,7 +122,6 @@ public class RocketPanel extends JPanel implements TreeSelectionListener, Change private final ScaleScrollPane scrollPane; private final JPanel figureHolder; - private JLabel zoomLabel; private JLabel infoMessage; @@ -266,8 +265,6 @@ public class RocketPanel extends JPanel implements TreeSelectionListener, Change revalidate(); figureHolder.revalidate(); - zoomLabel.repaint(); // Makes sure the zoom label is above the scaleSelector - figure3d.repaint(); } @@ -304,14 +301,7 @@ public class RocketPanel extends JPanel implements TreeSelectionListener, Change setPreferredSize(new Dimension(800, 300)); - // MacOS and Windows have a larger y gap than Linux, so this fixes that - int gap = 0; - if (SystemInfo.getPlatform() == SystemInfo.Platform.MAC_OS) { - gap = -10; - } else if (SystemInfo.getPlatform() == SystemInfo.Platform.WINDOWS) { - gap = -5; - } - JPanel ribbon = new JPanel(new MigLayout(String.format("inset 0, gapy %d, fill", gap))); + JPanel ribbon = new JPanel(new MigLayout("insets 0, fill")); // View Type drop-down ComboBoxModel cm = new DefaultComboBoxModel(VIEW_TYPE.values()) { @@ -335,9 +325,8 @@ public class RocketPanel extends JPanel implements TreeSelectionListener, Change // Zoom level selector scaleSelector = new ScaleSelector(scrollPane); - zoomLabel = new JLabel(trans.get("RocketPanel.lbl.Zoom")); - ribbon.add(zoomLabel, "cell 1 0, center"); - ribbon.add(scaleSelector, "cell 1 1"); + ribbon.add(new JLabel(trans.get("RocketPanel.lbl.Zoom")), "cell 1 0, center"); + ribbon.add(scaleSelector, "gapleft para, cell 1 1"); // Show CG/CP JCheckBox showCGCP = new JCheckBox(); diff --git a/swing/src/net/sf/openrocket/gui/scalefigure/ScaleSelector.java b/swing/src/net/sf/openrocket/gui/scalefigure/ScaleSelector.java index 12143b15a..a4bc46085 100644 --- a/swing/src/net/sf/openrocket/gui/scalefigure/ScaleSelector.java +++ b/swing/src/net/sf/openrocket/gui/scalefigure/ScaleSelector.java @@ -39,7 +39,7 @@ public class ScaleSelector extends JPanel { private final JComboBox scaleSelector; public ScaleSelector(ScaleScrollPane scroll) { - super(new MigLayout()); + super(new MigLayout("insets 0")); this.scrollPane = scroll; From 0ff3c739e214c112fbf827912ac9316c3c915fe3 Mon Sep 17 00:00:00 2001 From: SiboVG Date: Tue, 31 May 2022 01:55:00 +0200 Subject: [PATCH 9/9] Align ribbon zoom label to zoom combobox --- .../configdialog/FreeformFinSetConfig.java | 2 +- .../gui/scalefigure/RocketPanel.java | 21 ++++--- .../gui/scalefigure/ScaleSelector.java | 59 ++++++++++++------- 3 files changed, 51 insertions(+), 31 deletions(-) diff --git a/swing/src/net/sf/openrocket/gui/configdialog/FreeformFinSetConfig.java b/swing/src/net/sf/openrocket/gui/configdialog/FreeformFinSetConfig.java index 0a73dd8dd..1001258f1 100644 --- a/swing/src/net/sf/openrocket/gui/configdialog/FreeformFinSetConfig.java +++ b/swing/src/net/sf/openrocket/gui/configdialog/FreeformFinSetConfig.java @@ -295,7 +295,7 @@ public class FreeformFinSetConfig extends FinSetConfig { panel.add(new StyledLabel(trans.get("FreeformFinSetConfig.lbl.ctrlClick"), -2), "spanx 3, wrap"); // row of controls at the bottom of the tab: - panel.add(selector, "aligny bottom, gap unrel"); + panel.add(selector.getAsPanel(), "aligny bottom, gap unrel"); panel.add(scaleButton, ""); panel.add(importButton, ""); panel.add(exportCsvButton, ""); diff --git a/swing/src/net/sf/openrocket/gui/scalefigure/RocketPanel.java b/swing/src/net/sf/openrocket/gui/scalefigure/RocketPanel.java index a2372139a..0243b28f2 100644 --- a/swing/src/net/sf/openrocket/gui/scalefigure/RocketPanel.java +++ b/swing/src/net/sf/openrocket/gui/scalefigure/RocketPanel.java @@ -325,14 +325,19 @@ public class RocketPanel extends JPanel implements TreeSelectionListener, Change // Zoom level selector scaleSelector = new ScaleSelector(scrollPane); - ribbon.add(new JLabel(trans.get("RocketPanel.lbl.Zoom")), "cell 1 0, center"); - ribbon.add(scaleSelector, "gapleft para, cell 1 1"); + JButton zoomOutButton = scaleSelector.getZoomOutButton(); + JComboBox scaleSelectorCombo = scaleSelector.getScaleSelectorCombo(); + JButton zoomInButton = scaleSelector.getZoomInButton(); + ribbon.add(zoomOutButton, "gapleft para, cell 1 1"); + ribbon.add(new JLabel(trans.get("RocketPanel.lbl.Zoom")), "cell 2 0, spanx 2"); + ribbon.add(scaleSelectorCombo, "cell 2 1"); + ribbon.add(zoomInButton, "cell 3 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"); + ribbon.add(showCGCP, "cell 4 1, gapleft para"); showCGCP.addActionListener(new ActionListener() { @Override @@ -352,21 +357,21 @@ public class RocketPanel extends JPanel implements TreeSelectionListener, Change 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"); + ribbon.add(sep, "cell 5 0, spany 2, gapleft para, gapright para"); // Stage selector StageSelector stageSelector = new StageSelector( rkt ); rkt.addChangeListener(stageSelector); - ribbon.add(new JLabel(trans.get("RocketPanel.lbl.Stages")), "cell 4 0, pushx"); - ribbon.add(stageSelector, "cell 4 1, pushx"); + ribbon.add(new JLabel(trans.get("RocketPanel.lbl.Stages")), "cell 6 0, pushx"); + ribbon.add(stageSelector, "cell 6 1, pushx"); // Flight configuration selector //// Flight configuration: JLabel label = new JLabel(trans.get("RocketPanel.lbl.Flightcfg")); - ribbon.add(label, "cell 5 0"); + ribbon.add(label, "cell 7 0"); final ConfigurationComboBox configComboBox = new ConfigurationComboBox(rkt); - ribbon.add(configComboBox, "cell 5 1, width 16%, wmin 100"); + ribbon.add(configComboBox, "cell 7 1, width 16%, wmin 100"); add(ribbon, "growx, span, wrap"); diff --git a/swing/src/net/sf/openrocket/gui/scalefigure/ScaleSelector.java b/swing/src/net/sf/openrocket/gui/scalefigure/ScaleSelector.java index a4bc46085..e2284803e 100644 --- a/swing/src/net/sf/openrocket/gui/scalefigure/ScaleSelector.java +++ b/swing/src/net/sf/openrocket/gui/scalefigure/ScaleSelector.java @@ -17,7 +17,7 @@ import net.sf.openrocket.gui.widgets.SelectColorButton; import net.sf.openrocket.util.StateChangeListener; @SuppressWarnings("serial") -public class ScaleSelector extends JPanel { +public class ScaleSelector { public static final double MINIMUM_ZOOM = 0.01; // == 1 % public static final double MAXIMUM_ZOOM = 1000.00; // == 10,000 % @@ -36,16 +36,16 @@ public class ScaleSelector extends JPanel { } private final ScaleScrollPane scrollPane; - private final JComboBox scaleSelector; + private final JComboBox scaleSelectorCombo; + private final JButton zoomOutButton; + private final JButton zoomInButton; public ScaleSelector(ScaleScrollPane scroll) { - super(new MigLayout("insets 0")); - this.scrollPane = scroll; // Zoom out button - JButton button = new SelectColorButton(Icons.ZOOM_OUT); - button.addActionListener(new ActionListener() { + zoomOutButton = new SelectColorButton(Icons.ZOOM_OUT); + zoomOutButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { final double oldScale = scrollPane.getUserScale(); @@ -54,17 +54,16 @@ public class ScaleSelector extends JPanel { setZoomText(); } }); - add(button); // Zoom level selector - scaleSelector = new JComboBox<>(SCALE_LABELS); - scaleSelector.setEditable(true); + scaleSelectorCombo = new JComboBox<>(SCALE_LABELS); + scaleSelectorCombo.setEditable(true); setZoomText(); - scaleSelector.addActionListener(new ActionListener() { + scaleSelectorCombo.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { try { - String text = (String) scaleSelector.getSelectedItem(); + String text = (String) scaleSelectorCombo.getSelectedItem(); if (text == null) return; text = text.replaceAll("%", "").trim(); @@ -93,11 +92,10 @@ public class ScaleSelector extends JPanel { update(); } }); - add(scaleSelector); // Zoom in button - button = new SelectColorButton(Icons.ZOOM_IN); - button.addActionListener(new ActionListener() { + zoomInButton = new SelectColorButton(Icons.ZOOM_IN); + zoomInButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { double scale = scrollPane.getUserScale(); @@ -106,8 +104,27 @@ public class ScaleSelector extends JPanel { update(); } }); - add(button); + } + public JPanel getAsPanel() { + JPanel panel = new JPanel(new MigLayout("insets 0")); + panel.add(zoomOutButton); + panel.add(scaleSelectorCombo); + panel.add(zoomInButton); + + return panel; + } + + public JComboBox getScaleSelectorCombo() { + return scaleSelectorCombo; + } + + public JButton getZoomOutButton() { + return zoomOutButton; + } + + public JButton getZoomInButton() { + return zoomInButton; } private void setZoomText() { @@ -116,8 +133,8 @@ public class ScaleSelector extends JPanel { if (scrollPane.isFitting()) { text = "Fit (" + text + ")"; } - if (!text.equals(scaleSelector.getSelectedItem())) - scaleSelector.setSelectedItem(text); + if (!text.equals(scaleSelectorCombo.getSelectedItem())) + scaleSelectorCombo.setSelectedItem(text); } private static double getNextLargerScale(final double currentScale) { @@ -148,12 +165,10 @@ public class ScaleSelector extends JPanel { return currentScale * 1.5; } - @Override public void setEnabled(boolean b){ - for ( Component c : getComponents() ){ - c.setEnabled(b); - } - super.setEnabled(b); + zoomInButton.setEnabled(b); + scaleSelectorCombo.setEnabled(b); + zoomOutButton.setEnabled(b); } public void update(){