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