Create the new trunk
[debian/openrocket] / src / net / sf / openrocket / gui / StageSelector.java
1 package net.sf.openrocket.gui;
2
3 import java.awt.event.ActionEvent;
4 import java.util.ArrayList;
5 import java.util.List;
6
7 import javax.swing.AbstractAction;
8 import javax.swing.JPanel;
9 import javax.swing.JToggleButton;
10 import javax.swing.event.ChangeEvent;
11 import javax.swing.event.ChangeListener;
12
13 import net.miginfocom.swing.MigLayout;
14 import net.sf.openrocket.rocketcomponent.Configuration;
15
16
17 public class StageSelector extends JPanel implements ChangeListener {
18
19         private final Configuration configuration;
20         
21         private List<JToggleButton> buttons = new ArrayList<JToggleButton>();
22         
23         public StageSelector(Configuration configuration) {
24                 super(new MigLayout("gap 0!"));
25                 this.configuration = configuration;
26                 
27                 JToggleButton button = new JToggleButton(new StageAction(0));
28                 this.add(button);
29                 buttons.add(button);
30                 
31                 updateButtons();
32                 configuration.addChangeListener(this);
33         }
34         
35         private void updateButtons() {
36                 int stages = configuration.getStageCount();
37                 if (buttons.size() == stages)
38                         return;
39                 
40                 while (buttons.size() > stages) {
41                         JToggleButton button = buttons.remove(buttons.size()-1);
42                         this.remove(button);
43                 }
44                 
45                 while (buttons.size() < stages) {
46                         JToggleButton button = new JToggleButton(new StageAction(buttons.size()));
47                         this.add(button);
48                         buttons.add(button);
49                 }
50                 
51                 this.revalidate();
52         }
53         
54
55
56
57         @Override
58         public void stateChanged(ChangeEvent e) {
59                 updateButtons();
60         }
61         
62         
63         private class StageAction extends AbstractAction implements ChangeListener {
64                 private final int stage;
65
66                 public StageAction(final int stage) {
67                         this.stage = stage;
68                         configuration.addChangeListener(this);
69                         stateChanged(null);
70                 }
71                 
72                 @Override
73                 public Object getValue(String key) {
74                         if (key.equals(NAME)) {
75                                 return "Stage "+(stage+1);
76                         }
77                         return super.getValue(key);
78                 }
79                 
80                 @Override
81                 public void actionPerformed(ActionEvent e) {
82                         configuration.setToStage(stage);
83                         
84 //                      boolean state = (Boolean)getValue(SELECTED_KEY);
85 //                      if (state == true) {
86 //                              // Was disabled, now enabled
87 //                              configuration.setToStage(stage);
88 //                      } else {
89 //                              // Was enabled, check what to do
90 //                              if (configuration.isStageActive(stage + 1)) {
91 //                                      configuration.setToStage(stage);
92 //                              } else {
93 //                                      if (stage == 0)
94 //                                              configuration.setAllStages();
95 //                                      else 
96 //                                              configuration.setToStage(stage-1);
97 //                              }
98 //                      }
99 //                      stateChanged(null);
100                 }
101                 
102
103                 @Override
104                 public void stateChanged(ChangeEvent e) {
105                         this.putValue(SELECTED_KEY, configuration.isStageActive(stage));
106                 }
107         }
108 }