summaryrefslogtreecommitdiff
path: root/altosui/AltosConfigPyroUI.java
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/AltosConfigPyroUI.java
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/AltosConfigPyroUI.java')
-rw-r--r--altosui/AltosConfigPyroUI.java31
1 files changed, 23 insertions, 8 deletions
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;
}