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");
50 panel.add(new JLabel(trans.get("MassComponentCfg.lbl.Density")));
52 m = new DoubleModel(component, "Density", UnitGroup.UNITS_DENSITY_BULK, 0);
54 spin = new JSpinner(m.getSpinnerModel());
55 spin.setEditor(new SpinnerEditor(spin));
56 panel.add(spin, "growx");
58 panel.add(new UnitSelector(m), "growx");
59 panel.add(new BasicSlider(m.getSliderModel(500, 2000, 10000)), "w 100lp, wrap");
65 panel.add(new JLabel(trans.get("MassComponentCfg.lbl.Length")));
67 m = new DoubleModel(component, "Length", UnitGroup.UNITS_LENGTH, 0);
69 spin = new JSpinner(m.getSpinnerModel());
70 spin.setEditor(new SpinnerEditor(spin));
71 panel.add(spin, "growx");
73 panel.add(new UnitSelector(m), "growx");
74 panel.add(new BasicSlider(m.getSliderModel(0, 0.1, 0.5)), "w 100lp, wrap");
79 panel.add(new JLabel(trans.get("MassComponentCfg.lbl.Diameter")));
81 DoubleModel od = new DoubleModel(component, "Radius", 2, UnitGroup.UNITS_LENGTH, 0);
82 // Diameter = 2*Radius
84 spin = new JSpinner(od.getSpinnerModel());
85 spin.setEditor(new SpinnerEditor(spin));
86 panel.add(spin, "growx");
88 panel.add(new UnitSelector(od), "growx");
89 panel.add(new BasicSlider(od.getSliderModel(0, 0.04, 0.2)), "w 100lp, wrap");
93 //// Position relative to:
94 panel.add(new JLabel(trans.get("MassComponentCfg.lbl.PosRelativeto")));
96 JComboBox combo = new JComboBox(
97 new EnumModel<RocketComponent.Position>(component, "RelativePosition",
98 new RocketComponent.Position[] {
99 RocketComponent.Position.TOP,
100 RocketComponent.Position.MIDDLE,
101 RocketComponent.Position.BOTTOM,
102 RocketComponent.Position.ABSOLUTE
104 panel.add(combo, "spanx, growx, wrap");
106 panel.add(new JLabel(trans.get("MassComponentCfg.lbl.plus")), "right");
108 m = new DoubleModel(component, "PositionValue", UnitGroup.UNITS_LENGTH);
109 spin = new JSpinner(m.getSpinnerModel());
110 spin.setEditor(new SpinnerEditor(spin));
111 panel.add(spin, "growx");
113 panel.add(new UnitSelector(m), "growx");
114 panel.add(new BasicSlider(m.getSliderModel(
115 new DoubleModel(component.getParent(), "Length", -1.0, UnitGroup.UNITS_NONE),
116 new DoubleModel(component.getParent(), "Length"))),
119 //// General and General properties
120 tabbedPane.insertTab(trans.get("MassComponentCfg.tab.General"), null, panel,
121 trans.get("MassComponentCfg.tab.ttip.General"), 0);
122 //// Radial position and Radial position configuration
123 tabbedPane.insertTab(trans.get("MassComponentCfg.tab.Radialpos"), null, positionTab(),
124 trans.get("MassComponentCfg.tab.ttip.Radialpos"), 1);
125 tabbedPane.setSelectedIndex(0);
129 protected JPanel positionTab() {
130 JPanel panel = new JPanel(new MigLayout("gap rel unrel", "[][65lp::][30lp::]", ""));
133 //// Radial distance:
134 panel.add(new JLabel(trans.get("MassComponentCfg.lbl.Radialdistance")));
136 DoubleModel m = new DoubleModel(component, "RadialPosition", UnitGroup.UNITS_LENGTH, 0);
138 JSpinner spin = new JSpinner(m.getSpinnerModel());
139 spin.setEditor(new SpinnerEditor(spin));
140 panel.add(spin, "growx");
142 panel.add(new UnitSelector(m), "growx");
143 panel.add(new BasicSlider(m.getSliderModel(0, 0.1, 1.0)), "w 100lp, wrap");
146 //// Radial direction:
147 panel.add(new JLabel(trans.get("MassComponentCfg.lbl.Radialdirection")));
149 m = new DoubleModel(component, "RadialDirection", UnitGroup.UNITS_ANGLE);
151 spin = new JSpinner(m.getSpinnerModel());
152 spin.setEditor(new SpinnerEditor(spin));
153 panel.add(spin, "growx");
155 panel.add(new UnitSelector(m), "growx");
156 panel.add(new BasicSlider(m.getSliderModel(-Math.PI, Math.PI)), "w 100lp, wrap");
160 JButton button = new JButton(trans.get("MassComponentCfg.but.Reset"));
161 button.addActionListener(new ActionListener() {
163 public void actionPerformed(ActionEvent e) {
164 ((MassComponent) component).setRadialDirection(0.0);
165 ((MassComponent) component).setRadialPosition(0.0);
168 panel.add(button, "spanx, right");