altosui: Show GPS max height in flight stats window of graph
[fw/altos] / altosui / AltosFlightStatsTable.java
index 87ba6aa8ae57f905ac225751a042c380551d9752..cb0c1562bf7b73c95ad2cdb123ac600e5aab7eab 100644 (file)
 package altosui;
 
 import java.awt.*;
-import java.awt.event.*;
 import javax.swing.*;
-import javax.swing.filechooser.FileNameExtensionFilter;
-import javax.swing.table.*;
-import java.io.*;
-import java.util.*;
-import java.text.*;
-import java.util.prefs.*;
-import java.util.concurrent.*;
-import org.altusmetrum.AltosLib.*;
+import org.altusmetrum.altoslib_3.*;
 
 public class AltosFlightStatsTable extends JComponent {
        GridBagLayout   layout;
@@ -66,6 +58,17 @@ public class AltosFlightStatsTable extends JComponent {
 
        }
 
+       static String pos(double p, String pos, String neg) {
+               String  h = pos;
+               if (p < 0) {
+                       h = neg;
+                       p = -p;
+               }
+               int deg = (int) Math.floor(p);
+               double min = (p - Math.floor(p)) * 60.0;
+               return String.format("%s %4d° %9.6f'", h, deg, min);
+       }
+
        public AltosFlightStatsTable(AltosFlightStats stats) {
                layout = new GridBagLayout();
 
@@ -73,20 +76,31 @@ public class AltosFlightStatsTable extends JComponent {
                int y = 0;
                new FlightStat(layout, y++, "Serial", String.format("%d", stats.serial));
                new FlightStat(layout, y++, "Flight", String.format("%d", stats.flight));
-               if (stats.year > 0)
-                       new FlightStat(layout, y++, "Date",
-                                      String.format("%04d-%02d-%02d", stats.year, stats.month, stats.day));
-               if (stats.hour > 0)
-                       new FlightStat(layout, y++, "Time",
+               if (stats.year != AltosLib.MISSING && stats.hour != AltosLib.MISSING)
+                       new FlightStat(layout, y++, "Date/Time",
+                                      String.format("%04d-%02d-%02d", stats.year, stats.month, stats.day),
                                       String.format("%02d:%02d:%02d UTC", stats.hour, stats.minute, stats.second));
+               else {
+                       if (stats.year != AltosLib.MISSING)
+                               new FlightStat(layout, y++, "Date",
+                                              String.format("%04d-%02d-%02d", stats.year, stats.month, stats.day));
+                       if (stats.hour != AltosLib.MISSING)
+                               new FlightStat(layout, y++, "Time",
+                                              String.format("%02d:%02d:%02d UTC", stats.hour, stats.minute, stats.second));
+               }
                new FlightStat(layout, y++, "Maximum height",
                               String.format("%5.0f m", stats.max_height),
                               String.format("%5.0f ft", AltosConvert.meters_to_feet(stats.max_height)));
+               if (stats.max_gps_height != AltosLib.MISSING) {
+                       new FlightStat(layout, y++, "Maximum GPS height",
+                                      String.format("%5.0f m", stats.max_gps_height),
+                                      String.format("%5.0f ft", AltosConvert.meters_to_feet(stats.max_gps_height)));
+               }
                new FlightStat(layout, y++, "Maximum speed",
                               String.format("%5.0f m/s", stats.max_speed),
                               String.format("%5.0f mph", AltosConvert.meters_to_mph(stats.max_speed)),
                               String.format("Mach %4.1f", AltosConvert.meters_to_mach(stats.max_speed)));
-               if (stats.max_acceleration != AltosRecord.MISSING) {
+               if (stats.max_acceleration != AltosLib.MISSING) {
                        new FlightStat(layout, y++, "Maximum boost acceleration",
                                       String.format("%5.0f m/s²", stats.max_acceleration),
                                       String.format("%5.0f ft/s²", AltosConvert.meters_to_feet(stats.max_acceleration)),
@@ -97,19 +111,34 @@ public class AltosFlightStatsTable extends JComponent {
                                       String.format("%5.0f G", AltosConvert.meters_to_g(stats.state_accel[Altos.ao_flight_boost])));
                }
                new FlightStat(layout, y++, "Drogue descent rate",
-                              String.format("%5.0f m/s", stats.state_baro_speed[Altos.ao_flight_drogue]),
-                              String.format("%5.0f ft/s", AltosConvert.meters_to_feet(stats.state_baro_speed[Altos.ao_flight_drogue])));
+                              String.format("%5.0f m/s", stats.state_speed[Altos.ao_flight_drogue]),
+                              String.format("%5.0f ft/s", AltosConvert.meters_to_feet(stats.state_speed[Altos.ao_flight_drogue])));
                new FlightStat(layout, y++, "Main descent rate",
-                              String.format("%5.0f m/s", stats.state_baro_speed[Altos.ao_flight_main]),
-                              String.format("%5.0f ft/s", AltosConvert.meters_to_feet(stats.state_baro_speed[Altos.ao_flight_main])));
-               for (int s = Altos.ao_flight_boost; s <= Altos.ao_flight_main; s++) {
-                       new FlightStat(layout, y++, String.format("%s time", AltosLib.state_name_capital(s)),
-                                      String.format("%6.0f s", stats.state_end[s] - stats.state_start[s]));
-               }
-               new FlightStat(layout, y++, "Flight Time",
-                              String.format("%6.0f s", stats.state_end[Altos.ao_flight_main] -
+                              String.format("%5.0f m/s", stats.state_speed[Altos.ao_flight_main]),
+                              String.format("%5.0f ft/s", AltosConvert.meters_to_feet(stats.state_speed[Altos.ao_flight_main])));
+               new FlightStat(layout, y++, "Ascent time",
+                              String.format("%6.1f s %s", stats.state_end[AltosLib.ao_flight_boost] - stats.state_start[AltosLib.ao_flight_boost],
+                                            AltosLib.state_name(Altos.ao_flight_boost)),
+                              String.format("%6.1f s %s", stats.state_end[AltosLib.ao_flight_fast] - stats.state_start[AltosLib.ao_flight_fast],
+                                            AltosLib.state_name(Altos.ao_flight_fast)),
+                              String.format("%6.1f s %s", stats.state_end[AltosLib.ao_flight_coast] - stats.state_start[AltosLib.ao_flight_coast],
+                                            AltosLib.state_name(Altos.ao_flight_coast)));
+               new FlightStat(layout, y++, "Descent time",
+                              String.format("%6.1f s %s", stats.state_end[AltosLib.ao_flight_drogue] - stats.state_start[AltosLib.ao_flight_drogue],
+                                            AltosLib.state_name(Altos.ao_flight_drogue)),
+                              String.format("%6.1f s %s", stats.state_end[AltosLib.ao_flight_main] - stats.state_start[AltosLib.ao_flight_main],
+                                            AltosLib.state_name(Altos.ao_flight_main)));
+               new FlightStat(layout, y++, "Flight time",
+                              String.format("%6.1f s", stats.state_end[Altos.ao_flight_main] -
                                             stats.state_start[Altos.ao_flight_boost]));
-               
+               if (stats.has_gps) {
+                       new FlightStat(layout, y++, "Pad location",
+                                      pos(stats.pad_lat,"N","S"),
+                                      pos(stats.pad_lon,"E","W"));
+                       new FlightStat(layout, y++, "Last reported location",
+                                      pos(stats.lat,"N","S"),
+                                      pos(stats.lon,"E","W"));
+               }
        }
        
 }
\ No newline at end of file