1 package net.sf.openrocket.gui.configdialog;
3 import java.awt.event.ActionEvent;
4 import java.awt.event.ActionListener;
6 import javax.swing.JButton;
7 import javax.swing.JComboBox;
8 import javax.swing.JLabel;
9 import javax.swing.JPanel;
10 import javax.swing.JSpinner;
12 import net.miginfocom.swing.MigLayout;
13 import net.sf.openrocket.document.OpenRocketDocument;
14 import net.sf.openrocket.gui.SpinnerEditor;
15 import net.sf.openrocket.gui.adaptors.DoubleModel;
16 import net.sf.openrocket.gui.adaptors.EnumModel;
17 import net.sf.openrocket.gui.components.BasicSlider;
18 import net.sf.openrocket.gui.components.UnitSelector;
19 import net.sf.openrocket.l10n.Translator;
20 import net.sf.openrocket.rocketcomponent.MassComponent;
21 import net.sf.openrocket.rocketcomponent.RocketComponent;
22 import net.sf.openrocket.startup.Application;
23 import net.sf.openrocket.unit.UnitGroup;
26 public class MassComponentConfig extends RocketComponentConfig {
27 private static final Translator trans = Application.getTranslator();
29 public MassComponentConfig(OpenRocketDocument d, RocketComponent component) {
33 JPanel panel = new JPanel(new MigLayout("gap rel unrel", "[][65lp::][30lp::]", ""));
38 panel.add(new JLabel(trans.get("MassComponentCfg.lbl.Mass")));
40 DoubleModel m = new DoubleModel(component, "ComponentMass", UnitGroup.UNITS_MASS, 0);
42 JSpinner spin = new JSpinner(m.getSpinnerModel());
43 spin.setEditor(new SpinnerEditor(spin));
44 panel.add(spin, "growx");
46 panel.add(new UnitSelector(m), "growx");
47 panel.add(new BasicSlider(m.getSliderModel(0, 0.05, 0.5)), "w 100lp, wrap");
53 panel.add(new JLabel(trans.get("MassComponentCfg.lbl.Length")));
55 m = new DoubleModel(component, "Length", UnitGroup.UNITS_LENGTH, 0);
57 spin = new JSpinner(m.getSpinnerModel());
58 spin.setEditor(new SpinnerEditor(spin));
59 panel.add(spin, "growx");
61 panel.add(new UnitSelector(m), "growx");
62 panel.add(new BasicSlider(m.getSliderModel(0, 0.1, 0.5)), "w 100lp, wrap");
67 panel.add(new JLabel(trans.get("MassComponentCfg.lbl.Diameter")));
69 DoubleModel od = new DoubleModel(component, "Radius", 2, UnitGroup.UNITS_LENGTH, 0);
70 // Diameter = 2*Radius
72 spin = new JSpinner(od.getSpinnerModel());
73 spin.setEditor(new SpinnerEditor(spin));
74 panel.add(spin, "growx");
76 panel.add(new UnitSelector(od), "growx");
77 panel.add(new BasicSlider(od.getSliderModel(0, 0.04, 0.2)), "w 100lp, wrap");
81 //// Position relative to:
82 panel.add(new JLabel(trans.get("MassComponentCfg.lbl.PosRelativeto")));
84 JComboBox combo = new JComboBox(
85 new EnumModel<RocketComponent.Position>(component, "RelativePosition",
86 new RocketComponent.Position[] {
87 RocketComponent.Position.TOP,
88 RocketComponent.Position.MIDDLE,
89 RocketComponent.Position.BOTTOM,
90 RocketComponent.Position.ABSOLUTE
92 panel.add(combo, "spanx, growx, wrap");
94 panel.add(new JLabel(trans.get("MassComponentCfg.lbl.plus")), "right");
96 m = new DoubleModel(component, "PositionValue", UnitGroup.UNITS_LENGTH);
97 spin = new JSpinner(m.getSpinnerModel());
98 spin.setEditor(new SpinnerEditor(spin));
99 panel.add(spin, "growx");
101 panel.add(new UnitSelector(m), "growx");
102 panel.add(new BasicSlider(m.getSliderModel(
103 new DoubleModel(component.getParent(), "Length", -1.0, UnitGroup.UNITS_NONE),
104 new DoubleModel(component.getParent(), "Length"))),
107 //// General and General properties
108 tabbedPane.insertTab(trans.get("MassComponentCfg.tab.General"), null, panel,
109 trans.get("MassComponentCfg.tab.ttip.General"), 0);
110 //// Radial position and Radial position configuration
111 tabbedPane.insertTab(trans.get("MassComponentCfg.tab.Radialpos"), null, positionTab(),
112 trans.get("MassComponentCfg.tab.ttip.Radialpos"), 1);
113 tabbedPane.setSelectedIndex(0);
117 protected JPanel positionTab() {
118 JPanel panel = new JPanel(new MigLayout("gap rel unrel", "[][65lp::][30lp::]", ""));
121 //// Radial distance:
122 panel.add(new JLabel(trans.get("MassComponentCfg.lbl.Radialdistance")));
124 DoubleModel m = new DoubleModel(component, "RadialPosition", UnitGroup.UNITS_LENGTH, 0);
126 JSpinner spin = new JSpinner(m.getSpinnerModel());
127 spin.setEditor(new SpinnerEditor(spin));
128 panel.add(spin, "growx");
130 panel.add(new UnitSelector(m), "growx");
131 panel.add(new BasicSlider(m.getSliderModel(0, 0.1, 1.0)), "w 100lp, wrap");
134 //// Radial direction:
135 panel.add(new JLabel(trans.get("MassComponentCfg.lbl.Radialdirection")));
137 m = new DoubleModel(component, "RadialDirection", UnitGroup.UNITS_ANGLE);
139 spin = new JSpinner(m.getSpinnerModel());
140 spin.setEditor(new SpinnerEditor(spin));
141 panel.add(spin, "growx");
143 panel.add(new UnitSelector(m), "growx");
144 panel.add(new BasicSlider(m.getSliderModel(-Math.PI, Math.PI)), "w 100lp, wrap");
148 JButton button = new JButton(trans.get("MassComponentCfg.but.Reset"));
149 button.addActionListener(new ActionListener() {
151 public void actionPerformed(ActionEvent e) {
152 ((MassComponent) component).setRadialDirection(0.0);
153 ((MassComponent) component).setRadialPosition(0.0);
156 panel.add(button, "spanx, right");