Bug fixes and startup checks
[debian/openrocket] / src / net / sf / openrocket / gui / configdialog / BodyTubeConfig.java
1 package net.sf.openrocket.gui.configdialog;
2
3
4 import javax.swing.JCheckBox;
5 import javax.swing.JLabel;
6 import javax.swing.JPanel;
7 import javax.swing.JSpinner;
8
9 import net.miginfocom.swing.MigLayout;
10 import net.sf.openrocket.gui.SpinnerEditor;
11 import net.sf.openrocket.gui.adaptors.BooleanModel;
12 import net.sf.openrocket.gui.adaptors.DoubleModel;
13 import net.sf.openrocket.gui.components.BasicSlider;
14 import net.sf.openrocket.gui.components.UnitSelector;
15 import net.sf.openrocket.material.Material;
16 import net.sf.openrocket.rocketcomponent.BodyTube;
17 import net.sf.openrocket.rocketcomponent.RocketComponent;
18 import net.sf.openrocket.unit.UnitGroup;
19
20 public class BodyTubeConfig extends RocketComponentConfig {
21
22         private MotorConfig motorConfigPane = null;
23
24         public BodyTubeConfig(RocketComponent c) {
25                 super(c);
26                 
27                 JPanel panel = new JPanel(new MigLayout("gap rel unrel","[][65lp::][30lp::][]",""));
28                 
29                 ////  Body tube length
30                 panel.add(new JLabel("Body tube length:"));
31                 
32                 DoubleModel m = new DoubleModel(component,"Length",UnitGroup.UNITS_LENGTH,0);
33                 
34                 JSpinner spin = new JSpinner(m.getSpinnerModel());
35                 spin.setEditor(new SpinnerEditor(spin));
36                 panel.add(spin,"growx");
37                 
38                 panel.add(new UnitSelector(m),"growx");
39                 panel.add(new BasicSlider(m.getSliderModel(0, 0.5, 2.0)),"w 100lp, wrap");
40                 
41                 
42                 //// Body tube diameter
43                 panel.add(new JLabel("Outer diameter:"));
44
45                 DoubleModel od  = new DoubleModel(component,"Radius",2,UnitGroup.UNITS_LENGTH,0);
46                 // Diameter = 2*Radius
47
48                 spin = new JSpinner(od.getSpinnerModel());
49                 spin.setEditor(new SpinnerEditor(spin));
50                 panel.add(spin,"growx");
51                 
52                 panel.add(new UnitSelector(od),"growx");
53                 panel.add(new BasicSlider(od.getSliderModel(0, 0.04, 0.2)),"w 100lp, wrap 0px");
54
55                 JCheckBox check = new JCheckBox(od.getAutomaticAction());
56                 check.setText("Automatic");
57                 panel.add(check,"skip, span 2, wrap");
58                 
59                 
60                 ////  Inner diameter
61                 panel.add(new JLabel("Inner diameter:"));
62
63                 // Diameter = 2*Radius
64                 m = new DoubleModel(component,"InnerRadius",2,UnitGroup.UNITS_LENGTH,0);
65                 
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(new DoubleModel(0), od)),"w 100lp, wrap");
73
74                 
75                 ////  Wall thickness
76                 panel.add(new JLabel("Wall thickness:"));
77                 
78                 m = new DoubleModel(component,"Thickness",UnitGroup.UNITS_LENGTH,0);
79                 
80                 spin = new JSpinner(m.getSpinnerModel());
81                 spin.setEditor(new SpinnerEditor(spin));
82                 panel.add(spin,"growx");
83                 
84                 panel.add(new UnitSelector(m),"growx");
85                 panel.add(new BasicSlider(m.getSliderModel(0,0.01)),"w 100lp, wrap 0px");
86                 
87                 
88                 check = new JCheckBox(new BooleanModel(component,"Filled"));
89                 check.setText("Filled");
90                 panel.add(check,"skip, span 2, wrap");
91                 
92                 
93                 //// Material
94                 panel.add(materialPanel(new JPanel(new MigLayout()), Material.Type.BULK),
95                                 "cell 4 0, gapleft paragraph, aligny 0%, spany");
96                 
97
98                 tabbedPane.insertTab("General", null, panel, "General properties", 0);
99                 motorConfigPane = new MotorConfig((BodyTube)c);
100                 tabbedPane.insertTab("Motor", null, motorConfigPane, "Motor mount configuration", 1);
101                 tabbedPane.setSelectedIndex(0);
102         }
103         
104         @Override
105         public void updateFields() {
106                 super.updateFields();
107                 if (motorConfigPane != null)
108                         motorConfigPane.updateFields();
109         }
110         
111 }