diff options
author | Keith Packard <keithp@keithp.com> | 2014-06-14 14:41:13 -0700 |
---|---|---|
committer | Keith Packard <keithp@keithp.com> | 2014-06-14 14:42:11 -0700 |
commit | c11b2f5caa3fbe2bc977e716ec1c3ccee9e75884 (patch) | |
tree | a9d871e8fb4b0c80c861df81902affb2e9d7c0bc /telegps | |
parent | f5887a3e7cf993e23dbb1e0f6b9ebece78c34413 (diff) |
altosui/telegps: Switch to AltosUIIndicator and AltosUIFlightTab
Removes replicated code across all flight tabs
Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'telegps')
-rw-r--r-- | telegps/TeleGPS.java | 68 | ||||
-rw-r--r-- | telegps/TeleGPSInfo.java | 68 | ||||
-rw-r--r-- | telegps/TeleGPSState.java | 87 | ||||
-rw-r--r-- | telegps/TeleGPSStatus.java | 38 |
4 files changed, 116 insertions, 145 deletions
diff --git a/telegps/TeleGPS.java b/telegps/TeleGPS.java index eddb47d8..6e68dd30 100644 --- a/telegps/TeleGPS.java +++ b/telegps/TeleGPS.java @@ -59,11 +59,13 @@ public class TeleGPS JMenu monitor_menu; JMenu device_menu; AltosFreqList frequencies; + ActionListener frequency_listener; Container bag; TeleGPSStatus telegps_status; TeleGPSStatusUpdate status_update; + javax.swing.Timer status_timer; JTabbedPane pane; @@ -174,7 +176,14 @@ public class TeleGPS void disconnect() { setTitle("TeleGPS"); stop_display(); - remove_frequency_menu(); + if (status_timer != null) { + status_timer.stop(); + status_timer = null; + status_update = null; + } + + telegps_status.disable_receive(); + disable_frequency_menu(); } void connect(AltosDevice device) { @@ -182,8 +191,7 @@ public class TeleGPS disconnect(); try { AltosFlightReader reader = new AltosTelemetryReader(new AltosSerial(device)); - set_reader(reader); - add_frequency_menu(device.getSerial(), reader); + set_reader(reader, device); } catch (FileNotFoundException ee) { JOptionPane.showMessageDialog(this, ee.getMessage(), @@ -322,15 +330,12 @@ public class TeleGPS } } - void add_frequency_menu(int serial, final AltosFlightReader reader) { - // Channel menu - if (frequencies != null) - return; + void enable_frequency_menu(int serial, final AltosFlightReader reader) { - frequencies = new AltosFreqList(AltosUIPreferences.frequency(serial)); - frequencies.set_product("Monitor"); - frequencies.set_serial(serial); - frequencies.addActionListener(new ActionListener() { + if (frequency_listener != null) + disable_frequency_menu(); + + frequency_listener = new ActionListener() { public void actionPerformed(ActionEvent e) { double frequency = frequencies.frequency(); try { @@ -340,22 +345,37 @@ public class TeleGPS } reader.save_frequency(); } - }); - menu_bar.add(frequencies); + }; + + frequencies.addActionListener(frequency_listener); + frequencies.set_product("Monitor"); + frequencies.set_serial(serial); + frequencies.set_frequency(AltosUIPreferences.frequency(serial)); + frequencies.setEnabled(true); + } - void remove_frequency_menu() { - if (frequencies != null) { - menu_bar.remove(frequencies); - menu_bar.repaint(); - frequencies = null; + void disable_frequency_menu() { + if (frequency_listener != null) { + frequencies.removeActionListener(frequency_listener); + frequencies.setEnabled(false); + frequency_listener = null; } + } - public void set_reader(AltosFlightReader reader) { + public void set_reader(AltosFlightReader reader, AltosDevice device) { + status_update = new TeleGPSStatusUpdate(telegps_status); + + status_timer = new javax.swing.Timer(100, status_update); + status_timer.start(); + setTitle(String.format("TeleGPS %s", reader.name)); thread = new TeleGPSDisplayThread(this, voice(), this, reader); thread.start(); + + if (device != null) + enable_frequency_menu(device.getSerial(), reader); } static int number_of_windows; @@ -414,6 +434,10 @@ public class TeleGPS file_menu = make_menu("File", file_menu_entries); monitor_menu = make_menu("Monitor", monitor_menu_entries); device_menu = make_menu("Device", device_menu_entries); + frequencies = new AltosFreqList(); + frequencies.setEnabled(false); + menu_bar.add(frequencies); + displays = new LinkedList<AltosFlightDisplay>(); int serial = -1; @@ -476,15 +500,11 @@ public class TeleGPS setVisible(true); add_window(); - - status_update = new TeleGPSStatusUpdate(telegps_status); - - new javax.swing.Timer(100, status_update).start(); } public TeleGPS(AltosFlightReader reader) { this(); - set_reader(reader); + set_reader(reader, null); } public TeleGPS(AltosDevice device) { diff --git a/telegps/TeleGPSInfo.java b/telegps/TeleGPSInfo.java index bbf4b472..e87fea90 100644 --- a/telegps/TeleGPSInfo.java +++ b/telegps/TeleGPSInfo.java @@ -24,13 +24,10 @@ import javax.swing.*; import org.altusmetrum.altoslib_4.*; import org.altusmetrum.altosuilib_2.*; -public class TeleGPSInfo extends JComponent implements AltosFlightDisplay, HierarchyListener { +public class TeleGPSInfo extends AltosUIFlightTab { JLabel cur, max; - private AltosState last_state; - private AltosListenerState last_listener_state; - abstract class Value extends AltosUIUnitsIndicator { public abstract void show(AltosState state, AltosListenerState listener_state); @@ -48,7 +45,6 @@ public class TeleGPSInfo extends JComponent implements AltosFlightDisplay, Hiera abstract class ValueHold extends DualValue { public void reset() { super.reset(); - last_values[1] = AltosLib.MISSING; } public ValueHold (Container container, int y, AltosUnits units, String text) { super(container, y, units, text); @@ -96,7 +92,9 @@ public class TeleGPSInfo extends JComponent implements AltosFlightDisplay, Hiera public void show (AltosState state, AltosListenerState listener_state) { double course = state.gps_course(); - if (course != AltosLib.MISSING) + if (course == AltosLib.MISSING) + show("Missing", "Missing"); + else show( String.format("%3.0f°", course), AltosConvert.bearing_to_words( AltosConvert.BEARING_LONG, @@ -124,7 +122,7 @@ public class TeleGPSInfo extends JComponent implements AltosFlightDisplay, Hiera if (state.gps != null && state.gps.connected && state.gps.lat != AltosLib.MISSING) show(pos(state.gps.lat,"N", "S")); else - show("???"); + show("Missing"); } public Lat (Container container, int y) { super (container, y, "Latitude", 1, false, 2); @@ -148,7 +146,7 @@ public class TeleGPSInfo extends JComponent implements AltosFlightDisplay, Hiera if (state.gps != null && state.gps.connected && state.gps.lon != AltosLib.MISSING) show(pos(state.gps.lon,"E", "W")); else - show("???"); + show("Missing"); } public Lon (Container container, int y) { super (container, y, "Longitude", 1, false, 2); @@ -173,34 +171,10 @@ public class TeleGPSInfo extends JComponent implements AltosFlightDisplay, Hiera } } - LinkedList<AltosUIIndicator> indicators = new LinkedList<AltosUIIndicator>(); - - public void reset() { - for (AltosUIIndicator i : indicators) - i.reset(); - } - public void font_size_changed(int font_size) { cur.setFont(AltosUILib.label_font); max.setFont(AltosUILib.label_font); - for (AltosUIIndicator i : indicators) - i.font_size_changed(font_size); - } - - public void units_changed(boolean imperial_units) { - for (AltosUIIndicator i : indicators) - i.units_changed(imperial_units); - } - - public void show(AltosState state, AltosListenerState listener_state) { - if (!isShowing()) { - last_state = state; - last_listener_state = listener_state; - return; - } - - for (AltosUIIndicator i : indicators) - i.show(state, listener_state); + super.font_size_changed(font_size); } public void labels(Container container, int y) { @@ -226,29 +200,15 @@ public class TeleGPSInfo extends JComponent implements AltosFlightDisplay, Hiera return "Location"; } - public void hierarchyChanged(HierarchyEvent e) { - if (last_state != null && isShowing()) { - AltosState state = last_state; - AltosListenerState listener_state = last_listener_state; - - last_state = null; - last_listener_state = null; - show(state, listener_state); - } - } - public TeleGPSInfo() { - setLayout(new GridBagLayout()); - int y = 0; labels(this, y++); - indicators.add(new Altitude(this, y++)); - indicators.add(new GroundSpeed(this, y++)); - indicators.add(new AscentRate(this, y++)); - indicators.add(new Course(this, y++)); - indicators.add(new Lat(this, y++)); - indicators.add(new Lon(this, y++)); - indicators.add(new GPSLocked(this, y++)); - addHierarchyListener(this); + add(new Altitude(this, y++)); + add(new GroundSpeed(this, y++)); + add(new AscentRate(this, y++)); + add(new Course(this, y++)); + add(new Lat(this, y++)); + add(new Lon(this, y++)); + add(new GPSLocked(this, y++)); } } diff --git a/telegps/TeleGPSState.java b/telegps/TeleGPSState.java index b10e8e70..a76182ed 100644 --- a/telegps/TeleGPSState.java +++ b/telegps/TeleGPSState.java @@ -24,12 +24,9 @@ import javax.swing.*; import org.altusmetrum.altoslib_4.*; import org.altusmetrum.altosuilib_2.*; -public class TeleGPSState extends JComponent implements AltosFlightDisplay, HierarchyListener { - GridBagLayout layout; - JLabel cur, max; +public class TeleGPSState extends AltosUIFlightTab { - private AltosState last_state; - private AltosListenerState last_listener_state; + JLabel cur, max; abstract class Value extends AltosUIUnitsIndicator { public Value (Container container, int y, AltosUnits units, String text) { @@ -44,10 +41,6 @@ public class TeleGPSState extends JComponent implements AltosFlightDisplay, Hier } abstract class ValueHold extends DualValue { - public void reset() { - super.reset(); - last_values[1] = AltosLib.MISSING; - } public ValueHold (Container container, int y, AltosUnits units, String text) { super(container, y, units, text); } @@ -103,12 +96,12 @@ public class TeleGPSState extends JComponent implements AltosFlightDisplay, Hier class Bearing extends AltosUIIndicator { public void show (AltosState state, AltosListenerState listener_state) { - if (state.from_pad != null) { + if (state.from_pad != null && state.from_pad.bearing != AltosLib.MISSING) { show( String.format("%3.0f°", state.from_pad.bearing), state.from_pad.bearing_words( AltosGreatCircle.BEARING_LONG)); } else { - show("???", "???"); + show("Missing", "Missing"); } } public Bearing (Container container, int y) { @@ -118,7 +111,10 @@ public class TeleGPSState extends JComponent implements AltosFlightDisplay, Hier class Elevation extends AltosUIIndicator { public void show (AltosState state, AltosListenerState listener_state) { - show("%3.0f°", state.elevation); + if (state.elevation == AltosLib.MISSING) + show("Missing"); + else + show("%3.0f°", state.elevation); } public Elevation (Container container, int y) { super (container, y, "Elevation", 1, false, 2); @@ -165,7 +161,6 @@ public class TeleGPSState extends JComponent implements AltosFlightDisplay, Hier } } - LinkedList<AltosUIIndicator> indicators = new LinkedList<AltosUIIndicator>(); public void labels(Container container, int y) { GridBagLayout layout = (GridBagLayout)(container.getLayout()); @@ -186,69 +181,27 @@ public class TeleGPSState extends JComponent implements AltosFlightDisplay, Hier add(max); } - public void reset() { - for (AltosUIIndicator i : indicators) - i.reset(); - } - public void font_size_changed(int font_size) { - for (AltosUIIndicator i : indicators) - i.font_size_changed(font_size); - } - - public void units_changed(boolean imperial_units) { - for (AltosUIIndicator i : indicators) - i.units_changed(imperial_units); - } - - public void show(AltosState state, AltosListenerState listener_state) { - if (!isShowing()) { - last_state = state; - last_listener_state = listener_state; - return; - } - - for (AltosUIIndicator i : indicators) - i.show(state, listener_state); + cur.setFont(AltosUILib.label_font); + max.setFont(AltosUILib.label_font); + super.font_size_changed(font_size); } public String getName() { return "Status"; } - public void hierarchyChanged(HierarchyEvent e) { - if (last_state != null && isShowing()) { - AltosState state = last_state; - AltosListenerState listener_state = last_listener_state; - - last_state = null; - last_listener_state = null; - show(state, listener_state); - } - } - public TeleGPSState() { - layout = new GridBagLayout(); - - setLayout(layout); - - /* Elements in state display: - * - * config_version; - * lon - * height - */ int y = 0; labels(this, y++); - indicators.add(new Height(this, y++)); - indicators.add(new Speed(this, y++)); - indicators.add(new Distance(this, y++)); - indicators.add(new Range(this, y++)); - indicators.add(new Bearing(this, y++)); - indicators.add(new Elevation(this, y++)); - indicators.add(new FirmwareVersion(this, y++)); - indicators.add(new FlightLogMax(this, y++)); - indicators.add(new BatteryVoltage(this, y++)); - addHierarchyListener(this); + add(new Height(this, y++)); + add(new Speed(this, y++)); + add(new Distance(this, y++)); + add(new Range(this, y++)); + add(new Bearing(this, y++)); + add(new Elevation(this, y++)); + add(new FirmwareVersion(this, y++)); + add(new FlightLogMax(this, y++)); + add(new BatteryVoltage(this, y++)); } } diff --git a/telegps/TeleGPSStatus.java b/telegps/TeleGPSStatus.java index 14706877..f3951a37 100644 --- a/telegps/TeleGPSStatus.java +++ b/telegps/TeleGPSStatus.java @@ -83,6 +83,12 @@ public class TeleGPSStatus extends JComponent implements AltosFlightDisplay { else setVisible(true); } + + public void reset() { + super.reset(); + call = ""; + } + public Call (GridBagLayout layout, int x) { super (layout, x, "Callsign"); } @@ -101,6 +107,12 @@ public class TeleGPSStatus extends JComponent implements AltosFlightDisplay { serial = state.serial; } } + + public void reset() { + super.reset(); + serial = -1; + } + public Serial (GridBagLayout layout, int x) { super (layout, x, "Serial"); } @@ -121,6 +133,12 @@ public class TeleGPSStatus extends JComponent implements AltosFlightDisplay { last_flight = state.flight; } } + + public void reset() { + super.reset(); + last_flight = -1; + } + public Flight (GridBagLayout layout, int x) { super (layout, x, "Flight"); } @@ -143,6 +161,12 @@ public class TeleGPSStatus extends JComponent implements AltosFlightDisplay { rssi = new_rssi; } } + + public void reset() { + super.reset(); + rssi = 10000; + } + public RSSI (GridBagLayout layout, int x) { super (layout, x, "RSSI"); } @@ -162,6 +186,16 @@ public class TeleGPSStatus extends JComponent implements AltosFlightDisplay { last_secs = secs; } } + + void reset() { + super.reset(); + last_secs = -1; + } + + void disable() { + value.setText(""); + } + public LastPacket(GridBagLayout layout, int x) { super (layout, x, "Age"); } @@ -169,6 +203,10 @@ public class TeleGPSStatus extends JComponent implements AltosFlightDisplay { LastPacket last_packet; + public void disable_receive() { + last_packet.disable(); + } + public void reset () { call.reset(); serial.reset(); |