1 package net.sf.openrocket.gui.configdialog;
3 import java.awt.event.ActionEvent;
4 import java.awt.event.ActionListener;
7 import javax.swing.JButton;
8 import javax.swing.JComboBox;
9 import javax.swing.JLabel;
10 import javax.swing.JPanel;
11 import javax.swing.JSpinner;
13 import net.miginfocom.swing.MigLayout;
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(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,0);
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");