doc: Use icons for admonitions
[fw/altos] / altosui / AltosIdleMonitorUI.java
index 0230ff2f767959a2c73301e4c5d2ae21748a26e4..fc76b2b658c87db172a8043bce7e6912679ae7fa 100644 (file)
@@ -3,7 +3,8 @@
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
  *
  * This program is distributed in the hope that it will be useful, but
  * WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -24,8 +25,8 @@ import javax.swing.event.*;
 import java.io.*;
 import java.util.concurrent.*;
 import java.util.Arrays;
-import org.altusmetrum.altoslib_5.*;
-import org.altusmetrum.altosuilib_3.*;
+import org.altusmetrum.altoslib_13.*;
+import org.altusmetrum.altosuilib_13.*;
 
 public class AltosIdleMonitorUI extends AltosUIFrame implements AltosFlightDisplay, AltosIdleMonitorListener, DocumentListener {
        AltosDevice             device;
@@ -33,11 +34,13 @@ public class AltosIdleMonitorUI extends AltosUIFrame implements AltosFlightDispl
        AltosPad                pad;
        AltosInfoTable          flightInfo;
        AltosFlightStatus       flightStatus;
-       AltosIgnitor            ignitor;
+       AltosIgnitor            igniter;
        AltosIdleMonitor        thread;
+       AltosUIMap              sitemap;
        int                     serial;
        boolean                 remote;
-       boolean                 has_ignitor;
+       boolean                 has_igniter;
+       boolean                 has_map;
 
        void stop_display() {
                if (thread != null) {
@@ -72,22 +75,37 @@ public class AltosIdleMonitorUI extends AltosUIFrame implements AltosFlightDispl
 
        public void show(AltosState state, AltosListenerState listener_state) {
                status_update.saved_state = state;
-               if (ignitor.should_show(state)) {
-                       if (!has_ignitor) {
-                               pane.add("Ignitor", ignitor);
-                               has_ignitor = true;
+               if (igniter.should_show(state)) {
+                       if (!has_igniter) {
+                               pane.add("Ignitor", igniter);
+                               has_igniter = true;
                        }
                } else {
-                       if (has_ignitor) {
-                               pane.remove(ignitor);
-                               has_ignitor = false;
+                       if (has_igniter) {
+                               pane.remove(igniter);
+                               has_igniter = false;
                        }
                }
+               if (state.gps != null && state.gps.connected) {
+                       if (!has_map) {
+                               pane.add("Site Map", sitemap);
+                               has_map = true;
+                       }
+               } else {
+                       if (has_map) {
+                               pane.remove(sitemap);
+                               has_map = false;
+                       }
+               }
+
 //             try {
                        pad.show(state, listener_state);
                        flightStatus.show(state, listener_state);
                        flightInfo.show(state, listener_state);
-                       ignitor.show(state, listener_state);
+                       if (has_igniter)
+                               igniter.show(state, listener_state);
+                       if (has_map)
+                               sitemap.show(state, listener_state);
 //             } catch (Exception e) {
 //                     System.out.print("Show exception " + e);
 //             }
@@ -111,6 +129,19 @@ public class AltosIdleMonitorUI extends AltosUIFrame implements AltosFlightDispl
                SwingUtilities.invokeLater(r);
        }
 
+       public void error(final String reason) {
+               Runnable r = new Runnable() {
+                               public void run() {
+                                       disconnect();
+                                       JOptionPane.showMessageDialog(AltosIdleMonitorUI.this,
+                                                                     reason,
+                                                                     "Error fetching data",
+                                                                     JOptionPane.ERROR_MESSAGE);
+                               }
+                       };
+               SwingUtilities.invokeLater(r);
+       }
+
        Container       bag;
        AltosUIFreqList frequencies;
        JTextField      callsign_value;
@@ -119,6 +150,7 @@ public class AltosIdleMonitorUI extends AltosUIFrame implements AltosFlightDispl
        public void changedUpdate(DocumentEvent e) {
                if (callsign_value != null) {
                        String  callsign = callsign_value.getText();
+                       System.out.printf("callsign set to %s\n", callsign);
                        thread.set_callsign(callsign);
                        AltosUIPreferences.set_callsign(callsign);
                }
@@ -132,30 +164,6 @@ public class AltosIdleMonitorUI extends AltosUIFrame implements AltosFlightDispl
                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);
-       }
-
        void idle_exception(JFrame owner, Exception e) {
                if (e instanceof FileNotFoundException) {
                        JOptionPane.showMessageDialog(owner,
@@ -209,11 +217,14 @@ public class AltosIdleMonitorUI extends AltosUIFrame implements AltosFlightDispl
                AltosSerial link;
                try {
                        link = new AltosSerial(device);
-                       link.set_frame(this);
                } catch (Exception ex) {
                        idle_exception(in_owner, ex);
                        return;
                }
+               link.set_frame(this);
+
+               /* We let the user set the freq/callsign, so don't bother with the cancel dialog */
+               link.set_cancel_enable(false);
 
                bag = getContentPane();
                bag.setLayout(new GridBagLayout());
@@ -222,6 +233,8 @@ public class AltosIdleMonitorUI extends AltosUIFrame implements AltosFlightDispl
 
                /* Stick frequency selector at top of table for telemetry monitoring */
                if (remote && serial >= 0) {
+                       set_inset(3);
+
                        // Frequency menu
                        frequencies = new AltosUIFreqList(AltosUIPreferences.frequency(serial));
                        frequencies.addActionListener(new ActionListener() {
@@ -238,15 +251,17 @@ public class AltosIdleMonitorUI extends AltosUIFrame implements AltosFlightDispl
                        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++;
+                       bag.add(callsign_value, constraints(2, 1, GridBagConstraints.HORIZONTAL));
+                       next_row();
                }
 
+               set_inset(0);
 
                /* Flight status is always visible */
                flightStatus = new AltosFlightStatus();
-               bag.add(flightStatus, constraints(0, 3, GridBagConstraints.HORIZONTAL));
-               row++;
+               bag.add(flightStatus, constraints(0, 4, GridBagConstraints.HORIZONTAL));
+
+               next_row();
 
                /* The rest of the window uses a tabbed pane to
                 * show one of the alternate data views
@@ -259,10 +274,12 @@ public class AltosIdleMonitorUI extends AltosUIFrame implements AltosFlightDispl
                flightInfo = new AltosInfoTable();
                pane.add("Table", new JScrollPane(flightInfo));
 
-               ignitor = new AltosIgnitor();
+               igniter = new AltosIgnitor();
+
+               sitemap = new AltosUIMap();
 
                /* Make the tabbed pane use the rest of the window space */
-               bag.add(pane, constraints(0, 3, GridBagConstraints.BOTH));
+               bag.add(pane, constraints(0, 4, GridBagConstraints.BOTH));
 
                setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
 
@@ -278,7 +295,7 @@ public class AltosIdleMonitorUI extends AltosUIFrame implements AltosFlightDispl
                pack();
                setVisible(true);
 
-               thread = new AltosIdleMonitor((AltosIdleMonitorListener) this, link, (boolean) remote);
+               thread = new AltosIdleMonitor(this, link, (boolean) remote);
 
                status_update = new AltosFlightStatusUpdate(flightStatus);