diff --git a/core/resources/l10n/messages.properties b/core/resources/l10n/messages.properties
index b1719fd2f..9fae17c83 100644
--- a/core/resources/l10n/messages.properties
+++ b/core/resources/l10n/messages.properties
@@ -64,6 +64,8 @@ RocketPanel.lbl.Stability = Stability:
RocketPanel.checkbox.ShowCGCP = Show CG/CP
RocketPanel.checkbox.ShowCGCP.ttip = Disabling this checkbox hides the CG and CP markings in the rocket view.
RocketPanel.lbl.Stages = Stages:
+RocketPanel.btn.Stages.Toggle.ttip = Toggle this button to activate or deactive the corresponding stage in your design.
+RocketPanel.btn.Stages.NoChildren.ttip = This stages does not have any child components and is therefore marked as inactive.
Add components to the stage to activate it.
RocketPanel.ttip.Rotation = Change the rocket's roll rotation (only affects the rocket view)
! BasicFrame
diff --git a/swing/src/net/sf/openrocket/gui/components/StageSelector.java b/swing/src/net/sf/openrocket/gui/components/StageSelector.java
index da1aace86..f0e9ce289 100644
--- a/swing/src/net/sf/openrocket/gui/components/StageSelector.java
+++ b/swing/src/net/sf/openrocket/gui/components/StageSelector.java
@@ -11,18 +11,21 @@ import javax.swing.JToggleButton;
import net.miginfocom.swing.MigLayout;
import net.sf.openrocket.gui.widgets.SelectColorToggleButton;
+import net.sf.openrocket.l10n.Translator;
import net.sf.openrocket.rocketcomponent.AxialStage;
import net.sf.openrocket.rocketcomponent.BodyTube;
import net.sf.openrocket.rocketcomponent.ComponentChangeEvent;
import net.sf.openrocket.rocketcomponent.FlightConfiguration;
import net.sf.openrocket.rocketcomponent.Rocket;
import net.sf.openrocket.rocketcomponent.RocketComponent;
+import net.sf.openrocket.startup.Application;
import net.sf.openrocket.util.StateChangeListener;
@SuppressWarnings("serial")
public class StageSelector extends JPanel implements StateChangeListener {
+ private static final Translator trans = Application.getTranslator();
private final Rocket rocket;
private List buttons = new ArrayList();
@@ -61,9 +64,16 @@ public class StageSelector extends JPanel implements StateChangeListener {
private class StageAction extends AbstractAction {
private final AxialStage stage;
-
+
public StageAction(final AxialStage stage) {
this.stage = stage;
+ if (this.stage.getChildCount() == 0) {
+ putValue(SHORT_DESCRIPTION, trans.get("RocketPanel.btn.Stages.NoChildren.ttip"));
+ setEnabled(false);
+ } else {
+ putValue(SHORT_DESCRIPTION, trans.get("RocketPanel.btn.Stages.Toggle.ttip"));
+ }
+ updateUI();
}
@Override
@@ -77,6 +87,15 @@ public class StageSelector extends JPanel implements StateChangeListener {
@Override
public void actionPerformed(ActionEvent e) {
+ // Don't toggle the state if the stage has no children (and is therefore inactive)
+ if (stage.getChildCount() == 0) {
+ putValue(SHORT_DESCRIPTION, trans.get("RocketPanel.btn.Stages.NoChildren.ttip"));
+ setEnabled(false);
+ return;
+ } else {
+ setEnabled(true);
+ putValue(SHORT_DESCRIPTION, trans.get("RocketPanel.btn.Stages.Toggle.ttip"));
+ }
rocket.getSelectedConfiguration().toggleStage(stage.getStageNumber());
rocket.fireComponentChangeEvent(ComponentChangeEvent.AEROMASS_CHANGE | ComponentChangeEvent.MOTOR_CHANGE );
}