summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2013-06-11 16:31:20 -0700
committerKeith Packard <keithp@keithp.com>2013-06-11 16:39:24 -0700
commit6827d0a7c59d606ea05387465f1ad4d914babd49 (patch)
tree745b330b4fe8bee830d5d411468482c5ee26819c
parent15063cbb8f76bffea71575d295ca87b7ceca36d8 (diff)
altosui: Use preferred units for main deployment height configuration
Show and accept values in the preferred units; create a separate list of preferred values for each set of units Signed-off-by: Keith Packard <keithp@keithp.com>
-rw-r--r--altoslib/AltosConvert.java4
-rw-r--r--altoslib/AltosHeight.java7
-rw-r--r--altosui/AltosConfigUI.java48
3 files changed, 53 insertions, 6 deletions
diff --git a/altoslib/AltosConvert.java b/altoslib/AltosConvert.java
index a42b36c4..8cd478e2 100644
--- a/altoslib/AltosConvert.java
+++ b/altoslib/AltosConvert.java
@@ -242,6 +242,10 @@ public class AltosConvert {
return meters * (100 / (2.54 * 12));
}
+ public static double feet_to_meters(double feet) {
+ return feet * 12 * 2.54 / 100.0;
+ }
+
public static double meters_to_miles(double meters) {
return meters_to_feet(meters) / 5280;
}
diff --git a/altoslib/AltosHeight.java b/altoslib/AltosHeight.java
index ed590812..96f5722b 100644
--- a/altoslib/AltosHeight.java
+++ b/altoslib/AltosHeight.java
@@ -25,6 +25,13 @@ public class AltosHeight extends AltosUnits {
return v;
}
+ public double parse(String s) throws NumberFormatException {
+ double v = Double.parseDouble(s);
+ if (AltosConvert.imperial_units)
+ v = AltosConvert.feet_to_meters(v);
+ return v;
+ }
+
public String show_units() {
if (AltosConvert.imperial_units)
return "ft";
diff --git a/altosui/AltosConfigUI.java b/altosui/AltosConfigUI.java
index 11f40593..9723e660 100644
--- a/altosui/AltosConfigUI.java
+++ b/altosui/AltosConfigUI.java
@@ -26,7 +26,7 @@ import org.altusmetrum.altosuilib_1.*;
public class AltosConfigUI
extends AltosUIDialog
- implements ActionListener, ItemListener, DocumentListener, AltosConfigValues
+ implements ActionListener, ItemListener, DocumentListener, AltosConfigValues, AltosUnitsListener
{
Container pane;
@@ -75,11 +75,16 @@ public class AltosConfigUI
ActionListener listener;
- static String[] main_deploy_values = {
+ static String[] main_deploy_values_m = {
"100", "150", "200", "250", "300", "350",
"400", "450", "500"
};
+ static String[] main_deploy_values_ft = {
+ "250", "500", "750", "1000", "1250", "1500",
+ "1750", "2000"
+ };
+
static String[] apogee_delay_values = {
"0", "1", "2", "3", "4", "5"
};
@@ -280,7 +285,7 @@ public class AltosConfigUI
c.anchor = GridBagConstraints.LINE_START;
c.insets = il;
c.ipady = 5;
- main_deploy_label = new JLabel("Main Deploy Altitude(m):");
+ main_deploy_label = new JLabel(get_main_deploy_label());
pane.add(main_deploy_label, c);
c = new GridBagConstraints();
@@ -291,7 +296,7 @@ public class AltosConfigUI
c.anchor = GridBagConstraints.LINE_START;
c.insets = ir;
c.ipady = 5;
- main_deploy_value = new JComboBox(main_deploy_values);
+ main_deploy_value = new JComboBox(main_deploy_values());
main_deploy_value.setEditable(true);
main_deploy_value.addItemListener(this);
pane.add(main_deploy_value, c);
@@ -616,6 +621,7 @@ public class AltosConfigUI
close.setActionCommand("Close");
addWindowListener(new ConfigListener(this));
+ AltosPreferences.register_units_listener(this);
}
/* Once the initial values are set, the config code will show the dialog */
@@ -654,6 +660,10 @@ public class AltosConfigUI
AltosConfigPyroUI pyro_ui;
+ public void dispose() {
+ AltosPreferences.unregister_units_listener(this);
+ }
+
/* Listen for events from our buttons */
public void actionPerformed(ActionEvent e) {
String cmd = e.getActionCommand();
@@ -718,12 +728,38 @@ public class AltosConfigUI
}
public void set_main_deploy(int new_main_deploy) {
- main_deploy_value.setSelectedItem(Integer.toString(new_main_deploy));
+ main_deploy_value.setSelectedItem(AltosConvert.height.say(new_main_deploy));
main_deploy_value.setEnabled(new_main_deploy >= 0);
}
public int main_deploy() {
- return Integer.parseInt(main_deploy_value.getSelectedItem().toString());
+ return (int) (AltosConvert.height.parse(main_deploy_value.getSelectedItem().toString()) + 0.5);
+ }
+
+ String get_main_deploy_label() {
+ return String.format("Main Deploy Altitude(%s):", AltosConvert.height.show_units());
+ }
+
+ String[] main_deploy_values() {
+ if (AltosConvert.imperial_units)
+ return main_deploy_values_ft;
+ else
+ return main_deploy_values_m;
+ }
+
+ void set_main_deploy_values() {
+ String[] v = main_deploy_values();
+ while (main_deploy_value.getItemCount() > 0)
+ main_deploy_value.removeItemAt(0);
+ for (int i = 0; i < v.length; i++)
+ main_deploy_value.addItem(v[i]);
+ main_deploy_value.setMaximumRowCount(v.length);
+ }
+
+ public void units_changed(boolean imperial_units) {
+ main_deploy_label.setText(get_main_deploy_label());
+ set_main_deploy_values();
+ listener.actionPerformed(new ActionEvent(this, 0, "Reset"));
}
public void set_apogee_delay(int new_apogee_delay) {