diff options
| -rw-r--r-- | altoslib/AltosListenerState.java | 2 | ||||
| -rw-r--r-- | altosui/AltosFlightStatus.java | 30 | ||||
| -rw-r--r-- | altosui/AltosFlightUI.java | 10 | ||||
| -rw-r--r-- | altosuilib/AltosDisplayThread.java | 4 | ||||
| -rw-r--r-- | telegps/TeleGPS.java | 11 | ||||
| -rw-r--r-- | telegps/TeleGPSDisplayThread.java | 4 | ||||
| -rw-r--r-- | telegps/TeleGPSStatus.java | 32 | 
7 files changed, 70 insertions, 23 deletions
| diff --git a/altoslib/AltosListenerState.java b/altoslib/AltosListenerState.java index ed1f0f19..bba21830 100644 --- a/altoslib/AltosListenerState.java +++ b/altoslib/AltosListenerState.java @@ -22,9 +22,11 @@ import java.io.*;  public class AltosListenerState implements Serializable {  	public int	crc_errors;  	public double	battery; +	public boolean	running;  	public AltosListenerState() {  		crc_errors = 0;  		battery = AltosLib.MISSING; +		running = true;  	}  } diff --git a/altosui/AltosFlightStatus.java b/altosui/AltosFlightStatus.java index 7e7efa64..a847d884 100644 --- a/altosui/AltosFlightStatus.java +++ b/altosui/AltosFlightStatus.java @@ -229,10 +229,14 @@ public class AltosFlightStatus 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");  			}  		} @@ -276,6 +280,8 @@ public class AltosFlightStatus extends JComponent implements AltosFlightDisplay  		flight_state.show(state, listener_state);  		rssi.show(state, listener_state);  		last_packet.show(state, listener_state); +		if (!listener_state.running) +			stop();  	}  	public int height() { @@ -285,6 +291,22 @@ public class AltosFlightStatus extends JComponent implements AltosFlightDisplay  	public String getName() { return "Flight Status"; } +	AltosFlightStatusUpdate	status_update; +	javax.swing.Timer	timer; + +	public void start(AltosFlightStatusUpdate 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 AltosFlightStatus() {  		layout = new GridBagLayout(); diff --git a/altosui/AltosFlightUI.java b/altosui/AltosFlightUI.java index 6af345ea..d7c8223e 100644 --- a/altosui/AltosFlightUI.java +++ b/altosui/AltosFlightUI.java @@ -97,6 +97,7 @@ public class AltosFlightUI extends AltosUIFrame implements AltosFlightDisplay {  	public void show(AltosState state, AltosListenerState listener_state) {  		status_update.saved_state = state; +		status_update.saved_listener_state = listener_state;  		if (state == null)  			state = new AltosState(); @@ -335,9 +336,14 @@ public class AltosFlightUI extends AltosUIFrame implements AltosFlightDisplay {  		AltosUIPreferences.register_font_listener(this);  		AltosPreferences.register_units_listener(this); +		status_update = new AltosFlightStatusUpdate(flightStatus); + +		flightStatus.start(status_update); +  		addWindowListener(new WindowAdapter() {  				@Override  				public void windowClosing(WindowEvent e) { +					flightStatus.stop();  					disconnect();  					setVisible(false);  					dispose(); @@ -353,10 +359,6 @@ public class AltosFlightUI extends AltosUIFrame implements AltosFlightDisplay {  		thread = new AltosDisplayThread(this, voice, this, reader); -		status_update = new AltosFlightStatusUpdate(flightStatus); - -		new javax.swing.Timer(100, status_update).start(); -  		thread.start();  	} diff --git a/altosuilib/AltosDisplayThread.java b/altosuilib/AltosDisplayThread.java index 6b6e03e7..627088bc 100644 --- a/altosuilib/AltosDisplayThread.java +++ b/altosuilib/AltosDisplayThread.java @@ -224,8 +224,10 @@ public class AltosDisplayThread 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/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(); | 
