Change general tab categorizations

This commit is contained in:
SiboVG 2023-01-13 02:45:58 +01:00
parent 6f2a633fdc
commit a8945c7bb0
12 changed files with 170 additions and 177 deletions

View File

@ -810,7 +810,6 @@ custmatdlg.checkbox.Addmaterial = Add material to database
! Ring Component Config ! Ring Component Config
ringcompcfg.lbl.Attributes = Attributes
ringcompcfg.OuterRadius = OuterRadius ringcompcfg.OuterRadius = OuterRadius
ringcompcfg.Automatic = Automatic ringcompcfg.Automatic = Automatic
ringcompcfg.AutomaticOuter.ttip = Matches outer diameter to the inner diameter of the parent component. ringcompcfg.AutomaticOuter.ttip = Matches outer diameter to the inner diameter of the parent component.
@ -818,7 +817,6 @@ ringcompcfg.InnerRadius = InnerRadius
ringcompcfg.AutomaticInner.ttip = Matches inner diameter to the outer diameter of the child inner tube. ringcompcfg.AutomaticInner.ttip = Matches inner diameter to the outer diameter of the child inner tube.
ringcompcfg.Thickness = Thickness ringcompcfg.Thickness = Thickness
ringcompcfg.Length = Length ringcompcfg.Length = Length
ringcompcfg.lbl.Placement = Placement
ringcompcfg.Positionrelativeto = Position relative to: ringcompcfg.Positionrelativeto = Position relative to:
ringcompcfg.plus = plus ringcompcfg.plus = plus
ringcompcfg.PositionValue = PositionValue ringcompcfg.PositionValue = PositionValue
@ -1141,8 +1139,6 @@ RailBtnCfg.tab.General = General
RailBtnCfg.tab.GeneralProp = General properties RailBtnCfg.tab.GeneralProp = General properties
! MassComponentConfig ! MassComponentConfig
MassComponentCfg.lbl.Attributes = Attributes
MassComponentCfg.lbl.Placement = Placement
MassComponentCfg.lbl.Mass = Mass: MassComponentCfg.lbl.Mass = Mass:
MassComponentCfg.lbl.Density = Approximate density: MassComponentCfg.lbl.Density = Approximate density:
MassComponentCfg.lbl.Length = Length: MassComponentCfg.lbl.Length = Length:
@ -1234,8 +1230,6 @@ ParachuteCfg.but.ResetRadial.ttip = Resets the component to the rocket centerlin
ParachuteCfg.lbl.plusdelay = plus ParachuteCfg.lbl.plusdelay = plus
! ShockCordConfig ! ShockCordConfig
ShockCordCfg.lbl.ShockcordAttributes = Attributes
ShockCordCfg.lbl.ShockcordPlacement = Placement
ShockCordCfg.lbl.Shockcordlength = Shock cord length: ShockCordCfg.lbl.Shockcordlength = Shock cord length:
ShockCordCfg.lbl.Shockcordmaterial = Shock cord material: ShockCordCfg.lbl.Shockcordmaterial = Shock cord material:
ShockCordCfg.lbl.Posrelativeto = Position relative to: ShockCordCfg.lbl.Posrelativeto = Position relative to:

View File

@ -1096,8 +1096,6 @@ RailBtnCfg.tab.General = عام
RailBtnCfg.tab.GeneralProp = الخصائص العامة RailBtnCfg.tab.GeneralProp = الخصائص العامة
! MassComponentConfig ! MassComponentConfig
MassComponentCfg.lbl.Attributes = صفات
MassComponentCfg.lbl.Placement = تحديد مستوى
MassComponentCfg.lbl.Mass = الكتلة MassComponentCfg.lbl.Mass = الكتلة
MassComponentCfg.lbl.Density = :الكثافة التقريبية MassComponentCfg.lbl.Density = :الكثافة التقريبية
MassComponentCfg.lbl.Length = :الطول MassComponentCfg.lbl.Length = :الطول
@ -1187,8 +1185,6 @@ ParachuteCfg.but.ResetRadial.ttip = .يعيد تعيين المكون إلى خ
ParachuteCfg.lbl.plusdelay = زائد ParachuteCfg.lbl.plusdelay = زائد
! ShockCordConfig ! ShockCordConfig
ShockCordCfg.lbl.ShockcordAttributes = صفات
ShockCordCfg.lbl.ShockcordPlacement = تحديد مستوى
ShockCordCfg.lbl.Shockcordlength = :طول حبل الصدمة ShockCordCfg.lbl.Shockcordlength = :طول حبل الصدمة
ShockCordCfg.lbl.Shockcordmaterial = :المادة المكونة لحبل الصدمة ShockCordCfg.lbl.Shockcordmaterial = :المادة المكونة لحبل الصدمة
ShockCordCfg.lbl.Posrelativeto = :الموضع بالنسبة إلى ShockCordCfg.lbl.Posrelativeto = :الموضع بالنسبة إلى

View File

@ -1071,8 +1071,6 @@ RailBtnCfg.tab.General = \u041E\u0441\u043D\u043E\u0432\u043D\u043E\u0435
RailBtnCfg.tab.GeneralProp = \u041E\u0441\u043D\u043E\u0432\u043D\u044B\u0435 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u044B RailBtnCfg.tab.GeneralProp = \u041E\u0441\u043D\u043E\u0432\u043D\u044B\u0435 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u044B
! MassComponentConfig ! MassComponentConfig
MassComponentCfg.lbl.Attributes = \u0410\u0442\u0440\u0438\u0431\u0443\u0442\u044B
MassComponentCfg.lbl.Placement = \u041F\u043E\u043B\u043E\u0436\u0435\u043D\u0438\u0435
MassComponentCfg.lbl.Mass = \u041C\u0430\u0441\u0441\u0430: MassComponentCfg.lbl.Mass = \u041C\u0430\u0441\u0441\u0430:
MassComponentCfg.lbl.Density = \u041F\u0440\u0438\u0431\u043B\u0438\u0437\u0438\u0442\u0435\u043B\u044C\u043D\u0430\u044F \u043F\u043B\u043E\u0442\u043D\u043E\u0441\u0442\u044C: MassComponentCfg.lbl.Density = \u041F\u0440\u0438\u0431\u043B\u0438\u0437\u0438\u0442\u0435\u043B\u044C\u043D\u0430\u044F \u043F\u043B\u043E\u0442\u043D\u043E\u0441\u0442\u044C:
MassComponentCfg.lbl.Length = \u0414\u043B\u0438\u043D\u0430: MassComponentCfg.lbl.Length = \u0414\u043B\u0438\u043D\u0430:
@ -1162,8 +1160,6 @@ ParachuteCfg.but.ResetRadial.ttip = \u0420\u0430\u0437\u043C\u0435\u0441\u0442\u
ParachuteCfg.lbl.plusdelay = \u043F\u043B\u044E\u0441 ParachuteCfg.lbl.plusdelay = \u043F\u043B\u044E\u0441
! ShockCordConfig ! ShockCordConfig
ShockCordCfg.lbl.ShockcordAttributes = \u0410\u0442\u0440\u0438\u0431\u0443\u0442\u044B
ShockCordCfg.lbl.ShockcordPlacement = \u041F\u043E\u043B\u043E\u0436\u0435\u043D\u0438\u0435
ShockCordCfg.lbl.Shockcordlength = \u0414\u043B\u0438\u043D\u0430 \u0441\u0442\u0440\u043E\u043F\u044B: ShockCordCfg.lbl.Shockcordlength = \u0414\u043B\u0438\u043D\u0430 \u0441\u0442\u0440\u043E\u043F\u044B:
ShockCordCfg.lbl.Shockcordmaterial = \u041C\u0430\u0442\u0435\u0440\u0438\u0430\u043B \u0441\u0442\u0440\u043E\u043F\u044B: ShockCordCfg.lbl.Shockcordmaterial = \u041C\u0430\u0442\u0435\u0440\u0438\u0430\u043B \u0441\u0442\u0440\u043E\u043F\u044B:
ShockCordCfg.lbl.Posrelativeto = \u041F\u043E\u043B\u043E\u0436\u0435\u043D\u0438\u0435 \u043E\u0442\u043D\u043E\u0441\u0438\u0442\u0435\u043B\u044C\u043D\u043E: ShockCordCfg.lbl.Posrelativeto = \u041F\u043E\u043B\u043E\u0436\u0435\u043D\u0438\u0435 \u043E\u0442\u043D\u043E\u0441\u0438\u0442\u0435\u043B\u044C\u043D\u043E:

