create changelog entry
[debian/openrocket] / core / src / net / sf / openrocket / gui / configdialog / EllipticalFinSetConfig.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.startup.Application;
24 import net.sf.openrocket.unit.UnitGroup;
25
26 public class EllipticalFinSetConfig extends FinSetConfig {
27         private static final Translator trans = Application.getTranslator();
28         
29         public EllipticalFinSetConfig(OpenRocketDocument d, final RocketComponent component) {
30                 super(d, component);
31                 
32                 DoubleModel m;
33                 JSpinner spin;
34                 JComboBox combo;
35                 
36                 JPanel mainPanel = new JPanel(new MigLayout());
37                 
38                 
39                 
40                 JPanel panel = new JPanel(new MigLayout("gap rel unrel", "[][65lp::][30lp::]", ""));
41                 
42                 ////  Number of fins
43                 panel.add(new JLabel(trans.get("EllipticalFinSetCfg.Nbroffins")));
44                 
45                 IntegerModel im = new IntegerModel(component, "FinCount", 1, 8);
46                 
47                 spin = new JSpinner(im.getSpinnerModel());
48                 spin.setEditor(new SpinnerEditor(spin));
49                 panel.add(spin, "growx, wrap");
50                 
51                 
52                 ////  Base rotation
53                 panel.add(new JLabel(trans.get("EllipticalFinSetCfg.Rotation")));
54                 
55                 m = new DoubleModel(component, "BaseRotation", UnitGroup.UNITS_ANGLE);
56                 
57                 spin = new JSpinner(m.getSpinnerModel());
58                 spin.setEditor(new SpinnerEditor(spin));
59                 panel.add(spin, "growx");
60                 
61                 panel.add(new UnitSelector(m), "growx");
62                 panel.add(new BasicSlider(m.getSliderModel(-Math.PI, Math.PI)), "w 100lp, wrap");
63                 
64                 
65                 ////  Fin cant
66                 JLabel label = new JLabel(trans.get("EllipticalFinSetCfg.Fincant"));
67                 //// "The angle that the fins are canted with respect to the rocket
68                 label.setToolTipText(trans.get("EllipticalFinSetCfg.ttip.Fincant"));
69                 panel.add(label);
70                 
71                 m = new DoubleModel(component, "CantAngle", UnitGroup.UNITS_ANGLE,
72                                 -FinSet.MAX_CANT, FinSet.MAX_CANT);
73                 
74                 spin = new JSpinner(m.getSpinnerModel());
75                 spin.setEditor(new SpinnerEditor(spin));
76                 panel.add(spin, "growx");
77                 
78                 panel.add(new UnitSelector(m), "growx");
79                 panel.add(new BasicSlider(m.getSliderModel(-FinSet.MAX_CANT, FinSet.MAX_CANT)),
80                                 "w 100lp, wrap");
81                 
82                 
83                 
84                 ////  Root chord
85                 panel.add(new JLabel(trans.get("EllipticalFinSetCfg.Rootchord")));
86                 
87                 m = new DoubleModel(component, "Length", UnitGroup.UNITS_LENGTH, 0);
88                 
89                 spin = new JSpinner(m.getSpinnerModel());
90                 spin.setEditor(new SpinnerEditor(spin));
91                 panel.add(spin, "growx");
92                 
93                 panel.add(new UnitSelector(m), "growx");
94                 panel.add(new BasicSlider(m.getSliderModel(0, 0.05, 0.2)), "w 100lp, wrap");
95                 
96                 
97                 ////  Height
98                 panel.add(new JLabel(trans.get("EllipticalFinSetCfg.Height")));
99                 
100                 m = new DoubleModel(component, "Height", UnitGroup.UNITS_LENGTH, 0);
101                 
102                 spin = new JSpinner(m.getSpinnerModel());
103                 spin.setEditor(new SpinnerEditor(spin));
104                 panel.add(spin, "growx");
105                 
106                 panel.add(new UnitSelector(m), "growx");
107                 panel.add(new BasicSlider(m.getSliderModel(0, 0.05, 0.2)), "w 100lp, wrap");
108                 
109                 
110                 ////  Position
111                 //// Position relative to:
112                 panel.add(new JLabel(trans.get("EllipticalFinSetCfg.Positionrelativeto")));
113                 
114                 combo = new JComboBox(
115                                 new EnumModel<RocketComponent.Position>(component, "RelativePosition",
116                                                 new RocketComponent.Position[] {
117                                                                 RocketComponent.Position.TOP,
118                                                                 RocketComponent.Position.MIDDLE,
119                                                                 RocketComponent.Position.BOTTOM,
120                                                                 RocketComponent.Position.ABSOLUTE
121                                                 }));
122                 panel.add(combo, "spanx, growx, wrap");
123                 
124                 //// plus
125                 panel.add(new JLabel(trans.get("EllipticalFinSetCfg.plus")), "right");
126                 
127                 m = new DoubleModel(component, "PositionValue", UnitGroup.UNITS_LENGTH);
128                 spin = new JSpinner(m.getSpinnerModel());
129                 spin.setEditor(new SpinnerEditor(spin));
130                 panel.add(spin, "growx");
131                 
132                 panel.add(new UnitSelector(m), "growx");
133                 panel.add(new BasicSlider(m.getSliderModel(
134                                 new DoubleModel(component.getParent(), "Length", -1.0, UnitGroup.UNITS_NONE),
135                                 new DoubleModel(component.getParent(), "Length"))),
136                                 "w 100lp, wrap");
137                 
138                 
139                 
140                 //// Right portion
141                 mainPanel.add(panel, "aligny 20%");
142                 
143                 mainPanel.add(new JSeparator(SwingConstants.VERTICAL), "growy");
144                 
145                 
146                 
147                 panel = new JPanel(new MigLayout("gap rel unrel", "[][65lp::][30lp::]", ""));
148                 
149                 
150                 ////  Cross section
151                 //// Fin cross section:
152                 panel.add(new JLabel(trans.get("EllipticalFinSetCfg.FincrossSection")), "span, split");
153                 combo = new JComboBox(
154                                 new EnumModel<FinSet.CrossSection>(component, "CrossSection"));
155                 panel.add(combo, "growx, wrap unrel");
156                 
157                 
158                 ////  Thickness:
159                 panel.add(new JLabel(trans.get("EllipticalFinSetCfg.Thickness")));
160                 
161                 m = new DoubleModel(component, "Thickness", UnitGroup.UNITS_LENGTH, 0);
162                 
163                 spin = new JSpinner(m.getSpinnerModel());
164                 spin.setEditor(new SpinnerEditor(spin));
165                 panel.add(spin, "growx");
166                 
167                 panel.add(new UnitSelector(m), "growx");
168                 panel.add(new BasicSlider(m.getSliderModel(0, 0.01)), "w 100lp, wrap 30lp");
169                 
170                 
171                 
172                 //// Material
173                 materialPanel(panel, Material.Type.BULK);
174                 
175                 
176                 
177                 
178                 
179                 mainPanel.add(panel, "aligny 20%");
180                 
181                 addFinSetButtons();
182                 
183                 //// General and General properties
184                 tabbedPane.insertTab(trans.get("EllipticalFinSetCfg.General"), null, mainPanel,
185                                 trans.get("EllipticalFinSetCfg.Generalproperties"), 0);
186                 tabbedPane.setSelectedIndex(0);
187         }
188         
189 }