altosui: Add map to MonitorIdle display
[fw/altos] / altosui / AltosIdleMonitorUI.java
index 63d862918ae8cc467eafadfe4d7d586d71d65af0..88243c5d396150eb744758305053dae89f752c1c 100644 (file)
@@ -24,8 +24,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_6.*;
+import org.altusmetrum.altosuilib_6.*;
 
 public class AltosIdleMonitorUI extends AltosUIFrame implements AltosFlightDisplay, AltosIdleMonitorListener, DocumentListener {
        AltosDevice             device;
@@ -35,9 +35,11 @@ public class AltosIdleMonitorUI extends AltosUIFrame implements AltosFlightDispl
        AltosFlightStatus       flightStatus;
        AltosIgnitor            ignitor;
        AltosIdleMonitor        thread;
+       AltosUIMap              sitemap;
        int                     serial;
        boolean                 remote;
        boolean                 has_ignitor;
+       boolean                 has_map;
 
        void stop_display() {
                if (thread != null) {
@@ -83,11 +85,26 @@ public class AltosIdleMonitorUI extends AltosUIFrame implements AltosFlightDispl
                                has_ignitor = 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_ignitor)
+                               ignitor.show(state, listener_state);
+                       if (has_map)
+                               sitemap.show(state, listener_state);
 //             } catch (Exception e) {
 //                     System.out.print("Show exception " + e);
 //             }
@@ -102,8 +119,17 @@ public class AltosIdleMonitorUI extends AltosUIFrame implements AltosFlightDispl
                SwingUtilities.invokeLater(r);
        }
 
+       public void failed() {
+               Runnable r = new Runnable() {
+                               public void run() {
+                                       close();
+                               }
+                       };
+               SwingUtilities.invokeLater(r);
+       }
+
        Container       bag;
-       AltosFreqList   frequencies;
+       AltosUIFreqList frequencies;
        JTextField      callsign_value;
 
        /* DocumentListener interface methods */
@@ -174,6 +200,19 @@ public class AltosIdleMonitorUI extends AltosUIFrame implements AltosFlightDispl
                }
        }
 
+       private void close() {
+               try {
+                       disconnect();
+               } catch (Exception ex) {
+                       System.out.printf("Exception %s\n", ex.toString());
+                       for (StackTraceElement el : ex.getStackTrace())
+                               System.out.printf("%s\n", el.toString());
+               }
+               setVisible(false);
+               dispose();
+               AltosUIPreferences.unregister_font_listener(AltosIdleMonitorUI.this);
+       }
+
        public AltosIdleMonitorUI(JFrame in_owner)
                throws FileNotFoundException, TimeoutException, InterruptedException {
 
@@ -184,9 +223,10 @@ public class AltosIdleMonitorUI extends AltosUIFrame implements AltosFlightDispl
 
                serial = device.getSerial();
 
-               AltosLink link;
+               AltosSerial link;
                try {
                        link = new AltosSerial(device);
+                       link.set_frame(this);
                } catch (Exception ex) {
                        idle_exception(in_owner, ex);
                        return;
@@ -200,7 +240,7 @@ public class AltosIdleMonitorUI extends AltosUIFrame implements AltosFlightDispl
                /* Stick frequency selector at top of table for telemetry monitoring */
                if (remote && serial >= 0) {
                        // Frequency menu
-                       frequencies = new AltosFreqList(AltosUIPreferences.frequency(serial));
+                       frequencies = new AltosUIFreqList(AltosUIPreferences.frequency(serial));
                        frequencies.addActionListener(new ActionListener() {
                                        public void actionPerformed(ActionEvent e) {
                                                double frequency = frequencies.frequency();
@@ -238,6 +278,8 @@ public class AltosIdleMonitorUI extends AltosUIFrame implements AltosFlightDispl
 
                ignitor = new AltosIgnitor();
 
+               sitemap = new AltosUIMap();
+
                /* Make the tabbed pane use the rest of the window space */
                bag.add(pane, constraints(0, 3, GridBagConstraints.BOTH));
 
@@ -248,16 +290,7 @@ public class AltosIdleMonitorUI extends AltosUIFrame implements AltosFlightDispl
                addWindowListener(new WindowAdapter() {
                                @Override
                                public void windowClosing(WindowEvent e) {
-                                       try {
-                                               disconnect();
-                                       } catch (Exception ex) {
-                                               System.out.printf("Exception %s\n", ex.toString());
-                                               for (StackTraceElement el : ex.getStackTrace())
-                                                       System.out.printf("%s\n", el.toString());
-                                       }
-                                       setVisible(false);
-                                       dispose();
-                                       AltosUIPreferences.unregister_font_listener(AltosIdleMonitorUI.this);
+                                       close();
                                }
                        });