X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=blobdiff_plain;f=altosui%2FAltosPad.java;h=3294949c395628f9f8e98587bac784da20ea28f8;hp=06a0f1efa2bc9c3855c2760bbfb3b71ff9a2b0e3;hb=8044eb8e23366e91c741060939baff5137f841c7;hpb=dbcf3264f950c4e1d450828c9f161b4c418bee97 diff --git a/altosui/AltosPad.java b/altosui/AltosPad.java index 06a0f1ef..3294949c 100644 --- a/altosui/AltosPad.java +++ b/altosui/AltosPad.java @@ -19,12 +19,13 @@ package altosui; import java.awt.*; import javax.swing.*; -import org.altusmetrum.altoslib_2.*; +import org.altusmetrum.altoslib_4.*; +import org.altusmetrum.altosuilib_2.*; public class AltosPad extends JComponent implements AltosFlightDisplay { GridBagLayout layout; - public class LaunchStatus { + public class LaunchStatus implements AltosFontListener, AltosUnitsListener { JLabel label; JTextField value; AltosLights lights; @@ -61,15 +62,18 @@ public class AltosPad extends JComponent implements AltosFlightDisplay { lights.setVisible(false); } - public void set_font() { + public void font_size_changed(int font_size) { label.setFont(Altos.label_font); value.setFont(Altos.value_font); } + public void units_changed(boolean imperial_units) { + } + public void set_label(String text) { label.setText(text); } - + public LaunchStatus (GridBagLayout layout, int y, String text) { GridBagConstraints c = new GridBagConstraints(); c.weighty = 1; @@ -94,6 +98,7 @@ public class AltosPad extends JComponent implements AltosFlightDisplay { add(label); value = new JTextField(Altos.text_width); + value.setEditable(false); value.setFont(Altos.value_font); value.setHorizontalAlignment(SwingConstants.RIGHT); c.gridx = 2; c.gridy = y; @@ -106,10 +111,13 @@ public class AltosPad extends JComponent implements AltosFlightDisplay { } } - public class LaunchValue { + public abstract class LaunchValue implements AltosFontListener, AltosUnitsListener { JLabel label; JTextField value; - void show(AltosState state, AltosListenerState listener_state) {} + AltosUnits units; + double v; + + abstract void show(AltosState state, AltosListenerState listener_state); void show() { label.setVisible(true); @@ -121,17 +129,23 @@ public class AltosPad extends JComponent implements AltosFlightDisplay { value.setVisible(false); } - public void set_font() { + public void font_size_changed(int font_size) { label.setFont(Altos.label_font); value.setFont(Altos.value_font); } + public void units_changed(boolean imperial_units) { + if (units != null) + show(v); + } + void show(String s) { show(); value.setText(s); } - void show(AltosUnits units, double v) { + void show(double v) { + this.v = v; show(units.show(8, v)); } @@ -142,12 +156,14 @@ public class AltosPad extends JComponent implements AltosFlightDisplay { public void set_label(String text) { label.setText(text); } - + void reset() { value.setText(""); } - public LaunchValue (GridBagLayout layout, int y, String text) { + public LaunchValue (GridBagLayout layout, int y, AltosUnits units, String text) { + this.units = units; + GridBagConstraints c = new GridBagConstraints(); c.insets = new Insets(Altos.tab_elt_pad, Altos.tab_elt_pad, Altos.tab_elt_pad, Altos.tab_elt_pad); c.weighty = 1; @@ -163,6 +179,7 @@ public class AltosPad extends JComponent implements AltosFlightDisplay { add(label); value = new JTextField(Altos.text_width); + value.setEditable(false); value.setFont(Altos.value_font); value.setHorizontalAlignment(SwingConstants.RIGHT); c.gridx = 2; c.gridy = y; @@ -172,52 +189,62 @@ public class AltosPad extends JComponent implements AltosFlightDisplay { layout.setConstraints(value, c); add(value); } + + public LaunchValue (GridBagLayout layout, int y, String text) { + this(layout, y, null, text); + } } - class Battery extends LaunchStatus { + class Voltage extends LaunchStatus { + + double voltage(AltosState state) { return AltosLib.MISSING; }; + double good() { return 0; }; + + double last_voltage = -1; + void show (AltosState state, AltosListenerState listener_state) { - if (state == null || state.battery_voltage == AltosLib.MISSING) - hide(); - else { - show("%4.2f V", state.battery_voltage); - lights.set(state.battery_voltage >= AltosLib.ao_battery_good); + double voltage = AltosLib.MISSING; + if (state != null) + voltage = voltage(state); + + if (voltage != last_voltage) { + if (voltage == AltosLib.MISSING) + hide(); + else { + show("%4.2f V", voltage); + lights.set(voltage >= good()); + } + last_voltage = voltage; } } + public Voltage (GridBagLayout layout, int y, String name) { super(layout, y, name); } + } + + + class Battery extends Voltage { + double voltage(AltosState state) { return state.battery_voltage; } + double good() { return AltosLib.ao_battery_good; } + public Battery (GridBagLayout layout, int y) { super(layout, y, "Battery Voltage"); } + } Battery battery; - class Apogee extends LaunchStatus { - void show (AltosState state, AltosListenerState listener_state) { - if (state == null || state.apogee_voltage == AltosLib.MISSING) - hide(); - else { - show("%4.2f V", state.apogee_voltage); - lights.set(state.apogee_voltage >= AltosLib.ao_igniter_good); - } - } - public Apogee (GridBagLayout layout, int y) { - super(layout, y, "Apogee Igniter Voltage"); - } + class Apogee extends Voltage { + double voltage(AltosState state) { return state.apogee_voltage; } + double good() { return AltosLib.ao_igniter_good; } + public Apogee (GridBagLayout layout, int y) { super(layout, y, "Apogee Igniter Voltage"); } } Apogee apogee; - class Main extends LaunchStatus { - void show (AltosState state, AltosListenerState listener_state) { - if (state == null || state.main_voltage == AltosLib.MISSING) - hide(); - else { - show("%4.2f V", state.main_voltage); - lights.set(state.main_voltage >= AltosLib.ao_igniter_good); - } - } - public Main (GridBagLayout layout, int y) { - super(layout, y, "Main Igniter Voltage"); - } + class Main extends Voltage { + double voltage(AltosState state) { return state.main_voltage; } + double good() { return AltosLib.ao_igniter_good; } + public Main (GridBagLayout layout, int y) { super(layout, y, "Main Igniter Voltage"); } } Main main; @@ -309,6 +336,9 @@ public class AltosPad extends JComponent implements AltosFlightDisplay { } class PadLat extends LaunchValue { + + double last_lat = 1000; + void show (AltosState state, AltosListenerState listener_state) { double lat = AltosLib.MISSING; String label = null; @@ -322,11 +352,14 @@ public class AltosPad extends JComponent implements AltosFlightDisplay { label = "Pad Latitude"; } } - if (lat != AltosLib.MISSING) { - show(pos(lat,"N", "S")); - set_label(label); - } else - hide(); + if (lat != last_lat) { + if (lat != AltosLib.MISSING) { + show(pos(lat,"N", "S")); + set_label(label); + } else + hide(); + last_lat = lat; + } } public PadLat (GridBagLayout layout, int y) { super (layout, y, "Pad Latitude"); @@ -336,6 +369,9 @@ public class AltosPad extends JComponent implements AltosFlightDisplay { PadLat pad_lat; class PadLon extends LaunchValue { + + double last_lon = 1000; + void show (AltosState state, AltosListenerState listener_state) { double lon = AltosLib.MISSING; String label = null; @@ -349,11 +385,14 @@ public class AltosPad extends JComponent implements AltosFlightDisplay { label = "Pad Longitude"; } } - if (lon != AltosLib.MISSING) { - show(pos(lon,"E", "W")); - set_label(label); - } else - hide(); + if (lon != last_lon) { + if (lon != AltosLib.MISSING) { + show(pos(lon,"E", "W")); + set_label(label); + } else + hide(); + last_lon = lon; + } } public PadLon (GridBagLayout layout, int y) { super (layout, y, "Pad Longitude"); @@ -363,6 +402,9 @@ public class AltosPad extends JComponent implements AltosFlightDisplay { PadLon pad_lon; class PadAlt extends LaunchValue { + + double last_alt = -1000000; + void show (AltosState state, AltosListenerState listener_state) { double alt = AltosLib.MISSING; String label = null; @@ -376,14 +418,17 @@ public class AltosPad extends JComponent implements AltosFlightDisplay { label = "Pad Altitude"; } } - if (alt != AltosLib.MISSING) { - show("%4.0f m", state.gps.alt); - set_label(label); - } else - hide(); + if (alt != last_alt) { + if (alt != AltosLib.MISSING) { + show(alt); + set_label(label); + } else + hide(); + last_alt = alt; + } } public PadAlt (GridBagLayout layout, int y) { - super (layout, y, "Pad Altitude"); + super (layout, y, AltosConvert.height, "Pad Altitude"); } } @@ -402,19 +447,32 @@ public class AltosPad extends JComponent implements AltosFlightDisplay { pad_alt.reset(); } - public void set_font() { - battery.set_font(); - apogee.set_font(); - main.set_font(); - logging_ready.set_font(); - gps_locked.set_font(); - gps_ready.set_font(); - receiver_battery.set_font(); - pad_lat.set_font(); - pad_lon.set_font(); - pad_alt.set_font(); + public void font_size_changed(int font_size) { + battery.font_size_changed(font_size); + apogee.font_size_changed(font_size); + main.font_size_changed(font_size); + logging_ready.font_size_changed(font_size); + gps_locked.font_size_changed(font_size); + gps_ready.font_size_changed(font_size); + receiver_battery.font_size_changed(font_size); + pad_lat.font_size_changed(font_size); + pad_lon.font_size_changed(font_size); + pad_alt.font_size_changed(font_size); } - + + public void units_changed(boolean imperial_units) { + battery.units_changed(imperial_units); + apogee.units_changed(imperial_units); + main.units_changed(imperial_units); + logging_ready.units_changed(imperial_units); + gps_locked.units_changed(imperial_units); + gps_ready.units_changed(imperial_units); + receiver_battery.units_changed(imperial_units); + pad_lat.units_changed(imperial_units); + pad_lon.units_changed(imperial_units); + pad_alt.units_changed(imperial_units); + } + public void show(AltosState state, AltosListenerState listener_state) { battery.show(state, listener_state); apogee.show(state, listener_state);