Initial commit
[debian/openrocket] / src / net / sf / openrocket / gui / configdialog / MassComponentConfig.java
1 package net.sf.openrocket.gui.configdialog;
2
3 import java.awt.event.ActionEvent;
4 import java.awt.event.ActionListener;
5
6
7 import javax.swing.JButton;
8 import javax.swing.JComboBox;
9 import javax.swing.JLabel;
10 import javax.swing.JPanel;
11 import javax.swing.JSpinner;
12
13 import net.miginfocom.swing.MigLayout;
14 import net.sf.openrocket.gui.BasicSlider;
15 import net.sf.openrocket.gui.SpinnerEditor;
16 import net.sf.openrocket.gui.UnitSelector;
17 import net.sf.openrocket.gui.adaptors.DoubleModel;
18 import net.sf.openrocket.gui.adaptors.EnumModel;
19 import net.sf.openrocket.rocketcomponent.MassComponent;
20 import net.sf.openrocket.rocketcomponent.RocketComponent;
21 import net.sf.openrocket.unit.UnitGroup;
22
23
24 public class MassComponentConfig extends RocketComponentConfig {
25
26         public MassComponentConfig(RocketComponent component) {
27                 super(component);
28                 
29                 
30                 JPanel panel = new JPanel(new MigLayout("gap rel unrel","[][65lp::][30lp::]",""));
31                 
32                 
33                 
34                 ////  Mass
35                 panel.add(new JLabel("Mass"));
36                 
37                 DoubleModel m = new DoubleModel(component,"ComponentMass",UnitGroup.UNITS_MASS,0);
38                 
39                 JSpinner spin = new JSpinner(m.getSpinnerModel());
40                 spin.setEditor(new SpinnerEditor(spin));
41                 panel.add(spin,"growx");
42                 
43                 panel.add(new UnitSelector(m),"growx");
44                 panel.add(new BasicSlider(m.getSliderModel(0, 0.05, 0.5)),"w 100lp, wrap");
45                 
46                 
47                 
48                 ////  Mass length
49                 panel.add(new JLabel("Length"));
50                 
51                 m = new DoubleModel(component,"Length",UnitGroup.UNITS_LENGTH,0);
52                 
53                 spin = new JSpinner(m.getSpinnerModel());
54                 spin.setEditor(new SpinnerEditor(spin));
55                 panel.add(spin,"growx");
56                 
57                 panel.add(new UnitSelector(m),"growx");
58                 panel.add(new BasicSlider(m.getSliderModel(0, 0.1, 0.5)),"w 100lp, wrap");
59                 
60                 
61                 //// Tube diameter
62                 panel.add(new JLabel("Diameter:"));
63
64                 DoubleModel od  = new DoubleModel(component,"Radius",2,UnitGroup.UNITS_LENGTH,0);
65                 // Diameter = 2*Radius
66
67                 spin = new JSpinner(od.getSpinnerModel());
68                 spin.setEditor(new SpinnerEditor(spin));
69                 panel.add(spin,"growx");
70                 
71                 panel.add(new UnitSelector(od),"growx");
72                 panel.add(new BasicSlider(od.getSliderModel(0, 0.04, 0.2)),"w 100lp, wrap");
73
74                 
75                 ////  Position
76                 
77                 panel.add(new JLabel("Position relative to:"));
78
79                 JComboBox combo = new JComboBox(
80                                 new EnumModel<RocketComponent.Position>(component, "RelativePosition",
81                                                 new RocketComponent.Position[] {
82                                                 RocketComponent.Position.TOP,
83                                                 RocketComponent.Position.MIDDLE,
84                                                 RocketComponent.Position.BOTTOM,
85                                                 RocketComponent.Position.ABSOLUTE
86                                 }));
87                 panel.add(combo,"spanx, growx, wrap");
88                 
89                 panel.add(new JLabel("plus"),"right");
90
91                 m = new DoubleModel(component,"PositionValue",UnitGroup.UNITS_LENGTH);
92                 spin = new JSpinner(m.getSpinnerModel());
93                 spin.setEditor(new SpinnerEditor(spin));
94                 panel.add(spin,"growx");
95                 
96                 panel.add(new UnitSelector(m),"growx");
97                 panel.add(new BasicSlider(m.getSliderModel(
98                                 new DoubleModel(component.getParent(), "Length", -1.0, UnitGroup.UNITS_NONE),
99                                 new DoubleModel(component.getParent(), "Length"))),
100                                 "w 100lp, wrap");
101
102
103                 tabbedPane.insertTab("General", null, panel, "General properties", 0);
104                 tabbedPane.insertTab("Radial position", null, positionTab(), 
105                                 "Radial position configuration", 1);
106                 tabbedPane.setSelectedIndex(0);
107         }
108         
109         
110         protected JPanel positionTab() {
111                 JPanel panel = new JPanel(new MigLayout("gap rel unrel","[][65lp::][30lp::]",""));
112                 
113                 ////  Radial position
114                 panel.add(new JLabel("Radial distance:"));
115                 
116                 DoubleModel m = new DoubleModel(component,"RadialPosition",UnitGroup.UNITS_LENGTH,0);
117                 
118                 JSpinner spin = new JSpinner(m.getSpinnerModel());
119                 spin.setEditor(new SpinnerEditor(spin));
120                 panel.add(spin,"growx");
121                 
122                 panel.add(new UnitSelector(m),"growx");
123                 panel.add(new BasicSlider(m.getSliderModel(0, 0.1, 1.0)),"w 100lp, wrap");
124                 
125                 
126                 //// Radial direction
127                 panel.add(new JLabel("Radial direction:"));
128                 
129                 m = new DoubleModel(component,"RadialDirection",UnitGroup.UNITS_ANGLE,0);
130                 
131                 spin = new JSpinner(m.getSpinnerModel());
132                 spin.setEditor(new SpinnerEditor(spin));
133                 panel.add(spin,"growx");
134                 
135                 panel.add(new UnitSelector(m),"growx");
136                 panel.add(new BasicSlider(m.getSliderModel(-Math.PI, Math.PI)),"w 100lp, wrap");
137
138                 
139                 //// Reset button
140                 JButton button = new JButton("Reset");
141                 button.addActionListener(new ActionListener() {
142                         @Override
143                         public void actionPerformed(ActionEvent e) {
144                                 ((MassComponent) component).setRadialDirection(0.0);
145                                 ((MassComponent) component).setRadialPosition(0.0);
146                         }
147                 });
148                 panel.add(button,"spanx, right");
149                 
150                 return panel;
151         }
152 }