659714f46043f001514c4d6aa36b2e92d49ffc1f
[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.SpinnerEditor;
15 import net.sf.openrocket.gui.adaptors.DoubleModel;
16 import net.sf.openrocket.gui.adaptors.EnumModel;
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.rocketcomponent.MassComponent;
21 import net.sf.openrocket.rocketcomponent.RocketComponent;
22 import net.sf.openrocket.startup.Application;
23 import net.sf.openrocket.unit.UnitGroup;
24
25
26 public class MassComponentConfig extends RocketComponentConfig {
27         private static final Translator trans = Application.getTranslator();
28
29         public MassComponentConfig(RocketComponent component) {
30                 super(component);
31                 
32                 
33                 JPanel panel = new JPanel(new MigLayout("gap rel unrel","[][65lp::][30lp::]",""));
34                 
35                 
36                 
37                 ////  Mass
38                 panel.add(new JLabel(trans.get("MassComponentCfg.lbl.Mass")));
39                 
40                 DoubleModel m = new DoubleModel(component,"ComponentMass",UnitGroup.UNITS_MASS,0);
41                 
42                 JSpinner spin = new JSpinner(m.getSpinnerModel());
43                 spin.setEditor(new SpinnerEditor(spin));
44                 panel.add(spin,"growx");
45                 
46                 panel.add(new UnitSelector(m),"growx");
47                 panel.add(new BasicSlider(m.getSliderModel(0, 0.05, 0.5)),"w 100lp, wrap");
48                 
49                 
50                 
51                 ////  Mass length
52                 //// Length
53                 panel.add(new JLabel(trans.get("MassComponentCfg.lbl.Length")));
54                 
55                 m = new DoubleModel(component,"Length",UnitGroup.UNITS_LENGTH,0);
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(0, 0.1, 0.5)),"w 100lp, wrap");
63                 
64                 
65                 //// Tube diameter
66                 //// Diameter:
67                 panel.add(new JLabel(trans.get("MassComponentCfg.lbl.Diameter")));
68
69                 DoubleModel od  = new DoubleModel(component,"Radius",2,UnitGroup.UNITS_LENGTH,0);
70                 // Diameter = 2*Radius
71
72                 spin = new JSpinner(od.getSpinnerModel());
73                 spin.setEditor(new SpinnerEditor(spin));
74                 panel.add(spin,"growx");
75                 
76                 panel.add(new UnitSelector(od),"growx");
77                 panel.add(new BasicSlider(od.getSliderModel(0, 0.04, 0.2)),"w 100lp, wrap");
78
79                 
80                 ////  Position
81                 //// Position relative to:
82                 panel.add(new JLabel(trans.get("MassComponentCfg.lbl.PosRelativeto")));
83
84                 JComboBox combo = new JComboBox(
85                                 new EnumModel<RocketComponent.Position>(component, "RelativePosition",
86                                                 new RocketComponent.Position[] {
87                                                 RocketComponent.Position.TOP,
88                                                 RocketComponent.Position.MIDDLE,
89                                                 RocketComponent.Position.BOTTOM,
90                                                 RocketComponent.Position.ABSOLUTE
91                                 }));
92                 panel.add(combo,"spanx, growx, wrap");
93                 //// plus
94                 panel.add(new JLabel(trans.get("MassComponentCfg.lbl.plus")),"right");
95
96                 m = new DoubleModel(component,"PositionValue",UnitGroup.UNITS_LENGTH);
97                 spin = new JSpinner(m.getSpinnerModel());
98                 spin.setEditor(new SpinnerEditor(spin));
99                 panel.add(spin,"growx");
100                 
101                 panel.add(new UnitSelector(m),"growx");
102                 panel.add(new BasicSlider(m.getSliderModel(
103                                 new DoubleModel(component.getParent(), "Length", -1.0, UnitGroup.UNITS_NONE),
104                                 new DoubleModel(component.getParent(), "Length"))),
105                                 "w 100lp, wrap");
106
107                 //// General and General properties
108                 tabbedPane.insertTab(trans.get("MassComponentCfg.tab.General"), null, panel, 
109                                 trans.get("MassComponentCfg.tab.ttip.General"), 0);
110                 //// Radial position and Radial position configuration
111                 tabbedPane.insertTab(trans.get("MassComponentCfg.tab.Radialpos"), null, positionTab(), 
112                                 trans.get("MassComponentCfg.tab.ttip.Radialpos"), 1);
113                 tabbedPane.setSelectedIndex(0);
114         }
115         
116         
117         protected JPanel positionTab() {
118                 JPanel panel = new JPanel(new MigLayout("gap rel unrel","[][65lp::][30lp::]",""));
119                 
120                 ////  Radial position
121                 //// Radial distance:
122                 panel.add(new JLabel(trans.get("MassComponentCfg.lbl.Radialdistance")));
123                 
124                 DoubleModel m = new DoubleModel(component,"RadialPosition",UnitGroup.UNITS_LENGTH,0);
125                 
126                 JSpinner spin = new JSpinner(m.getSpinnerModel());
127                 spin.setEditor(new SpinnerEditor(spin));
128                 panel.add(spin,"growx");
129                 
130                 panel.add(new UnitSelector(m),"growx");
131                 panel.add(new BasicSlider(m.getSliderModel(0, 0.1, 1.0)),"w 100lp, wrap");
132                 
133                 
134                 //// Radial direction:
135                 panel.add(new JLabel(trans.get("MassComponentCfg.lbl.Radialdirection")));
136                 
137                 m = new DoubleModel(component,"RadialDirection",UnitGroup.UNITS_ANGLE,0);
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                 panel.add(new BasicSlider(m.getSliderModel(-Math.PI, Math.PI)),"w 100lp, wrap");
145
146                 
147                 //// Reset button
148                 JButton button = new JButton(trans.get("MassComponentCfg.but.Reset"));
149                 button.addActionListener(new ActionListener() {
150                         @Override
151                         public void actionPerformed(ActionEvent e) {
152                                 ((MassComponent) component).setRadialDirection(0.0);
153                                 ((MassComponent) component).setRadialPosition(0.0);
154                         }
155                 });
156                 panel.add(button,"spanx, right");
157                 
158                 return panel;
159         }
160 }