From a290666d115adc7c24ed8867a6e8359254656f9f Mon Sep 17 00:00:00 2001 From: SiboVG Date: Mon, 1 Aug 2022 01:16:52 +0200 Subject: [PATCH] Add multi-config select sync between flight config tables --- .../sf/openrocket/gui/main/FlightConfigurationPanel.java | 5 ++++- .../main/flightconfigpanel/FlightConfigurablePanel.java | 9 +++++++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/swing/src/net/sf/openrocket/gui/main/FlightConfigurationPanel.java b/swing/src/net/sf/openrocket/gui/main/FlightConfigurationPanel.java index a2526dc40..b4fc279a0 100644 --- a/swing/src/net/sf/openrocket/gui/main/FlightConfigurationPanel.java +++ b/swing/src/net/sf/openrocket/gui/main/FlightConfigurationPanel.java @@ -114,7 +114,7 @@ public class FlightConfigurationPanel extends JPanel implements StateChangeListe this.add(duplicateConfButton, "wrap"); tabs.addChangeListener(new ChangeListener() { - private FlightConfigurablePanel previousPanel = null; + private FlightConfigurablePanel previousPanel = motorConfigurationPanel; @Override public void stateChanged(ChangeEvent e) { // Trigger a selection of the motor/recovery/configuration item @@ -308,6 +308,9 @@ public class FlightConfigurationPanel extends JPanel implements StateChangeListe } + /** + * Synchronize the table row selection of a target panel with the selection in the source panel. + */ private void synchronizePanelSelection(FlightConfigurablePanel source, FlightConfigurablePanel target) { if (source == null || target == null) return; List fids = source.getSelectedConfigurationIds(); diff --git a/swing/src/net/sf/openrocket/gui/main/flightconfigpanel/FlightConfigurablePanel.java b/swing/src/net/sf/openrocket/gui/main/flightconfigpanel/FlightConfigurablePanel.java index 5d3e23a62..e6a404680 100644 --- a/swing/src/net/sf/openrocket/gui/main/flightconfigpanel/FlightConfigurablePanel.java +++ b/swing/src/net/sf/openrocket/gui/main/flightconfigpanel/FlightConfigurablePanel.java @@ -6,6 +6,7 @@ import java.awt.Font; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.util.Arrays; +import java.util.HashSet; import java.util.List; import javax.swing.JComponent; @@ -298,12 +299,16 @@ public abstract class FlightConfigurablePanel fids) { if (fids == null || fids.isEmpty() || table.getColumnCount() == 0) return; + if (new HashSet<>(getSelectedConfigurationIds()).containsAll(fids)) return; + + table.clearSelection(); for (FlightConfigurationId id : fids) { if (id == FlightConfigurationId.DEFAULT_VALUE_FCID) continue; for (int rowNum = 0; rowNum < table.getRowCount(); rowNum++) { FlightConfigurationId rowFCID = rocket.getId(rowNum ); - if (rowFCID.equals(id) && !table.isRowSelected(rowNum)) { - table.changeSelection(rowNum, 1, false, false); + if (rowFCID.equals(id)) { + table.changeSelection(rowNum, 1, true, false); + break; } } }