diff options
Diffstat (limited to 'altosui/AltosIdleMonitorUI.java')
| -rw-r--r-- | altosui/AltosIdleMonitorUI.java | 106 | 
1 files changed, 66 insertions, 40 deletions
diff --git a/altosui/AltosIdleMonitorUI.java b/altosui/AltosIdleMonitorUI.java index 510579c5..bbab017f 100644 --- a/altosui/AltosIdleMonitorUI.java +++ b/altosui/AltosIdleMonitorUI.java @@ -20,16 +20,13 @@ package altosui;  import java.awt.*;  import java.awt.event.*;  import javax.swing.*; -import javax.swing.filechooser.FileNameExtensionFilter; -import javax.swing.table.*; +import javax.swing.event.*;  import java.io.*; -import java.util.*; -import java.text.*; -import java.util.prefs.*;  import java.util.concurrent.*; -import org.altusmetrum.AltosLib.*; +import org.altusmetrum.altoslib_1.*; +import org.altusmetrum.altosuilib_1.*; -public class AltosIdleMonitorUI extends AltosFrame implements AltosFlightDisplay, AltosFontListener, AltosIdleMonitorListener { +public class AltosIdleMonitorUI extends AltosUIFrame implements AltosFlightDisplay, AltosFontListener, AltosIdleMonitorListener, DocumentListener {  	AltosDevice		device;  	JTabbedPane		pane;  	AltosPad		pad; @@ -40,11 +37,8 @@ public class AltosIdleMonitorUI extends AltosFrame implements AltosFlightDisplay  	boolean			remote;  	void stop_display() { -		if (thread != null && thread.isAlive()) { -			thread.interrupt(); -			try { -				thread.join(); -			} catch (InterruptedException ie) {} +		if (thread != null) { +			thread.abort();  		}  		thread = null;  	} @@ -69,21 +63,21 @@ public class AltosIdleMonitorUI extends AltosFrame implements AltosFlightDisplay  	AltosFlightStatusUpdate	status_update; -	public void show(AltosState state, int crc_errors) { +	public void show(AltosState state, AltosListenerState listener_state) {  		status_update.saved_state = state;  		try { -			pad.show(state, crc_errors); -			flightStatus.show(state, crc_errors); -			flightInfo.show(state, crc_errors); +			pad.show(state, listener_state); +			flightStatus.show(state, listener_state); +			flightInfo.show(state, listener_state);  		} catch (Exception e) {  			System.out.print("Show exception" + e);  		}  	} -	public void update(final AltosState state) { +	public void update(final AltosState state, final AltosListenerState listener_state) {  		Runnable r = new Runnable() {  				public void run() { -					show(state, 0); +					show(state, listener_state);  				}  			};  		SwingUtilities.invokeLater(r); @@ -91,11 +85,53 @@ public class AltosIdleMonitorUI extends AltosFrame implements AltosFlightDisplay  	Container	bag;  	AltosFreqList	frequencies; +	JTextField	callsign_value; + +	/* DocumentListener interface methods */ +	public void changedUpdate(DocumentEvent e) { +		if (callsign_value != null) { +			String	callsign = callsign_value.getText(); +			thread.set_callsign(callsign); +			AltosUIPreferences.set_callsign(callsign); +		} +	} + +	public void insertUpdate(DocumentEvent e) { +		changedUpdate(e); +	} + +	public void removeUpdate(DocumentEvent e) { +		changedUpdate(e); +	} + +	int row = 0; + +	public GridBagConstraints constraints (int x, int width, int fill) { +		GridBagConstraints c = new GridBagConstraints(); +		Insets insets = new Insets(4, 4, 4, 4); + +		c.insets = insets; +		c.fill = fill; +		if (width == 3) +			c.anchor = GridBagConstraints.CENTER; +		else if (x == 2) +			c.anchor = GridBagConstraints.EAST; +		else +			c.anchor = GridBagConstraints.WEST; +		c.gridx = x; +		c.gridwidth = width; +		c.gridy = row; +		return c; +	} + +	public GridBagConstraints constraints(int x, int width) { +		return constraints(x, width, GridBagConstraints.NONE); +	}  	public AltosIdleMonitorUI(JFrame in_owner)  		throws FileNotFoundException, AltosSerialInUseException, TimeoutException, InterruptedException { -		device = AltosDeviceDialog.show(in_owner, Altos.product_any); +		device = AltosDeviceUIDialog.show(in_owner, Altos.product_any);  		remote = false;  		if (!device.matchProduct(Altos.product_altimeter))  			remote = true; @@ -104,8 +140,6 @@ public class AltosIdleMonitorUI extends AltosFrame implements AltosFlightDisplay  		bag = getContentPane();  		bag.setLayout(new GridBagLayout()); -		GridBagConstraints c = new GridBagConstraints(); -  		setTitle(String.format("AltOS %s", device.toShortString()));  		/* Stick frequency selector at top of table for telemetry monitoring */ @@ -120,23 +154,21 @@ public class AltosIdleMonitorUI extends AltosFrame implements AltosFlightDisplay  									       frequency);  					}  			}); -			c.gridx = 0; -			c.gridy = 0; -			c.insets = new Insets(3, 3, 3, 3); -			c.anchor = GridBagConstraints.WEST; -			bag.add (frequencies, c); +			bag.add (frequencies, constraints(0, 1)); +			bag.add (new JLabel("Callsign:"), constraints(1, 1)); +			/* Add callsign configuration */ +			callsign_value = new JTextField(AltosUIPreferences.callsign()); +			callsign_value.getDocument().addDocumentListener(this); +			callsign_value.setToolTipText("Callsign sent in packet mode"); +			bag.add(callsign_value, constraints(2, 1, GridBagConstraints.BOTH)); +			row++;  		}  		/* Flight status is always visible */  		flightStatus = new AltosFlightStatus(); -		c.gridx = 0; -		c.gridy = 1; -		c.fill = GridBagConstraints.HORIZONTAL; -		c.weightx = 1; -		c.gridwidth = 2; -		bag.add(flightStatus, c); -		c.gridwidth = 1; +		bag.add(flightStatus, constraints(0, 3, GridBagConstraints.HORIZONTAL)); +		row++;  		/* The rest of the window uses a tabbed pane to  		 * show one of the alternate data views @@ -150,13 +182,7 @@ public class AltosIdleMonitorUI extends AltosFrame implements AltosFlightDisplay  		pane.add("Table", new JScrollPane(flightInfo));  		/* Make the tabbed pane use the rest of the window space */ -		c.gridx = 0; -		c.gridy = 2; -		c.fill = GridBagConstraints.BOTH; -		c.weightx = 1; -		c.weighty = 1; -		c.gridwidth = 2; -		bag.add(pane, c); +		bag.add(pane, constraints(0, 3, GridBagConstraints.BOTH));  		setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);  | 
