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();  | 
