diff --git a/core/resources/l10n/messages.properties b/core/resources/l10n/messages.properties
index f1ac5016f..708ba5629 100644
--- a/core/resources/l10n/messages.properties
+++ b/core/resources/l10n/messages.properties
@@ -827,10 +827,11 @@ RocketCompCfg.tab.Pod = Pod
RocketCompCfg.tab.PodComment = Options for locating ExteriorComponents outside the Rocket
RocketCompCfg.tab.Parallel = Parallel
RocketCompCfg.tab.ParallelComment = Options for locating Stages parallel to other stages
-RocketCompCfg.parallel.inline = Make this Stage Parallel
-RocketCompCfg.parallel.radius = Radial Distance (meters)
-RocketCompCfg.parallel.angle = Angle (Radians)
-RocketCompCfg.parallel.rotation = Rotation (Radians)
+RocketCompCfg.outside.stage = Make this Stage Parallel
+RocketCompCfg.outside.pod = Move this Component Outside
+RocketCompCfg.outside.radius = Radial Distance (meters)
+RocketCompCfg.outside.angle = Angle (Radians)
+RocketCompCfg.outside.rotation = Rotation (Radians)
RocketCompCfg.tab.Figure = Figure
RocketCompCfg.tab.Figstyleopt = Figure style options
RocketCompCfg.tab.Comment = Comment
diff --git a/core/src/net/sf/openrocket/rocketcomponent/ExternalComponent.java b/core/src/net/sf/openrocket/rocketcomponent/ExternalComponent.java
index 622302737..11eb8dd9a 100644
--- a/core/src/net/sf/openrocket/rocketcomponent/ExternalComponent.java
+++ b/core/src/net/sf/openrocket/rocketcomponent/ExternalComponent.java
@@ -18,7 +18,7 @@ import net.sf.openrocket.unit.UnitGroup;
public abstract class ExternalComponent extends RocketComponent implements OutsideComponent {
- private boolean axial = true;
+ private boolean outside = false;
private double position_angular_rad = 0;
private double position_radial_m = 0;
private double rotation_rad = 0;
@@ -131,23 +131,23 @@ public abstract class ExternalComponent extends RocketComponent implements Outsi
fireComponentChangeEvent(ComponentChangeEvent.AERODYNAMIC_CHANGE);
}
+ @Override
+ public boolean getOutside() {
+ return this.outside;
+ }
+
public boolean isInline() {
- return this.axial;
+ return !this.outside;
}
@Override
- public boolean getParallel() {
- return !this.axial;
- }
-
- @Override
- public void setParallel(final boolean parallel) {
- this.axial = !parallel;
+ public void setOutside(final boolean _outside) {
+ this.outside = _outside;
}
@Override
public double getAngularPosition() {
- if (axial) {
+ if (outside) {
return 0.;
}
return this.position_angular_rad;
@@ -160,7 +160,7 @@ public abstract class ExternalComponent extends RocketComponent implements Outsi
@Override
public double getRadialPosition() {
- if (axial) {
+ if (outside) {
return 0.;
}
return this.position_radial_m;
@@ -173,7 +173,7 @@ public abstract class ExternalComponent extends RocketComponent implements Outsi
@Override
public double getRotation() {
- if (axial) {
+ if (outside) {
return 0.;
}
return this.rotation_rad;
diff --git a/core/src/net/sf/openrocket/rocketcomponent/OutsideComponent.java b/core/src/net/sf/openrocket/rocketcomponent/OutsideComponent.java
index 808c57145..2b7bd2130 100644
--- a/core/src/net/sf/openrocket/rocketcomponent/OutsideComponent.java
+++ b/core/src/net/sf/openrocket/rocketcomponent/OutsideComponent.java
@@ -6,17 +6,17 @@ public interface OutsideComponent {
/**
* Indicates whether this component is located inside or outside of the rest of the rocket. (Specifically, inside or outside its parent.)
*
- * @return True This component is aligned with its parent
- * False This component is offset from its parent -- like an external pod, or strap-on stage
+ * @return False This component is aligned with its parent
+ * True This component is offset from its parent -- like an external pod, or strap-on stage
*/
- public boolean getParallel();
+ public boolean getOutside();
/**
* Change whether this component is located inside or outside of the rest of the rocket. (Specifically, inside or outside its parent.)
*
- * @param inline True indicates that this component axially aligned with its parent. False indicates an off-center component.
+ * @param inline False indicates that this component axially aligned with its parent. True indicates an off-center component.
*/
- public void setParallel(final boolean inline);
+ public void setOutside(final boolean inline);
/**
* Get the position of this component in polar coordinates
diff --git a/core/src/net/sf/openrocket/rocketcomponent/Stage.java b/core/src/net/sf/openrocket/rocketcomponent/Stage.java
index be87bcce2..6fc9ca3e1 100644
--- a/core/src/net/sf/openrocket/rocketcomponent/Stage.java
+++ b/core/src/net/sf/openrocket/rocketcomponent/Stage.java
@@ -9,7 +9,7 @@ public class Stage extends ComponentAssembly implements FlightConfigurableCompon
private FlightConfigurationImpl separationConfigurations;
- private boolean axial = true;
+ private boolean outside = false;
private double position_angular_rad = 0;
private double position_radial_m = 0;
private double rotation_rad = 0;
@@ -70,22 +70,23 @@ public class Stage extends ComponentAssembly implements FlightConfigurableCompon
}
@Override
- public boolean getParallel() {
- return !this.axial;
+ public boolean getOutside() {
+ return this.outside;
}
- public boolean getInline() {
- return this.axial;
+
+ public boolean isInline() {
+ return !this.outside;
}
@Override
- public void setParallel(final boolean parallel) {
- this.axial = !parallel;
+ public void setOutside(final boolean _outside) {
+ this.outside = _outside;
}
@Override
public double getAngularPosition() {
- if (axial) {
+ if (this.isInline()) {
return 0.;
}
return this.position_angular_rad;
@@ -98,7 +99,7 @@ public class Stage extends ComponentAssembly implements FlightConfigurableCompon
@Override
public double getRadialPosition() {
- if (axial) {
+ if (this.isInline()) {
return 0.;
}
return this.position_radial_m;
@@ -111,7 +112,7 @@ public class Stage extends ComponentAssembly implements FlightConfigurableCompon
@Override
public double getRotation() {
- if (axial) {
+ if (this.isInline()) {
return 0.;
}
return this.rotation_rad;
diff --git a/swing/src/net/sf/openrocket/gui/configdialog/RocketComponentConfig.java b/swing/src/net/sf/openrocket/gui/configdialog/RocketComponentConfig.java
index 45d222d0f..48c8bec58 100644
--- a/swing/src/net/sf/openrocket/gui/configdialog/RocketComponentConfig.java
+++ b/swing/src/net/sf/openrocket/gui/configdialog/RocketComponentConfig.java
@@ -126,6 +126,9 @@ public class RocketComponentConfig extends JPanel {
tabbedPane.addTab(trans.get("RocketCompCfg.tab.Comment"), null, commentTab(),
trans.get("RocketCompCfg.tab.Specifyacomment"));
+ if( component instanceof ExternalComponent ){
+ tabbedPane.insertTab( trans.get("RocketCompCfg.tab.Pod"), null, podTab( (ExternalComponent) component ), trans.get("RocketCompCfg.tab.PodComment"), 2);
+ }
addButtons();
@@ -159,10 +162,6 @@ public class RocketComponentConfig extends JPanel {
});
buttonPanel.add(closeButton, "right, gap 30lp");
- if( component instanceof ExternalComponent ){
- tabbedPane.insertTab( trans.get("RocketCompCfg.tab.Pod"), null, podTab( (ExternalComponent) component ), trans.get("RocketCompCfg.tab.PodComment"), 2);
- }
-
updateFields();
this.add(buttonPanel, "spanx, growx");
@@ -288,10 +287,10 @@ public class RocketComponentConfig extends JPanel {
private JPanel podTab( final ExternalComponent pod ){
// enable parallel staging
JPanel motherPanel = new JPanel( new MigLayout("fill"));
- podsEnabledModel = new BooleanModel( component, "Parallel");
- podsEnabledModel.setValue(false);
+ podsEnabledModel = new BooleanModel( component, "Outside");
+ podsEnabledModel.setValue( pod.getOutside());
JCheckBox parallelEnabled = new JCheckBox( podsEnabledModel);
- parallelEnabled.setText(trans.get("RocketCompCfg.parallel.inline"));
+ parallelEnabled.setText(trans.get("RocketCompCfg.outside.pod"));
motherPanel.add(parallelEnabled, "wrap");
JPanel enabledPanel = new JPanel( new MigLayout("fill"));
@@ -300,25 +299,35 @@ public class RocketComponentConfig extends JPanel {
enabledPanel.add(new JSeparator(SwingConstants.HORIZONTAL), "growx,wrap");
// set radial distance
- enabledPanel.add(new JLabel(trans.get("RocketCompCfg.parallel.radius")), "align left");
+ enabledPanel.add(new JLabel(trans.get("RocketCompCfg.outside.radius")), "align left");
DoubleModel radiusModel = new DoubleModel( pod, "RadialPosition", 0.);
+ radiusModel.setCurrentUnit( UnitGroup.UNITS_DISTANCE.getSIUnit() );
JSpinner radiusSpinner = new JSpinner( radiusModel.getSpinnerModel());
radiusSpinner.setEditor(new SpinnerEditor(radiusSpinner ));
enabledPanel.add(radiusSpinner , "growx, wrap, align right");
// set angle around the primary stage
- enabledPanel.add(new JLabel(trans.get("RocketCompCfg.parallel.angle")), "align left");
+ enabledPanel.add(new JLabel(trans.get("RocketCompCfg.outside.angle")), "align left");
DoubleModel angleModel = new DoubleModel( pod, "AngularPosition", 0., Math.PI*2);
+ angleModel.setCurrentUnit( UnitGroup.UNITS_ANGLE.getUnit("rad") );
JSpinner angleSpinner = new JSpinner(angleModel.getSpinnerModel());
angleSpinner.setEditor(new SpinnerEditor(angleSpinner));
enabledPanel.add(angleSpinner, "growx, wrap");
- enabledPanel.add(new JLabel(trans.get("RocketCompCfg.parallel.rotation")), "align left");
+ enabledPanel.add(new JLabel(trans.get("RocketCompCfg.outside.rotation")), "align left");
DoubleModel rotationModel = new DoubleModel( pod, "Rotation", 0.0, Math.PI*2);
+ rotationModel.setCurrentUnit( UnitGroup.UNITS_ANGLE.getUnit("rad") );
JSpinner rotationSpinner = new JSpinner(rotationModel.getSpinnerModel());
rotationSpinner.setEditor(new SpinnerEditor(rotationSpinner));
enabledPanel.add(rotationSpinner, "growx, wrap");
+ // TODO: add multiplicity
+// enabledPanel.add(new JLabel(trans.get("RocketCompCfg.parallel.rotation")), "align left");
+// DoubleModel rotationModel = new DoubleModel( pod, "Rotation", 0.0, Math.PI*2);
+// JSpinner rotationSpinner = new JSpinner(rotationModel.getSpinnerModel());
+// rotationSpinner.setEditor(new SpinnerEditor(rotationSpinner));
+// enabledPanel.add(rotationSpinner, "growx, wrap");
+//
setDeepEnabled( enabledPanel, podsEnabledModel.getValue());
parallelEnabled.addChangeListener(new ChangeListener() {
@Override
diff --git a/swing/src/net/sf/openrocket/gui/configdialog/StageConfig.java b/swing/src/net/sf/openrocket/gui/configdialog/StageConfig.java
index 92c6bfa4e..50840ab96 100644
--- a/swing/src/net/sf/openrocket/gui/configdialog/StageConfig.java
+++ b/swing/src/net/sf/openrocket/gui/configdialog/StageConfig.java
@@ -27,6 +27,7 @@ import net.sf.openrocket.rocketcomponent.RocketComponent;
import net.sf.openrocket.rocketcomponent.Stage;
import net.sf.openrocket.rocketcomponent.StageSeparationConfiguration;
import net.sf.openrocket.startup.Application;
+import net.sf.openrocket.unit.UnitGroup;
public class StageConfig extends RocketComponentConfig {
private static final Translator trans = Application.getTranslator();
@@ -53,10 +54,10 @@ public class StageConfig extends RocketComponentConfig {
private JPanel parallelTab( final Stage stage ){
// enable parallel staging
JPanel motherPanel = new JPanel( new MigLayout("fill"));
- parallelEnabledModel = new BooleanModel( component, "Parallel");
- parallelEnabledModel.setValue( stage.getInline());
+ parallelEnabledModel = new BooleanModel( component, "Outside");
+ parallelEnabledModel.setValue( stage.getOutside());
JCheckBox parallelEnabled = new JCheckBox( parallelEnabledModel);
- parallelEnabled.setText(trans.get("RocketCompCfg.parallel.inline"));
+ parallelEnabled.setText(trans.get("RocketCompCfg.outside.stage"));
motherPanel.add(parallelEnabled, "wrap");
JPanel enabledPanel = new JPanel( new MigLayout("fill"));
@@ -65,32 +66,36 @@ public class StageConfig extends RocketComponentConfig {
enabledPanel.add(new JSeparator(SwingConstants.HORIZONTAL), "growx,wrap");
// set radial distance
- enabledPanel.add(new JLabel(trans.get("RocketCompCfg.parallel.radius")), "align left");
+ enabledPanel.add(new JLabel(trans.get("RocketCompCfg.outside.radius")), "align left");
DoubleModel radiusModel = new DoubleModel( stage, "RadialPosition", 0.0);
+ radiusModel.setCurrentUnit( UnitGroup.UNITS_DISTANCE.getSIUnit() );
JSpinner radiusSpinner = new JSpinner( radiusModel.getSpinnerModel());
radiusSpinner.setEditor(new SpinnerEditor(radiusSpinner ));
enabledPanel.add(radiusSpinner , "growx, wrap, align right");
// set angle around the primary stage
- enabledPanel.add(new JLabel(trans.get("RocketCompCfg.parallel.angle")), "align left");
+ enabledPanel.add(new JLabel(trans.get("RocketCompCfg.outside.angle")), "align left");
DoubleModel angleModel = new DoubleModel( stage, "AngularPosition", 0.0, Math.PI*2);
+ angleModel.setCurrentUnit( UnitGroup.UNITS_ANGLE.getUnit("rad"));
JSpinner angleSpinner = new JSpinner(angleModel.getSpinnerModel());
angleSpinner.setEditor(new SpinnerEditor(angleSpinner));
enabledPanel.add(angleSpinner, "growx, wrap");
- enabledPanel.add(new JLabel(trans.get("RocketCompCfg.parallel.rotation")), "align left");
+ enabledPanel.add(new JLabel(trans.get("RocketCompCfg.outside.rotation")), "align left");
DoubleModel rotationModel = new DoubleModel( stage, "Rotation", 0.0, Math.PI*2);
+ rotationModel.setCurrentUnit( UnitGroup.UNITS_ANGLE.getUnit("rad") );
JSpinner rotationSpinner = new JSpinner(rotationModel.getSpinnerModel());
rotationSpinner.setEditor(new SpinnerEditor(rotationSpinner));
enabledPanel.add(rotationSpinner, "growx, wrap");
- setDeepEnabled( enabledPanel, parallelEnabledModel.getValue());
+
parallelEnabled.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
setDeepEnabled( parallelEnabledPanel, parallelEnabledModel.getValue());
}
});
+ setDeepEnabled( parallelEnabledPanel, parallelEnabledModel.getValue());
motherPanel.add( enabledPanel , "growx, wrap");