altosui: Add multi-sized icons to all windows
[fw/altos] / altosui / AltosIdleMonitorUI.java
index 2ee909374a313d50492dd3e2ffb42e167696218a..510579c5973c56ab05255c9630513c89eb618856 100644 (file)
@@ -29,240 +29,7 @@ import java.util.prefs.*;
 import java.util.concurrent.*;
 import org.altusmetrum.AltosLib.*;
 
-class AltosADC {
-       int     tick;
-       int     accel;
-       int     pres;
-       int     temp;
-       int     batt;
-       int     drogue;
-       int     main;
-
-       public AltosADC(AltosSerial serial) throws InterruptedException, TimeoutException {
-               serial.printf("a\n");
-               for (;;) {
-                       String line = serial.get_reply_no_dialog(5000);
-                       if (line == null) {
-                               throw new TimeoutException();
-                       }
-                       if (!line.startsWith("tick:"))
-                               continue;
-                       String[] items = line.split("\\s+");
-                       for (int i = 0; i < items.length;) {
-                               if (items[i].equals("tick:")) {
-                                       tick = Integer.parseInt(items[i+1]);
-                                       i += 2;
-                                       continue;
-                               }
-                               if (items[i].equals("accel:")) {
-                                       accel = Integer.parseInt(items[i+1]);
-                                       i += 2;
-                                       continue;
-                               }
-                               if (items[i].equals("pres:")) {
-                                       pres = Integer.parseInt(items[i+1]);
-                                       i += 2;
-                                       continue;
-                               }
-                               if (items[i].equals("temp:")) {
-                                       temp = Integer.parseInt(items[i+1]);
-                                       i += 2;
-                                       continue;
-                               }
-                               if (items[i].equals("batt:")) {
-                                       batt = Integer.parseInt(items[i+1]);
-                                       i += 2;
-                                       continue;
-                               }
-                               if (items[i].equals("drogue:")) {
-                                       drogue = Integer.parseInt(items[i+1]);
-                                       i += 2;
-                                       continue;
-                               }
-                               if (items[i].equals("main:")) {
-                                       main = Integer.parseInt(items[i+1]);
-                                       i += 2;
-                                       continue;
-                               }
-                       }
-                       break;
-               }
-       }
-}
-
-class AltosGPSQuery extends AltosGPS {
-       public AltosGPSQuery (AltosSerial serial, AltosConfigData config_data)
-               throws TimeoutException, InterruptedException {
-               boolean says_done = config_data.compare_version("1.0") >= 0;
-               serial.printf("g\n");
-               for (;;) {
-                       String line = serial.get_reply_no_dialog(5000);
-                       if (line == null)
-                               throw new TimeoutException();
-                       String[] bits = line.split("\\s+");
-                       if (bits.length == 0)
-                               continue;
-                       if (line.startsWith("Date:")) {
-                               if (bits.length < 2)
-                                       continue;
-                               String[] d = bits[1].split(":");
-                               if (d.length < 3)
-                                       continue;
-                               year = Integer.parseInt(d[0]) + 2000;
-                               month = Integer.parseInt(d[1]);
-                               day = Integer.parseInt(d[2]);
-                               continue;
-                       }
-                       if (line.startsWith("Time:")) {
-                               if (bits.length < 2)
-                                       continue;
-                               String[] d = bits[1].split("/");
-                               if (d.length < 3)
-                                       continue;
-                               hour = Integer.parseInt(d[0]);
-                               minute = Integer.parseInt(d[1]);
-                               second = Integer.parseInt(d[2]);
-                               continue;
-                       }
-                       if (line.startsWith("Lat/Lon:")) {
-                               if (bits.length < 3)
-                                       continue;
-                               lat = Integer.parseInt(bits[1]) * 1.0e-7;
-                               lon = Integer.parseInt(bits[2]) * 1.0e-7;
-                               continue;
-                       }
-                       if (line.startsWith("Alt:")) {
-                               if (bits.length < 2)
-                                       continue;
-                               alt = Integer.parseInt(bits[1]);
-                               continue;
-                       }
-                       if (line.startsWith("Flags:")) {
-                               if (bits.length < 2)
-                                       continue;
-                               int status = Integer.decode(bits[1]);
-                               connected = (status & Altos.AO_GPS_RUNNING) != 0;
-                               locked = (status & Altos.AO_GPS_VALID) != 0;
-                               if (!says_done)
-                                       break;
-                               continue;
-                       }
-                       if (line.startsWith("Sats:")) {
-                               if (bits.length < 2)
-                                       continue;
-                               nsat = Integer.parseInt(bits[1]);
-                               cc_gps_sat = new AltosGPSSat[nsat];
-                               for (int i = 0; i < nsat; i++) {
-                                       int     svid = Integer.parseInt(bits[2+i*2]);
-                                       int     cc_n0 = Integer.parseInt(bits[3+i*2]);
-                                       cc_gps_sat[i] = new AltosGPSSat(svid, cc_n0);
-                               }
-                       }
-                       if (line.startsWith("done"))
-                               break;
-                       if (line.startsWith("Syntax error"))
-                               break;
-               }
-       }
-}
-
-class AltosIdleMonitor extends Thread {
-       AltosDevice             device;
-       AltosSerial             serial;
-       AltosIdleMonitorUI      ui;
-       AltosState              state;
-       boolean                 remote;
-       double                  frequency;
-       AltosState              previous_state;
-       AltosConfigData         config_data;
-       AltosADC                adc;
-       AltosGPS                gps;
-
-       void update_state() throws InterruptedException, TimeoutException {
-               AltosRecord     record = new AltosRecord();
-
-               try {
-                       if (remote) {
-                               serial.set_radio_frequency(frequency);
-                               serial.start_remote();
-                       } else
-                               serial.flush_input();
-                       config_data = new AltosConfigData(serial);
-                       adc = new AltosADC(serial);
-                       gps = new AltosGPSQuery(serial, config_data);
-               } finally {
-                       if (remote)
-                               serial.stop_remote();
-               }
-
-               record.version = 0;
-               record.callsign = config_data.callsign;
-               record.serial = config_data.serial;
-               record.flight = config_data.log_available() > 0 ? 255 : 0;
-               record.rssi = 0;
-               record.status = 0;
-               record.state = Altos.ao_flight_idle;
-
-               record.tick = adc.tick;
-               record.accel = adc.accel;
-               record.pres = adc.pres;
-               record.batt = adc.batt;
-               record.temp = adc.temp;
-               record.drogue = adc.drogue;
-               record.main = adc.main;
-
-               record.ground_accel = record.accel;
-               record.ground_pres = record.pres;
-               record.accel_plus_g = config_data.accel_cal_plus;
-               record.accel_minus_g = config_data.accel_cal_minus;
-               record.acceleration = 0;
-               record.speed = 0;
-               record.height = 0;
-               record.gps = gps;
-               state = new AltosState (record, state);
-       }
-
-       void set_frequency(double in_frequency) {
-               frequency = in_frequency;
-       }
-
-       public void post_state() {
-               Runnable r = new Runnable() {
-                               public void run() {
-                                       ui.update(state);
-                               }
-                       };
-               SwingUtilities.invokeLater(r);
-       }
-
-       public void run() {
-               try {
-                       for (;;) {
-                               try {
-                                       update_state();
-                                       post_state();
-                               } catch (TimeoutException te) {
-                                       if (AltosSerial.debug)
-                                               System.out.printf ("monitor idle data timeout\n");
-                               }
-                               Thread.sleep(1000);
-                       }
-               } catch (InterruptedException ie) {
-                       serial.close();
-               }
-       }
-
-       public AltosIdleMonitor(AltosIdleMonitorUI in_ui, AltosDevice in_device, boolean in_remote)
-               throws FileNotFoundException, AltosSerialInUseException, InterruptedException, TimeoutException {
-               device = in_device;
-               ui = in_ui;
-               serial = new AltosSerial(device);
-               remote = in_remote;
-               state = null;
-       }
-}
-
-public class AltosIdleMonitorUI extends AltosFrame implements AltosFlightDisplay, AltosFontListener {
+public class AltosIdleMonitorUI extends AltosFrame implements AltosFlightDisplay, AltosFontListener, AltosIdleMonitorListener {
        AltosDevice             device;
        JTabbedPane             pane;
        AltosPad                pad;
@@ -313,8 +80,13 @@ public class AltosIdleMonitorUI extends AltosFrame implements AltosFlightDisplay
                }
        }
 
-       public void update(AltosState state) {
-               show (state, 0);
+       public void update(final AltosState state) {
+               Runnable r = new Runnable() {
+                               public void run() {
+                                       show(state, 0);
+                               }
+                       };
+               SwingUtilities.invokeLater(r);
        }
 
        Container       bag;
@@ -334,10 +106,6 @@ public class AltosIdleMonitorUI extends AltosFrame implements AltosFlightDisplay
 
                GridBagConstraints c = new GridBagConstraints();
 
-               java.net.URL imgURL = AltosUI.class.getResource("/altus-metrum-16x16.jpg");
-               if (imgURL != null)
-                       setIconImage(new ImageIcon(imgURL).getImage());
-
                setTitle(String.format("AltOS %s", device.toShortString()));
 
                /* Stick frequency selector at top of table for telemetry monitoring */
@@ -407,7 +175,7 @@ public class AltosIdleMonitorUI extends AltosFrame implements AltosFlightDisplay
                pack();
                setVisible(true);
 
-               thread = new AltosIdleMonitor(this, device, remote);
+               thread = new AltosIdleMonitor((AltosIdleMonitorListener) this, (AltosLink) new AltosSerial (device), (boolean) remote);
 
                status_update = new AltosFlightStatusUpdate(flightStatus);