create changelog entry
[debian/openrocket] / core / src / net / sf / openrocket / gui / configdialog / TrapezoidFinSetConfig.java
1 package net.sf.openrocket.gui.configdialog;
2
3
4 import javax.swing.JComboBox;
5 import javax.swing.JLabel;
6 import javax.swing.JPanel;
7 import javax.swing.JSeparator;
8 import javax.swing.JSpinner;
9 import javax.swing.SwingConstants;
10
11 import net.miginfocom.swing.MigLayout;
12 import net.sf.openrocket.document.OpenRocketDocument;
13 import net.sf.openrocket.gui.SpinnerEditor;
14 import net.sf.openrocket.gui.adaptors.DoubleModel;
15 import net.sf.openrocket.gui.adaptors.EnumModel;
16 import net.sf.openrocket.gui.adaptors.IntegerModel;
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.material.Material;
21 import net.sf.openrocket.rocketcomponent.FinSet;
22 import net.sf.openrocket.rocketcomponent.RocketComponent;
23 import net.sf.openrocket.rocketcomponent.TrapezoidFinSet;
24 import net.sf.openrocket.startup.Application;
25 import net.sf.openrocket.unit.UnitGroup;
26
27
28 public class TrapezoidFinSetConfig extends FinSetConfig {
29         private static final Translator trans = Application.getTranslator();
30         
31         public TrapezoidFinSetConfig(OpenRocketDocument d, final RocketComponent component) {
32                 super(d, component);
33                 
34                 DoubleModel m;
35                 JSpinner spin;
36                 JComboBox combo;
37                 
38                 JPanel mainPanel = new JPanel(new MigLayout());
39                 
40                 
41                 JPanel panel = new JPanel(new MigLayout("gap rel unrel", "[][65lp::][30lp::]", ""));
42                 
43                 ////  Number of fins:
44                 JLabel label = new JLabel(trans.get("TrapezoidFinSetCfg.lbl.Nbroffins"));
45                 //// The number of fins in the fin set.
46                 label.setToolTipText(trans.get("TrapezoidFinSetCfg.lbl.ttip.Nbroffins"));
47                 panel.add(label);
48                 
49                 IntegerModel im = new IntegerModel(component, "FinCount", 1, 8);
50                 
51                 spin = new JSpinner(im.getSpinnerModel());
52                 spin.setEditor(new SpinnerEditor(spin));
53                 //// The number of fins in the fin set.
54                 spin.setToolTipText(trans.get("TrapezoidFinSetCfg.lbl.ttip.Nbroffins"));
55                 panel.add(spin, "growx, wrap");
56                 
57                 
58                 ////  Base rotation
59                 //// Fin rotation:
60                 label = new JLabel(trans.get("TrapezoidFinSetCfg.lbl.Finrotation"));
61                 //// The angle of the first fin in the fin set.
62                 label.setToolTipText(trans.get("TrapezoidFinSetCfg.lbl.ttip.Finrotation"));
63                 panel.add(label);
64                 
65                 m = new DoubleModel(component, "BaseRotation", UnitGroup.UNITS_ANGLE);
66                 
67                 spin = new JSpinner(m.getSpinnerModel());
68                 spin.setEditor(new SpinnerEditor(spin));
69                 panel.add(spin, "growx");
70                 
71                 panel.add(new UnitSelector(m), "growx");
72                 panel.add(new BasicSlider(m.getSliderModel(-Math.PI, Math.PI)), "w 100lp, wrap");
73                 
74                 
75                 ////  Fin cant:
76                 label = new JLabel(trans.get("TrapezoidFinSetCfg.lbl.Fincant"));
77                 //// The angle that the fins are canted with respect to the rocket 
78                 label.setToolTipText(trans.get("TrapezoidFinSetCfg.lbl.ttip.Fincant"));
79                 panel.add(label);
80                 
81                 m = new DoubleModel(component, "CantAngle", UnitGroup.UNITS_ANGLE,
82                                 -FinSet.MAX_CANT, FinSet.MAX_CANT);
83                 
84                 spin = new JSpinner(m.getSpinnerModel());
85                 spin.setEditor(new SpinnerEditor(spin));
86                 panel.add(spin, "growx");
87                 
88                 panel.add(new UnitSelector(m), "growx");
89                 panel.add(new BasicSlider(m.getSliderModel(-FinSet.MAX_CANT, FinSet.MAX_CANT)),
90                                 "w 100lp, wrap");
91                 
92                 
93                 ////  Root chord:
94                 panel.add(new JLabel(trans.get("TrapezoidFinSetCfg.lbl.Rootchord")));
95                 
96                 m = new DoubleModel(component, "RootChord", UnitGroup.UNITS_LENGTH, 0);
97                 
98                 spin = new JSpinner(m.getSpinnerModel());
99                 spin.setEditor(new SpinnerEditor(spin));
100                 panel.add(spin, "growx");
101                 
102                 panel.add(new UnitSelector(m), "growx");
103                 panel.add(new BasicSlider(m.getSliderModel(0, 0.05, 0.2)), "w 100lp, wrap");
104                 
105                 
106                 
107                 ////  Tip chord:
108                 panel.add(new JLabel(trans.get("TrapezoidFinSetCfg.lbl.Tipchord")));
109                 
110                 m = new DoubleModel(component, "TipChord", UnitGroup.UNITS_LENGTH, 0);
111                 
112                 spin = new JSpinner(m.getSpinnerModel());
113                 spin.setEditor(new SpinnerEditor(spin));
114                 panel.add(spin, "growx");
115                 
116                 panel.add(new UnitSelector(m), "growx");
117                 panel.add(new BasicSlider(m.getSliderModel(0, 0.05, 0.2)), "w 100lp, wrap");
118                 
119                 
120                 ////  Height:
121                 panel.add(new JLabel(trans.get("TrapezoidFinSetCfg.lbl.Height")));
122                 
123                 m = new DoubleModel(component, "Height", UnitGroup.UNITS_LENGTH, 0);
124                 
125                 spin = new JSpinner(m.getSpinnerModel());
126                 spin.setEditor(new SpinnerEditor(spin));
127                 panel.add(spin, "growx");
128                 
129                 panel.add(new UnitSelector(m), "growx");
130                 panel.add(new BasicSlider(m.getSliderModel(0, 0.05, 0.2)), "w 100lp, wrap");
131                 
132                 
133                 
134                 ////  Sweep length:
135                 panel.add(new JLabel(trans.get("TrapezoidFinSetCfg.lbl.Sweeplength")));
136                 
137                 m = new DoubleModel(component, "Sweep", UnitGroup.UNITS_LENGTH);
138                 
139                 spin = new JSpinner(m.getSpinnerModel());
140                 spin.setEditor(new SpinnerEditor(spin));
141                 panel.add(spin, "growx");
142                 
143                 panel.add(new UnitSelector(m), "growx");
144                 
145                 // sweep slider from -1.1*TipChord to 1.1*RootChord
146                 DoubleModel tc = new DoubleModel(component, "TipChord", -1.1, UnitGroup.UNITS_LENGTH);
147                 DoubleModel rc = new DoubleModel(component, "RootChord", 1.1, UnitGroup.UNITS_LENGTH);
148                 panel.add(new BasicSlider(m.getSliderModel(tc, rc)), "w 100lp, wrap");
149                 
150                 
151                 ////  Sweep angle:
152                 panel.add(new JLabel(trans.get("TrapezoidFinSetCfg.lbl.Sweepangle")));
153                 
154                 m = new DoubleModel(component, "SweepAngle", UnitGroup.UNITS_ANGLE,
155                                 -TrapezoidFinSet.MAX_SWEEP_ANGLE, TrapezoidFinSet.MAX_SWEEP_ANGLE);
156                 
157                 spin = new JSpinner(m.getSpinnerModel());
158                 spin.setEditor(new SpinnerEditor(spin));
159                 panel.add(spin, "growx");
160                 
161                 panel.add(new UnitSelector(m), "growx");
162                 panel.add(new BasicSlider(m.getSliderModel(-Math.PI / 4, Math.PI / 4)),
163                                 "w 100lp, wrap paragraph");
164                 
165                 
166                 
167                 
168                 
169                 mainPanel.add(panel, "aligny 20%");
170                 
171                 mainPanel.add(new JSeparator(SwingConstants.VERTICAL), "growy");
172                 
173                 
174                 
175                 panel = new JPanel(new MigLayout("gap rel unrel", "[][65lp::][30lp::]", ""));
176                 
177                 
178                 
179                 ////  Fin cross section:
180                 panel.add(new JLabel(trans.get("TrapezoidFinSetCfg.lbl.FincrossSection")));
181                 combo = new JComboBox(
182                                 new EnumModel<FinSet.CrossSection>(component, "CrossSection"));
183                 panel.add(combo, "span, growx, wrap");
184                 
185                 
186                 ////  Thickness:
187                 panel.add(new JLabel(trans.get("TrapezoidFinSetCfg.lbl.Thickness")));
188                 
189                 m = new DoubleModel(component, "Thickness", UnitGroup.UNITS_LENGTH, 0);
190                 
191                 spin = new JSpinner(m.getSpinnerModel());
192                 spin.setEditor(new SpinnerEditor(spin));
193                 panel.add(spin, "growx");
194                 
195                 panel.add(new UnitSelector(m), "growx");
196                 panel.add(new BasicSlider(m.getSliderModel(0, 0.01)), "w 100lp, wrap para");
197                 
198                 
199                 ////  Position
200                 //// Position relative to:
201                 panel.add(new JLabel(trans.get("TrapezoidFinSetCfg.lbl.Posrelativeto")));
202                 
203                 combo = new JComboBox(
204                                 new EnumModel<RocketComponent.Position>(component, "RelativePosition",
205                                                 new RocketComponent.Position[] {
206                                                                 RocketComponent.Position.TOP,
207                                                                 RocketComponent.Position.MIDDLE,
208                                                                 RocketComponent.Position.BOTTOM,
209                                                                 RocketComponent.Position.ABSOLUTE
210                                                 }));
211                 panel.add(combo, "spanx, growx, wrap");
212                 //// plus
213                 panel.add(new JLabel(trans.get("TrapezoidFinSetCfg.lbl.plus")), "right");
214                 
215                 m = new DoubleModel(component, "PositionValue", UnitGroup.UNITS_LENGTH);
216                 spin = new JSpinner(m.getSpinnerModel());
217                 spin.setEditor(new SpinnerEditor(spin));
218                 panel.add(spin, "growx");
219                 
220                 panel.add(new UnitSelector(m), "growx");
221                 panel.add(new BasicSlider(m.getSliderModel(
222                                 new DoubleModel(component.getParent(), "Length", -1.0, UnitGroup.UNITS_NONE),
223                                 new DoubleModel(component.getParent(), "Length"))),
224                                 "w 100lp, wrap para");
225                 
226                 
227                 
228                 //// Material
229                 materialPanel(panel, Material.Type.BULK);
230                 
231                 
232                 
233                 
234                 mainPanel.add(panel, "aligny 20%");
235                 
236                 //// General and General properties
237                 tabbedPane.insertTab(trans.get("TrapezoidFinSetCfg.tab.General"), null, mainPanel,
238                                 trans.get("TrapezoidFinSetCfg.tab.Generalproperties"), 0);
239                 tabbedPane.setSelectedIndex(0);
240                 
241                 addFinSetButtons();
242                 
243         }
244 }