package net.sf.openrocket.gui.configdialog;
import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
import javax.swing.BorderFactory;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSpinner;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import net.miginfocom.swing.MigLayout;
import net.sf.openrocket.gui.SpinnerEditor;
import net.sf.openrocket.gui.adaptors.BooleanModel;
import net.sf.openrocket.gui.adaptors.DoubleModel;
import net.sf.openrocket.gui.adaptors.EnumModel;
import net.sf.openrocket.gui.components.BasicSlider;
import net.sf.openrocket.gui.components.StyledLabel;
import net.sf.openrocket.gui.components.UnitSelector;
import net.sf.openrocket.l10n.Translator;
import net.sf.openrocket.rocketcomponent.IgnitionConfiguration;
import net.sf.openrocket.rocketcomponent.MotorMount;
import net.sf.openrocket.rocketcomponent.RocketComponent;
import net.sf.openrocket.startup.Application;
import net.sf.openrocket.unit.UnitGroup;
public class MotorConfig extends JPanel {
private final MotorMount mount;
private static final Translator trans = Application.getTranslator();
public MotorConfig(MotorMount motorMount) {
super(new MigLayout("fill"));
this.mount = motorMount;
BooleanModel model;
model = new BooleanModel(motorMount, "MotorMount");
JCheckBox check = new JCheckBox(model);
////This component is a motor mount
check.setText(trans.get("MotorCfg.checkbox.compmotormount"));
this.add(check, "wrap");
final JPanel panel = new JPanel(new MigLayout("fill"));
this.add(panel, "grow, wrap");
// Overhang
//// Motor overhang:
panel.add(new JLabel(trans.get("MotorCfg.lbl.Motoroverhang")));
DoubleModel dm = new DoubleModel(motorMount, "MotorOverhang", UnitGroup.UNITS_LENGTH);
JSpinner spin = new JSpinner(dm.getSpinnerModel());
spin.setEditor(new SpinnerEditor(spin));
panel.add(spin, "span, split, width :65lp:");
panel.add(new UnitSelector(dm), "width :30lp:");
panel.add(new BasicSlider(dm.getSliderModel(-0.02, 0.06)), "w 100lp, wrap unrel");
// Select ignition event
//// Ignition at:
panel.add(new JLabel(trans.get("MotorCfg.lbl.Ignitionat") + " " + CommonStrings.dagger), "");
IgnitionConfiguration ignitionConfig = mount.getIgnitionConfiguration().getDefault();
JComboBox combo = new JComboBox(new EnumModel<IgnitionConfiguration.IgnitionEvent>(ignitionConfig, "IgnitionEvent"));
panel.add(combo, "growx, wrap");
// ... and delay
//// plus
panel.add(new JLabel(trans.get("MotorCfg.lbl.plus")), "gap indent, skip 1, span, split");
dm = new DoubleModel(ignitionConfig, "IgnitionDelay", 0);
spin = new JSpinner(dm.getSpinnerModel());
spin.setEditor(new SpinnerEditor(spin, 3));
panel.add(spin, "gap rel rel");
//// seconds
panel.add(new JLabel(trans.get("MotorCfg.lbl.seconds")), "wrap unrel");
panel.add(new StyledLabel(CommonStrings.override_description, -1), "spanx, wrap para");
// Check stage count
RocketComponent c = (RocketComponent) mount;
c = c.getRocket();
int stages = c.getChildCount();
if (stages == 1) {
//// The current design has only one stage.
//// Stages can be added by clicking \"New stage\".
panel.add(new StyledLabel(trans.get("MotorCfg.lbl.longA1") + " " +
trans.get("MotorCfg.lbl.longA2"), -1),
"spanx, wrap para");
} else {
//// The current design has
//// stages.
panel.add(new StyledLabel(trans.get("MotorCfg.lbl.longB1") + " " + stages + " " +
trans.get("MotorCfg.lbl.longB2"), -1),
"spanx, wrap para");
}
// Set enabled status
setDeepEnabled(panel, motorMount.isMotorMount());
check.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
setDeepEnabled(panel, mount.isMotorMount());
}
});
}
private static void setDeepEnabled(Component component, boolean enabled) {
component.setEnabled(enabled);
if (component instanceof Container) {
for (Component c : ((Container) component).getComponents()) {
setDeepEnabled(c, enabled);
}
}
}
}