From 03cd1df7d4627e9b96bc3dbe98de0c2e1e1d7b97 Mon Sep 17 00:00:00 2001 From: SiboVG Date: Sun, 14 Aug 2022 11:43:39 +0200 Subject: [PATCH] Refactor MaterialPanel to custom class --- .../gui/configdialog/BodyTubeConfig.java | 14 +-- .../configdialog/EllipticalFinSetConfig.java | 3 +- .../configdialog/FreeformFinSetConfig.java | 3 +- .../gui/configdialog/InnerTubeConfig.java | 4 +- .../gui/configdialog/LaunchLugConfig.java | 3 +- .../gui/configdialog/MaterialPanel.java | 108 ++++++++++++++++++ .../gui/configdialog/NoseConeConfig.java | 3 +- .../gui/configdialog/RailButtonConfig.java | 4 +- .../gui/configdialog/RingComponentConfig.java | 6 +- .../configdialog/RocketComponentConfig.java | 77 ------------- .../gui/configdialog/ShockCordConfig.java | 4 +- .../gui/configdialog/TransitionConfig.java | 3 +- .../configdialog/TrapezoidFinSetConfig.java | 3 +- .../gui/configdialog/TubeFinSetConfig.java | 3 +- 14 files changed, 137 insertions(+), 101 deletions(-) create mode 100644 swing/src/net/sf/openrocket/gui/configdialog/MaterialPanel.java diff --git a/swing/src/net/sf/openrocket/gui/configdialog/BodyTubeConfig.java b/swing/src/net/sf/openrocket/gui/configdialog/BodyTubeConfig.java index 39fbaa2ba..712060cdf 100644 --- a/swing/src/net/sf/openrocket/gui/configdialog/BodyTubeConfig.java +++ b/swing/src/net/sf/openrocket/gui/configdialog/BodyTubeConfig.java @@ -6,8 +6,6 @@ import javax.swing.JDialog; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JSpinner; -import javax.swing.JTextField; -import javax.swing.SwingUtilities; import net.miginfocom.swing.MigLayout; import net.sf.openrocket.document.OpenRocketDocument; @@ -25,11 +23,9 @@ import net.sf.openrocket.rocketcomponent.SymmetricComponent; import net.sf.openrocket.startup.Application; import net.sf.openrocket.unit.UnitGroup; -import java.awt.event.FocusEvent; -import java.awt.event.FocusListener; -import java.awt.event.MouseEvent; -import java.awt.event.MouseListener; -import java.util.Arrays; +import java.awt.Component; +import java.util.ArrayList; +import java.util.List; @SuppressWarnings("serial") public class BodyTubeConfig extends RocketComponentConfig { @@ -106,8 +102,8 @@ public class BodyTubeConfig extends RocketComponentConfig { panel.add(check, "skip, span 2, wrap"); //// Material - panel.add(materialPanel(Material.Type.BULK), - "cell 4 0, gapleft paragraph, aligny 0%, spany"); + MaterialPanel materialPanel = new MaterialPanel(component, document, Material.Type.BULK); + panel.add(materialPanel, "cell 4 0, gapleft paragraph, aligny 0%, spany"); //// General and General properties tabbedPane.insertTab(trans.get("BodyTubecfg.tab.General"), null, panel, diff --git a/swing/src/net/sf/openrocket/gui/configdialog/EllipticalFinSetConfig.java b/swing/src/net/sf/openrocket/gui/configdialog/EllipticalFinSetConfig.java index db07228b2..27acfdb02 100644 --- a/swing/src/net/sf/openrocket/gui/configdialog/EllipticalFinSetConfig.java +++ b/swing/src/net/sf/openrocket/gui/configdialog/EllipticalFinSetConfig.java @@ -174,7 +174,8 @@ public class EllipticalFinSetConfig extends FinSetConfig { //// Material - panel.add(materialPanel(Material.Type.BULK), "span, wrap"); + MaterialPanel materialPanel = new MaterialPanel(component, document, Material.Type.BULK); + panel.add(materialPanel, "span, wrap"); panel.add(filletMaterialPanel(), "span, wrap"); diff --git a/swing/src/net/sf/openrocket/gui/configdialog/FreeformFinSetConfig.java b/swing/src/net/sf/openrocket/gui/configdialog/FreeformFinSetConfig.java index b695e5dbf..53e74399f 100644 --- a/swing/src/net/sf/openrocket/gui/configdialog/FreeformFinSetConfig.java +++ b/swing/src/net/sf/openrocket/gui/configdialog/FreeformFinSetConfig.java @@ -202,7 +202,8 @@ public class FreeformFinSetConfig extends FinSetConfig { } { //// Material - panel.add(materialPanel(Material.Type.BULK), "span, wrap"); + MaterialPanel materialPanel = new MaterialPanel(component, document, Material.Type.BULK); + panel.add(materialPanel, "span, wrap"); panel.add(filletMaterialPanel(), "span, wrap"); } diff --git a/swing/src/net/sf/openrocket/gui/configdialog/InnerTubeConfig.java b/swing/src/net/sf/openrocket/gui/configdialog/InnerTubeConfig.java index 3e3ddb3cb..5ebdeed12 100644 --- a/swing/src/net/sf/openrocket/gui/configdialog/InnerTubeConfig.java +++ b/swing/src/net/sf/openrocket/gui/configdialog/InnerTubeConfig.java @@ -144,8 +144,8 @@ public class InnerTubeConfig extends RocketComponentConfig { panel.add(new BasicSlider(m.getSliderModel(0, 0.1, 1.0)), "wmin 100lp, growx, wrap"); //// Material - panel.add(materialPanel(Material.Type.BULK), - "spanx 4, growx, wrap 15lp"); + MaterialPanel materialPanel = new MaterialPanel(component, document, Material.Type.BULK); + panel.add(materialPanel, "spanx 4, growx, wrap 15lp"); //// Right side of panel ---- diff --git a/swing/src/net/sf/openrocket/gui/configdialog/LaunchLugConfig.java b/swing/src/net/sf/openrocket/gui/configdialog/LaunchLugConfig.java index 8302641bb..a82820ef0 100644 --- a/swing/src/net/sf/openrocket/gui/configdialog/LaunchLugConfig.java +++ b/swing/src/net/sf/openrocket/gui/configdialog/LaunchLugConfig.java @@ -142,7 +142,8 @@ public class LaunchLugConfig extends RocketComponentConfig { }); //// Material - panel.add(materialPanel( Material.Type.BULK), "span, wrap"); + MaterialPanel materialPanel = new MaterialPanel(component, document, Material.Type.BULK); + panel.add(materialPanel, "span, wrap"); primary.add(panel, "grow"); diff --git a/swing/src/net/sf/openrocket/gui/configdialog/MaterialPanel.java b/swing/src/net/sf/openrocket/gui/configdialog/MaterialPanel.java new file mode 100644 index 000000000..602a3c6e7 --- /dev/null +++ b/swing/src/net/sf/openrocket/gui/configdialog/MaterialPanel.java @@ -0,0 +1,108 @@ +package net.sf.openrocket.gui.configdialog; + +import net.miginfocom.swing.MigLayout; +import net.sf.openrocket.document.OpenRocketDocument; +import net.sf.openrocket.gui.adaptors.EnumModel; +import net.sf.openrocket.gui.adaptors.MaterialModel; +import net.sf.openrocket.gui.widgets.SelectColorButton; +import net.sf.openrocket.l10n.Translator; +import net.sf.openrocket.material.Material; +import net.sf.openrocket.rocketcomponent.ExternalComponent; +import net.sf.openrocket.rocketcomponent.RocketComponent; +import net.sf.openrocket.startup.Application; + +import javax.swing.JButton; +import javax.swing.JComboBox; +import javax.swing.JLabel; +import javax.swing.JPanel; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.util.Iterator; + +/** + * Panel for configuring a component's material and finish properties. + */ +public class MaterialPanel extends JPanel { + private static final Translator trans = Application.getTranslator(); + + private final JComboBox materialCombo; + private final JComboBox finishCombo; + + public MaterialPanel(RocketComponent component, OpenRocketDocument document, + Material.Type type, String materialString, String finishString, String partName) { + super(new MigLayout("insets 0")); + JLabel label = new JLabel(materialString); + //// The component material affects the weight of the component. + label.setToolTipText(trans.get("RocketCompCfg.lbl.ttip.componentmaterialaffects")); + this.add(label, "spanx 4, wrap rel"); + + this.materialCombo = new JComboBox<>(new MaterialModel(this, component, type, partName)); + //// The component material affects the weight of the component. + this.materialCombo.setToolTipText(trans.get("RocketCompCfg.combo.ttip.componentmaterialaffects")); + this.add(this.materialCombo, "spanx 4, growx, wrap paragraph"); + + + if (component instanceof ExternalComponent) { + label = new JLabel(finishString); + ////The component finish affects the aerodynamic drag of the component.
+ String tip = trans.get("RocketCompCfg.lbl.longA1") + //// The value indicated is the average roughness height of the surface. + + trans.get("RocketCompCfg.lbl.longA2"); + label.setToolTipText(tip); + this.add(label, "spanx 4, wmin 220lp, wrap rel"); + + this.finishCombo = new JComboBox( + new EnumModel(component, "Finish")); + this.finishCombo.setToolTipText(tip); + this.add(this.finishCombo, "spanx 4, growx, split"); + + //// Set for all + JButton button = new SelectColorButton(trans.get("RocketCompCfg.but.Setforall")); + //// Set this finish for all components of the rocket. + button.setToolTipText(trans.get("RocketCompCfg.but.ttip.Setforall")); + button.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + ExternalComponent.Finish f = ((ExternalComponent) component).getFinish(); + try { + document.startUndo("Set rocket finish"); + + // Do changes + Iterator iter = component.getRoot().iterator(); + while (iter.hasNext()) { + RocketComponent c = iter.next(); + if (c instanceof ExternalComponent) { + ((ExternalComponent) c).setFinish(f); + } + } + } finally { + document.stopUndo(); + } + } + }); + this.add(button, "wrap paragraph"); + } else { + this.finishCombo = null; + } + } + + public MaterialPanel(RocketComponent component, OpenRocketDocument document, + Material.Type type, String partName) { + this(component, document, type, trans.get("RocketCompCfg.lbl.Componentmaterial"), + trans.get("RocketCompCfg.lbl.Componentfinish"), partName); + } + + public MaterialPanel(RocketComponent component, OpenRocketDocument document, + Material.Type type) { + this(component, document, type, trans.get("RocketCompCfg.lbl.Componentmaterial"), + trans.get("RocketCompCfg.lbl.Componentfinish"), "Material"); + } + + public JComboBox getMaterialCombo() { + return materialCombo; + } + + public JComboBox getFinishCombo() { + return finishCombo; + } +} diff --git a/swing/src/net/sf/openrocket/gui/configdialog/NoseConeConfig.java b/swing/src/net/sf/openrocket/gui/configdialog/NoseConeConfig.java index 5f5881abc..7bb3473a8 100644 --- a/swing/src/net/sf/openrocket/gui/configdialog/NoseConeConfig.java +++ b/swing/src/net/sf/openrocket/gui/configdialog/NoseConeConfig.java @@ -147,7 +147,8 @@ public class NoseConeConfig extends RocketComponentConfig { //// Material - panel2.add(materialPanel( Material.Type.BULK), "span, wrap"); + MaterialPanel materialPanel = new MaterialPanel(component, document, Material.Type.BULK); + panel2.add(materialPanel, "span, wrap"); panel.add(panel2, "cell 4 0, gapleft paragraph, aligny 0%, spany"); diff --git a/swing/src/net/sf/openrocket/gui/configdialog/RailButtonConfig.java b/swing/src/net/sf/openrocket/gui/configdialog/RailButtonConfig.java index be4803c42..7e9d9b178 100644 --- a/swing/src/net/sf/openrocket/gui/configdialog/RailButtonConfig.java +++ b/swing/src/net/sf/openrocket/gui/configdialog/RailButtonConfig.java @@ -7,7 +7,6 @@ import javax.swing.JPanel; import javax.swing.JSpinner; import net.miginfocom.swing.MigLayout; -import net.sf.openrocket.database.Databases; import net.sf.openrocket.document.OpenRocketDocument; import net.sf.openrocket.gui.SpinnerEditor; import net.sf.openrocket.gui.adaptors.DoubleModel; @@ -128,7 +127,8 @@ public class RailButtonConfig extends RocketComponentConfig { panel.add(instanceablePanel(rbc), "span, wrap"); //// Material - panel.add(materialPanel(Material.Type.BULK),"span, wrap"); + MaterialPanel materialPanel = new MaterialPanel(component, document, Material.Type.BULK); + panel.add(materialPanel,"span, wrap"); primary.add(panel, "grow"); diff --git a/swing/src/net/sf/openrocket/gui/configdialog/RingComponentConfig.java b/swing/src/net/sf/openrocket/gui/configdialog/RingComponentConfig.java index 27c2a4282..ad7521ea7 100644 --- a/swing/src/net/sf/openrocket/gui/configdialog/RingComponentConfig.java +++ b/swing/src/net/sf/openrocket/gui/configdialog/RingComponentConfig.java @@ -156,15 +156,15 @@ public class RingComponentConfig extends RocketComponentConfig { //// Material - JPanel sub = materialPanel( Material.Type.BULK); + MaterialPanel materialPanel = new MaterialPanel(component, document, Material.Type.BULK); if (component instanceof EngineBlock) { final DescriptionArea desc = new DescriptionArea(6); //// An engine block stops the motor from moving forwards in the motor mount tube.

In order to add a motor, create a body tube or inner tube and mark it as a motor mount in the Motor tab. desc.setText(trans.get("ringcompcfg.EngineBlock.desc")); - sub.add(desc, "width 1px, growx, wrap"); + materialPanel.add(desc, "width 1px, growx, wrap"); } - panel.add(sub, "cell 4 0, gapleft paragraph, aligny 0%, spany"); + panel.add(materialPanel, "cell 4 0, gapleft paragraph, aligny 0%, spany"); return panel; } diff --git a/swing/src/net/sf/openrocket/gui/configdialog/RocketComponentConfig.java b/swing/src/net/sf/openrocket/gui/configdialog/RocketComponentConfig.java index 57e7568d2..4000e15ca 100644 --- a/swing/src/net/sf/openrocket/gui/configdialog/RocketComponentConfig.java +++ b/swing/src/net/sf/openrocket/gui/configdialog/RocketComponentConfig.java @@ -30,9 +30,7 @@ import net.sf.openrocket.document.OpenRocketDocument; import net.sf.openrocket.gui.SpinnerEditor; import net.sf.openrocket.gui.adaptors.BooleanModel; import net.sf.openrocket.gui.adaptors.DoubleModel; -import net.sf.openrocket.gui.adaptors.EnumModel; import net.sf.openrocket.gui.adaptors.IntegerModel; -import net.sf.openrocket.gui.adaptors.MaterialModel; import net.sf.openrocket.gui.adaptors.PresetModel; import net.sf.openrocket.gui.components.BasicSlider; import net.sf.openrocket.gui.components.StyledLabel; @@ -42,10 +40,8 @@ import net.sf.openrocket.gui.dialogs.preset.ComponentPresetChooserDialog; import net.sf.openrocket.gui.util.GUIUtil; import net.sf.openrocket.gui.widgets.SelectColorButton; import net.sf.openrocket.l10n.Translator; -import net.sf.openrocket.material.Material; import net.sf.openrocket.preset.ComponentPreset; import net.sf.openrocket.rocketcomponent.*; -import net.sf.openrocket.rocketcomponent.ExternalComponent.Finish; import net.sf.openrocket.rocketcomponent.position.AxialMethod; import net.sf.openrocket.startup.Application; import net.sf.openrocket.unit.UnitGroup; @@ -277,79 +273,6 @@ public class RocketComponentConfig extends JPanel { appearancePanel.clearConfigListeners(); } } - - protected JPanel materialPanel(Material.Type type) { - ////Component material: and Component finish: - return materialPanel(type, - trans.get("RocketCompCfg.lbl.Componentmaterial"), - trans.get("RocketCompCfg.lbl.Componentfinish"), - "Material"); - } - - protected JPanel materialPanel(Material.Type type, String partName){ - return materialPanel(type, trans.get("RocketCompCfg.lbl.Componentmaterial"), - trans.get("RocketCompCfg.lbl.Componentfinish"), partName); - } - - protected JPanel materialPanel(Material.Type type, - String materialString, - String finishString, - String partName) { - - JPanel subPanel = new JPanel(new MigLayout("insets 0")); - JLabel label = new JLabel(materialString); - //// The component material affects the weight of the component. - label.setToolTipText(trans.get("RocketCompCfg.lbl.ttip.componentmaterialaffects")); - subPanel.add(label, "spanx 4, wrap rel"); - - JComboBox materialCombo = new JComboBox(new MaterialModel(subPanel, component, type, partName)); - //// The component material affects the weight of the component. - materialCombo.setToolTipText(trans.get("RocketCompCfg.combo.ttip.componentmaterialaffects")); - subPanel.add(materialCombo, "spanx 4, growx, wrap paragraph"); - - - if (component instanceof ExternalComponent) { - label = new JLabel(finishString); - ////The component finish affects the aerodynamic drag of the component.
- String tip = trans.get("RocketCompCfg.lbl.longA1") - //// The value indicated is the average roughness height of the surface. - + trans.get("RocketCompCfg.lbl.longA2"); - label.setToolTipText(tip); - subPanel.add(label, "spanx 4, wmin 220lp, wrap rel"); - - JComboBox finishCombo = new JComboBox( - new EnumModel(component, "Finish")); - finishCombo.setToolTipText(tip); - subPanel.add( finishCombo, "spanx 4, growx, split"); - - //// Set for all - JButton button = new SelectColorButton(trans.get("RocketCompCfg.but.Setforall")); - //// Set this finish for all components of the rocket. - button.setToolTipText(trans.get("RocketCompCfg.but.ttip.Setforall")); - button.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - Finish f = ((ExternalComponent) component).getFinish(); - try { - document.startUndo("Set rocket finish"); - - // Do changes - Iterator iter = component.getRoot().iterator(); - while (iter.hasNext()) { - RocketComponent c = iter.next(); - if (c instanceof ExternalComponent) { - ((ExternalComponent) c).setFinish(f); - } - } - } finally { - document.stopUndo(); - } - } - }); - subPanel.add(button, "wrap paragraph"); - } - return subPanel; - } public int getSelectedTabIndex() { return tabbedPane.getSelectedIndex(); diff --git a/swing/src/net/sf/openrocket/gui/configdialog/ShockCordConfig.java b/swing/src/net/sf/openrocket/gui/configdialog/ShockCordConfig.java index a7a6e8a78..48fa2501b 100644 --- a/swing/src/net/sf/openrocket/gui/configdialog/ShockCordConfig.java +++ b/swing/src/net/sf/openrocket/gui/configdialog/ShockCordConfig.java @@ -56,7 +56,9 @@ public class ShockCordConfig extends RocketComponentConfig { // Material //// Shock cord material: - panel.add(materialPanel(Material.Type.LINE, trans.get("ShockCordCfg.lbl.Shockcordmaterial"), null, "Material"), "spanx 4, wrap"); + MaterialPanel materialPanel = new MaterialPanel(component, document, Material.Type.LINE, + trans.get("ShockCordCfg.lbl.Shockcordmaterial"), null, "Material"); + panel.add(materialPanel, "spanx 4, wrap"); diff --git a/swing/src/net/sf/openrocket/gui/configdialog/TransitionConfig.java b/swing/src/net/sf/openrocket/gui/configdialog/TransitionConfig.java index 05975823b..33793e290 100644 --- a/swing/src/net/sf/openrocket/gui/configdialog/TransitionConfig.java +++ b/swing/src/net/sf/openrocket/gui/configdialog/TransitionConfig.java @@ -178,7 +178,8 @@ public class TransitionConfig extends RocketComponentConfig { //// Material - panel2.add(materialPanel(Material.Type.BULK), "span, wrap"); + MaterialPanel materialPanel = new MaterialPanel(component, document, Material.Type.BULK); + panel2.add(materialPanel, "span, wrap"); panel.add(panel2, "cell 4 0, gapleft paragraph, aligny 0%, spany"); //// General and General properties diff --git a/swing/src/net/sf/openrocket/gui/configdialog/TrapezoidFinSetConfig.java b/swing/src/net/sf/openrocket/gui/configdialog/TrapezoidFinSetConfig.java index 208cd2aac..d8acc3b80 100644 --- a/swing/src/net/sf/openrocket/gui/configdialog/TrapezoidFinSetConfig.java +++ b/swing/src/net/sf/openrocket/gui/configdialog/TrapezoidFinSetConfig.java @@ -223,7 +223,8 @@ public class TrapezoidFinSetConfig extends FinSetConfig { //// Material - panel.add(materialPanel(Material.Type.BULK), "span, wrap"); + MaterialPanel materialPanel = new MaterialPanel(component, document, Material.Type.BULK); + panel.add(materialPanel, "span, wrap"); diff --git a/swing/src/net/sf/openrocket/gui/configdialog/TubeFinSetConfig.java b/swing/src/net/sf/openrocket/gui/configdialog/TubeFinSetConfig.java index e9de11352..45fcc5f7e 100644 --- a/swing/src/net/sf/openrocket/gui/configdialog/TubeFinSetConfig.java +++ b/swing/src/net/sf/openrocket/gui/configdialog/TubeFinSetConfig.java @@ -158,7 +158,8 @@ public class TubeFinSetConfig extends RocketComponentConfig { //// Material - panel.add(materialPanel(Material.Type.BULK), "span, wrap"); + MaterialPanel materialPanel = new MaterialPanel(component, document, Material.Type.BULK); + panel.add(materialPanel, "span, wrap"); primary.add(panel, "grow");