package net.sf.openrocket.gui.components; import java.awt.event.ActionEvent; import java.util.ArrayList; import java.util.EventObject; import java.util.List; import javax.swing.AbstractAction; import javax.swing.JPanel; import javax.swing.JToggleButton; import net.miginfocom.swing.MigLayout; import net.sf.openrocket.l10n.Translator; import net.sf.openrocket.rocketcomponent.Configuration; import net.sf.openrocket.startup.Application; import net.sf.openrocket.util.StateChangeListener; public class StageSelector extends JPanel implements StateChangeListener { private static final Translator trans = Application.getTranslator(); private final Configuration configuration; private List<JToggleButton> buttons = new ArrayList<JToggleButton>(); public StageSelector(Configuration configuration) { super(new MigLayout("gap 0!")); this.configuration = configuration; JToggleButton button = new JToggleButton(new StageAction(0)); this.add(button); buttons.add(button); updateButtons(); configuration.addChangeListener(this); } private void updateButtons() { int stages = configuration.getStageCount(); if (buttons.size() == stages) return; while (buttons.size() > stages) { JToggleButton button = buttons.remove(buttons.size() - 1); this.remove(button); } while (buttons.size() < stages) { JToggleButton button = new JToggleButton(new StageAction(buttons.size())); this.add(button); buttons.add(button); } this.revalidate(); } @Override public void stateChanged(EventObject e) { updateButtons(); } private class StageAction extends AbstractAction implements StateChangeListener { private final int stage; public StageAction(final int stage) { this.stage = stage; configuration.addChangeListener(this); stateChanged(null); } @Override public Object getValue(String key) { if (key.equals(NAME)) { //// Stage return trans.get("StageAction.Stage") + " " + (stage + 1); } return super.getValue(key); } @Override public void actionPerformed(ActionEvent e) { configuration.setToStage(stage); // boolean state = (Boolean)getValue(SELECTED_KEY); // if (state == true) { // // Was disabled, now enabled // configuration.setToStage(stage); // } else { // // Was enabled, check what to do // if (configuration.isStageActive(stage + 1)) { // configuration.setToStage(stage); // } else { // if (stage == 0) // configuration.setAllStages(); // else // configuration.setToStage(stage-1); // } // } // stateChanged(null); } @Override public void stateChanged(EventObject e) { this.putValue(SELECTED_KEY, configuration.isStageActive(stage)); } } }