l10n updates
[debian/openrocket] / src / net / sf / openrocket / gui / configdialog / StreamerConfig.java
1 package net.sf.openrocket.gui.configdialog;
2
3
4 import java.awt.event.ActionEvent;
5 import java.awt.event.ActionListener;
6
7 import javax.swing.JButton;
8 import javax.swing.JCheckBox;
9 import javax.swing.JComboBox;
10 import javax.swing.JLabel;
11 import javax.swing.JPanel;
12 import javax.swing.JSpinner;
13
14 import net.miginfocom.swing.MigLayout;
15 import net.sf.openrocket.gui.SpinnerEditor;
16 import net.sf.openrocket.gui.adaptors.DoubleModel;
17 import net.sf.openrocket.gui.adaptors.EnumModel;
18 import net.sf.openrocket.gui.adaptors.MaterialModel;
19 import net.sf.openrocket.gui.components.BasicSlider;
20 import net.sf.openrocket.gui.components.HtmlLabel;
21 import net.sf.openrocket.gui.components.StyledLabel;
22 import net.sf.openrocket.gui.components.UnitSelector;
23 import net.sf.openrocket.l10n.Translator;
24 import net.sf.openrocket.material.Material;
25 import net.sf.openrocket.rocketcomponent.MassComponent;
26 import net.sf.openrocket.rocketcomponent.MotorMount.IgnitionEvent;
27 import net.sf.openrocket.rocketcomponent.RocketComponent;
28 import net.sf.openrocket.startup.Application;
29 import net.sf.openrocket.unit.UnitGroup;
30
31 public class StreamerConfig extends RecoveryDeviceConfig {
32         private static final Translator trans = Application.getTranslator();
33         
34         public StreamerConfig(final RocketComponent component) {
35                 super(component);
36                 
37                 JPanel primary = new JPanel(new MigLayout());
38                 
39                 JPanel panel = new JPanel(new MigLayout("gap rel unrel", "[][65lp::][30lp::][]", ""));
40                 
41
42                 //// Strip length:
43                 panel.add(new JLabel(trans.get("StreamerCfg.lbl.Striplength")));
44                 
45                 DoubleModel m = new DoubleModel(component, "StripLength", UnitGroup.UNITS_LENGTH, 0);
46                 
47                 JSpinner spin = new JSpinner(m.getSpinnerModel());
48                 spin.setEditor(new SpinnerEditor(spin));
49                 panel.add(spin, "growx");
50                 panel.add(new UnitSelector(m), "growx");
51                 panel.add(new BasicSlider(m.getSliderModel(0, 0.6, 1.5)), "w 100lp, wrap");
52                 
53                 //// Strip width:
54                 panel.add(new JLabel(trans.get("StreamerCfg.lbl.Stripwidth")));
55                 
56                 m = new DoubleModel(component, "StripWidth", UnitGroup.UNITS_LENGTH, 0);
57                 
58                 spin = new JSpinner(m.getSpinnerModel());
59                 spin.setEditor(new SpinnerEditor(spin));
60                 panel.add(spin, "growx");
61                 panel.add(new UnitSelector(m), "growx");
62                 panel.add(new BasicSlider(m.getSliderModel(0, 0.2)), "w 100lp, wrap 20lp");
63                 
64
65
66                 //// Strip area:
67                 panel.add(new JLabel(trans.get("StreamerCfg.lbl.Striparea")));
68                 
69                 m = new DoubleModel(component, "Area", UnitGroup.UNITS_AREA, 0);
70                 
71                 spin = new JSpinner(m.getSpinnerModel());
72                 spin.setEditor(new SpinnerEditor(spin));
73                 panel.add(spin, "growx");
74                 panel.add(new UnitSelector(m), "growx");
75                 panel.add(new BasicSlider(m.getSliderModel(0, 0.04, 0.25)), "w 100lp, wrap");
76                 
77                 //// Aspect ratio:
78                 panel.add(new JLabel(trans.get("StreamerCfg.lbl.Aspectratio")));
79                 
80                 m = new DoubleModel(component, "AspectRatio", UnitGroup.UNITS_NONE, 0);
81                 
82                 spin = new JSpinner(m.getSpinnerModel());
83                 spin.setEditor(new SpinnerEditor(spin));
84                 panel.add(spin, "growx");
85                 //              panel.add(new UnitSelector(m),"growx");
86                 panel.add(new BasicSlider(m.getSliderModel(2, 15)), "skip, w 100lp, wrap 20lp");
87                 
88
89                 //// Material:
90                 panel.add(new JLabel(trans.get("StreamerCfg.lbl.Material")));
91                 
92                 JComboBox combo = new JComboBox(new MaterialModel(panel, component,
93                                 Material.Type.SURFACE));
94                 //// The component material affects the weight of the component.
95                 combo.setToolTipText(trans.get("StreamerCfg.combo.ttip.MaterialModel"));
96                 panel.add(combo, "spanx 3, growx, wrap 20lp");
97                 
98
99
100                 // CD
101                 //// <html>Drag coefficient C<sub>D</sub>:
102                 JLabel label = new HtmlLabel(trans.get("StreamerCfg.lbl.longA1"));
103                 //// <html>The drag coefficient relative to the total area of the streamer.<br>
104                 String tip = trans.get("StreamerCfg.lbl.longB1") +
105                                 //// "A larger drag coefficient yields a slowed descent rate.
106                                 trans.get("StreamerCfg.lbl.longB2");
107                 label.setToolTipText(tip);
108                 panel.add(label);
109                 
110                 m = new DoubleModel(component, "CD", UnitGroup.UNITS_COEFFICIENT, 0);
111                 
112                 spin = new JSpinner(m.getSpinnerModel());
113                 spin.setToolTipText(tip);
114                 spin.setEditor(new SpinnerEditor(spin));
115                 panel.add(spin, "growx");
116                 
117                 JCheckBox check = new JCheckBox(m.getAutomaticAction());
118                 //// Automatic
119                 check.setText(trans.get("StreamerCfg.lbl.Automatic"));
120                 panel.add(check, "skip, span, wrap");
121                 
122                 //// The drag coefficient is relative to the area of the streamer.
123                 panel.add(new StyledLabel(trans.get("StreamerCfg.lbl.longC1"),
124                                 -2), "span, wrap");
125                 
126
127
128                 primary.add(panel, "grow, gapright 20lp");
129                 panel = new JPanel(new MigLayout("gap rel unrel", "[][65lp::][30lp::][]", ""));
130                 
131
132
133
134                 //// Position
135                 //// Position relative to:
136                 panel.add(new JLabel(trans.get("StreamerCfg.lbl.Posrelativeto")));
137                 
138                 combo = new JComboBox(
139                                 new EnumModel<RocketComponent.Position>(component, "RelativePosition",
140                                                 new RocketComponent.Position[] {
141                                                                 RocketComponent.Position.TOP,
142                                                                 RocketComponent.Position.MIDDLE,
143                                                                 RocketComponent.Position.BOTTOM,
144                                                                 RocketComponent.Position.ABSOLUTE
145                                 }));
146                 panel.add(combo, "spanx, growx, wrap");
147                 
148                 //// plus
149                 panel.add(new JLabel(trans.get("StreamerCfg.lbl.plus")), "right");
150                 
151                 m = new DoubleModel(component, "PositionValue", UnitGroup.UNITS_LENGTH);
152                 spin = new JSpinner(m.getSpinnerModel());
153                 spin.setEditor(new SpinnerEditor(spin));
154                 panel.add(spin, "growx");
155                 
156                 panel.add(new UnitSelector(m), "growx");
157                 panel.add(new BasicSlider(m.getSliderModel(
158                                 new DoubleModel(component.getParent(), "Length", -1.0, UnitGroup.UNITS_NONE),
159                                 new DoubleModel(component.getParent(), "Length"))),
160                                 "w 100lp, wrap");
161                 
162
163                 ////  Spatial length:
164                 panel.add(new JLabel(trans.get("StreamerCfg.lbl.Packedlength")));
165                 
166                 m = new DoubleModel(component, "Length", UnitGroup.UNITS_LENGTH, 0);
167                 
168                 spin = new JSpinner(m.getSpinnerModel());
169                 spin.setEditor(new SpinnerEditor(spin));
170                 panel.add(spin, "growx");
171                 
172                 panel.add(new UnitSelector(m), "growx");
173                 panel.add(new BasicSlider(m.getSliderModel(0, 0.1, 0.5)), "w 100lp, wrap");
174                 
175
176                 //// Tube diameter
177                 //// Packed diameter:
178                 panel.add(new JLabel(trans.get("StreamerCfg.lbl.Packeddiam")));
179                 
180                 DoubleModel od = new DoubleModel(component, "Radius", 2, UnitGroup.UNITS_LENGTH, 0);
181                 // Diameter = 2*Radius
182                 
183                 spin = new JSpinner(od.getSpinnerModel());
184                 spin.setEditor(new SpinnerEditor(spin));
185                 panel.add(spin, "growx");
186                 
187                 panel.add(new UnitSelector(od), "growx");
188                 panel.add(new BasicSlider(od.getSliderModel(0, 0.04, 0.2)), "w 100lp, wrap 30lp");
189                 
190
191                 //// Deployment
192                 //// Deploys at:
193                 panel.add(new JLabel(trans.get("StreamerCfg.lbl.Deploysat")), "");
194                 
195                 combo = new JComboBox(new EnumModel<IgnitionEvent>(component, "DeployEvent"));
196                 panel.add(combo, "spanx 3, growx, wrap");
197                 
198                 // ... and delay
199                 //// plus
200                 panel.add(new JLabel(trans.get("StreamerCfg.lbl.plusdelay")), "right");
201                 
202                 m = new DoubleModel(component, "DeployDelay", 0);
203                 spin = new JSpinner(m.getSpinnerModel());
204                 spin.setEditor(new SpinnerEditor(spin));
205                 panel.add(spin, "spanx, split");
206                 
207                 //// seconds
208                 panel.add(new JLabel(trans.get("StreamerCfg.lbl.seconds")), "wrap paragraph");
209                 
210                 // Altitude:
211                 label = new JLabel(trans.get("StreamerCfg.lbl.Altitude"));
212                 altitudeComponents.add(label);
213                 panel.add(label);
214                 
215                 m = new DoubleModel(component, "DeployAltitude", UnitGroup.UNITS_DISTANCE, 0);
216                 
217                 spin = new JSpinner(m.getSpinnerModel());
218                 spin.setEditor(new SpinnerEditor(spin));
219                 altitudeComponents.add(spin);
220                 panel.add(spin, "growx");
221                 UnitSelector unit = new UnitSelector(m);
222                 altitudeComponents.add(unit);
223                 panel.add(unit, "growx");
224                 BasicSlider slider = new BasicSlider(m.getSliderModel(100, 1000));
225                 altitudeComponents.add(slider);
226                 panel.add(slider, "w 100lp, wrap");
227                 
228
229                 primary.add(panel, "grow");
230                 
231                 updateFields();
232                 
233                 //// General and General properties
234                 tabbedPane.insertTab(trans.get("StreamerCfg.tab.General"), null, primary,
235                                 trans.get("StreamerCfg.tab.ttip.General"), 0);
236                 //// Radial position and Radial position configuration
237                 tabbedPane.insertTab(trans.get("StreamerCfg.tab.Radialpos"), null, positionTab(),
238                                 trans.get("StreamerCfg.tab.ttip.Radialpos"), 1);
239                 tabbedPane.setSelectedIndex(0);
240         }
241         
242         
243
244
245
246         protected JPanel positionTab() {
247                 JPanel panel = new JPanel(new MigLayout("gap rel unrel", "[][65lp::][30lp::]", ""));
248                 
249                 ////  Radial position
250                 //// Radial distance:
251                 panel.add(new JLabel(trans.get("StreamerCfg.lbl.Radialdistance")));
252                 
253                 DoubleModel m = new DoubleModel(component, "RadialPosition", UnitGroup.UNITS_LENGTH, 0);
254                 
255                 JSpinner spin = new JSpinner(m.getSpinnerModel());
256                 spin.setEditor(new SpinnerEditor(spin));
257                 panel.add(spin, "growx");
258                 
259                 panel.add(new UnitSelector(m), "growx");
260                 panel.add(new BasicSlider(m.getSliderModel(0, 0.1, 1.0)), "w 100lp, wrap");
261                 
262
263                 //// Radial direction
264                 //// Radial direction:
265                 panel.add(new JLabel(trans.get("StreamerCfg.lbl.Radialdirection")));
266                 
267                 m = new DoubleModel(component, "RadialDirection", UnitGroup.UNITS_ANGLE, 0);
268                 
269                 spin = new JSpinner(m.getSpinnerModel());
270                 spin.setEditor(new SpinnerEditor(spin));
271                 panel.add(spin, "growx");
272                 
273                 panel.add(new UnitSelector(m), "growx");
274                 panel.add(new BasicSlider(m.getSliderModel(-Math.PI, Math.PI)), "w 100lp, wrap");
275                 
276
277                 //// Reset button
278                 JButton button = new JButton(trans.get("StreamerCfg.but.Reset"));
279                 button.addActionListener(new ActionListener() {
280                         @Override
281                         public void actionPerformed(ActionEvent e) {
282                                 ((MassComponent) component).setRadialDirection(0.0);
283                                 ((MassComponent) component).setRadialPosition(0.0);
284                         }
285                 });
286                 panel.add(button, "spanx, right");
287                 
288                 return panel;
289         }
290 }