diff options
author | Keith Packard <keithp@keithp.com> | 2013-11-25 00:02:06 -0800 |
---|---|---|
committer | Keith Packard <keithp@keithp.com> | 2013-11-25 00:02:06 -0800 |
commit | 82b42935d047d2f7c2f7a63a3efb72a3f1d5594e (patch) | |
tree | 6290de009ca976bed1a1cd40f1fc5dc00213e5c1 /altoslib | |
parent | 8da565bbafa2925aa889cf9249497a709a814b7f (diff) |
altosui: Handle units in pyro config.
This lets you edit the pyro configuration using imperial units if
desired.
Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'altoslib')
-rw-r--r-- | altoslib/AltosAccel.java | 20 | ||||
-rw-r--r-- | altoslib/AltosConvert.java | 12 | ||||
-rw-r--r-- | altoslib/AltosDistance.java | 26 | ||||
-rw-r--r-- | altoslib/AltosHeight.java | 21 | ||||
-rw-r--r-- | altoslib/AltosPyro.java | 68 | ||||
-rw-r--r-- | altoslib/AltosSpeed.java | 20 | ||||
-rw-r--r-- | altoslib/AltosTemperature.java | 20 | ||||
-rw-r--r-- | altoslib/AltosUnits.java | 77 |
8 files changed, 182 insertions, 82 deletions
diff --git a/altoslib/AltosAccel.java b/altoslib/AltosAccel.java index 08eba359..b838d30b 100644 --- a/altoslib/AltosAccel.java +++ b/altoslib/AltosAccel.java @@ -19,25 +19,31 @@ package org.altusmetrum.altoslib_2; public class AltosAccel extends AltosUnits { - public double value(double v) { - if (AltosConvert.imperial_units) + public double value(double v, boolean imperial_units) { + if (imperial_units) return AltosConvert.meters_to_feet(v); return v; } - public String show_units() { - if (AltosConvert.imperial_units) + public double inverse(double v, boolean imperial_units) { + if (imperial_units) + return AltosConvert.feet_to_meters(v); + return v; + } + + public String show_units(boolean imperial_units) { + if (imperial_units) return "ft/s²"; return "m/s²"; } - public String say_units() { - if (AltosConvert.imperial_units) + public String say_units(boolean imperial_units) { + if (imperial_units) return "feet per second squared"; return "meters per second squared"; } - public int show_fraction(int width) { + public int show_fraction(int width, boolean imperial_units) { return width / 9; } }
\ No newline at end of file diff --git a/altoslib/AltosConvert.java b/altoslib/AltosConvert.java index 760d9eb9..8d0b74dd 100644 --- a/altoslib/AltosConvert.java +++ b/altoslib/AltosConvert.java @@ -290,10 +290,18 @@ public class AltosConvert { return meters_to_feet(meters) / 5280; } + public static double miles_to_meters(double miles) { + return feet_to_meters(miles * 5280); + } + public static double meters_to_mph(double mps) { return meters_to_miles(mps) * 3600; } + public static double mph_to_meters(double mps) { + return miles_to_meters(mps) / 3600; + } + public static double meters_to_mach(double meters) { return meters / 343; /* something close to mach at usual rocket sites */ } @@ -306,6 +314,10 @@ public class AltosConvert { return c * 9/5 + 32; } + public static double f_to_c(double c) { + return (c - 32) * 5/9; + } + public static boolean imperial_units = false; public static AltosDistance distance = new AltosDistance(); diff --git a/altoslib/AltosDistance.java b/altoslib/AltosDistance.java index 56257165..8d359feb 100644 --- a/altoslib/AltosDistance.java +++ b/altoslib/AltosDistance.java @@ -19,32 +19,38 @@ package org.altusmetrum.altoslib_2; public class AltosDistance extends AltosUnits { - public double value(double v) { - if (AltosConvert.imperial_units) + public double value(double v, boolean imperial_units) { + if (imperial_units) return AltosConvert.meters_to_miles(v); return v; } - public String show_units() { - if (AltosConvert.imperial_units) + public double inverse(double v, boolean imperial_units) { + if (imperial_units) + return AltosConvert.miles_to_meters(v); + return v; + } + + public String show_units(boolean imperial_units) { + if (imperial_units) return "miles"; return "m"; } - public String say_units() { - if (AltosConvert.imperial_units) + public String say_units(boolean imperial_units) { + if (imperial_units) return "miles"; return "meters"; } - public int show_fraction(int width) { - if (AltosConvert.imperial_units) + public int show_fraction(int width, boolean imperial_units) { + if (imperial_units) return width / 3; return width / 9; } - public int say_fraction() { - if (AltosConvert.imperial_units) + public int say_fraction(boolean imperial_units) { + if (imperial_units) return 1; return 0; } diff --git a/altoslib/AltosHeight.java b/altoslib/AltosHeight.java index 1d2e4dbc..84bd42d9 100644 --- a/altoslib/AltosHeight.java +++ b/altoslib/AltosHeight.java @@ -19,32 +19,31 @@ package org.altusmetrum.altoslib_2; public class AltosHeight extends AltosUnits { - public double value(double v) { - if (AltosConvert.imperial_units) + public double value(double v, boolean imperial_units) { + if (imperial_units) return AltosConvert.meters_to_feet(v); return v; } - public double parse(String s) throws NumberFormatException { - double v = Double.parseDouble(s); - if (AltosConvert.imperial_units) - v = AltosConvert.feet_to_meters(v); + public double inverse(double v, boolean imperial_units) { + if (imperial_units) + return AltosConvert.feet_to_meters(v); return v; } - public String show_units() { - if (AltosConvert.imperial_units) + public String show_units(boolean imperial_units) { + if (imperial_units) return "ft"; return "m"; } - public String say_units() { - if (AltosConvert.imperial_units) + public String say_units(boolean imperial_units) { + if (imperial_units) return "feet"; return "meters"; } - public int show_fraction(int width) { + public int show_fraction(int width, boolean imperial_units) { return width / 9; } }
\ No newline at end of file diff --git a/altoslib/AltosPyro.java b/altoslib/AltosPyro.java index 0142eac8..a219468c 100644 --- a/altoslib/AltosPyro.java +++ b/altoslib/AltosPyro.java @@ -28,24 +28,24 @@ public class AltosPyro { public static final int pyro_accel_greater = 0x00000002; public static final String pyro_accel_less_string = "a<"; public static final String pyro_accel_greater_string = "a>"; - public static final String pyro_accel_less_name = "Acceleration less than (m/s²)"; - public static final String pyro_accel_greater_name = "Acceleration greater than (m/s²)"; + public static final String pyro_accel_less_name = "Acceleration less than"; + public static final String pyro_accel_greater_name = "Acceleration greater than"; public static final double pyro_accel_scale = 16.0; public static final int pyro_speed_less = 0x00000004; public static final int pyro_speed_greater = 0x00000008; public static final String pyro_speed_less_string = "s<"; public static final String pyro_speed_greater_string = "s>"; - public static final String pyro_speed_less_name = "Speed less than (m/s)"; - public static final String pyro_speed_greater_name = "Speed greater than (m/s)"; + public static final String pyro_speed_less_name = "Speed less than"; + public static final String pyro_speed_greater_name = "Speed greater than"; public static final double pyro_speed_scale = 16.0; public static final int pyro_height_less = 0x00000010; public static final int pyro_height_greater = 0x00000020; public static final String pyro_height_less_string = "h<"; public static final String pyro_height_greater_string = "h>"; - public static final String pyro_height_less_name = "Height less than (m)"; - public static final String pyro_height_greater_name = "Height greater than (m)"; + public static final String pyro_height_less_name = "Height less than"; + public static final String pyro_height_greater_name = "Height greater than"; public static final double pyro_height_scale = 1.0; public static final int pyro_orient_less = 0x00000040; @@ -102,12 +102,16 @@ public class AltosPyro { private static HashMap<Integer,String> pyro_to_name = new HashMap<Integer,String>(); + private static HashMap<Integer,AltosUnits> pyro_to_units = new HashMap<Integer,AltosUnits>(); + private static HashMap<Integer,Double> pyro_to_scale = new HashMap<Integer,Double>(); - private static void insert_map(int flag, String string, String name, double scale) { + private static void insert_map(int flag, String string, String name, AltosUnits units, double scale) { string_to_pyro.put(string, flag); pyro_to_string.put(flag, string); pyro_to_name.put(flag, name); + if (units != null) + pyro_to_units.put(flag, units); pyro_to_scale.put(flag, scale); } @@ -124,8 +128,22 @@ public class AltosPyro { } public static String pyro_to_name(int flag) { - if (pyro_to_name.containsKey(flag)) - return pyro_to_name.get(flag); + String name; + AltosUnits units = null; + if (!pyro_to_name.containsKey(flag)) + return null; + + name = pyro_to_name.get(flag); + if (pyro_to_units.containsKey(flag)) + units = pyro_to_units.get(flag); + if (units == null) + return name; + return String.format ("%s (%s)", name, units.show_units()); + } + + public static AltosUnits pyro_to_units(int flag) { + if (pyro_to_units.containsKey(flag)) + return pyro_to_units.get(flag); return null; } @@ -136,29 +154,29 @@ public class AltosPyro { } private static void initialize_maps() { - insert_map(pyro_accel_less, pyro_accel_less_string, pyro_accel_less_name, pyro_accel_scale); - insert_map(pyro_accel_greater, pyro_accel_greater_string, pyro_accel_greater_name, pyro_accel_scale); + insert_map(pyro_accel_less, pyro_accel_less_string, pyro_accel_less_name, AltosConvert.accel, pyro_accel_scale); + insert_map(pyro_accel_greater, pyro_accel_greater_string, pyro_accel_greater_name, AltosConvert.accel, pyro_accel_scale); - insert_map(pyro_speed_less, pyro_speed_less_string, pyro_speed_less_name, pyro_speed_scale); - insert_map(pyro_speed_greater, pyro_speed_greater_string, pyro_speed_greater_name, pyro_speed_scale); + insert_map(pyro_speed_less, pyro_speed_less_string, pyro_speed_less_name, AltosConvert.speed, pyro_speed_scale); + insert_map(pyro_speed_greater, pyro_speed_greater_string, pyro_speed_greater_name, AltosConvert.speed, pyro_speed_scale); - insert_map(pyro_height_less, pyro_height_less_string, pyro_height_less_name, pyro_height_scale); - insert_map(pyro_height_greater, pyro_height_greater_string, pyro_height_greater_name, pyro_height_scale); + insert_map(pyro_height_less, pyro_height_less_string, pyro_height_less_name, AltosConvert.height, pyro_height_scale); + insert_map(pyro_height_greater, pyro_height_greater_string, pyro_height_greater_name, AltosConvert.height, pyro_height_scale); - insert_map(pyro_orient_less, pyro_orient_less_string, pyro_orient_less_name, pyro_orient_scale); - insert_map(pyro_orient_greater, pyro_orient_greater_string, pyro_orient_greater_name, pyro_orient_scale); + insert_map(pyro_orient_less, pyro_orient_less_string, pyro_orient_less_name, null, pyro_orient_scale); + insert_map(pyro_orient_greater, pyro_orient_greater_string, pyro_orient_greater_name, null, pyro_orient_scale); - insert_map(pyro_time_less, pyro_time_less_string, pyro_time_less_name, pyro_time_scale); - insert_map(pyro_time_greater, pyro_time_greater_string, pyro_time_greater_name, pyro_time_scale); + insert_map(pyro_time_less, pyro_time_less_string, pyro_time_less_name, null, pyro_time_scale); + insert_map(pyro_time_greater, pyro_time_greater_string, pyro_time_greater_name, null, pyro_time_scale); - insert_map(pyro_ascending, pyro_ascending_string, pyro_ascending_name, 1.0); - insert_map(pyro_descending, pyro_descending_string, pyro_descending_name, 1.0); + insert_map(pyro_ascending, pyro_ascending_string, pyro_ascending_name, null, 1.0); + insert_map(pyro_descending, pyro_descending_string, pyro_descending_name, null, 1.0); - insert_map(pyro_after_motor, pyro_after_motor_string, pyro_after_motor_name, 1.0); - insert_map(pyro_delay, pyro_delay_string, pyro_delay_name, pyro_delay_scale); + insert_map(pyro_after_motor, pyro_after_motor_string, pyro_after_motor_name, null, 1.0); + insert_map(pyro_delay, pyro_delay_string, pyro_delay_name, null, pyro_delay_scale); - insert_map(pyro_state_less, pyro_state_less_string, pyro_state_less_name, 1.0); - insert_map(pyro_state_greater_or_equal, pyro_state_greater_or_equal_string, pyro_state_greater_or_equal_name, 1.0); + insert_map(pyro_state_less, pyro_state_less_string, pyro_state_less_name, null, 1.0); + insert_map(pyro_state_greater_or_equal, pyro_state_greater_or_equal_string, pyro_state_greater_or_equal_name, null, 1.0); } { diff --git a/altoslib/AltosSpeed.java b/altoslib/AltosSpeed.java index 9b9f7240..6618c539 100644 --- a/altoslib/AltosSpeed.java +++ b/altoslib/AltosSpeed.java @@ -19,25 +19,31 @@ package org.altusmetrum.altoslib_2; public class AltosSpeed extends AltosUnits { - public double value(double v) { - if (AltosConvert.imperial_units) + public double value(double v, boolean imperial_units) { + if (imperial_units) return AltosConvert.meters_to_mph(v); return v; } - public String show_units() { - if (AltosConvert.imperial_units) + public double inverse(double v, boolean imperial_units) { + if (imperial_units) + return AltosConvert.mph_to_meters(v); + return v; + } + + public String show_units(boolean imperial_units) { + if (imperial_units) return "mph"; return "m/s"; } - public String say_units() { - if (AltosConvert.imperial_units) + public String say_units(boolean imperial_units) { + if (imperial_units) return "miles per hour"; return "meters per second"; } - public int show_fraction(int width) { + public int show_fraction(int width, boolean imperial_units) { return width / 9; } }
\ No newline at end of file diff --git a/altoslib/AltosTemperature.java b/altoslib/AltosTemperature.java index 0105fe53..a636533f 100644 --- a/altoslib/AltosTemperature.java +++ b/altoslib/AltosTemperature.java @@ -19,25 +19,31 @@ package org.altusmetrum.altoslib_2; public class AltosTemperature extends AltosUnits { - public double value(double v) { - if (AltosConvert.imperial_units) + public double value(double v, boolean imperial_units) { + if (imperial_units) return AltosConvert.c_to_f(v); return v; } - public String show_units() { - if (AltosConvert.imperial_units) + public double inverse(double v, boolean imperial_units) { + if (imperial_units) + return AltosConvert.f_to_c(v); + return v; + } + + public String show_units(boolean imperial_units) { + if (imperial_units) return "°F"; return "°C"; } - public String say_units() { - if (AltosConvert.imperial_units) + public String say_units(boolean imperial_units) { + if (imperial_units) return "degrees farenheit"; return "degrees celsius"; } - public int show_fraction(int width) { + public int show_fraction(int width, boolean imperial_units) { return width / 3; } } diff --git a/altoslib/AltosUnits.java b/altoslib/AltosUnits.java index ee74f916..8f9ccded 100644 --- a/altoslib/AltosUnits.java +++ b/altoslib/AltosUnits.java @@ -19,43 +19,90 @@ package org.altusmetrum.altoslib_2; public abstract class AltosUnits { - public abstract double value(double v); + public abstract double value(double v, boolean imperial_units); - public abstract String show_units(); + public abstract double inverse(double v, boolean imperial_units); - public abstract String say_units(); + public abstract String show_units(boolean imperial_units); - public abstract int show_fraction(int width); + public abstract String say_units(boolean imperial_units); - int say_fraction() { + public abstract int show_fraction(int width, boolean imperial_units); + + public double parse(String s, boolean imperial_units) throws NumberFormatException { + double v = Double.parseDouble(s); + return inverse(v, imperial_units); + } + + public double parse(String s) throws NumberFormatException { + return parse(s, AltosConvert.imperial_units); + } + + public double value(double v) { + return value(v, AltosConvert.imperial_units); + } + + public double inverse(double v) { + return inverse(v, AltosConvert.imperial_units); + } + + public String show_units() { + return show_units(AltosConvert.imperial_units); + } + + public String say_units() { + return say_units(AltosConvert.imperial_units); + } + + public int show_fraction(int width) { + return show_fraction(width, AltosConvert.imperial_units); + } + + int say_fraction(boolean imperial_units) { return 0; } - private String show_format(int width) { - return String.format("%%%d.%df %s", width, show_fraction(width), show_units()); + private String show_format(int width, boolean imperial_units) { + return String.format("%%%d.%df %s", width, show_fraction(width, imperial_units), show_units(imperial_units)); + } + + private String say_format(boolean imperial_units) { + return String.format("%%1.%df", say_fraction(imperial_units)); } - private String say_format() { - return String.format("%%1.%df", say_fraction()); + private String say_units_format(boolean imperial_units) { + return String.format("%%1.%df %s", say_fraction(imperial_units), say_units(imperial_units)); } - private String say_units_format() { - return String.format("%%1.%df %s", say_fraction(), say_units()); + public String graph_format(int width, boolean imperial_units) { + return String.format(String.format("%%%d.%df", width, show_fraction(width, imperial_units)), 0.0); } public String graph_format(int width) { - return String.format(String.format("%%%d.%df", width, show_fraction(width)), 0.0); + return graph_format(width, AltosConvert.imperial_units); + } + + public String show(int width, double v, boolean imperial_units) { + return String.format(show_format(width, imperial_units), value(v, imperial_units)); } public String show(int width, double v) { - return String.format(show_format(width), value(v)); + return show(width, v, AltosConvert.imperial_units); + } + + public String say(double v, boolean imperial_units) { + return String.format(say_format(imperial_units), value(v, imperial_units)); } public String say(double v) { - return String.format(say_format(), value(v)); + return say(v, AltosConvert.imperial_units); + } + + public String say_units(double v, boolean imperial_units) { + return String.format(say_units_format(imperial_units), value(v, imperial_units)); } public String say_units(double v) { - return String.format(say_units_format(), value(v)); + return say_units(v, AltosConvert.imperial_units); } }
\ No newline at end of file |