summaryrefslogtreecommitdiff
path: root/altosui
diff options
context:
space:
mode:
Diffstat (limited to 'altosui')
-rw-r--r--altosui/AltosConfigPyroUI.java102
-rw-r--r--altosui/AltosConfigUI.java15
-rw-r--r--altosui/AltosGraph.java48
3 files changed, 133 insertions, 32 deletions
diff --git a/altosui/AltosConfigPyroUI.java b/altosui/AltosConfigPyroUI.java
index 2f5c199d..81d12111 100644
--- a/altosui/AltosConfigPyroUI.java
+++ b/altosui/AltosConfigPyroUI.java
@@ -26,7 +26,7 @@ import org.altusmetrum.altosuilib_1.*;
public class AltosConfigPyroUI
extends AltosUIDialog
- implements ItemListener, DocumentListener
+ implements ItemListener, DocumentListener, AltosUnitsListener
{
AltosConfigUI owner;
Container pane;
@@ -45,13 +45,14 @@ public class AltosConfigPyroUI
}
}
- class PyroItem implements ItemListener, DocumentListener
+ class PyroItem implements ItemListener, DocumentListener, AltosUnitsListener
{
public int flag;
public JRadioButton enable;
public JTextField value;
public JComboBox combo;
AltosConfigPyroUI ui;
+ boolean setting;
public void set_enable(boolean enable) {
if (value != null)
@@ -62,36 +63,59 @@ public class AltosConfigPyroUI
public void itemStateChanged(ItemEvent e) {
set_enable(enable.isSelected());
- ui.set_dirty();
+ if (!setting)
+ ui.set_dirty();
}
public void changedUpdate(DocumentEvent e) {
- ui.set_dirty();
+ if (!setting)
+ ui.set_dirty();
}
public void insertUpdate(DocumentEvent e) {
- ui.set_dirty();
+ if (!setting)
+ ui.set_dirty();
}
public void removeUpdate(DocumentEvent e) {
- ui.set_dirty();
+ if (!setting)
+ ui.set_dirty();
+ }
+
+ public void units_changed(boolean imperial_units) {
+ AltosUnits units = AltosPyro.pyro_to_units(flag);
+
+ if (units != null) {
+ try {
+ double v = units.parse(value.getText(), !imperial_units);
+ set(enabled(), v);
+ } catch (NumberFormatException ne) {
+ set(enabled(), 0.0);
+ }
+ }
}
public void set(boolean new_enable, double new_value) {
+ setting = true;
enable.setSelected(new_enable);
set_enable(new_enable);
if (value != null) {
double scale = AltosPyro.pyro_to_scale(flag);
+ double unit_value = new_value;
+ AltosUnits units = AltosPyro.pyro_to_units(flag);
+ if (units != null)
+ unit_value = units.value(new_value);
String format = "%6.0f";
if (scale >= 10)
format = "%6.1f";
else if (scale >= 100)
format = "%6.2f";
- value.setText(String.format(format, new_value));
+ value.setText(String.format(format, unit_value));
}
if (combo != null)
if (new_value >= AltosLib.ao_flight_boost && new_value <= AltosLib.ao_flight_landed)
combo.setSelectedIndex((int) new_value - AltosLib.ao_flight_boost);
+ setting = false;
}
public boolean enabled() {
@@ -99,8 +123,12 @@ public class AltosConfigPyroUI
}
public double value() {
- if (value != null)
+ if (value != null) {
+ AltosUnits units = AltosPyro.pyro_to_units(flag);
+ if (units != null)
+ return units.parse(value.getText());
return Double.parseDouble(value.getText());
+ }
if (combo != null)
return combo.getSelectedIndex() + AltosLib.ao_flight_boost;
return 0;
@@ -143,7 +171,7 @@ public class AltosConfigPyroUI
}
}
- class PyroColumn {
+ class PyroColumn implements AltosUnitsListener {
public PyroItem[] items;
public JLabel label;
int channel;
@@ -166,17 +194,25 @@ public class AltosConfigPyroUI
for (int flag = 1; flag < AltosPyro.pyro_all; flag <<= 1) {
if ((AltosPyro.pyro_all & flag) != 0) {
if (items[row].enabled()) {
- System.out.printf ("Flag %x enabled\n", flag);
p.flags |= flag;
p.set_value(flag, items[row].value());
}
row++;
}
}
- System.out.printf ("Pyro %x %s\n", p.flags, p.toString());
return p;
}
+ public void units_changed(boolean imperial_units) {
+ int row = 0;
+ for (int flag = 1; flag < AltosPyro.pyro_all; flag <<= 1) {
+ if ((AltosPyro.pyro_all & flag) != 0) {
+ items[row].units_changed(imperial_units);
+ row++;
+ }
+ }
+ }
+
public PyroColumn(AltosConfigPyroUI ui, int x, int y, int in_channel) {
channel = in_channel;
@@ -209,6 +245,7 @@ public class AltosConfigPyroUI
}
PyroColumn[] columns;
+ JLabel[] labels;
public void set_pyros(AltosPyro[] pyros) {
for (int i = 0; i < pyros.length; i++) {
@@ -244,6 +281,34 @@ public class AltosConfigPyroUI
owner.set_dirty();
}
+ public void units_changed(boolean imperial_units) {
+ for (int c = 0; c < columns.length; c++)
+ columns[c].units_changed(imperial_units);
+ int r = 0;
+ for (int flag = 1; flag <= AltosPyro.pyro_all; flag <<= 1) {
+ String n = AltosPyro.pyro_to_name(flag);
+ if (n != null) {
+ labels[r].setText(n);
+ r++;
+ }
+ }
+ }
+
+ /* A window listener to catch closing events and tell the config code */
+ class ConfigListener extends WindowAdapter {
+ AltosConfigPyroUI ui;
+ AltosConfigUI owner;
+
+ public ConfigListener(AltosConfigPyroUI this_ui, AltosConfigUI this_owner) {
+ ui = this_ui;
+ owner = this_owner;
+ }
+
+ public void windowClosing(WindowEvent e) {
+ ui.setVisible(false);
+ }
+ }
+
public AltosConfigPyroUI(AltosConfigUI in_owner, AltosPyro[] pyros) {
super(in_owner, "Configure Pyro Channels", false);
@@ -255,6 +320,13 @@ public class AltosConfigPyroUI
pane = getContentPane();
pane.setLayout(new GridBagLayout());
+ int nrow = 0;
+ for (int flag = 1; flag < AltosPyro.pyro_all; flag <<= 1)
+ if ((flag & AltosPyro.pyro_all) != 0)
+ nrow++;
+
+ labels = new JLabel[nrow];
+
int row = 1;
for (int flag = 1; flag <= AltosPyro.pyro_all; flag <<= 1) {
@@ -270,6 +342,7 @@ public class AltosConfigPyroUI
c.insets = il;
JLabel label = new JLabel(n);
pane.add(label, c);
+ labels[row-1] = label;
row++;
}
}
@@ -280,6 +353,13 @@ public class AltosConfigPyroUI
columns[i] = new PyroColumn(this, i*2 + 1, 0, i);
columns[i].set(pyros[i]);
}
+ addWindowListener(new ConfigListener(this, owner));
+ AltosPreferences.register_units_listener(this);
+ }
+
+ public void dispose() {
+ AltosPreferences.unregister_units_listener(this);
+ super.dispose();
}
public void make_visible() {
diff --git a/altosui/AltosConfigUI.java b/altosui/AltosConfigUI.java
index a6d27977..e07984b9 100644
--- a/altosui/AltosConfigUI.java
+++ b/altosui/AltosConfigUI.java
@@ -185,7 +185,7 @@ public class AltosConfigUI
void set_pad_orientation_tool_tip() {
if (pad_orientation_value.isEnabled())
- pad_orientation_value.setToolTipText("How will TeleMetrum be mounted in the airframe");
+ pad_orientation_value.setToolTipText("How will the computer be mounted in the airframe");
else {
if (is_telemetrum())
pad_orientation_value.setToolTipText("Older TeleMetrum firmware must fly antenna forward");
@@ -198,7 +198,7 @@ public class AltosConfigUI
/* Build the UI using a grid bag */
public AltosConfigUI(JFrame in_owner, boolean remote) {
- super (in_owner, "Configure TeleMetrum", false);
+ super (in_owner, "Configure Flight Computer", false);
owner = in_owner;
GridBagConstraints c;
@@ -661,7 +661,10 @@ public class AltosConfigUI
AltosConfigPyroUI pyro_ui;
public void dispose() {
+ if (pyro_ui != null)
+ pyro_ui.dispose();
AltosPreferences.unregister_units_listener(this);
+ super.dispose();
}
/* Listen for events from our buttons */
@@ -669,10 +672,10 @@ public class AltosConfigUI
String cmd = e.getActionCommand();
if (cmd.equals("Pyro")) {
- if (pyro_ui == null && pyros != null) {
+ if (pyro_ui == null && pyros != null)
pyro_ui = new AltosConfigPyroUI(this, pyros);
+ if (pyro_ui != null)
pyro_ui.make_visible();
- }
return;
}
@@ -757,9 +760,11 @@ public class AltosConfigUI
}
public void units_changed(boolean imperial_units) {
+ String v = main_deploy_value.getSelectedItem().toString();
main_deploy_label.setText(get_main_deploy_label());
set_main_deploy_values();
- listener.actionPerformed(new ActionEvent(this, 0, "Reset"));
+ int m = (int) (AltosConvert.height.parse(v, !imperial_units) + 0.5);
+ set_main_deploy(m);
}
public void set_apogee_delay(int new_apogee_delay) {
diff --git a/altosui/AltosGraph.java b/altosui/AltosGraph.java
index e6cd7bd8..c505d2d8 100644
--- a/altosui/AltosGraph.java
+++ b/altosui/AltosGraph.java
@@ -37,76 +37,92 @@ import org.jfree.data.*;
class AltosVoltage extends AltosUnits {
- public double value(double v) {
+ public double value(double v, boolean imperial_units) {
return v;
}
- public String show_units() {
+ public double inverse(double v, boolean imperial_units) {
+ return v;
+ }
+
+ public String show_units(boolean imperial_units) {
return "V";
}
- public String say_units() {
+ public String say_units(boolean imperial_units) {
return "volts";
}
- public int show_fraction(int width) {
+ public int show_fraction(int width, boolean imperial_units) {
return width / 2;
}
}
class AltosNsat extends AltosUnits {
- public double value(double v) {
+ public double value(double v, boolean imperial_units) {
+ return v;
+ }
+
+ public double inverse(double v, boolean imperial_units) {
return v;
}
- public String show_units() {
+ public String show_units(boolean imperial_units) {
return "Sats";
}
- public String say_units() {
+ public String say_units(boolean imperial_units) {
return "Satellites";
}
- public int show_fraction(int width) {
+ public int show_fraction(int width, boolean imperial_units) {
return 0;
}
}
class AltosPressure extends AltosUnits {
- public double value(double p) {
+ public double value(double p, boolean imperial_units) {
return p;
}
- public String show_units() {
+ public double inverse(double p, boolean imperial_units) {
+ return p;
+ }
+
+ public String show_units(boolean imperial_units) {
return "Pa";
}
- public String say_units() {
+ public String say_units(boolean imperial_units) {
return "pascals";
}
- public int show_fraction(int width) {
+ public int show_fraction(int width, boolean imperial_units) {
return 0;
}
}
class AltosDbm extends AltosUnits {
- public double value(double d) {
+ public double value(double d, boolean imperial_units) {
+ return d;
+ }
+
+ public double inverse(double d, boolean imperial_units) {
return d;
}
- public String show_units() {
+ public String show_units(boolean imperial_units) {
return "dBm";
}
- public String say_units() {
+ public String say_units(boolean imperial_units) {
return "D B M";
}
- public int show_fraction(int width) {
+ public int show_fraction(int width, boolean imperial_units) {
return 0;
}
}