From f3b8459f370010935610f9d0eff609f36b6aaa3d Mon Sep 17 00:00:00 2001 From: SiboVG Date: Tue, 15 Nov 2022 14:36:33 +0100 Subject: [PATCH 1/2] Remove unused imports and wildcard imports --- .../sf/openrocket/gui/main/BasicFrame.java | 24 +++++++++++++++++-- .../gui/scalefigure/RocketPanel.java | 2 -- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/swing/src/net/sf/openrocket/gui/main/BasicFrame.java b/swing/src/net/sf/openrocket/gui/main/BasicFrame.java index de604e585..685560786 100644 --- a/swing/src/net/sf/openrocket/gui/main/BasicFrame.java +++ b/swing/src/net/sf/openrocket/gui/main/BasicFrame.java @@ -1,6 +1,8 @@ package net.sf.openrocket.gui.main; -import java.awt.*; +import java.awt.Dimension; +import java.awt.Toolkit; +import java.awt.Window; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; @@ -20,7 +22,25 @@ import java.util.Arrays; import java.util.LinkedList; import java.util.List; import java.util.concurrent.ExecutionException; -import javax.swing.*; +import javax.swing.Action; +import javax.swing.BorderFactory; +import javax.swing.JCheckBox; +import javax.swing.JDialog; +import javax.swing.JFileChooser; +import javax.swing.JFrame; +import javax.swing.JMenu; +import javax.swing.JMenuBar; +import javax.swing.JMenuItem; +import javax.swing.JOptionPane; +import javax.swing.JPanel; +import javax.swing.JPopupMenu; +import javax.swing.JSpinner; +import javax.swing.JSplitPane; +import javax.swing.JTabbedPane; +import javax.swing.JTextField; +import javax.swing.KeyStroke; +import javax.swing.ListSelectionModel; +import javax.swing.SwingUtilities; import javax.swing.border.BevelBorder; import javax.swing.event.ChangeEvent; import javax.swing.tree.DefaultTreeSelectionModel; diff --git a/swing/src/net/sf/openrocket/gui/scalefigure/RocketPanel.java b/swing/src/net/sf/openrocket/gui/scalefigure/RocketPanel.java index 567495c0c..5a61fd46e 100644 --- a/swing/src/net/sf/openrocket/gui/scalefigure/RocketPanel.java +++ b/swing/src/net/sf/openrocket/gui/scalefigure/RocketPanel.java @@ -5,7 +5,6 @@ import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.Font; import java.awt.Point; -import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.InputEvent; @@ -16,7 +15,6 @@ import java.util.EventListener; import java.util.EventObject; import java.util.List; import java.util.LinkedList; -import java.util.TimerTask; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.ThreadFactory; From c79a75f9bb683337868fe8d7773ceeb5665982aa Mon Sep 17 00:00:00 2001 From: SiboVG Date: Tue, 15 Nov 2022 23:14:47 +0100 Subject: [PATCH 2/2] [#1831] Don't highlight sustainer stage at startup --- .../sf/openrocket/gui/main/BasicFrame.java | 4 +- .../sf/openrocket/gui/main/DesignPanel.java | 73 +++++++++++++------ 2 files changed, 52 insertions(+), 25 deletions(-) diff --git a/swing/src/net/sf/openrocket/gui/main/BasicFrame.java b/swing/src/net/sf/openrocket/gui/main/BasicFrame.java index 685560786..8134f1fb7 100644 --- a/swing/src/net/sf/openrocket/gui/main/BasicFrame.java +++ b/swing/src/net/sf/openrocket/gui/main/BasicFrame.java @@ -279,11 +279,13 @@ public class BasicFrame extends JFrame { if( componentSelectionModel.isSelectionEmpty() ){ final Rocket rocket = document.getRocket(); if( rocket != null ) { - final AxialStage topStage = (AxialStage) rocket.getChild(0); + final RocketComponent topStage = rocket.getChild(0); if (topStage != null) { final TreePath selectionPath = new TreePath(topStage); componentSelectionModel.setSelectionPath(selectionPath); tree.setSelectionRow(1); + // Don't select children components at startup (so override the default behavior with this new selection) + rocketpanel.getFigure().setSelection(new RocketComponent[] { topStage }); log.debug("... Setting Initial Selection: " + tree.getSelectionPath() ); } } diff --git a/swing/src/net/sf/openrocket/gui/main/DesignPanel.java b/swing/src/net/sf/openrocket/gui/main/DesignPanel.java index 9795207e7..dcb300261 100644 --- a/swing/src/net/sf/openrocket/gui/main/DesignPanel.java +++ b/swing/src/net/sf/openrocket/gui/main/DesignPanel.java @@ -69,36 +69,30 @@ public class DesignPanel extends JSplitPane { im.put(KeyStroke.getKeyStroke(KeyEvent.VK_O, SHORTCUT_KEY), null); im.put(KeyStroke.getKeyStroke(KeyEvent.VK_N, SHORTCUT_KEY), null); - // Visually select all child components of a stage/rocket/podset when it is selected + // Highlight all child components of a stage/rocket/podset when it is selected tree.getSelectionModel().addTreeSelectionListener(new TreeSelectionListener() { @Override public void valueChanged(TreeSelectionEvent e) { - if (tree == null || tree.getSelectionPaths() == null || tree.getSelectionPaths().length == 0 - || parent.getRocketPanel() == null) return; - - // Get all the components that need to be selected = currently selected components + children of stages/boosters/podsets - List children = new ArrayList<>(Arrays.asList(parent.getRocketPanel().getFigure().getSelection())); - for (TreePath p : tree.getSelectionPaths()) { - if (p != null) { - RocketComponent c = (RocketComponent) p.getLastPathComponent(); - if (c instanceof AxialStage || c instanceof Rocket || c instanceof PodSet) { - Iterator iter = c.iterator(false); - while (iter.hasNext()) { - RocketComponent child = iter.next(); - children.add(child); - } - } - } - } - - // Select all the child components - if (parent.getRocketPanel().getFigure() != null && parent.getRocketPanel().getFigure3d() != null) { - parent.getRocketPanel().getFigure().setSelection(children.toArray(new RocketComponent[0])); - parent.getRocketPanel().getFigure3d().setSelection(children.toArray(new RocketComponent[0])); - } + highlightAssemblyChildren(tree, parent); } }); + // Add a mouse listener for when the sustainer is selected at startup, to ensure that its children are highlighted. + // This is necessary because we force the children to not be highlighted when the tree is first created, and + // re-clicking the sustainer would not fire a change event in the tree (which normally highlights the children). + MouseAdapter mouseAdapter = new MouseAdapter() { + @Override + public void mouseClicked(MouseEvent e) { + if (tree.getSelectionPath() != null && + tree.getSelectionPath().getLastPathComponent() == document.getRocket().getChild(0)) { + highlightAssemblyChildren(tree, parent); + } + // Delete the listener again. We only need it at start-up, i.e. when the first click is registered. + tree.removeMouseListener(this); + } + }; + tree.addMouseListener(mouseAdapter); + // Double-click opens config dialog MouseListener ml = new MouseAdapter() { @Override @@ -234,6 +228,37 @@ public class DesignPanel extends JSplitPane { this.setRightComponent(panel); } + /** + * Highlight all child components of a stage/rocket/podset when it is selected + * @param tree the tree in which the component selection took place + * @param parent the parent frame to highlight the components in + */ + private static void highlightAssemblyChildren(ComponentTree tree, BasicFrame parent) { + if (tree == null || tree.getSelectionPaths() == null || tree.getSelectionPaths().length == 0 + || parent.getRocketPanel() == null) return; + + // Get all the components that need to be selected = currently selected components + children of stages/boosters/podsets + List children = new ArrayList<>(Arrays.asList(parent.getRocketPanel().getFigure().getSelection())); + for (TreePath p : tree.getSelectionPaths()) { + if (p != null) { + RocketComponent c = (RocketComponent) p.getLastPathComponent(); + if (c instanceof AxialStage || c instanceof Rocket || c instanceof PodSet) { + Iterator iter = c.iterator(false); + while (iter.hasNext()) { + RocketComponent child = iter.next(); + children.add(child); + } + } + } + } + + // Select all the child components + if (parent.getRocketPanel().getFigure() != null && parent.getRocketPanel().getFigure3d() != null) { + parent.getRocketPanel().getFigure().setSelection(children.toArray(new RocketComponent[0])); + parent.getRocketPanel().getFigure3d().setSelection(children.toArray(new RocketComponent[0])); + } + } + /** * Focus on the component tree. */