X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=blobdiff_plain;f=altosui%2FAltosIdleMonitorUI.java;h=6da920e29cb89e30f90338cc7e8fef9f74c7ca4a;hp=1b3dd5470a0e9b4ec951721e2ace1d43c31d004e;hb=0484ca97828da0d56be7bf395fa4a4b09c591e02;hpb=f0bbd3e2571336b5f5872759b5010148325efbaa diff --git a/altosui/AltosIdleMonitorUI.java b/altosui/AltosIdleMonitorUI.java index 1b3dd547..6da920e2 100644 --- a/altosui/AltosIdleMonitorUI.java +++ b/altosui/AltosIdleMonitorUI.java @@ -20,12 +20,14 @@ package altosui; import java.awt.*; import java.awt.event.*; import javax.swing.*; +import javax.swing.event.*; import java.io.*; import java.util.concurrent.*; -import org.altusmetrum.AltosLib.*; -import org.altusmetrum.altosuilib.*; +import java.util.Arrays; +import org.altusmetrum.altoslib_2.*; +import org.altusmetrum.altosuilib_1.*; -public class AltosIdleMonitorUI extends AltosUIFrame implements AltosFlightDisplay, AltosFontListener, AltosIdleMonitorListener { +public class AltosIdleMonitorUI extends AltosUIFrame implements AltosFlightDisplay, AltosFontListener, AltosIdleMonitorListener, DocumentListener { AltosDevice device; JTabbedPane pane; AltosPad pad; @@ -36,11 +38,11 @@ public class AltosIdleMonitorUI extends AltosUIFrame implements AltosFlightDispl boolean remote; void stop_display() { - if (thread != null && thread.isAlive()) { - thread.interrupt(); + if (thread != null) { try { - thread.join(); - } catch (InterruptedException ie) {} + thread.abort(); + } catch (InterruptedException ie) { + } } thread = null; } @@ -65,21 +67,21 @@ public class AltosIdleMonitorUI extends AltosUIFrame implements AltosFlightDispl 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); - } catch (Exception e) { - System.out.print("Show exception" + e); - } +// try { + 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); @@ -87,6 +89,48 @@ public class AltosIdleMonitorUI extends AltosUIFrame implements AltosFlightDispl 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 { @@ -100,8 +144,6 @@ public class AltosIdleMonitorUI extends AltosUIFrame implements AltosFlightDispl 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 */ @@ -116,23 +158,21 @@ public class AltosIdleMonitorUI extends AltosUIFrame implements AltosFlightDispl 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 @@ -146,13 +186,7 @@ public class AltosIdleMonitorUI extends AltosUIFrame implements AltosFlightDispl 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); @@ -161,7 +195,13 @@ public class AltosIdleMonitorUI extends AltosUIFrame implements AltosFlightDispl addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { - disconnect(); + System.out.printf("Closing idle monitor window\n"); + try { + disconnect(); + } catch (Exception ex) { + System.out.println(Arrays.toString(ex.getStackTrace())); + } + System.out.printf("hiding\n"); setVisible(false); dispose(); AltosUIPreferences.unregister_font_listener(AltosIdleMonitorUI.this);