altos: Support staging by going back to boost as needed
[fw/altos] / altosui / AltosFlightUI.java
index 8c3f821e6c96db559153196a5bcb1e5bcb8bf813..b44b9d43b84c4a7f3f511120a4c2e183c68f028d 100644 (file)
@@ -28,7 +28,7 @@ import java.text.*;
 import java.util.prefs.*;
 import java.util.concurrent.*;
 
-public class AltosFlightUI extends JFrame implements AltosFlightDisplay {
+public class AltosFlightUI extends JFrame implements AltosFlightDisplay, AltosFontListener {
        AltosVoice              voice;
        AltosFlightReader       reader;
        AltosDisplayThread      thread;
@@ -39,8 +39,10 @@ public class AltosFlightUI extends JFrame implements AltosFlightDisplay {
        AltosAscent     ascent;
        AltosDescent    descent;
        AltosLanded     landed;
+       AltosCompanionInfo      companion;
        AltosSiteMap    sitemap;
        boolean         has_map;
+       boolean         has_companion;
 
        private AltosFlightStatus flightStatus;
        private AltosInfoTable flightInfo;
@@ -81,6 +83,21 @@ public class AltosFlightUI extends JFrame implements AltosFlightDisplay {
                sitemap.reset();
        }
 
+       public void set_font() {
+               pad.set_font();
+               ascent.set_font();
+               descent.set_font();
+               landed.set_font();
+               flightStatus.set_font();
+               flightInfo.set_font();
+               sitemap.set_font();
+               companion.set_font();
+       }
+
+       public void font_size_changed(int font_size) {
+               set_font();
+       }
+
        public void show(AltosState state, int crc_errors) {
                JComponent tab = which_tab(state);
                try {
@@ -96,7 +113,20 @@ public class AltosFlightUI extends JFrame implements AltosFlightDisplay {
                }
                flightStatus.show(state, crc_errors);
                flightInfo.show(state, crc_errors);
-               if (state.gps != null) {
+
+               if (state.data.companion != null) {
+                       if (!has_companion) {
+                               pane.add("Companion", companion);
+                               has_companion= true;
+                       }
+                       companion.show(state, crc_errors);
+               } else {
+                       if (has_companion) {
+                               pane.remove(companion);
+                               has_companion = false;
+                       }
+               }
+               if (state.gps != null && state.gps.connected) {
                        if (!has_map) {
                                pane.add("Site Map", sitemap);
                                has_map = true;
@@ -147,17 +177,20 @@ public class AltosFlightUI extends JFrame implements AltosFlightDisplay {
                        frequencies.addActionListener(new ActionListener() {
                                        public void actionPerformed(ActionEvent e) {
                                                double frequency = frequencies.frequency();
-                                               reader.save_frequency();
                                                try {
                                                        reader.set_frequency(frequency);
                                                } catch (TimeoutException te) {
                                                } catch (InterruptedException ie) {
                                                }
+                                               reader.save_frequency();
                                        }
                        });
                        c.gridx = 0;
                        c.gridy = 0;
+                       c.weightx = 0;
+                       c.weighty = 0;
                        c.insets = new Insets(3, 3, 3, 3);
+                       c.fill = GridBagConstraints.NONE;
                        c.anchor = GridBagConstraints.WEST;
                        bag.add (frequencies, c);
 
@@ -171,6 +204,8 @@ public class AltosFlightUI extends JFrame implements AltosFlightDisplay {
                                telemetry = Altos.ao_telemetry_standard;
                        telemetries.setSelectedIndex(telemetry - 1);
                        telemetries.setMaximumRowCount(Altos.ao_telemetry_max);
+                       telemetries.setPreferredSize(null);
+                       telemetries.revalidate();
                        telemetries.addActionListener(new ActionListener() {
                                        public void actionPerformed(ActionEvent e) {
                                                int telemetry = telemetries.getSelectedIndex() + 1;
@@ -180,6 +215,8 @@ public class AltosFlightUI extends JFrame implements AltosFlightDisplay {
                                });
                        c.gridx = 1;
                        c.gridy = 0;
+                       c.weightx = 0;
+                       c.weighty = 0;
                        c.fill = GridBagConstraints.NONE;
                        c.anchor = GridBagConstraints.WEST;
                        bag.add (telemetries, c);
@@ -210,12 +247,15 @@ public class AltosFlightUI extends JFrame implements AltosFlightDisplay {
                descent = new AltosDescent();
                pane.add("Descent", descent);
 
-               landed = new AltosLanded();
+               landed = new AltosLanded(reader);
                pane.add("Landed", landed);
 
                flightInfo = new AltosInfoTable();
                pane.add("Table", new JScrollPane(flightInfo));
 
+               companion = new AltosCompanionInfo();
+               has_companion = false;
+
                sitemap = new AltosSiteMap();
                has_map = false;
 
@@ -229,12 +269,16 @@ public class AltosFlightUI extends JFrame implements AltosFlightDisplay {
                bag.add(pane, c);
 
                setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
+
+               AltosPreferences.register_font_listener(this);
+
                addWindowListener(new WindowAdapter() {
                                @Override
                                public void windowClosing(WindowEvent e) {
                                        disconnect();
                                        setVisible(false);
                                        dispose();
+                                       AltosPreferences.unregister_font_listener(AltosFlightUI.this);
                                        if (exit_on_close)
                                                System.exit(0);
                                }