create changelog entry
[debian/openrocket] / core / src / net / sf / openrocket / gui / configdialog / MassComponentConfig.java
1 package net.sf.openrocket.gui.configdialog;
2
3 import java.awt.event.ActionEvent;
4 import java.awt.event.ActionListener;
5
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;
11
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;
24
25
26 public class MassComponentConfig extends RocketComponentConfig {
27         private static final Translator trans = Application.getTranslator();
28         
29         public MassComponentConfig(OpenRocketDocument d, RocketComponent component) {
30                 super(d, component);
31                 
32                 
33                 JPanel panel = new JPanel(new MigLayout("gap rel unrel", "[][65lp::][30lp::]", ""));
34                 
35                 
36                 
37                 ////  Mass
38                 panel.add(new JLabel(trans.get("MassComponentCfg.lbl.Mass")));
39                 
40                 DoubleModel m = new DoubleModel(component, "ComponentMass", UnitGroup.UNITS_MASS, 0);
41                 
42                 JSpinner spin = new JSpinner(m.getSpinnerModel());
43                 spin.setEditor(new SpinnerEditor(spin));
44                 panel.add(spin, "growx");
45                 
46                 panel.add(new UnitSelector(m), "growx");
47                 panel.add(new BasicSlider(m.getSliderModel(0, 0.05, 0.5)), "w 100lp, wrap");
48                 
49                 
50                 panel.add(new JLabel(trans.get("MassComponentCfg.lbl.Density")));
51                 
52                 m = new DoubleModel(component, "Density", UnitGroup.UNITS_DENSITY_BULK, 0);
53                 
54                 spin = new JSpinner(m.getSpinnerModel());
55                 spin.setEditor(new SpinnerEditor(spin));
56                 panel.add(spin, "growx");
57                 
58                 panel.add(new UnitSelector(m), "growx");
59                 panel.add(new BasicSlider(m.getSliderModel(500, 2000, 10000)), "w 100lp, wrap");
60                 
61                 
62                 
63                 ////  Mass length
64                 //// Length
65                 panel.add(new JLabel(trans.get("MassComponentCfg.lbl.Length")));
66                 
67                 m = new DoubleModel(component, "Length", UnitGroup.UNITS_LENGTH, 0);
68                 
69                 spin = new JSpinner(m.getSpinnerModel());
70                 spin.setEditor(new SpinnerEditor(spin));
71                 panel.add(spin, "growx");
72                 
73                 panel.add(new UnitSelector(m), "growx");
74                 panel.add(new BasicSlider(m.getSliderModel(0, 0.1, 0.5)), "w 100lp, wrap");
75                 
76                 
77                 //// Tube diameter
78                 //// Diameter:
79                 panel.add(new JLabel(trans.get("MassComponentCfg.lbl.Diameter")));
80                 
81                 DoubleModel od = new DoubleModel(component, "Radius", 2, UnitGroup.UNITS_LENGTH, 0);
82                 // Diameter = 2*Radius
83                 
84                 spin = new JSpinner(od.getSpinnerModel());
85                 spin.setEditor(new SpinnerEditor(spin));
86                 panel.add(spin, "growx");
87                 
88                 panel.add(new UnitSelector(od), "growx");
89                 panel.add(new BasicSlider(od.getSliderModel(0, 0.04, 0.2)), "w 100lp, wrap");
90                 
91                 
92                 ////  Position
93                 //// Position relative to:
94                 panel.add(new JLabel(trans.get("MassComponentCfg.lbl.PosRelativeto")));
95                 
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
103                                                 }));
104                 panel.add(combo, "spanx, growx, wrap");
105                 //// plus
106                 panel.add(new JLabel(trans.get("MassComponentCfg.lbl.plus")), "right");
107                 
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");
112                 
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"))),
117                                 "w 100lp, wrap");
118                 
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);
126         }
127         
128         
129         protected JPanel positionTab() {
130                 JPanel panel = new JPanel(new MigLayout("gap rel unrel", "[][65lp::][30lp::]", ""));
131                 
132                 ////  Radial position
133                 //// Radial distance:
134                 panel.add(new JLabel(trans.get("MassComponentCfg.lbl.Radialdistance")));
135                 
136                 DoubleModel m = new DoubleModel(component, "RadialPosition", UnitGroup.UNITS_LENGTH, 0);
137                 
138                 JSpinner spin = new JSpinner(m.getSpinnerModel());
139                 spin.setEditor(new SpinnerEditor(spin));
140                 panel.add(spin, "growx");
141                 
142                 panel.add(new UnitSelector(m), "growx");
143                 panel.add(new BasicSlider(m.getSliderModel(0, 0.1, 1.0)), "w 100lp, wrap");
144                 
145                 
146                 //// Radial direction:
147                 panel.add(new JLabel(trans.get("MassComponentCfg.lbl.Radialdirection")));
148                 
149                 m = new DoubleModel(component, "RadialDirection", UnitGroup.UNITS_ANGLE);
150                 
151                 spin = new JSpinner(m.getSpinnerModel());
152                 spin.setEditor(new SpinnerEditor(spin));
153                 panel.add(spin, "growx");
154                 
155                 panel.add(new UnitSelector(m), "growx");
156                 panel.add(new BasicSlider(m.getSliderModel(-Math.PI, Math.PI)), "w 100lp, wrap");
157                 
158                 
159                 //// Reset button
160                 JButton button = new JButton(trans.get("MassComponentCfg.but.Reset"));
161                 button.addActionListener(new ActionListener() {
162                         @Override
163                         public void actionPerformed(ActionEvent e) {
164                                 ((MassComponent) component).setRadialDirection(0.0);
165                                 ((MassComponent) component).setRadialPosition(0.0);
166                         }
167                 });
168                 panel.add(button, "spanx, right");
169                 
170                 return panel;
171         }
172 }