View File

@ -104,7 +104,7 @@ public class ComponentAssemblyConfig extends RocketComponentConfig {
IntegerModel countModel = new IntegerModel( boosters, "InstanceCount", 1); IntegerModel countModel = new IntegerModel( boosters, "InstanceCount", 1);
JSpinner countSpinner = new JSpinner(countModel.getSpinnerModel()); JSpinner countSpinner = new JSpinner(countModel.getSpinnerModel());
countSpinner.setEditor(new SpinnerEditor(countSpinner)); countSpinner.setEditor(new SpinnerEditor(countSpinner));
motherPanel.add(countSpinner, "wmin 65lp, growx 1, wrap"); motherPanel.add(countSpinner, "wmin 65lp, growx 1, wrap 10lp");
order.add(((SpinnerEditor) countSpinner.getEditor()).getTextField()); order.add(((SpinnerEditor) countSpinner.getEditor()).getTextField());
// setPositions relative to parent component // setPositions relative to parent component

View File

@ -37,7 +37,6 @@ import net.sf.openrocket.gui.adaptors.DoubleModel;
import net.sf.openrocket.gui.adaptors.EnumModel; import net.sf.openrocket.gui.adaptors.EnumModel;
import net.sf.openrocket.gui.components.BasicSlider; import net.sf.openrocket.gui.components.BasicSlider;
import net.sf.openrocket.gui.components.DescriptionArea; import net.sf.openrocket.gui.components.DescriptionArea;
import net.sf.openrocket.gui.components.StyledLabel;
import net.sf.openrocket.gui.components.UnitSelector; import net.sf.openrocket.gui.components.UnitSelector;
import net.sf.openrocket.gui.widgets.SelectColorButton; import net.sf.openrocket.gui.widgets.SelectColorButton;
import net.sf.openrocket.l10n.Translator; import net.sf.openrocket.l10n.Translator;
@ -71,8 +70,7 @@ public class InnerTubeConfig extends RocketComponentConfig {
JSpinner spin; JSpinner spin;
DoubleModel od = null; DoubleModel od = null;
//// Attributes ---- //// ---------------------------- Attributes ----------------------------
panel.add(new StyledLabel(trans.get("InnerTubeCfg.lbl.Attributes"), StyledLabel.Style.BOLD), "wrap unrel");
//// Outer diameter //// Outer diameter
panel.add(new JLabel(trans.get("ThicknessRingCompCfg.tab.Outerdiam"))); panel.add(new JLabel(trans.get("ThicknessRingCompCfg.tab.Outerdiam")));
@ -157,8 +155,7 @@ public class InnerTubeConfig extends RocketComponentConfig {
JPanel panel2 = new JPanel(new MigLayout("gap rel unrel, insets 0", "[][65lp::][30lp::][15lp]", "")); JPanel panel2 = new JPanel(new MigLayout("gap rel unrel, insets 0", "[][65lp::][30lp::][15lp]", ""));
panel.add(panel2, "cell 4 0, gapleft 15lp, aligny 0%, spany"); panel.add(panel2, "cell 4 0, gapleft 15lp, aligny 0%, spany");
//// Placement //// ---------------------------- Placement ----------------------------
panel2.add(new StyledLabel(trans.get("InnerTubeCfg.lbl.Placement"), StyledLabel.Style.BOLD), "wrap unrel");
//// Position relative to: //// Position relative to:
panel2.add(new JLabel(trans.get("ringcompcfg.Positionrelativeto"))); panel2.add(new JLabel(trans.get("ringcompcfg.Positionrelativeto")));

View File

@ -18,7 +18,6 @@ import net.sf.openrocket.gui.adaptors.CustomFocusTraversalPolicy;
import net.sf.openrocket.gui.adaptors.DoubleModel; import net.sf.openrocket.gui.adaptors.DoubleModel;
import net.sf.openrocket.gui.adaptors.EnumModel; import net.sf.openrocket.gui.adaptors.EnumModel;
import net.sf.openrocket.gui.components.BasicSlider; import net.sf.openrocket.gui.components.BasicSlider;
import net.sf.openrocket.gui.components.StyledLabel;
import net.sf.openrocket.gui.components.UnitSelector; import net.sf.openrocket.gui.components.UnitSelector;
import net.sf.openrocket.l10n.Translator; import net.sf.openrocket.l10n.Translator;
import net.sf.openrocket.rocketcomponent.MassComponent; import net.sf.openrocket.rocketcomponent.MassComponent;
@ -39,14 +38,13 @@ public class MassComponentConfig extends RocketComponentConfig {
//// Left side //// Left side
JPanel panel = new JPanel(new MigLayout("gap rel unrel", "[][65lp::][30lp::]", "")); JPanel panel = new JPanel(new MigLayout("gap rel unrel", "[][65lp::][30lp::]", ""));
//// Attributes // Attributes
panel.add(new StyledLabel(trans.get("MassComponentCfg.lbl.Attributes"), StyledLabel.Style.BOLD), "wrap unrel");
//// Mass component type //// Mass component type
panel.add(new JLabel(trans.get("MassComponentCfg.lbl.type"))); panel.add(new JLabel(trans.get("MassComponentCfg.lbl.type")));
final JComboBox<?> typecombo = new JComboBox<MassComponent.MassComponentType>( final JComboBox<?> typecombo = new JComboBox<>(
new EnumModel<MassComponent.MassComponentType>(component, "MassComponentType", new EnumModel<>(component, "MassComponentType",
new MassComponent.MassComponentType[] { new MassComponent.MassComponentType[] {
MassComponent.MassComponentType.MASSCOMPONENT, MassComponent.MassComponentType.MASSCOMPONENT,
MassComponent.MassComponentType.ALTIMETER, MassComponent.MassComponentType.ALTIMETER,
@ -57,7 +55,7 @@ public class MassComponentConfig extends RocketComponentConfig {
MassComponent.MassComponentType.RECOVERYHARDWARE, MassComponent.MassComponentType.RECOVERYHARDWARE,
MassComponent.MassComponentType.BATTERY})); MassComponent.MassComponentType.BATTERY}));
panel.add(typecombo, "spanx, wrap"); panel.add(typecombo, "spanx 3, growx, wrap");
order.add(typecombo); order.add(typecombo);
//// Mass //// Mass
@ -127,17 +125,16 @@ public class MassComponentConfig extends RocketComponentConfig {
//// Right side //// Right side
JPanel panel2 = new JPanel(new MigLayout("gap rel unrel", "[][65lp::][30lp::]", "")); JPanel panel2 = new JPanel(new MigLayout("gap rel unrel, ins 0", "[][65lp::][30lp::]", ""));
panel.add(panel2, "cell 4 0, gapleft paragraph, aligny 0%, spany"); panel.add(panel2, "cell 4 0, gapleft paragraph, aligny 0%, spany");
//// Placement // Placement
panel2.add(new StyledLabel(trans.get("MassComponentCfg.lbl.Placement"), StyledLabel.Style.BOLD), "wrap unrel");
//// Position relative to: //// Position relative to:
panel2.add(new JLabel(trans.get("MassComponentCfg.lbl.PosRelativeto"))); panel2.add(new JLabel(trans.get("MassComponentCfg.lbl.PosRelativeto")));
final EnumModel<AxialMethod> methodModel = new EnumModel<AxialMethod>(component, "AxialMethod", AxialMethod.axialOffsetMethods ); final EnumModel<AxialMethod> methodModel = new EnumModel<>(component, "AxialMethod", AxialMethod.axialOffsetMethods );
final JComboBox<?> methodCombo = new JComboBox<AxialMethod>( methodModel ); final JComboBox<?> methodCombo = new JComboBox<>( methodModel );
panel2.add(methodCombo, "spanx, growx, wrap"); panel2.add(methodCombo, "spanx, growx, wrap");
order.add(methodCombo); order.add(methodCombo);

View File

@ -6,6 +6,7 @@ import java.awt.event.ActionListener;
import java.awt.event.ItemEvent; import java.awt.event.ItemEvent;
import java.awt.event.ItemListener; import java.awt.event.ItemListener;
import javax.swing.BorderFactory;
import javax.swing.ComboBoxModel; import javax.swing.ComboBoxModel;
import javax.swing.JButton; import javax.swing.JButton;
import javax.swing.JCheckBox; import javax.swing.JCheckBox;
@ -48,43 +49,44 @@ public class ParachuteConfig extends RecoveryDeviceConfig {
JPanel primary = new JPanel(new MigLayout()); JPanel primary = new JPanel(new MigLayout());
JPanel panel = new JPanel(new MigLayout("gap rel unrel", "[][65lp::][30lp::][]", "")); JPanel panel = new JPanel(new MigLayout("gap rel unrel", "[][65lp::][30lp::][]", ""));
//// Canopy // ---------------------------- Canopy ----------------------------
panel.add(new StyledLabel(trans.get("ParachuteCfg.lbl.Canopy"), Style.BOLD), "wrap unrel"); JPanel canopyPanel = new JPanel(new MigLayout("gap rel unrel", "[][65lp::][30lp::][]"));
canopyPanel.setBorder(BorderFactory.createTitledBorder(trans.get("ParachuteCfg.lbl.Canopy")));
//// Diameter: //// Diameter:
panel.add(new JLabel(trans.get("ParachuteCfg.lbl.Diameter"))); canopyPanel.add(new JLabel(trans.get("ParachuteCfg.lbl.Diameter")));
DoubleModel m = new DoubleModel(component, "Diameter", UnitGroup.UNITS_LENGTH, 0); DoubleModel m = new DoubleModel(component, "Diameter", UnitGroup.UNITS_LENGTH, 0);
JSpinner spin = new JSpinner(m.getSpinnerModel()); JSpinner spin = new JSpinner(m.getSpinnerModel());
spin.setEditor(new SpinnerEditor(spin)); spin.setEditor(new SpinnerEditor(spin));
panel.add(spin, "growx"); canopyPanel.add(spin, "growx");
order.add(((SpinnerEditor) spin.getEditor()).getTextField()); order.add(((SpinnerEditor) spin.getEditor()).getTextField());
panel.add(new UnitSelector(m), "growx"); canopyPanel.add(new UnitSelector(m), "growx");
panel.add(new BasicSlider(m.getSliderModel(0, 0.4, 1.5)), "w 150lp, wrap"); canopyPanel.add(new BasicSlider(m.getSliderModel(0, 0.4, 1.5)), "w 150lp, wrap");
// TODO COMPLETE Spill hole development // TODO COMPLETE Spill hole development
/* panel.add(new JLabel(trans.get("ParachuteCfg.lbl.SpillDia") + CommonStrings.daggerDouble)); /* pacanopyPanelnel.add(new JLabel(trans.get("ParachuteCfg.lbl.SpillDia") + CommonStrings.daggerDouble));
m = new DoubleModel(component, "SpillDia", UnitGroup.UNITS_LENGTH, 0, 0.08); m = new DoubleModel(component, "SpillDia", UnitGroup.UNITS_LENGTH, 0, 0.08);
// The "max" value does not affect the slider maximum, and manual entry above that value is possible. // The "max" value does not affect the slider maximum, and manual entry above that value is possible.
spin = new JSpinner(m.getSpinnerModel()); spin = new JSpinner(m.getSpinnerModel());
spin.setEditor(new SpinnerEditor(spin)); spin.setEditor(new SpinnerEditor(spin));
panel.add(spin, "growx"); canopyPanel.add(spin, "growx");
panel.add(new UnitSelector(m), "growx"); canopyPanel.add(new UnitSelector(m), "growx");
panel.add(new BasicSlider(m.getSliderModel(0, 0.01, .1)), "w 150lp, wrap"); canopyPanel.add(new BasicSlider(m.getSliderModel(0, 0.01, .1)), "w 150lp, wrap");
// The slider maximum value is "max", however, manual entry above that value is possible. // The slider maximum value is "max", however, manual entry above that value is possible.
*/ */
// TODO END Spill hole development // TODO END Spill hole development
//// Material: //// Material:
panel.add(new JLabel(trans.get("ParachuteCfg.lbl.Material")), "wrap rel"); canopyPanel.add(new JLabel(trans.get("ParachuteCfg.lbl.Material")), "wrap rel");
JComboBox<Material> surfaceMaterialCombo = new JComboBox<Material>(new MaterialModel(panel, component, JComboBox<Material> surfaceMaterialCombo = new JComboBox<Material>(new MaterialModel(canopyPanel, component,
Material.Type.SURFACE)); Material.Type.SURFACE));
surfaceMaterialCombo.setToolTipText(trans.get("ParachuteCfg.combo.MaterialModel")); surfaceMaterialCombo.setToolTipText(trans.get("ParachuteCfg.combo.MaterialModel"));
panel.add( surfaceMaterialCombo, "spanx, growx, wrap 15lp"); canopyPanel.add(surfaceMaterialCombo, "spanx, growx, wrap 15lp");
order.add(surfaceMaterialCombo); order.add(surfaceMaterialCombo);
// Drag Coefficient: // Drag Coefficient:
@ -94,14 +96,14 @@ public class ParachuteConfig extends RecoveryDeviceConfig {
trans.get("ParachuteCfg.lbl.longB2") + " " + trans.get("ParachuteCfg.lbl.longB2") + " " +
trans.get("ParachuteCfg.lbl.longB3"); trans.get("ParachuteCfg.lbl.longB3");
label.setToolTipText(tip); label.setToolTipText(tip);
panel.add(label); canopyPanel.add(label);
m = new DoubleModel(component, "CD", UnitGroup.UNITS_COEFFICIENT, 0); m = new DoubleModel(component, "CD", UnitGroup.UNITS_COEFFICIENT, 0);
spin = new JSpinner(m.getSpinnerModel()); spin = new JSpinner(m.getSpinnerModel());
spin.setToolTipText(tip); spin.setToolTipText(tip);
spin.setEditor(new SpinnerEditor(spin)); spin.setEditor(new SpinnerEditor(spin));
panel.add(spin, "growx"); canopyPanel.add(spin, "growx");
order.add(((SpinnerEditor) spin.getEditor()).getTextField()); order.add(((SpinnerEditor) spin.getEditor()).getTextField());
//// Reset button //// Reset button
@ -114,116 +116,126 @@ public class ParachuteConfig extends RecoveryDeviceConfig {
p.setCD(Parachute.DEFAULT_CD); p.setCD(Parachute.DEFAULT_CD);
} }
}); });
panel.add(button, "spanx, wrap 32lp"); canopyPanel.add(button, "spanx");
order.add(button); order.add(button);
//// Shroud lines panel.add(canopyPanel, "spanx, growx, wrap 10lp");
panel.add(new StyledLabel(trans.get("ParachuteCfg.lbl.Shroudlines"), Style.BOLD), "wrap unrel");
// ---------------------------- Shroud lines ----------------------------
JPanel shroudPanel = new JPanel(new MigLayout("gap rel unrel", "[][65lp::][30lp::][]"));
shroudPanel.setBorder(BorderFactory.createTitledBorder(trans.get("ParachuteCfg.lbl.Shroudlines")));
//// Number of lines: //// Number of lines:
panel.add(new JLabel(trans.get("ParachuteCfg.lbl.Numberoflines"))); shroudPanel.add(new JLabel(trans.get("ParachuteCfg.lbl.Numberoflines")));
IntegerModel im = new IntegerModel(component, "LineCount", 0); IntegerModel im = new IntegerModel(component, "LineCount", 0);
spin = new JSpinner(im.getSpinnerModel()); spin = new JSpinner(im.getSpinnerModel());
spin.setEditor(new SpinnerEditor(spin)); spin.setEditor(new SpinnerEditor(spin));
panel.add(spin, "growx, wrap"); shroudPanel.add(spin, "growx, wrap");
order.add(((SpinnerEditor) spin.getEditor()).getTextField()); order.add(((SpinnerEditor) spin.getEditor()).getTextField());
//// Line length: //// Line length:
panel.add(new JLabel(trans.get("ParachuteCfg.lbl.Linelength"))); shroudPanel.add(new JLabel(trans.get("ParachuteCfg.lbl.Linelength")));
m = new DoubleModel(component, "LineLength", UnitGroup.UNITS_LENGTH, 0); m = new DoubleModel(component, "LineLength", UnitGroup.UNITS_LENGTH, 0);
spin = new JSpinner(m.getSpinnerModel()); spin = new JSpinner(m.getSpinnerModel());
spin.setEditor(new SpinnerEditor(spin)); spin.setEditor(new SpinnerEditor(spin));
panel.add(spin, "growx"); shroudPanel.add(spin, "growx");
order.add(((SpinnerEditor) spin.getEditor()).getTextField()); order.add(((SpinnerEditor) spin.getEditor()).getTextField());
panel.add(new UnitSelector(m), "growx"); shroudPanel.add(new UnitSelector(m), "growx");
panel.add(new BasicSlider(m.getSliderModel(0, 0.4, 1.5)), "w 150lp, wrap"); shroudPanel.add(new BasicSlider(m.getSliderModel(0, 0.4, 1.5)), "w 150lp, wrap");
//// Material: //// Material:
panel.add(new JLabel(trans.get("ParachuteCfg.lbl.Material")), "wrap rel"); shroudPanel.add(new JLabel(trans.get("ParachuteCfg.lbl.Material")), "spanx, wrap rel");
JComboBox<Material> shroudMaterialCombo = JComboBox<Material> shroudMaterialCombo =
new JComboBox<Material>(new MaterialModel(panel, component, Material.Type.LINE, "LineMaterial")); new JComboBox<Material>(new MaterialModel(shroudPanel, component, Material.Type.LINE, "LineMaterial"));
panel.add( shroudMaterialCombo, "spanx, growx, wrap 15lp"); shroudPanel.add(shroudMaterialCombo, "spanx, growx");
order.add(shroudMaterialCombo); order.add(shroudMaterialCombo);
panel.add(shroudPanel, "spanx, wrap");
primary.add(panel, "grow");
// Right side // Right side
primary.add(panel, "grow, gapright 20lp");
panel = new JPanel(new MigLayout("gap rel unrel", "[][65lp::][30lp::][]", "")); panel = new JPanel(new MigLayout("gap rel unrel", "[][65lp::][30lp::][]", ""));
//// Placement // ---------------------------- Placement ----------------------------
panel.add(new StyledLabel(trans.get("ParachuteCfg.lbl.Placement"), Style.BOLD), "wrap unrel"); JPanel placementPanel = new JPanel(new MigLayout("gap rel unrel", "[][65lp::][30lp::][]"));
placementPanel.setBorder(BorderFactory.createTitledBorder(trans.get("ParachuteCfg.lbl.Placement")));
//// Position relative to: //// Position relative to:
panel.add(new JLabel(trans.get("ParachuteCfg.lbl.Posrelativeto"))); placementPanel.add(new JLabel(trans.get("ParachuteCfg.lbl.Posrelativeto")));
final EnumModel<AxialMethod> methodModel = final EnumModel<AxialMethod> methodModel =
new EnumModel<AxialMethod>(component, "AxialMethod", AxialMethod.axialOffsetMethods ); new EnumModel<AxialMethod>(component, "AxialMethod", AxialMethod.axialOffsetMethods );
JComboBox<AxialMethod> positionCombo = new JComboBox<AxialMethod>( methodModel ); JComboBox<AxialMethod> positionCombo = new JComboBox<AxialMethod>( methodModel );
panel.add( positionCombo, "spanx, growx, wrap"); placementPanel.add( positionCombo, "spanx, growx, wrap");
order.add(positionCombo); order.add(positionCombo);
//// plus //// plus
panel.add(new JLabel(trans.get("ParachuteCfg.lbl.plus")), "right"); placementPanel.add(new JLabel(trans.get("ParachuteCfg.lbl.plus")), "right");
m = new DoubleModel(component, "AxialOffset", UnitGroup.UNITS_LENGTH); m = new DoubleModel(component, "AxialOffset", UnitGroup.UNITS_LENGTH);
spin = new JSpinner(m.getSpinnerModel()); spin = new JSpinner(m.getSpinnerModel());
spin.setEditor(new SpinnerEditor(spin)); spin.setEditor(new SpinnerEditor(spin));
focusElement = spin; focusElement = spin;
panel.add(spin, "growx"); placementPanel.add(spin, "growx");
order.add(((SpinnerEditor) spin.getEditor()).getTextField()); order.add(((SpinnerEditor) spin.getEditor()).getTextField());
panel.add(new UnitSelector(m), "growx"); placementPanel.add(new UnitSelector(m), "growx");
panel.add(new BasicSlider(m.getSliderModel( placementPanel.add(new BasicSlider(m.getSliderModel(
new DoubleModel(component.getParent(), "Length", -1.0, UnitGroup.UNITS_NONE), new DoubleModel(component.getParent(), "Length", -1.0, UnitGroup.UNITS_NONE),
new DoubleModel(component.getParent(), "Length"))), new DoubleModel(component.getParent(), "Length"))),
"w 150lp, wrap"); "w 150lp, wrap");
//// Spatial length //// Spatial length
//// Packed length: //// Packed length:
panel.add(new JLabel(trans.get("ParachuteCfg.lbl.Packedlength"))); placementPanel.add(new JLabel(trans.get("ParachuteCfg.lbl.Packedlength")));
m = new DoubleModel(component, "Length", UnitGroup.UNITS_LENGTH, 0); m = new DoubleModel(component, "Length", UnitGroup.UNITS_LENGTH, 0);
spin = new JSpinner(m.getSpinnerModel()); spin = new JSpinner(m.getSpinnerModel());
spin.setEditor(new SpinnerEditor(spin)); spin.setEditor(new SpinnerEditor(spin));
panel.add(spin, "growx"); placementPanel.add(spin, "growx");
order.add(((SpinnerEditor) spin.getEditor()).getTextField()); order.add(((SpinnerEditor) spin.getEditor()).getTextField());
panel.add(new UnitSelector(m), "growx"); placementPanel.add(new UnitSelector(m), "growx");
panel.add(new BasicSlider(m.getSliderModel(0, 0.1, 0.5)), "w 150lp, wrap"); placementPanel.add(new BasicSlider(m.getSliderModel(0, 0.1, 0.5)), "w 150lp, wrap");
//// Tube diameter //// Tube diameter
//// Packed diameter: //// Packed diameter:
panel.add(new JLabel(trans.get("ParachuteCfg.lbl.Packeddiam"))); placementPanel.add(new JLabel(trans.get("ParachuteCfg.lbl.Packeddiam")));
final DoubleModel od = new DoubleModel(component, "Radius", 2, UnitGroup.UNITS_LENGTH, 0); final DoubleModel od = new DoubleModel(component, "Radius", 2, UnitGroup.UNITS_LENGTH, 0);
// Diameter = 2*Radius // Diameter = 2*Radius
spin = new JSpinner(od.getSpinnerModel()); spin = new JSpinner(od.getSpinnerModel());
spin.setEditor(new SpinnerEditor(spin)); spin.setEditor(new SpinnerEditor(spin));
panel.add(spin, "growx"); placementPanel.add(spin, "growx");
order.add(((SpinnerEditor) spin.getEditor()).getTextField()); order.add(((SpinnerEditor) spin.getEditor()).getTextField());
panel.add(new UnitSelector(od), "growx"); placementPanel.add(new UnitSelector(od), "growx");
panel.add(new BasicSlider(od.getSliderModel(0, 0.04, 0.2)), "w 150lp, wrap"); placementPanel.add(new BasicSlider(od.getSliderModel(0, 0.04, 0.2)), "w 150lp, wrap");
////// Automatic ////// Automatic
JCheckBox checkAutoPackedRadius = new JCheckBox(od.getAutomaticAction()); JCheckBox checkAutoPackedRadius = new JCheckBox(od.getAutomaticAction());
checkAutoPackedRadius.setText(trans.get("ParachuteCfg.checkbox.AutomaticPacked")); checkAutoPackedRadius.setText(trans.get("ParachuteCfg.checkbox.AutomaticPacked"));
checkAutoPackedRadius.setToolTipText(trans.get("ParachuteCfg.checkbox.AutomaticPacked.ttip")); checkAutoPackedRadius.setToolTipText(trans.get("ParachuteCfg.checkbox.AutomaticPacked.ttip"));
panel.add(checkAutoPackedRadius, "skip, span 2, wrap 5lp"); placementPanel.add(checkAutoPackedRadius, "skip, span 2, wrap");
order.add(checkAutoPackedRadius); order.add(checkAutoPackedRadius);
//// Deployment panel.add(placementPanel, "spanx, growx, wrap");
panel.add(new StyledLabel(trans.get("ParachuteCfg.lbl.Deployment"), Style.BOLD), "wrap unrel");
// ---------------------------- Deployment ----------------------------
JPanel deploymentPanel = new JPanel(new MigLayout("gap rel unrel", "[][65lp::][30lp::][]"));
deploymentPanel.setBorder(BorderFactory.createTitledBorder(trans.get("ParachuteCfg.lbl.Deployment")));
//// Deploys at: //// Deploys at:
panel.add(new JLabel(trans.get("ParachuteCfg.lbl.Deploysat") + " " + CommonStrings.dagger), ""); deploymentPanel.add(new JLabel(trans.get("ParachuteCfg.lbl.Deploysat") + " " + CommonStrings.dagger), "");
DeploymentConfiguration deploymentConfig = parachute.getDeploymentConfigurations().getDefault(); DeploymentConfiguration deploymentConfig = parachute.getDeploymentConfigurations().getDefault();
// this issues a warning because EnumModel ipmlements ComboBoxModel without a parameter... // this issues a warning because EnumModel ipmlements ComboBoxModel without a parameter...
@ -241,43 +253,44 @@ public class ParachuteConfig extends RecoveryDeviceConfig {
updateFields(); updateFields();
} }
}); });
panel.add(eventCombo, "spanx 3, growx, wrap"); deploymentPanel.add(eventCombo, "spanx 3, growx, wrap");
order.add(eventCombo); order.add(eventCombo);
// ... and delay // ... and delay
//// plus //// plus
panel.add(new JLabel(trans.get("ParachuteCfg.lbl.plusdelay")), "right"); deploymentPanel.add(new JLabel(trans.get("ParachuteCfg.lbl.plusdelay")), "right");
m = new DoubleModel(deploymentConfig, "DeployDelay", 0); m = new DoubleModel(deploymentConfig, "DeployDelay", 0);
spin = new JSpinner(m.getSpinnerModel()); spin = new JSpinner(m.getSpinnerModel());
spin.setEditor(new SpinnerEditor(spin, 3)); spin.setEditor(new SpinnerEditor(spin, 3));
panel.add(spin, "spanx, split"); deploymentPanel.add(spin, "spanx, split");
order.add(((SpinnerEditor) spin.getEditor()).getTextField()); order.add(((SpinnerEditor) spin.getEditor()).getTextField());
//// seconds //// seconds
panel.add(new JLabel(trans.get("ParachuteCfg.lbl.seconds")), "wrap paragraph"); deploymentPanel.add(new JLabel(trans.get("ParachuteCfg.lbl.seconds")), "wrap paragraph");
//// Altitude: //// Altitude:
label = new JLabel(trans.get("ParachuteCfg.lbl.Altitude") + CommonStrings.dagger); label = new JLabel(trans.get("ParachuteCfg.lbl.Altitude") + CommonStrings.dagger);
altitudeComponents.add(label); altitudeComponents.add(label);
panel.add(label); deploymentPanel.add(label);
m = new DoubleModel(deploymentConfig, "DeployAltitude", UnitGroup.UNITS_DISTANCE, 0); m = new DoubleModel(deploymentConfig, "DeployAltitude", UnitGroup.UNITS_DISTANCE, 0);
spin = new JSpinner(m.getSpinnerModel()); spin = new JSpinner(m.getSpinnerModel());
spin.setEditor(new SpinnerEditor(spin)); spin.setEditor(new SpinnerEditor(spin));
altitudeComponents.add(spin); altitudeComponents.add(spin);
panel.add(spin, "growx"); deploymentPanel.add(spin, "growx");
order.add(((SpinnerEditor) spin.getEditor()).getTextField()); order.add(((SpinnerEditor) spin.getEditor()).getTextField());
UnitSelector unit = new UnitSelector(m); UnitSelector unit = new UnitSelector(m);
altitudeComponents.add(unit); altitudeComponents.add(unit);
panel.add(unit, "growx"); deploymentPanel.add(unit, "growx");
BasicSlider slider = new BasicSlider(m.getSliderModel(100, 1000)); BasicSlider slider = new BasicSlider(m.getSliderModel(100, 1000));
altitudeComponents.add(slider); altitudeComponents.add(slider);
panel.add(slider, "w 150lp, wrap"); deploymentPanel.add(slider, "w 150lp, wrap");
panel.add(new StyledLabel(CommonStrings.override_description, -1), "spanx, wrap para"); deploymentPanel.add(new StyledLabel(CommonStrings.override_description, -1), "spanx, wrap");
panel.add(deploymentPanel, "spanx, growx, wrap para");
primary.add(panel, "grow"); primary.add(panel, "grow");
updateFields(); updateFields();

