diff options
Diffstat (limited to 'telegps')
-rw-r--r-- | telegps/TeleGPS.java | 11 | ||||
-rw-r--r-- | telegps/TeleGPSDisplayThread.java | 4 | ||||
-rw-r--r-- | telegps/TeleGPSStatus.java | 32 |
3 files changed, 33 insertions, 14 deletions
diff --git a/telegps/TeleGPS.java b/telegps/TeleGPS.java index a4b221e8..41f88172 100644 --- a/telegps/TeleGPS.java +++ b/telegps/TeleGPS.java @@ -67,7 +67,6 @@ public class TeleGPS TeleGPSStatus telegps_status; TeleGPSStatusUpdate status_update; - javax.swing.Timer status_timer; JTabbedPane pane; @@ -147,6 +146,7 @@ public class TeleGPS public void show(AltosState state, AltosListenerState listener_state) { try { status_update.saved_state = state; + status_update.saved_listener_state = listener_state; if (state == null) state = new AltosState(); @@ -178,11 +178,7 @@ public class TeleGPS void disconnect() { setTitle("TeleGPS"); stop_display(); - if (status_timer != null) { - status_timer.stop(); - status_timer = null; - status_update = null; - } + telegps_status.stop(); telegps_status.disable_receive(); disable_frequency_menu(); @@ -404,8 +400,7 @@ public class TeleGPS 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(); + telegps_status.start(status_update); setTitle(String.format("TeleGPS %s", reader.name)); thread = new TeleGPSDisplayThread(this, voice(), this, reader); diff --git a/telegps/TeleGPSDisplayThread.java b/telegps/TeleGPSDisplayThread.java index 18b8d9fc..6305bf2f 100644 --- a/telegps/TeleGPSDisplayThread.java +++ b/telegps/TeleGPSDisplayThread.java @@ -168,8 +168,10 @@ public class TeleGPSDisplayThread extends Thread { for (;;) { try { state = reader.read(); - if (state == null) + if (state == null) { + listener_state.running = false; break; + } reader.update(state); show_safely(); told = tell(); diff --git a/telegps/TeleGPSStatus.java b/telegps/TeleGPSStatus.java index 1d4415d6..1eeb7ed5 100644 --- a/telegps/TeleGPSStatus.java +++ b/telegps/TeleGPSStatus.java @@ -179,11 +179,15 @@ public class TeleGPSStatus extends JComponent implements AltosFlightDisplay { long last_secs = -1; void show(AltosState state, AltosListenerState listener_state) { - long secs = (System.currentTimeMillis() - state.received_time + 500) / 1000; - - if (secs != last_secs) { - value.setText(String.format("%d", secs)); - last_secs = secs; + if (listener_state.running) { + long secs = (System.currentTimeMillis() - state.received_time + 500) / 1000; + + if (secs != last_secs) { + value.setText(String.format("%d", secs)); + last_secs = secs; + } + } else { + value.setText("done"); } } @@ -232,6 +236,8 @@ public class TeleGPSStatus extends JComponent implements AltosFlightDisplay { flight.show(state, listener_state); rssi.show(state, listener_state); last_packet.show(state, listener_state); + if (!listener_state.running) + stop(); } public int height() { @@ -239,6 +245,22 @@ public class TeleGPSStatus extends JComponent implements AltosFlightDisplay { return d.height; } + TeleGPSStatusUpdate status_update; + javax.swing.Timer timer; + + public void start(TeleGPSStatusUpdate status_update) { + this.status_update = status_update; + timer = new javax.swing.Timer(100, status_update); + timer.start(); + } + + public void stop() { + if (timer != null) { + timer.stop(); + timer = null; + } + } + public TeleGPSStatus() { layout = new GridBagLayout(); |