From 12c2d5bf4fdfe38664a6b922a1e5dfb30482c5a3 Mon Sep 17 00:00:00 2001 From: SiboVG Date: Wed, 20 Jul 2022 22:15:04 +0200 Subject: [PATCH] [#1539] Apply preset after double-click --- .../configdialog/RocketComponentConfig.java | 7 +--- .../preset/ComponentPresetChooserDialog.java | 39 +++++++++++++++++-- 2 files changed, 37 insertions(+), 9 deletions(-) diff --git a/swing/src/net/sf/openrocket/gui/configdialog/RocketComponentConfig.java b/swing/src/net/sf/openrocket/gui/configdialog/RocketComponentConfig.java index 59628c5ac..ccdcfd957 100644 --- a/swing/src/net/sf/openrocket/gui/configdialog/RocketComponentConfig.java +++ b/swing/src/net/sf/openrocket/gui/configdialog/RocketComponentConfig.java @@ -264,12 +264,9 @@ public class RocketComponentConfig extends JPanel { if (presetComboBox == null || presetModel == null) return; ((ComponentPresetDatabase) Application.getComponentPresetDao()).addDatabaseListener(presetModel); ComponentPresetChooserDialog dialog = - new ComponentPresetChooserDialog(SwingUtilities.getWindowAncestor(RocketComponentConfig.this), component); + new ComponentPresetChooserDialog(SwingUtilities.getWindowAncestor(RocketComponentConfig.this), + component, presetModel); dialog.setVisible(true); - ComponentPreset preset = dialog.getSelectedComponentPreset(); - if (preset != null) { - presetModel.setSelectedItem(preset); - } ((ComponentPresetDatabase) Application.getComponentPresetDao()).removeChangeListener(presetModel); } }); diff --git a/swing/src/net/sf/openrocket/gui/dialogs/preset/ComponentPresetChooserDialog.java b/swing/src/net/sf/openrocket/gui/dialogs/preset/ComponentPresetChooserDialog.java index 3061d6d62..1733e942c 100644 --- a/swing/src/net/sf/openrocket/gui/dialogs/preset/ComponentPresetChooserDialog.java +++ b/swing/src/net/sf/openrocket/gui/dialogs/preset/ComponentPresetChooserDialog.java @@ -7,6 +7,8 @@ import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -25,6 +27,7 @@ import javax.swing.table.TableColumn; import javax.swing.table.TableModel; import net.miginfocom.swing.MigLayout; +import net.sf.openrocket.gui.adaptors.PresetModel; import net.sf.openrocket.gui.util.GUIUtil; import net.sf.openrocket.l10n.Translator; import net.sf.openrocket.preset.ComponentPreset; @@ -45,8 +48,8 @@ public class ComponentPresetChooserDialog extends JDialog { private final RocketComponent component; - private ComponentPresetTable componentSelectionTable; - private JTextField filterText; + private final ComponentPresetTable componentSelectionTable; + private final JTextField filterText; private JCheckBox foreDiameterFilterCheckBox; private JCheckBox aftDiameterFilterCheckBox; private JCheckBox showLegacyCheckBox; @@ -66,12 +69,14 @@ public class ComponentPresetChooserDialog extends JDialog { private List presets; private ComponentPreset.Type presetType; + private PresetModel presetModel; - public ComponentPresetChooserDialog(Window owner, RocketComponent component) { + public ComponentPresetChooserDialog(Window owner, RocketComponent component, PresetModel presetModel) { super(owner, trans.get("title"), Dialog.ModalityType.APPLICATION_MODAL); this.component = component; this.presetType = component.getPresetType(); + this.presetModel = presetModel; this.presets = Application.getComponentPresetDao().listForType(component.getPresetType()); List> displayedColumnKeys = Arrays.asList(component.getPresetType().getDisplayedColumns()); @@ -150,7 +155,17 @@ public class ComponentPresetChooserDialog extends JDialog { panel.add(scrollpane, "grow, width 700lp, height 300lp, pushy, spanx, wrap rel"); panel.add(new JLabel(Chars.UP_ARROW + " " + trans.get("lbl.favorites")), "spanx, gapleft 5px, wrap para"); - + + // When double-clicking a preset row, apply the preset and close this dialog + componentSelectionTable.addMouseListener(new MouseAdapter() { + @Override + public void mouseClicked(MouseEvent e) { + // Don't do anything when double-clicking the first column + if (e.getClickCount() == 2 && componentSelectionTable.getSelectedColumn() > 0 && applySelectedPreset()) { + ComponentPresetChooserDialog.this.setVisible(false); + } + } + }); // Close buttons JButton closeButton = new SelectColorButton(trans.get("dlg.but.close")); @@ -158,6 +173,7 @@ public class ComponentPresetChooserDialog extends JDialog { @Override public void actionPerformed(ActionEvent e) { ComponentPresetChooserDialog.this.setVisible(false); + applySelectedPreset(); } }); panel.add(closeButton, "spanx, right, tag close"); @@ -169,6 +185,21 @@ public class ComponentPresetChooserDialog extends JDialog { updateFilters(); } + + /** + * Applies the currently selected preset to presetModel. + * + * @return true if the preset was applied, false if otherwise. + */ + private boolean applySelectedPreset() { + if (presetModel == null) return false; + ComponentPreset preset = getSelectedComponentPreset(); + if (preset != null) { + presetModel.setSelectedItem(preset); + return true; + } + return false; + } private JPanel getFilterCheckboxes(XTableColumnModel tm, int legacyColumnIndex) {