diff --git a/core/resources/l10n/messages.properties b/core/resources/l10n/messages.properties
index 336291665..ede9edcce 100644
--- a/core/resources/l10n/messages.properties
+++ b/core/resources/l10n/messages.properties
@@ -1825,7 +1825,7 @@ MotorConfigurationPanel.btn.selectMotor = Select motor
MotorConfigurationPanel.btn.selectIgnition = Select ignition
MotorConfigurationPanel.btn.resetIgnition = Reset ignition
-MotorConfigurationPanel.table.ignition.default = Default ({0})
+MotorConfigurationTableModel.table.ignition.default = Default ({0})
MotorConfigurationPanel.description = Select the motors and motor ignition events of your rocket.
Motor mounts: Select which components function as motor mounts.
Motor configurations: Select the motor and ignition event for each motor mount.
diff --git a/core/src/net/sf/openrocket/gui/dialogs/flightconfiguration/MotorConfigurationPanel.java b/core/src/net/sf/openrocket/gui/dialogs/flightconfiguration/MotorConfigurationPanel.java
index 62f6e54c0..97e02071e 100644
--- a/core/src/net/sf/openrocket/gui/dialogs/flightconfiguration/MotorConfigurationPanel.java
+++ b/core/src/net/sf/openrocket/gui/dialogs/flightconfiguration/MotorConfigurationPanel.java
@@ -24,13 +24,10 @@ import net.sf.openrocket.gui.dialogs.motor.MotorChooserDialog;
import net.sf.openrocket.gui.util.GUIUtil;
import net.sf.openrocket.l10n.Translator;
import net.sf.openrocket.motor.Motor;
-import net.sf.openrocket.rocketcomponent.MotorConfiguration;
-import net.sf.openrocket.rocketcomponent.MotorConfiguration.IgnitionEvent;
import net.sf.openrocket.rocketcomponent.MotorMount;
import net.sf.openrocket.rocketcomponent.Rocket;
import net.sf.openrocket.rocketcomponent.RocketComponent;
import net.sf.openrocket.startup.Application;
-import net.sf.openrocket.util.Chars;
public class MotorConfigurationPanel extends JPanel {
@@ -42,7 +39,6 @@ public class MotorConfigurationPanel extends JPanel {
private final MotorConfigurationTableModel configurationTableModel;
private final JButton selectMotorButton, removeMotorButton, selectIgnitionButton, resetIgnitionButton;
- private MotorMount currentMount = null;
final MotorMount[] mounts;
MotorConfigurationPanel(FlightConfigurationDialog flightConfigurationDialog, Rocket rocket) {
@@ -84,7 +80,7 @@ public class MotorConfigurationPanel extends JPanel {
//// Motor selection table.
- configurationTableModel = new MotorConfigurationTableModel(this, true);
+ configurationTableModel = new MotorConfigurationTableModel(rocket);
final JTable configurationTable = new JTable(configurationTableModel);
configurationTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
configurationTable.setRowSelectionAllowed(true);
@@ -94,12 +90,6 @@ public class MotorConfigurationPanel extends JPanel {
public void mouseClicked(MouseEvent e) {
int row = configurationTable.getSelectedRow();
- if (row >= 0) {
- currentMount = findMount(row);
- } else {
- currentMount = null;
- }
-
if (e.getClickCount() == 1) {
// Single click updates selection
@@ -162,7 +152,6 @@ public class MotorConfigurationPanel extends JPanel {
}
public void fireTableDataChanged() {
- currentMount = null;
configurationTableModel.fireTableDataChanged();
updateButtonState();
}
@@ -263,62 +252,5 @@ public class MotorConfigurationPanel extends JPanel {
return mount;
}
- public String findMotorForDisplay(int row) {
- String currentID = rocket.getDefaultConfiguration().getFlightConfigurationID();
- MotorMount mount = findMount(row);
- Motor motor = mount.getMotor(currentID);
- if (motor == null)
- return null;
-
- String str = motor.getDesignation(mount.getMotorDelay(currentID));
- int count = mount.getMotorCount();
- if (count > 1) {
- str = "" + count + Chars.TIMES + " " + str;
- }
- return str;
- }
-
- public String findIgnitionForDisplay(int row) {
- String currentID = rocket.getDefaultConfiguration().getFlightConfigurationID();
- MotorMount mount = findMount(row);
- MotorConfiguration motorConfig = mount.getFlightConfiguration(currentID);
- if (motorConfig == null) {
- // No motor exists
- return null;
- }
-
- StringBuilder sb = new StringBuilder();
- MotorConfiguration.IgnitionEvent ignition = motorConfig.getIgnitionEvent();
- if (ignition == null) {
-
- // Default ignition event
- IgnitionEvent event = mount.getDefaultIgnitionEvent();
- String def = trans.get("table.ignition.default");
- String value = trans.get("MotorMount.IgnitionEvent.short." + event.name());
- return def.replace("{0}", value);
-
- } else {
- sb.append(ellipsizeString(ignition.toString(), 15));
- }
- Double ignitionDelay = motorConfig.getIgnitionDelay();
- if (ignitionDelay == null) {
- double defaultdelay = mount.getDefaultIgnitionDelay();
- if (defaultdelay > 0) {
- sb.append(" + [").append(defaultdelay).append("s]");
- }
- } else {
- sb.append(" + ").append(ignitionDelay).append("s");
- }
- return sb.toString();
- }
-
-
- private static String ellipsizeString(String s, int length) {
- if (s.length() < length) {
- return s;
- }
- String newString = s.substring(0, length) + "...";
- return newString;
- }
}
diff --git a/core/src/net/sf/openrocket/gui/dialogs/flightconfiguration/MotorConfigurationTableModel.java b/core/src/net/sf/openrocket/gui/dialogs/flightconfiguration/MotorConfigurationTableModel.java
index d865a11c5..26d3260fb 100644
--- a/core/src/net/sf/openrocket/gui/dialogs/flightconfiguration/MotorConfigurationTableModel.java
+++ b/core/src/net/sf/openrocket/gui/dialogs/flightconfiguration/MotorConfigurationTableModel.java
@@ -2,91 +2,93 @@ package net.sf.openrocket.gui.dialogs.flightconfiguration;
import javax.swing.table.AbstractTableModel;
+import net.sf.openrocket.l10n.Translator;
+import net.sf.openrocket.motor.Motor;
+import net.sf.openrocket.rocketcomponent.MotorConfiguration;
import net.sf.openrocket.rocketcomponent.MotorMount;
+import net.sf.openrocket.rocketcomponent.Rocket;
+import net.sf.openrocket.rocketcomponent.RocketComponent;
+import net.sf.openrocket.startup.Application;
+import net.sf.openrocket.unit.UnitGroup;
import net.sf.openrocket.util.Chars;
+import net.sf.openrocket.util.Coordinate;
/**
* The table model for selecting and editing the motor configurations.
*/
class MotorConfigurationTableModel extends AbstractTableModel {
-
+
+ private Translator trans = Application.getTranslator();
+
private final static String NONE = FlightConfigurationDialog.trans.get("edtmotorconfdlg.tbl.None");
private final static String MOTOR_MOUNT = FlightConfigurationDialog.trans.get("edtmotorconfdlg.tbl.Mountheader");
private final static String MOTOR = FlightConfigurationDialog.trans.get("edtmotorconfdlg.tbl.Motorheader");
private final static String IGNITION = FlightConfigurationDialog.trans.get("edtmotorconfdlg.tbl.Ignitionheader");
- /**
- *
- */
- private final MotorConfigurationPanel motorConfigurationPanel;
-
- private final boolean advanced;
-
- /**
- * @param motorConfigurationPanel
- */
- MotorConfigurationTableModel( MotorConfigurationPanel motorConfigurationPanel, boolean advanced) {
- this.motorConfigurationPanel = motorConfigurationPanel;
- this.advanced = advanced;
+ private final Rocket rocket;
+
+
+ public MotorConfigurationTableModel(Rocket rocket) {
+ this.rocket = rocket;
}
-
+
@Override
public int getColumnCount() {
- int count = (advanced)? 3: 2;
- return count;
+ return 3;
}
-
+
@Override
public int getRowCount() {
int count = 0;
- for (MotorMount m : this.motorConfigurationPanel.mounts) {
- if (m.isMotorMount())
+ for (RocketComponent c : rocket) {
+ if (c instanceof MotorMount && ((MotorMount) c).isMotorMount()) {
count++;
+ }
}
return count;
}
-
+
@Override
public Object getValueAt(int row, int column) {
-
- switch( column ) {
- case 0:
- {
- MotorMount mount = this.motorConfigurationPanel.findMount(row);
+ switch (column) {
+ case 0: {
+ MotorMount mount = findMount(row);
String name = mount.toString();
- int count = mount.getMotorCount();
+ int count = getMountMultiplicity(mount);
if (count > 1) {
name = name + " (" + Chars.TIMES + count + ")";
}
return name;
}
- case 1:
- {
- String str = this.motorConfigurationPanel.findMotorForDisplay(row);
- if (str == null)
- //// None
+ case 1: {
+ MotorMount mount = findMount(row);
+ String currentID = rocket.getDefaultConfiguration().getFlightConfigurationID();
+ Motor motor = mount.getMotor(currentID);
+
+ if (motor == null)
return NONE;
-
+
+ String str = motor.getDesignation(mount.getMotorDelay(currentID));
+ int count = getMountMultiplicity(mount);
+ if (count > 1) {
+ str = "" + count + Chars.TIMES + " " + str;
+ }
return str;
}
- case 2:
- {
- String str = this.motorConfigurationPanel.findIgnitionForDisplay(row);
- if (str == null)
- //// None
- return NONE;
-
- return str;
+ case 2: {
+ return getIgnitionEventString(row);
+
}
default:
- return "";
+ throw new IndexOutOfBoundsException("column=" + column);
}
}
-
-
+
+
+
@Override
public String getColumnName(int column) {
- switch (column ) {
+ switch (column) {
case 0:
return MOTOR_MOUNT;
case 1:
@@ -94,8 +96,59 @@ class MotorConfigurationTableModel extends AbstractTableModel {
case 2:
return IGNITION;
default:
- return "";
+ throw new IndexOutOfBoundsException("column=" + column);
}
}
-
+
+
+ private MotorMount findMount(int row) {
+ int count = row;
+ for (RocketComponent c : rocket) {
+ if (c instanceof MotorMount && ((MotorMount) c).isMotorMount()) {
+ count--;
+ if (count < 0) {
+ return (MotorMount) c;
+ }
+ }
+ }
+ throw new IndexOutOfBoundsException("Requesting row=" + row + " but only " + getRowCount() + " rows exist");
+ }
+
+
+ private int getMountMultiplicity(MotorMount mount) {
+ RocketComponent c = (RocketComponent) mount;
+ return c.toAbsolute(Coordinate.NUL).length;
+ }
+
+
+
+ private String getIgnitionEventString(int row) {
+ String currentID = rocket.getDefaultConfiguration().getFlightConfigurationID();
+ MotorMount mount = findMount(row);
+ MotorConfiguration motorConfig = mount.getFlightConfiguration(currentID);
+ if (motorConfig == null) {
+ return NONE;
+ }
+
+ MotorConfiguration.IgnitionEvent ignition = motorConfig.getIgnitionEvent();
+ Double ignitionDelay = motorConfig.getIgnitionDelay();
+ boolean isDefault = (ignition == null);
+
+ if (ignition == null) {
+ ignition = mount.getDefaultIgnitionEvent();
+ }
+ if (ignitionDelay == null) {
+ ignitionDelay = mount.getDefaultIgnitionDelay();
+ }
+
+ String str = trans.get("MotorMount.IgnitionEvent.short." + ignition.name());
+ if (ignitionDelay > 0) {
+ str = str + " + " + UnitGroup.UNITS_SHORT_TIME.toStringUnit(ignitionDelay);
+ }
+ if (isDefault) {
+ String def = trans.get("table.ignition.default");
+ str = def.replace("{0}", str);
+ }
+ return str;
+ }
}
\ No newline at end of file