View File

@ -151,8 +151,8 @@ public class RailButtonConfig extends RocketComponentConfig {
"w 100lp, wrap para"); "w 100lp, wrap para");
} }
//// Instance count //// Instance count/separation
panel.add(instanceablePanel(rbc), "span, wrap"); panel.add(instanceablePanel(), "span, wrap");
//// Material //// Material
MaterialPanel materialPanel = new MaterialPanel(component, document, Material.Type.BULK, order); MaterialPanel materialPanel = new MaterialPanel(component, document, Material.Type.BULK, order);

View File

@ -14,7 +14,6 @@ import net.sf.openrocket.gui.SpinnerEditor;
import net.sf.openrocket.gui.adaptors.DoubleModel; import net.sf.openrocket.gui.adaptors.DoubleModel;
import net.sf.openrocket.gui.adaptors.EnumModel; import net.sf.openrocket.gui.adaptors.EnumModel;
import net.sf.openrocket.gui.components.BasicSlider; import net.sf.openrocket.gui.components.BasicSlider;
import net.sf.openrocket.gui.components.StyledLabel;
import net.sf.openrocket.gui.components.UnitSelector; import net.sf.openrocket.gui.components.UnitSelector;
import net.sf.openrocket.l10n.Translator; import net.sf.openrocket.l10n.Translator;
import net.sf.openrocket.material.Material; import net.sf.openrocket.material.Material;
@ -40,7 +39,6 @@ public class RingComponentConfig extends RocketComponentConfig {
DoubleModel od = null; DoubleModel od = null;
//// Attributes ---- //// Attributes ----
panel.add(new StyledLabel(trans.get("ringcompcfg.lbl.Attributes"), StyledLabel.Style.BOLD), "wrap unrel");
//// Outer diameter //// Outer diameter
if (outer != null) { if (outer != null) {
@ -141,7 +139,6 @@ public class RingComponentConfig extends RocketComponentConfig {
//// Placement ---- //// Placement ----
JPanel positionPanel = new JPanel(new MigLayout("gap rel unrel, insets 0", "[][65lp::][30lp::]", "")); JPanel positionPanel = new JPanel(new MigLayout("gap rel unrel, insets 0", "[][65lp::][30lp::]", ""));
positionPanel.add(new StyledLabel(trans.get("ringcompcfg.lbl.Placement"), StyledLabel.Style.BOLD), "wrap unrel");
//// Position relative to: //// Position relative to:
positionPanel.add(new JLabel(trans.get("ringcompcfg.Positionrelativeto"))); positionPanel.add(new JLabel(trans.get("ringcompcfg.Positionrelativeto")));

View File

@ -464,7 +464,7 @@ public class RocketComponentConfig extends JPanel {
} }
} }
protected JPanel instanceablePanel( Instanceable inst ){ protected JPanel instanceablePanel() {
JPanel panel = new JPanel( new MigLayout("fill, insets 0") ); JPanel panel = new JPanel( new MigLayout("fill, insets 0") );
{ // Instance Count { // Instance Count
panel.add(new JLabel(trans.get("RocketCompCfg.lbl.InstanceCount"))); panel.add(new JLabel(trans.get("RocketCompCfg.lbl.InstanceCount")));

View File

@ -10,7 +10,6 @@ import net.sf.openrocket.gui.adaptors.CustomFocusTraversalPolicy;
import net.sf.openrocket.gui.adaptors.DoubleModel; import net.sf.openrocket.gui.adaptors.DoubleModel;
import net.sf.openrocket.gui.adaptors.EnumModel; import net.sf.openrocket.gui.adaptors.EnumModel;
import net.sf.openrocket.gui.components.BasicSlider; import net.sf.openrocket.gui.components.BasicSlider;
import net.sf.openrocket.gui.components.StyledLabel;
import net.sf.openrocket.gui.components.UnitSelector; import net.sf.openrocket.gui.components.UnitSelector;
import net.sf.openrocket.l10n.Translator; import net.sf.openrocket.l10n.Translator;
import net.sf.openrocket.material.Material; import net.sf.openrocket.material.Material;
@ -38,8 +37,7 @@ public class ShockCordConfig extends RocketComponentConfig {
////// Left side ////// Left side
JPanel panel = new JPanel(new MigLayout("gap rel unrel", "[][65lp::][30lp::]", "")); JPanel panel = new JPanel(new MigLayout("gap rel unrel", "[][65lp::][30lp::]", ""));
//// Attributes // Attributes
panel.add(new StyledLabel(trans.get("ShockCordCfg.lbl.ShockcordAttributes"), StyledLabel.Style.BOLD), "wrap unrel");
// Cord length // Cord length
//// Shock cord length //// Shock cord length
@ -68,8 +66,7 @@ public class ShockCordConfig extends RocketComponentConfig {
JPanel panel2 = new JPanel(new MigLayout("gap rel unrel", "[][65lp::][30lp::]", "")); JPanel panel2 = new JPanel(new MigLayout("gap rel unrel", "[][65lp::][30lp::]", ""));
panel.add(panel2, "cell 4 0, gapleft paragraph, aligny 0%, spany"); panel.add(panel2, "cell 4 0, gapleft paragraph, aligny 0%, spany");
//// Placement // Placement
panel2.add(new StyledLabel(trans.get("ShockCordCfg.lbl.ShockcordPlacement"), StyledLabel.Style.BOLD), "wrap unrel");
//// Position relative to: //// Position relative to:
panel2.add(new JLabel(trans.get("ShockCordCfg.lbl.Posrelativeto"))); panel2.add(new JLabel(trans.get("ShockCordCfg.lbl.Posrelativeto")));

View File

@ -6,6 +6,7 @@ import java.awt.event.ActionListener;
import java.awt.event.ItemEvent; import java.awt.event.ItemEvent;
import java.awt.event.ItemListener; import java.awt.event.ItemListener;
import javax.swing.BorderFactory;
import javax.swing.JButton; import javax.swing.JButton;
import javax.swing.JCheckBox; import javax.swing.JCheckBox;
import javax.swing.JComboBox; import javax.swing.JComboBox;
@ -47,67 +48,68 @@ public class StreamerConfig extends RecoveryDeviceConfig {
// Left side // Left side
JPanel primary = new JPanel(new MigLayout()); JPanel primary = new JPanel(new MigLayout());
JPanel panel = new JPanel(new MigLayout("gap rel unrel", "[][65lp::][30lp::][]", "")); JPanel panel = new JPanel(new MigLayout());
//// Attributes //// ---------------------------- Attributes ----------------------------
panel.add(new StyledLabel(trans.get("StreamerCfg.lbl.Attributes"), StyledLabel.Style.BOLD), "wrap unrel"); JPanel attributesPanel = new JPanel(new MigLayout("gap rel unrel", "[][65lp::][30lp::][]"));
attributesPanel.setBorder(BorderFactory.createTitledBorder(trans.get("StreamerCfg.lbl.Attributes")));
//// Strip length: //// Strip length:
panel.add(new JLabel(trans.get("StreamerCfg.lbl.Striplength"))); attributesPanel.add(new JLabel(trans.get("StreamerCfg.lbl.Striplength")));
DoubleModel m = new DoubleModel(component, "StripLength", UnitGroup.UNITS_LENGTH, 0); DoubleModel m = new DoubleModel(component, "StripLength", UnitGroup.UNITS_LENGTH, 0);
JSpinner spin = new JSpinner(m.getSpinnerModel()); JSpinner spin = new JSpinner(m.getSpinnerModel());
spin.setEditor(new SpinnerEditor(spin)); spin.setEditor(new SpinnerEditor(spin));
panel.add(spin, "growx"); attributesPanel.add(spin, "growx");
order.add(((SpinnerEditor) spin.getEditor()).getTextField()); order.add(((SpinnerEditor) spin.getEditor()).getTextField());
panel.add(new UnitSelector(m), "growx"); attributesPanel.add(new UnitSelector(m), "growx");
panel.add(new BasicSlider(m.getSliderModel(0, 0.6, 1.5)), "w 150lp, wrap"); attributesPanel.add(new BasicSlider(m.getSliderModel(0, 0.6, 1.5)), "w 150lp, wrap");
//// Strip width: //// Strip width:
panel.add(new JLabel(trans.get("StreamerCfg.lbl.Stripwidth"))); attributesPanel.add(new JLabel(trans.get("StreamerCfg.lbl.Stripwidth")));
m = new DoubleModel(component, "StripWidth", UnitGroup.UNITS_LENGTH, 0); m = new DoubleModel(component, "StripWidth", UnitGroup.UNITS_LENGTH, 0);
spin = new JSpinner(m.getSpinnerModel()); spin = new JSpinner(m.getSpinnerModel());
spin.setEditor(new SpinnerEditor(spin)); spin.setEditor(new SpinnerEditor(spin));
panel.add(spin, "growx"); attributesPanel.add(spin, "growx");
order.add(((SpinnerEditor) spin.getEditor()).getTextField()); order.add(((SpinnerEditor) spin.getEditor()).getTextField());
panel.add(new UnitSelector(m), "growx"); attributesPanel.add(new UnitSelector(m), "growx");
panel.add(new BasicSlider(m.getSliderModel(0, 0.2)), "w 150lp, wrap 10lp"); attributesPanel.add(new BasicSlider(m.getSliderModel(0, 0.2)), "w 150lp, wrap 10lp");
//// Strip area: //// Strip area:
panel.add(new JLabel(trans.get("StreamerCfg.lbl.Striparea"))); attributesPanel.add(new JLabel(trans.get("StreamerCfg.lbl.Striparea")));
m = new DoubleModel(component, "Area", UnitGroup.UNITS_AREA, 0); m = new DoubleModel(component, "Area", UnitGroup.UNITS_AREA, 0);
spin = new JSpinner(m.getSpinnerModel()); spin = new JSpinner(m.getSpinnerModel());
spin.setEditor(new SpinnerEditor(spin)); spin.setEditor(new SpinnerEditor(spin));
panel.add(spin, "growx"); attributesPanel.add(spin, "growx");
order.add(((SpinnerEditor) spin.getEditor()).getTextField()); order.add(((SpinnerEditor) spin.getEditor()).getTextField());
panel.add(new UnitSelector(m), "growx"); attributesPanel.add(new UnitSelector(m), "growx");
panel.add(new BasicSlider(m.getSliderModel(0, 0.04, 0.25)), "w 150lp, wrap"); attributesPanel.add(new BasicSlider(m.getSliderModel(0, 0.04, 0.25)), "w 150lp, wrap");
//// Aspect ratio: //// Aspect ratio:
panel.add(new JLabel(trans.get("StreamerCfg.lbl.Aspectratio"))); attributesPanel.add(new JLabel(trans.get("StreamerCfg.lbl.Aspectratio")));
m = new DoubleModel(component, "AspectRatio", UnitGroup.UNITS_NONE, 0); m = new DoubleModel(component, "AspectRatio", UnitGroup.UNITS_NONE, 0);
spin = new JSpinner(m.getSpinnerModel()); spin = new JSpinner(m.getSpinnerModel());
spin.setEditor(new SpinnerEditor(spin)); spin.setEditor(new SpinnerEditor(spin));
panel.add(spin, "growx"); attributesPanel.add(spin, "growx");
order.add(((SpinnerEditor) spin.getEditor()).getTextField()); order.add(((SpinnerEditor) spin.getEditor()).getTextField());
// panel.add(new UnitSelector(m),"growx"); // panel.add(new UnitSelector(m),"growx");
panel.add(new BasicSlider(m.getSliderModel(2, 15)), "skip, w 150lp, wrap 10lp"); attributesPanel.add(new BasicSlider(m.getSliderModel(2, 15)), "skip, w 150lp, wrap 10lp");
//// Material: //// Material:
panel.add(new JLabel(trans.get("StreamerCfg.lbl.Material"))); attributesPanel.add(new JLabel(trans.get("StreamerCfg.lbl.Material")));
JComboBox<Material> streamerMaterialCombo = new JComboBox<Material>(new MaterialModel(panel, component, JComboBox<Material> streamerMaterialCombo = new JComboBox<Material>(new MaterialModel(attributesPanel, component,
Material.Type.SURFACE)); Material.Type.SURFACE));
//// The component material affects the weight of the component. //// The component material affects the weight of the component.
streamerMaterialCombo.setToolTipText(trans.get("StreamerCfg.combo.ttip.MaterialModel")); streamerMaterialCombo.setToolTipText(trans.get("StreamerCfg.combo.ttip.MaterialModel"));
panel.add(streamerMaterialCombo, "spanx 3, growx, wrap 15lp"); attributesPanel.add(streamerMaterialCombo, "spanx 3, growx, wrap 15lp");
order.add(streamerMaterialCombo); order.add(streamerMaterialCombo);
// CD // CD
@ -118,105 +120,108 @@ public class StreamerConfig extends RecoveryDeviceConfig {
//// "A larger drag coefficient yields a slowed descent rate. //// "A larger drag coefficient yields a slowed descent rate.
trans.get("StreamerCfg.lbl.longB2"); trans.get("StreamerCfg.lbl.longB2");
label.setToolTipText(tip); label.setToolTipText(tip);
panel.add(label); attributesPanel.add(label);
m = new DoubleModel(component, "CD", UnitGroup.UNITS_COEFFICIENT, 0); m = new DoubleModel(component, "CD", UnitGroup.UNITS_COEFFICIENT, 0);
spin = new JSpinner(m.getSpinnerModel()); spin = new JSpinner(m.getSpinnerModel());
spin.setToolTipText(tip); spin.setToolTipText(tip);
spin.setEditor(new SpinnerEditor(spin)); spin.setEditor(new SpinnerEditor(spin));
panel.add(spin, "growx"); attributesPanel.add(spin, "growx");
order.add(((SpinnerEditor) spin.getEditor()).getTextField()); order.add(((SpinnerEditor) spin.getEditor()).getTextField());
JCheckBox check = new JCheckBox(m.getAutomaticAction()); JCheckBox check = new JCheckBox(m.getAutomaticAction());
//// Automatic //// Automatic
check.setText(trans.get("StreamerCfg.lbl.AutomaticCd")); check.setText(trans.get("StreamerCfg.lbl.AutomaticCd"));
check.setToolTipText(trans.get("StreamerCfg.lbl.AutomaticCd.ttip")); check.setToolTipText(trans.get("StreamerCfg.lbl.AutomaticCd.ttip"));
panel.add(check, "skip, span, wrap"); attributesPanel.add(check, "skip, span, wrap");
order.add(check); order.add(check);
//// The drag coefficient is relative to the area of the streamer. //// The drag coefficient is relative to the area of the streamer.
panel.add(new StyledLabel(trans.get("StreamerCfg.lbl.longC1"), attributesPanel.add(new StyledLabel(trans.get("StreamerCfg.lbl.longC1"),
-1, StyledLabel.Style.ITALIC), "gapleft para, span, wrap"); -1, StyledLabel.Style.ITALIC), "gapleft para, span, wrap");
panel.add(attributesPanel, "growx, wrap");
// Right side // Right side
primary.add(panel, "grow, gapright 20lp"); primary.add(panel, "grow");
panel = new JPanel(new MigLayout("gap rel unrel", "[][65lp::][30lp::][]", "")); panel = new JPanel(new MigLayout());
//// Placement
panel.add(new StyledLabel(trans.get("StreamerCfg.lbl.Placement"), StyledLabel.Style.BOLD), "wrap unrel"); //// ---------------------------- Placement ----------------------------
JPanel placementPanel = new JPanel(new MigLayout("gap rel unrel", "[][65lp::][30lp::][]"));
placementPanel.setBorder(BorderFactory.createTitledBorder(trans.get("StreamerCfg.lbl.Placement")));
//// Position relative to: //// Position relative to:
panel.add(new JLabel(trans.get("StreamerCfg.lbl.Posrelativeto"))); placementPanel.add(new JLabel(trans.get("StreamerCfg.lbl.Posrelativeto")));
final EnumModel<AxialMethod> methodModel = new EnumModel<AxialMethod>(component, "AxialMethod", AxialMethod.axialOffsetMethods ); final EnumModel<AxialMethod> methodModel = new EnumModel<>(component, "AxialMethod", AxialMethod.axialOffsetMethods );
final JComboBox<AxialMethod> positionCombo = new JComboBox<AxialMethod>( methodModel ); final JComboBox<AxialMethod> positionCombo = new JComboBox<>( methodModel );
panel.add( positionCombo, "spanx, growx, wrap"); placementPanel.add( positionCombo, "spanx, growx, wrap");
order.add(positionCombo); order.add(positionCombo);
//// plus //// plus
panel.add(new JLabel(trans.get("StreamerCfg.lbl.plus")), "right"); placementPanel.add(new JLabel(trans.get("StreamerCfg.lbl.plus")), "right");
m = new DoubleModel(component, "AxialOffset", UnitGroup.UNITS_LENGTH); m = new DoubleModel(component, "AxialOffset", UnitGroup.UNITS_LENGTH);
spin = new JSpinner(m.getSpinnerModel()); spin = new JSpinner(m.getSpinnerModel());
spin.setEditor(new SpinnerEditor(spin)); spin.setEditor(new SpinnerEditor(spin));
focusElement = spin; focusElement = spin;
panel.add(spin, "growx"); placementPanel.add(spin, "growx");
order.add(((SpinnerEditor) spin.getEditor()).getTextField()); order.add(((SpinnerEditor) spin.getEditor()).getTextField());
panel.add(new UnitSelector(m), "growx"); placementPanel.add(new UnitSelector(m), "growx");
panel.add(new BasicSlider(m.getSliderModel( placementPanel.add(new BasicSlider(m.getSliderModel(
new DoubleModel(component.getParent(), "Length", -1.0, UnitGroup.UNITS_NONE), new DoubleModel(component.getParent(), "Length", -1.0, UnitGroup.UNITS_NONE),
new DoubleModel(component.getParent(), "Length"))), new DoubleModel(component.getParent(), "Length"))),
"w 150lp, wrap"); "w 150lp, wrap");
//// Packed length: //// Packed length:
panel.add(new JLabel(trans.get("StreamerCfg.lbl.Packedlength"))); placementPanel.add(new JLabel(trans.get("StreamerCfg.lbl.Packedlength")));
m = new DoubleModel(component, "Length", UnitGroup.UNITS_LENGTH, 0); m = new DoubleModel(component, "Length", UnitGroup.UNITS_LENGTH, 0);
spin = new JSpinner(m.getSpinnerModel()); spin = new JSpinner(m.getSpinnerModel());
spin.setEditor(new SpinnerEditor(spin)); spin.setEditor(new SpinnerEditor(spin));
panel.add(spin, "growx"); placementPanel.add(spin, "growx");
order.add(((SpinnerEditor) spin.getEditor()).getTextField()); order.add(((SpinnerEditor) spin.getEditor()).getTextField());
panel.add(new UnitSelector(m), "growx"); placementPanel.add(new UnitSelector(m), "growx");
panel.add(new BasicSlider(m.getSliderModel(0, 0.1, 0.5)), "w 150lp, wrap"); placementPanel.add(new BasicSlider(m.getSliderModel(0, 0.1, 0.5)), "w 150lp, wrap");
//// Tube diameter
//// Packed diameter: //// Packed diameter:
panel.add(new JLabel(trans.get("StreamerCfg.lbl.Packeddiam"))); placementPanel.add(new JLabel(trans.get("StreamerCfg.lbl.Packeddiam")));
DoubleModel od = new DoubleModel(component, "Radius", 2, UnitGroup.UNITS_LENGTH, 0); DoubleModel od = new DoubleModel(component, "Radius", 2, UnitGroup.UNITS_LENGTH, 0);
// Diameter = 2*Radius
spin = new JSpinner(od.getSpinnerModel()); spin = new JSpinner(od.getSpinnerModel());
spin.setEditor(new SpinnerEditor(spin)); spin.setEditor(new SpinnerEditor(spin));
panel.add(spin, "growx"); placementPanel.add(spin, "growx");
order.add(((SpinnerEditor) spin.getEditor()).getTextField()); order.add(((SpinnerEditor) spin.getEditor()).getTextField());
panel.add(new UnitSelector(od), "growx"); placementPanel.add(new UnitSelector(od), "growx");
panel.add(new BasicSlider(od.getSliderModel(0, 0.04, 0.2)), "w 150lp, wrap"); placementPanel.add(new BasicSlider(od.getSliderModel(0, 0.04, 0.2)), "w 150lp, wrap");
////// Automatic ////// Automatic
JCheckBox checkAutoPackedRadius = new JCheckBox(od.getAutomaticAction()); JCheckBox checkAutoPackedRadius = new JCheckBox(od.getAutomaticAction());
checkAutoPackedRadius.setText(trans.get("ParachuteCfg.checkbox.AutomaticPacked")); checkAutoPackedRadius.setText(trans.get("ParachuteCfg.checkbox.AutomaticPacked"));
checkAutoPackedRadius.setToolTipText(trans.get("ParachuteCfg.checkbox.AutomaticPacked.ttip")); checkAutoPackedRadius.setToolTipText(trans.get("ParachuteCfg.checkbox.AutomaticPacked.ttip"));
panel.add(checkAutoPackedRadius, "skip, span 2, wrap 5lp"); placementPanel.add(checkAutoPackedRadius, "skip, spanx 2");
order.add(checkAutoPackedRadius); order.add(checkAutoPackedRadius);
panel.add(placementPanel, "growx, wrap 15lp");
//// Deployment
panel.add(new StyledLabel(trans.get("StreamerCfg.lbl.Deployment"), StyledLabel.Style.BOLD), "wrap unrel"); //// ---------------------------- Deployment ----------------------------
JPanel deploymentPanel = new JPanel(new MigLayout("gap rel unrel", "[][65lp::][30lp::][]"));
deploymentPanel.setBorder(BorderFactory.createTitledBorder(trans.get("StreamerCfg.lbl.Deployment")));
//// Deploys at: //// Deploys at:
panel.add(new JLabel(trans.get("StreamerCfg.lbl.Deploysat") + " " + CommonStrings.dagger), ""); deploymentPanel.add(new JLabel(trans.get("StreamerCfg.lbl.Deploysat") + " " + CommonStrings.dagger), "");
DeploymentConfiguration deploymentConfig = streamer.getDeploymentConfigurations().getDefault(); DeploymentConfiguration deploymentConfig = streamer.getDeploymentConfigurations().getDefault();
JComboBox<DeploymentConfiguration.DeployEvent> eventCombo = new JComboBox<DeploymentConfiguration.DeployEvent>(new EnumModel<DeploymentConfiguration.DeployEvent>(deploymentConfig, "DeployEvent")); JComboBox<DeploymentConfiguration.DeployEvent> eventCombo = new JComboBox<>(
new EnumModel<DeploymentConfiguration.DeployEvent>(deploymentConfig, "DeployEvent"));
if( (component.getStageNumber() + 1 ) == d.getRocket().getStageCount() ){ if( (component.getStageNumber() + 1 ) == d.getRocket().getStageCount() ){
// This is the bottom stage. restrict deployment options. // This is the bottom stage. restrict deployment options.
eventCombo.removeItem( DeployEvent.LOWER_STAGE_SEPARATION ); eventCombo.removeItem( DeployEvent.LOWER_STAGE_SEPARATION );
@ -227,43 +232,44 @@ public class StreamerConfig extends RecoveryDeviceConfig {
updateFields(); updateFields();
} }
}); });
panel.add( eventCombo, "spanx 3, growx, wrap"); deploymentPanel.add( eventCombo, "spanx 3, growx, wrap");
order.add(eventCombo); order.add(eventCombo);
// ... and delay // ... and delay
//// plus //// plus
panel.add(new JLabel(trans.get("StreamerCfg.lbl.plusdelay")), "right"); deploymentPanel.add(new JLabel(trans.get("StreamerCfg.lbl.plusdelay")), "right");
m = new DoubleModel(deploymentConfig, "DeployDelay", 0); m = new DoubleModel(deploymentConfig, "DeployDelay", 0);
spin = new JSpinner(m.getSpinnerModel()); spin = new JSpinner(m.getSpinnerModel());
spin.setEditor(new SpinnerEditor(spin, 3)); spin.setEditor(new SpinnerEditor(spin, 3));
panel.add(spin, "spanx, split"); deploymentPanel.add(spin, "spanx, split");
order.add(((SpinnerEditor) spin.getEditor()).getTextField()); order.add(((SpinnerEditor) spin.getEditor()).getTextField());
//// seconds //// seconds
panel.add(new JLabel(trans.get("StreamerCfg.lbl.seconds")), "wrap paragraph"); deploymentPanel.add(new JLabel(trans.get("StreamerCfg.lbl.seconds")), "wrap paragraph");
// Altitude: // Altitude:
label = new JLabel(trans.get("StreamerCfg.lbl.Altitude") + CommonStrings.dagger); label = new JLabel(trans.get("StreamerCfg.lbl.Altitude") + CommonStrings.dagger);
altitudeComponents.add(label); altitudeComponents.add(label);
panel.add(label); deploymentPanel.add(label);
m = new DoubleModel(deploymentConfig, "DeployAltitude", UnitGroup.UNITS_DISTANCE, 0); m = new DoubleModel(deploymentConfig, "DeployAltitude", UnitGroup.UNITS_DISTANCE, 0);
spin = new JSpinner(m.getSpinnerModel()); spin = new JSpinner(m.getSpinnerModel());
spin.setEditor(new SpinnerEditor(spin)); spin.setEditor(new SpinnerEditor(spin));
altitudeComponents.add(spin); altitudeComponents.add(spin);
panel.add(spin, "growx"); deploymentPanel.add(spin, "growx");
order.add(((SpinnerEditor) spin.getEditor()).getTextField()); order.add(((SpinnerEditor) spin.getEditor()).getTextField());
UnitSelector unit = new UnitSelector(m); UnitSelector unit = new UnitSelector(m);
altitudeComponents.add(unit); altitudeComponents.add(unit);
panel.add(unit, "growx"); deploymentPanel.add(unit, "growx");
BasicSlider slider = new BasicSlider(m.getSliderModel(100, 1000)); BasicSlider slider = new BasicSlider(m.getSliderModel(100, 1000));
altitudeComponents.add(slider); altitudeComponents.add(slider);
panel.add(slider, "w 150lp, wrap"); deploymentPanel.add(slider, "w 150lp, wrap");
panel.add(new StyledLabel(CommonStrings.override_description, -1), "spanx, wrap para"); deploymentPanel.add(new StyledLabel(CommonStrings.override_description, -1), "spanx, wrap");
panel.add(deploymentPanel, "growx");
primary.add(panel, "grow"); primary.add(panel, "grow");
updateFields(); updateFields();