From fc0d8bc438e765c2611336d07525206830ad8034 Mon Sep 17 00:00:00 2001 From: SiboVG Date: Sun, 12 Feb 2023 09:06:08 +0000 Subject: [PATCH 1/2] [#2034] Encapsulate instances in separate panel --- core/resources/l10n/messages.properties | 7 ++- core/resources/l10n/messages_ar.properties | 6 +- core/resources/l10n/messages_nl.properties | 6 +- core/resources/l10n/messages_ru.properties | 6 +- .../gui/configdialog/InstancesPanel.java | 61 +++++++++++++++++++ .../gui/configdialog/RailButtonConfig.java | 25 +------- 6 files changed, 80 insertions(+), 31 deletions(-) create mode 100644 swing/src/net/sf/openrocket/gui/configdialog/InstancesPanel.java diff --git a/core/resources/l10n/messages.properties b/core/resources/l10n/messages.properties index 76cbc88c3..e7f8ae5e9 100644 --- a/core/resources/l10n/messages.properties +++ b/core/resources/l10n/messages.properties @@ -971,8 +971,6 @@ RocketCompCfg.checkbox.Endcapped = End capped RocketCompCfg.checkbox.Endcapped.ttip = Caps (closes) the end of the shoulder. RocketCompCfg.title.Aftshoulder = Aft shoulder RocketCompCfg.border.Foreshoulder = Fore shoulder -RocketCompCfg.lbl.InstanceCount = Instance Count: -RocketCompCfg.lbl.InstanceSeparation = Instance Separation: RocketCompCfg.tab.Outside = Outside RocketCompCfg.tab.Inside = Inside RocketCompCfg.tab.RightSide = Right Side @@ -985,6 +983,11 @@ RocketCompCfg.CancelOperation.title = Cancel operation RocketCompCfg.CancelOperation.checkbox.dontAskAgain = Don't ask me again RocketCompCfg.btn.ComponentInfo.ttip = Show/hide informative text about this component. +! InstancesPanel +InstancesPanel.title.Instances = Instances +InstancesPanel.lbl.InstanceCount = Instance Count: +InstancesPanel.lbl.InstanceSeparation = Instance Separation: + ! MaterialPanel MaterialPanel.lbl.ComponentMaterial = Component material: MaterialPanel.lbl.ComponentFinish = Component finish: diff --git a/core/resources/l10n/messages_ar.properties b/core/resources/l10n/messages_ar.properties index ece4864e8..2fc671466 100644 --- a/core/resources/l10n/messages_ar.properties +++ b/core/resources/l10n/messages_ar.properties @@ -962,13 +962,15 @@ RocketCompCfg.checkbox.Endcapped.ttip = .يغلق نهاية الكتف RocketCompCfg.title.Aftshoulder = مؤخرة الكتف RocketCompCfg.border.Foreshoulder = مقدمة الكتف !RocketCompCfg.lbl.Length = :الطول -RocketCompCfg.lbl.InstanceCount = عدد المثيل -RocketCompCfg.lbl.InstanceSeparation = فصل المثيل RocketCompCfg.tab.Outside = من الخارج RocketCompCfg.tab.Inside = من الداخل RocketCompCfg.tab.RightSide = الجانب اليميني RocketCompCfg.tab.LeftSide = الجانب اليساري +! InstancesPanel +InstancesPanel.lbl.InstanceCount = عدد المثيل +InstancesPanel.lbl.InstanceSeparation = فصل المثيل + ! ComponentInfo ComponentInfo.EngineBlock = .كتلة المحرك تمنعه من التحرك للأمام في أنبوب الحامل للمحرك

.من أجل إضافة محرك ، قم بإنشاء أنبوب جسم أو أنبوب داخلي وقم بتمييزه على أنه حامل محرك في علامة تبويب المحرك diff --git a/core/resources/l10n/messages_nl.properties b/core/resources/l10n/messages_nl.properties index 2284cf8af..a8a009530 100644 --- a/core/resources/l10n/messages_nl.properties +++ b/core/resources/l10n/messages_nl.properties @@ -909,8 +909,6 @@ RocketCompCfg.ttip.Endcapped = Of het einde van de schouder is afgedekt. RocketCompCfg.title.Aftshoulder = Achterschouder RocketCompCfg.border.Foreshoulder = Voorschouder !RocketCompCfg.lbl.Length = Lengte: -RocketCompCfg.lbl.InstanceCount = Aantal instanties -RocketCompCfg.lbl.InstanceSeparation = Instantie afstand RocketCompCfg.tab.Outside = Buitenkant RocketCompCfg.tab.Inside = Binnenkant RocketCompCfg.tab.RightSide = Rechterkant @@ -923,6 +921,10 @@ RocketCompCfg.CancelOperation.title = Annuleren RocketCompCfg.CancelOperation.checkbox.dontAskAgain = Vraag me niet opnieuw RocketCompCfg.btn.ComponentInfo.ttip = Toon/verberg informatieve text over deze component. +! InstancesPanel +InstancesPanel.lbl.InstanceCount = Aantal instanties +InstancesPanel.lbl.InstanceSeparation = Instantie afstand + ! ComponentInfo ComponentInfo.EngineBlock = Een motorblok voorkomt dat de motor voorwaarts beweegt in de buis van de motorsteun.

Om een motor toe te voegen, maak een rompbuis of binnenbuis en markeer het als een motorbevestiging in het Motortabblad. diff --git a/core/resources/l10n/messages_ru.properties b/core/resources/l10n/messages_ru.properties index 124ca6bc8..a66ab2e3c 100644 --- a/core/resources/l10n/messages_ru.properties +++ b/core/resources/l10n/messages_ru.properties @@ -940,13 +940,15 @@ RocketCompCfg.checkbox.Endcapped.ttip = \u0417\u0430\u0433\u043B\u0443\u0448\u04 RocketCompCfg.title.Aftshoulder = \u0417\u0430\u0434\u043D\u0438\u0439 \u0432\u044B\u0441\u0442\u0443\u043F RocketCompCfg.border.Foreshoulder = \u041F\u0435\u0440\u0435\u0434\u043D\u0438\u0439 \u0432\u044B\u0441\u0442\u0443\u043F !RocketCompCfg.lbl.Length = \u0414\u043B\u0438\u043D\u0430: -RocketCompCfg.lbl.InstanceCount = \u041A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u044D\u043A\u0437\u0435\u043C\u043F\u043B\u044F\u0440\u043E\u0432 -RocketCompCfg.lbl.InstanceSeparation = \u0420\u0430\u0437\u0434\u0435\u043B\u0435\u043D\u0438\u0435 \u044D\u043A\u0437\u0435\u043C\u043F\u043B\u044F\u0440\u043E\u0432 RocketCompCfg.tab.Outside = \u0421\u043D\u0430\u0440\u0443\u0436\u0438 RocketCompCfg.tab.Inside = \u0412\u043D\u0443\u0442\u0440\u0438 RocketCompCfg.tab.RightSide = \u0421\u043F\u0440\u0430\u0432\u0430 RocketCompCfg.tab.LeftSide = \u0421\u043B\u0435\u0432\u0430 +! InstancesPanel +InstancesPanel.lbl.InstanceCount = \u041A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u044D\u043A\u0437\u0435\u043C\u043F\u043B\u044F\u0440\u043E\u0432 +InstancesPanel.lbl.InstanceSeparation = \u0420\u0430\u0437\u0434\u0435\u043B\u0435\u043D\u0438\u0435 \u044D\u043A\u0437\u0435\u043C\u043F\u043B\u044F\u0440\u043E\u0432 + ! ComponentInfo ComponentInfo.EngineBlock = \u0423\u043F\u043E\u0440 \u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043B\u044F \u043F\u0440\u0435\u043F\u044F\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0434\u0432\u0438\u0436\u0435\u043D\u0438\u044E \u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043B\u044F \u0432\u043F\u0435\u0440\u0435\u0434 \u0432 \u0442\u0440\u0443\u0431\u0435.

\u0414\u043B\u044F \u0442\u043E\u0433\u043E \u0447\u0442\u043E\u0431\u044B \u0434\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043B\u044C, \u0441\u043E\u0437\u0434\u0430\u0439\u0442\u0435 \u041A\u043E\u0440\u043F\u0443\u0441\u043D\u0443\u044E \u0442\u0440\u0443\u0431\u0443 \u0438\u043B\u0438 \u0412\u043D\u0443\u0442\u0440\u0435\u043D\u043D\u044E\u044E \u0442\u0440\u0443\u0431\u0443 \u0438 \u043E\u0442\u043C\u0435\u0442\u044C\u0442\u0435 \u044D\u0442\u043E\u0442 \u044D\u043B\u0435\u043C\u0435\u043D\u0442 \u043A\u0430\u043A \u043A\u0440\u0435\u043F\u0435\u0436 \u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043B\u044F \u043D\u0430 \u0432\u043A\u043B\u0430\u0434\u043A\u0435 \u0414\u0432\u0438\u0433\u0430\u0442\u0435\u043B\u044C . diff --git a/swing/src/net/sf/openrocket/gui/configdialog/InstancesPanel.java b/swing/src/net/sf/openrocket/gui/configdialog/InstancesPanel.java new file mode 100644 index 000000000..3a10c7db0 --- /dev/null +++ b/swing/src/net/sf/openrocket/gui/configdialog/InstancesPanel.java @@ -0,0 +1,61 @@ +package net.sf.openrocket.gui.configdialog; + +import net.miginfocom.swing.MigLayout; +import net.sf.openrocket.gui.SpinnerEditor; +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.components.BasicSlider; +import net.sf.openrocket.gui.components.UnitSelector; +import net.sf.openrocket.l10n.Translator; +import net.sf.openrocket.rocketcomponent.RocketComponent; +import net.sf.openrocket.rocketcomponent.position.AxialMethod; +import net.sf.openrocket.startup.Application; +import net.sf.openrocket.unit.UnitGroup; + +import javax.swing.BorderFactory; +import javax.swing.JComboBox; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JSpinner; +import java.awt.Component; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.util.EventObject; +import java.util.List; + +/** + * Panel for configuring a component's duplication instances. + */ +public class InstancesPanel extends JPanel { + private static final Translator trans = Application.getTranslator(); + + public InstancesPanel(RocketComponent component, List order) { + super(new MigLayout("gap rel unrel", "[][65lp::][30lp::]")); + this.setBorder(BorderFactory.createTitledBorder(trans.get("InstancesPanel.title.Instances"))); + + {//// Instance Count + add(new JLabel(trans.get("InstancesPanel.lbl.InstanceCount"))); + IntegerModel countModel = new IntegerModel(component, "InstanceCount", 1); + JSpinner countSpinner = new JSpinner( countModel.getSpinnerModel()); + countSpinner.setEditor(new SpinnerEditor(countSpinner)); + add(countSpinner, "growx, wrap rel"); + order.add(((SpinnerEditor) countSpinner.getEditor()).getTextField()); + } + + { //// Instance separation + add(new JLabel(trans.get("InstancesPanel.lbl.InstanceSeparation"))); + DoubleModel separationModel = new DoubleModel(component, "InstanceSeparation", UnitGroup.UNITS_LENGTH); + JSpinner separationSpinner = new JSpinner( separationModel.getSpinnerModel()); + separationSpinner.setEditor(new SpinnerEditor(separationSpinner)); + add(separationSpinner, "growx"); + order.add(((SpinnerEditor) separationSpinner.getEditor()).getTextField()); + add(new UnitSelector(separationModel), "growx"); + double maxSeparationDistance = 0.1; + if (component.getParent() != null && component.getParent().getLength() > 0) { + maxSeparationDistance = component.getParent().getLength(); + } + add(new BasicSlider(separationModel.getSliderModel(0, 0.001, maxSeparationDistance)), "w 100lp, wrap para"); + } + } +} diff --git a/swing/src/net/sf/openrocket/gui/configdialog/RailButtonConfig.java b/swing/src/net/sf/openrocket/gui/configdialog/RailButtonConfig.java index 1c6d3c53e..3ee156995 100644 --- a/swing/src/net/sf/openrocket/gui/configdialog/RailButtonConfig.java +++ b/swing/src/net/sf/openrocket/gui/configdialog/RailButtonConfig.java @@ -111,29 +111,8 @@ public class RailButtonConfig extends RocketComponentConfig { panel.add(new BasicSlider(heightModel.getSliderModel(0, 0.02)), "w 100lp, wrap 30lp"); } - { //// Instance Count - panel.add(new JLabel(trans.get("RocketCompCfg.lbl.InstanceCount"))); - IntegerModel countModel = new IntegerModel(component, "InstanceCount", 1); - JSpinner countSpinner = new JSpinner( countModel.getSpinnerModel()); - countSpinner.setEditor(new SpinnerEditor(countSpinner)); - panel.add(countSpinner, "growx, wrap rel"); - order.add(((SpinnerEditor) countSpinner.getEditor()).getTextField()); - } - - { //// Instance separation - panel.add(new JLabel(trans.get("RocketCompCfg.lbl.InstanceSeparation"))); - DoubleModel separationModel = new DoubleModel(component, "InstanceSeparation", UnitGroup.UNITS_LENGTH); - JSpinner separationSpinner = new JSpinner( separationModel.getSpinnerModel()); - separationSpinner.setEditor(new SpinnerEditor(separationSpinner)); - panel.add(separationSpinner, "growx"); - order.add(((SpinnerEditor) separationSpinner.getEditor()).getTextField()); - panel.add(new UnitSelector(separationModel), "growx"); - double maxSeparationDistance = 0.1; - if (component.getParent() != null && component.getParent().getLength() > 0) { - maxSeparationDistance = component.getParent().getLength(); - } - panel.add(new BasicSlider(separationModel.getSliderModel(0, 0.001, maxSeparationDistance)), "w 100lp, wrap para"); - } + // -------- Instances ------ + panel.add(new InstancesPanel(component, order), "span, grow, wrap para"); primary.add(panel, "grow, gapright 40lp"); From b2f559e3db791dfa6d4a8487198b4be9f3c3cbb3 Mon Sep 17 00:00:00 2001 From: SiboVG Date: Sun, 12 Feb 2023 18:34:13 +0000 Subject: [PATCH 2/2] Re-implement #2038 --- .../src/net/sf/openrocket/gui/configdialog/InstancesPanel.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/swing/src/net/sf/openrocket/gui/configdialog/InstancesPanel.java b/swing/src/net/sf/openrocket/gui/configdialog/InstancesPanel.java index 3a10c7db0..6f809e557 100644 --- a/swing/src/net/sf/openrocket/gui/configdialog/InstancesPanel.java +++ b/swing/src/net/sf/openrocket/gui/configdialog/InstancesPanel.java @@ -55,7 +55,7 @@ public class InstancesPanel extends JPanel { if (component.getParent() != null && component.getParent().getLength() > 0) { maxSeparationDistance = component.getParent().getLength(); } - add(new BasicSlider(separationModel.getSliderModel(0, 0.001, maxSeparationDistance)), "w 100lp, wrap para"); + add(new BasicSlider(separationModel.getSliderModel(-maxSeparationDistance, maxSeparationDistance)), "w 100lp, wrap para"); } } }