1 package net.sf.openrocket.gui.configdialog;
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;
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;
28 public class TrapezoidFinSetConfig extends FinSetConfig {
29 private static final Translator trans = Application.getTranslator();
31 public TrapezoidFinSetConfig(OpenRocketDocument d, final RocketComponent component) {
38 JPanel mainPanel = new JPanel(new MigLayout());
41 JPanel panel = new JPanel(new MigLayout("gap rel unrel", "[][65lp::][30lp::]", ""));
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"));
49 IntegerModel im = new IntegerModel(component, "FinCount", 1, 8);
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");
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"));
65 m = new DoubleModel(component, "BaseRotation", UnitGroup.UNITS_ANGLE);
67 spin = new JSpinner(m.getSpinnerModel());
68 spin.setEditor(new SpinnerEditor(spin));
69 panel.add(spin, "growx");
71 panel.add(new UnitSelector(m), "growx");
72 panel.add(new BasicSlider(m.getSliderModel(-Math.PI, Math.PI)), "w 100lp, wrap");
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"));
81 m = new DoubleModel(component, "CantAngle", UnitGroup.UNITS_ANGLE,
82 -FinSet.MAX_CANT, FinSet.MAX_CANT);
84 spin = new JSpinner(m.getSpinnerModel());
85 spin.setEditor(new SpinnerEditor(spin));
86 panel.add(spin, "growx");
88 panel.add(new UnitSelector(m), "growx");
89 panel.add(new BasicSlider(m.getSliderModel(-FinSet.MAX_CANT, FinSet.MAX_CANT)),
94 panel.add(new JLabel(trans.get("TrapezoidFinSetCfg.lbl.Rootchord")));
96 m = new DoubleModel(component, "RootChord", UnitGroup.UNITS_LENGTH, 0);
98 spin = new JSpinner(m.getSpinnerModel());
99 spin.setEditor(new SpinnerEditor(spin));
100 panel.add(spin, "growx");
102 panel.add(new UnitSelector(m), "growx");
103 panel.add(new BasicSlider(m.getSliderModel(0, 0.05, 0.2)), "w 100lp, wrap");
108 panel.add(new JLabel(trans.get("TrapezoidFinSetCfg.lbl.Tipchord")));
110 m = new DoubleModel(component, "TipChord", UnitGroup.UNITS_LENGTH, 0);
112 spin = new JSpinner(m.getSpinnerModel());
113 spin.setEditor(new SpinnerEditor(spin));
114 panel.add(spin, "growx");
116 panel.add(new UnitSelector(m), "growx");
117 panel.add(new BasicSlider(m.getSliderModel(0, 0.05, 0.2)), "w 100lp, wrap");
121 panel.add(new JLabel(trans.get("TrapezoidFinSetCfg.lbl.Height")));
123 m = new DoubleModel(component, "Height", UnitGroup.UNITS_LENGTH, 0);
125 spin = new JSpinner(m.getSpinnerModel());
126 spin.setEditor(new SpinnerEditor(spin));
127 panel.add(spin, "growx");
129 panel.add(new UnitSelector(m), "growx");
130 panel.add(new BasicSlider(m.getSliderModel(0, 0.05, 0.2)), "w 100lp, wrap");
135 panel.add(new JLabel(trans.get("TrapezoidFinSetCfg.lbl.Sweeplength")));
137 m = new DoubleModel(component, "Sweep", UnitGroup.UNITS_LENGTH);
139 spin = new JSpinner(m.getSpinnerModel());
140 spin.setEditor(new SpinnerEditor(spin));
141 panel.add(spin, "growx");
143 panel.add(new UnitSelector(m), "growx");
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");
152 panel.add(new JLabel(trans.get("TrapezoidFinSetCfg.lbl.Sweepangle")));
154 m = new DoubleModel(component, "SweepAngle", UnitGroup.UNITS_ANGLE,
155 -TrapezoidFinSet.MAX_SWEEP_ANGLE, TrapezoidFinSet.MAX_SWEEP_ANGLE);
157 spin = new JSpinner(m.getSpinnerModel());
158 spin.setEditor(new SpinnerEditor(spin));
159 panel.add(spin, "growx");
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");
169 mainPanel.add(panel, "aligny 20%");
171 mainPanel.add(new JSeparator(SwingConstants.VERTICAL), "growy");
175 panel = new JPanel(new MigLayout("gap rel unrel", "[][65lp::][30lp::]", ""));
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");
187 panel.add(new JLabel(trans.get("TrapezoidFinSetCfg.lbl.Thickness")));
189 m = new DoubleModel(component, "Thickness", UnitGroup.UNITS_LENGTH, 0);
191 spin = new JSpinner(m.getSpinnerModel());
192 spin.setEditor(new SpinnerEditor(spin));
193 panel.add(spin, "growx");
195 panel.add(new UnitSelector(m), "growx");
196 panel.add(new BasicSlider(m.getSliderModel(0, 0.01)), "w 100lp, wrap para");
200 //// Position relative to:
201 panel.add(new JLabel(trans.get("TrapezoidFinSetCfg.lbl.Posrelativeto")));
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
211 panel.add(combo, "spanx, growx, wrap");
213 panel.add(new JLabel(trans.get("TrapezoidFinSetCfg.lbl.plus")), "right");
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");
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");
229 materialPanel(panel, Material.Type.BULK);
234 mainPanel.add(panel, "aligny 20%");
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);