Merge remote branch 'aj/buttonbox' into buttonbox
authorKeith Packard <keithp@keithp.com>
Thu, 11 Nov 2010 06:11:21 +0000 (22:11 -0800)
committerKeith Packard <keithp@keithp.com>
Thu, 11 Nov 2010 06:11:21 +0000 (22:11 -0800)
ao-tools/altosui/AltosAscent.java
ao-tools/altosui/AltosDescent.java
ao-tools/altosui/AltosDisplayThread.java
ao-tools/altosui/AltosFlightUI.java
ao-tools/altosui/AltosGreatCircle.java
ao-tools/altosui/AltosInfoTable.java
ao-tools/altosui/AltosLanded.java
ao-tools/altosui/AltosLights.java
ao-tools/altosui/AltosPad.java
ao-tools/altosui/AltosUI.java

index 40df7af886f3a35c0393bd78046d7525d4479e87..51fa1a89d0f0a3b3ad315f2d62f1274c4671887b 100644 (file)
@@ -53,8 +53,8 @@ public class AltosAscent extends JComponent implements AltosFlightDisplay {
                        layout.setConstraints(label, c);
                        add(label);
 
-                       value = new JTextField(20);
-                       value.setFont(label_font);
+                       value = new JTextField(30);
+                       value.setFont(value_font);
                        value.setHorizontalAlignment(SwingConstants.RIGHT);
                        c.gridx = 1; c.gridy = y;
                        c.anchor = GridBagConstraints.WEST;
@@ -98,16 +98,16 @@ public class AltosAscent extends JComponent implements AltosFlightDisplay {
                        layout.setConstraints(label, c);
                        add(label);
 
-                       value = new JTextField(10);
-                       value.setFont(label_font);
+                       value = new JTextField(15);
+                       value.setFont(value_font);
                        value.setHorizontalAlignment(SwingConstants.RIGHT);
                        c.gridx = 1; c.gridy = y;
                        c.anchor = GridBagConstraints.EAST;
                        layout.setConstraints(value, c);
                        add(value);
 
-                       max_value = new JTextField(10);
-                       max_value.setFont(label_font);
+                       max_value = new JTextField(15);
+                       max_value.setFont(value_font);
                        max_value.setHorizontalAlignment(SwingConstants.RIGHT);
                        c.gridx = 2; c.gridy = y;
                        c.anchor = GridBagConstraints.EAST;
@@ -231,7 +231,7 @@ public class AltosAscent extends JComponent implements AltosFlightDisplay {
                layout = new GridBagLayout();
 
                label_font = new Font("Dialog", Font.PLAIN, 24);
-               value_font = new Font("Monospace", Font.PLAIN, 24);
+               value_font = new Font("Monospaced", Font.PLAIN, 24);
                setLayout(layout);
 
                /* Elements in ascent display:
index 0d3d17f040fa027b06169149b1097c04840d3edb..56d3e4feeee45db70cd9dbd10d786f44ca5088a4 100644 (file)
@@ -58,10 +58,11 @@ public class AltosDescent extends JComponent implements AltosFlightDisplay {
                        layout.setConstraints(label, c);
                        add(label);
 
-                       value = new JTextField(20);
-                       value.setFont(label_font);
+                       value = new JTextField(30);
+                       value.setFont(value_font);
                        value.setHorizontalAlignment(SwingConstants.RIGHT);
                        c.gridx = 1; c.gridy = y;
+                       c.gridwidth = 2;
                        c.anchor = GridBagConstraints.WEST;
                        c.fill = GridBagConstraints.HORIZONTAL;
                        layout.setConstraints(value, c);
@@ -133,15 +134,54 @@ public class AltosDescent extends JComponent implements AltosFlightDisplay {
 
        Lon lon;
 
-       class Bearing extends DescentValue {
+       class Bearing {
+               JLabel          label;
+               JTextField      value;
+               JTextField      value_deg;
+        void reset () {
+                       value.setText("");
+                       value_deg.setText("");
+        }
                void show (AltosState state, int crc_errors) {
-                       if (state.from_pad != null)
-                               show("%3.0f°", state.from_pad.bearing);
-                       else
+                       if (state.from_pad != null) {
+                value.setText(state.from_pad.bearing_words(
+                                AltosGreatCircle.BEARING_LONG));
+                               value_deg.setText(String.format("%3.0f°", state.from_pad.bearing));
+                       } else {
                                value.setText("???");
+                               value_deg.setText("???");
+            }
                }
                public Bearing (GridBagLayout layout, int y) {
-                       super (layout, y, "Bearing");
+            GridBagConstraints      c = new GridBagConstraints();
+
+            label = new JLabel("Bearing");
+            label.setFont(label_font);
+            label.setHorizontalAlignment(SwingConstants.LEFT);
+            c.gridx = 0; c.gridy = y;
+            c.insets = new Insets(10, 10, 10, 10);
+            c.anchor = GridBagConstraints.WEST;
+            layout.setConstraints(label, c);
+            add(label);
+
+            value = new JTextField(30);
+            value.setFont(value_font);
+            value.setHorizontalAlignment(SwingConstants.RIGHT);
+            c.gridx = 1; c.gridy = y;
+            c.anchor = GridBagConstraints.EAST;
+            c.fill = GridBagConstraints.HORIZONTAL;
+            layout.setConstraints(value, c);
+            add(value);
+
+            value_deg = new JTextField(5);
+            value_deg.setFont(value_font);
+            value_deg.setHorizontalAlignment(SwingConstants.RIGHT);
+            c.gridx = 2; c.gridy = y;
+            c.anchor = GridBagConstraints.EAST;
+            c.fill = GridBagConstraints.HORIZONTAL;
+
+            layout.setConstraints(value_deg, c);
+            add(value_deg);
                }
        }
 
@@ -196,7 +236,7 @@ public class AltosDescent extends JComponent implements AltosFlightDisplay {
                layout = new GridBagLayout();
 
                label_font = new Font("Dialog", Font.PLAIN, 24);
-               value_font = new Font("Monospace", Font.PLAIN, 24);
+               value_font = new Font("Monospaced", Font.PLAIN, 24);
                setLayout(layout);
 
                /* Elements in descent display */
index b5b2777e7885bbc79071faae7fd4238e0563a446..375965b904d68364e495a3c2081ab0de46dbad64 100644 (file)
@@ -69,8 +69,10 @@ public class AltosDisplayThread extends Thread {
                            state.state < Altos.ao_flight_landed &&
                            state.range >= 0)
                        {
-                               voice.speak("Height %d, bearing %d, elevation %d, range %d.\n",
+                               voice.speak("Height %d, bearing %s %d, elevation %d, range %d.\n",
                                            (int) (state.height + 0.5),
+                        state.from_pad.bearing_words(
+                            AltosGreatCircle.BEARING_VOICE),
                                            (int) (state.from_pad.bearing + 0.5),
                                            (int) (state.elevation + 0.5),
                                            (int) (state.range + 0.5));
index 558b0395abb3bc126a04f6d8e0e969c2883401e3..3581c54c1ce8a6b14c5135ecb1839b656bc05ec6 100644 (file)
@@ -122,6 +122,8 @@ public class AltosFlightUI extends JFrame implements AltosFlightDisplay {
        }
 
        public AltosFlightUI(AltosVoice in_voice, AltosFlightReader in_reader, final int serial) {
+        AltosPreferences.init(this);
+
                voice = in_voice;
                reader = in_reader;
 
index 07c02c16c34c17d665335ff3c657482a289a4a62..aa6ae3b9b0017ac47be6fca59fbdc00c7b7b00fe 100644 (file)
@@ -30,6 +30,31 @@ public class AltosGreatCircle {
        static final double rad = Math.PI / 180;
        static final double earth_radius = 6371.2 * 1000;       /* in meters */
 
+    static int BEARING_LONG = 0;
+    static int BEARING_SHORT = 1;
+    static int BEARING_VOICE = 2;
+    String bearing_words(int length) {
+        String [][] bearing_string = {
+          {
+            "North", "North North East", "North East", "East North East",
+            "East", "East South East", "South East", "South South East",
+            "South", "South South West", "South West", "West South West",
+            "West", "West North West", "North West", "North North West"
+          }, {
+            "N", "NNE", "NE", "ENE",
+            "E", "ESE", "SE", "SSE",
+            "S", "SSW", "SW", "WSW",
+            "W", "WNW", "NW", "NNW"
+          }, {
+            "north", "nor nor east", "north east", "east nor east",
+            "east", "east sow east", "south east", "sow sow east",
+            "south", "sow sow west", "south west", "west sow west",
+            "west", "west nor west", "north west", "nor nor west "
+          }
+        };
+        return bearing_string[length][(int)((bearing / 90 * 8 + 1) / 2)%16];
+    }
+
        public AltosGreatCircle (double start_lat, double start_lon,
                                 double end_lat, double end_lon)
        {
index 9964ab101b6dbb3258a0b6fb132f8e7e45dc47f4..2f326e07bc8693e45a5f5c66a6c9df8b5275759f 100644 (file)
@@ -37,8 +37,8 @@ public class AltosInfoTable {
        private AltosFlightInfoTableModel model[];
        private Box                       ibox[];
 
-       private Font infoLabelFont = new Font("SansSerif", Font.PLAIN, 14);
-       private Font infoValueFont = new Font("Monospaced", Font.PLAIN, 14);
+       private Font infoLabelFont = new Font("SansSerif", Font.PLAIN, 12);
+       private Font infoValueFont = new Font("Monospaced", Font.PLAIN, 12);
 
        static final int info_columns = 3;
        static final int info_rows = 17;
index 4b74aaa35dbc6a28596438b20dea0864f8288688..d170ccad4574d11962b1e2c77dcee52ea3c9d28d 100644 (file)
@@ -58,8 +58,8 @@ public class AltosLanded extends JComponent implements AltosFlightDisplay {
                        layout.setConstraints(label, c);
                        add(label);
 
-                       value = new JTextField(20);
-                       value.setFont(label_font);
+                       value = new JTextField(30);
+                       value.setFont(value_font);
                        value.setHorizontalAlignment(SwingConstants.RIGHT);
                        c.gridx = 1; c.gridy = y;
                        c.anchor = GridBagConstraints.WEST;
@@ -193,7 +193,7 @@ public class AltosLanded extends JComponent implements AltosFlightDisplay {
                layout = new GridBagLayout();
 
                label_font = new Font("Dialog", Font.PLAIN, 24);
-               value_font = new Font("Monospace", Font.PLAIN, 24);
+               value_font = new Font("Monospaced", Font.PLAIN, 24);
                setLayout(layout);
 
                /* Elements in descent display */
index 08e6b4f82b0e9f159da82d2043aa369a123a6949..2fa38412c7c4a677af367f1153e5978882349412 100644 (file)
@@ -70,4 +70,4 @@ public class AltosLights extends JComponent {
                add(green);
                green.set(false);
        }
-}
\ No newline at end of file
+}
index 7b72be20cbea4fb019a726d8fe0e7878cff4c7f9..da047072dd5d0ca52e29859b234e9ab76978f185 100644 (file)
@@ -64,8 +64,8 @@ public class AltosPad extends JComponent implements AltosFlightDisplay {
                        layout.setConstraints(label, c);
                        add(label);
 
-                       value = new JTextField(10);
-                       value.setFont(label_font);
+                       value = new JTextField(15);
+                       value.setFont(value_font);
                        value.setHorizontalAlignment(SwingConstants.RIGHT);
                        c.gridx = 2; c.gridy = y;
                        c.anchor = GridBagConstraints.WEST;
@@ -95,8 +95,8 @@ public class AltosPad extends JComponent implements AltosFlightDisplay {
                        layout.setConstraints(label, c);
                        add(label);
 
-                       value = new JTextField(20);
-                       value.setFont(label_font);
+                       value = new JTextField(30);
+                       value.setFont(value_font);
                        value.setHorizontalAlignment(SwingConstants.RIGHT);
                        c.gridx = 2; c.gridy = y;
                        c.anchor = GridBagConstraints.EAST;
index ded9e733441015274797cdf4834812622151f292..2861444da7b5e9008e875d3285d7f225226ea18a 100644 (file)
@@ -456,7 +456,26 @@ public class AltosUI extends JFrame {
        public static void main(final String[] args) {
                int     process = 0;
                /* Handle batch-mode */
-               if (args.length > 0) {
+        if (args.length == 2 && args[0].equals("--replay")) {
+            String filename = args[1];
+            FileInputStream in;
+            try {
+                in = new FileInputStream(filename);
+            } catch (Exception e) {
+                System.out.printf("Failed to open file '%s'\n", filename);
+                return;
+            }
+            AltosRecordIterable recs;
+            AltosReplayReader reader;
+            if (filename.endsWith("eeprom")) {
+              recs = new AltosEepromIterable(in);
+            } else {
+              recs = new AltosTelemetryIterable(in); 
+            }
+            reader = new AltosReplayReader(recs.iterator(), filename);
+            new AltosFlightUI(new AltosVoice(), reader);
+            return;
+        } else if (args.length > 0) {
                        for (int i = 0; i < args.length; i++) {
                                if (args[i].equals("--kml"))
                                        process |= process_kml;