summaryrefslogtreecommitdiff
path: root/altosui
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2014-06-02 22:07:39 -0700
committerKeith Packard <keithp@keithp.com>2014-06-02 22:07:39 -0700
commitace5f42b5567cff07a61b622171ac364ea8c165d (patch)
treee24a246841b40711887387a9aff33e51ddce38ad /altosui
parent206fbb99d28961ce159e3affdd5c96f5e379a603 (diff)
altosui: Display error message when parsing pyro channel values fails
Build an exception handling chain to get numeric parse errors propagated all the way back to the original 'save' command and up into a dialog window, including the pyro channel, field and value that were in error. Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'altosui')
-rw-r--r--altosui/AltosConfig.java14
-rw-r--r--altosui/AltosConfigPyroUI.java31
-rw-r--r--altosui/AltosConfigUI.java2
3 files changed, 34 insertions, 13 deletions
diff --git a/altosui/AltosConfig.java b/altosui/AltosConfig.java
index 3128114f..2cf69525 100644
--- a/altosui/AltosConfig.java
+++ b/altosui/AltosConfig.java
@@ -242,9 +242,15 @@ public class AltosConfig implements ActionListener {
/* Pull data out of the UI and stuff back into our local data record */
- data.get_values(config_ui);
-
- run_serial_thread(serial_mode_save);
+ try {
+ data.get_values(config_ui);
+ run_serial_thread(serial_mode_save);
+ } catch (AltosConfigDataException ae) {
+ JOptionPane.showMessageDialog(owner,
+ ae.getMessage(),
+ "Configuration Data Error",
+ JOptionPane.ERROR_MESSAGE);
+ }
}
public void actionPerformed(ActionEvent e) {
@@ -298,4 +304,4 @@ public class AltosConfig implements ActionListener {
}
}
}
-} \ No newline at end of file
+}
diff --git a/altosui/AltosConfigPyroUI.java b/altosui/AltosConfigPyroUI.java
index 6cbac316..7a298a3c 100644
--- a/altosui/AltosConfigPyroUI.java
+++ b/altosui/AltosConfigPyroUI.java
@@ -124,12 +124,16 @@ public class AltosConfigPyroUI
return enable.isSelected();
}
- public double value() {
+ public double value() throws AltosConfigDataException {
if (value != null) {
AltosUnits units = AltosPyro.pyro_to_units(flag);
- if (units != null)
- return units.parse(value.getText());
- return Double.parseDouble(value.getText());
+ try {
+ if (units != null)
+ return units.parse(value.getText());
+ return Double.parseDouble(value.getText());
+ } catch (NumberFormatException e) {
+ throw new AltosConfigDataException("\"%s\": %s\n", value.getText(), e.getMessage());
+ }
}
if (combo != null)
return combo.getSelectedIndex() + AltosLib.ao_flight_boost;
@@ -189,15 +193,21 @@ public class AltosConfigPyroUI
}
}
- public AltosPyro get() {
+ public AltosPyro get() throws AltosConfigDataException {
AltosPyro p = new AltosPyro(channel);
int row = 0;
for (int flag = 1; flag < AltosPyro.pyro_all; flag <<= 1) {
if ((AltosPyro.pyro_all & flag) != 0) {
if (items[row].enabled()) {
+ try {
p.flags |= flag;
p.set_value(flag, items[row].value());
+ } catch (AltosConfigDataException ae) {
+ throw new AltosConfigDataException("%s, %s",
+ AltosPyro.pyro_to_name(flag),
+ ae.getMessage());
+ }
}
row++;
}
@@ -256,10 +266,15 @@ public class AltosConfigPyroUI
}
}
- public AltosPyro[] get_pyros() {
+ public AltosPyro[] get_pyros() throws AltosConfigDataException {
AltosPyro[] pyros = new AltosPyro[columns.length];
- for (int c = 0; c < columns.length; c++)
- pyros[c] = columns[c].get();
+ for (int c = 0; c < columns.length; c++) {
+ try {
+ pyros[c] = columns[c].get();
+ } catch (AltosConfigDataException ae) {
+ throw new AltosConfigDataException ("Channel %c, %s", c + 'A', ae.getMessage());
+ }
+ }
return pyros;
}
diff --git a/altosui/AltosConfigUI.java b/altosui/AltosConfigUI.java
index 2a9d727d..bcb3e12c 100644
--- a/altosui/AltosConfigUI.java
+++ b/altosui/AltosConfigUI.java
@@ -1147,7 +1147,7 @@ public class AltosConfigUI
pyro_ui.set_pyros(pyros);
}
- public AltosPyro[] pyros() {
+ public AltosPyro[] pyros() throws AltosConfigDataException {
if (pyro_ui != null)
pyros = pyro_ui.get_pyros();
return pyros;