X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=altosui%2FAltosUI.java;h=56e46436beaafccc2261cd3438852ce48a61bf74;hb=2b3c6806a3039ac8c4c1a1e2d6715b0cdc5b9632;hp=26591738440a197dbde1d60cb1241644b06296bc;hpb=0da4e201041a4420f273c2e0cda77eea78099518;p=fw%2Faltos diff --git a/altosui/AltosUI.java b/altosui/AltosUI.java index 26591738..56e46436 100644 --- a/altosui/AltosUI.java +++ b/altosui/AltosUI.java @@ -23,10 +23,10 @@ import java.awt.event.*; import javax.swing.*; import java.io.*; import java.util.concurrent.*; -import org.altusmetrum.altoslib_12.*; -import org.altusmetrum.altosuilib_12.*; +import org.altusmetrum.altoslib_13.*; +import org.altusmetrum.altosuilib_13.*; -public class AltosUI extends AltosUIFrame { +public class AltosUI extends AltosUIFrame implements AltosEepromGrapher { public AltosVoice voice = new AltosVoice(); public static boolean load_library(Frame frame) { @@ -102,7 +102,7 @@ public class AltosUI extends AltosUIFrame { /* OSXAdapter interfaces */ public void macosx_file_handler(String path) { - process_graph(new File(path)); + process_graph(null, new File(path)); } public void macosx_quit_handler() { @@ -276,7 +276,7 @@ public class AltosUI extends AltosUIFrame { } void ConfigureTeleMetrum() { - new AltosConfig(AltosUI.this); + new AltosConfigFC(AltosUI.this); } void ConfigureTeleDongle() { @@ -320,8 +320,17 @@ public class AltosUI extends AltosUIFrame { /* Connect to TeleMetrum, either directly or through * a TeleDongle over the packet link */ + + public void graph_flights(AltosEepromList flights) { + for (AltosEepromLog flight : flights) { + if (flight.graph_selected && flight.file != null) { + process_graph(this, flight.file); + } + } + } + private void SaveFlightData() { - new AltosEepromManage(AltosUI.this, AltosLib.product_any); + new AltosEepromManage(this, this, AltosLib.product_any); } private static AltosFlightSeries make_series(AltosRecordSet set) { @@ -345,6 +354,25 @@ public class AltosUI extends AltosUIFrame { new AltosCSVUI(AltosUI.this, series, chooser.file()); } + private static boolean graph_file(AltosUI altosui, AltosRecordSet set, File file) { + if (set == null) + return false; + if (!set.valid()) { + JOptionPane.showMessageDialog(altosui, + String.format("Failed to parse file %s", file), + "Graph Failed", + JOptionPane.ERROR_MESSAGE); + return false; + } + try { + new AltosGraphUI(set, file); + return true; + } catch (InterruptedException ie) { + } catch (IOException ie) { + } + return false; + } + /* Load a flight log CSV file and display a pretty graph. */ @@ -352,13 +380,7 @@ public class AltosUI extends AltosUIFrame { AltosDataChooser chooser; chooser = new AltosDataChooser(this); AltosRecordSet set = chooser.runDialog(); - if (set == null) - return; - try { - new AltosGraphUI(set, chooser.file()); - } catch (InterruptedException ie) { - } catch (IOException ie) { - } + graph_file(this, set, chooser.file()); } private void ConfigureAltosUI() { @@ -397,7 +419,7 @@ public class AltosUI extends AltosUIFrame { String message = ie.getMessage(); if (message == null) message = String.format("%s (I/O error)", input.toString()); - System.err.printf("%s\n", message); + System.err.printf("%s: %s\n", input.toString(), message); } return null; } @@ -408,6 +430,7 @@ public class AltosUI extends AltosUIFrame { static final int process_graph = 3; static final int process_replay = 4; static final int process_summary = 5; + static final int process_oneline = 6; static boolean process_csv(File input) { AltosRecordSet set = record_set(input); @@ -467,17 +490,9 @@ public class AltosUI extends AltosUIFrame { return true; } - static boolean process_graph(File file) { + static boolean process_graph(AltosUI altosui, File file) { AltosRecordSet set = record_set(file); - if (set == null) - return false; - try { - new AltosGraphUI(set, file); - return true; - } catch (InterruptedException ie) { - } catch (IOException ie) { - } - return false; + return graph_file(altosui, set, file); } static boolean process_summary(File file) { @@ -520,11 +535,31 @@ public class AltosUI extends AltosUIFrame { System.out.printf("Main rate: %6.0f m/s %6.0f ft/s\n", stats.state_speed[Altos.ao_flight_main], AltosConvert.meters_to_feet(stats.state_speed[Altos.ao_flight_main])); - if (stats.state_end[Altos.ao_flight_main] != AltosLib.MISSING && - stats.state_start[Altos.ao_flight_boost] != AltosLib.MISSING) + if (stats.landed_time != AltosLib.MISSING && + stats.boost_time != AltosLib.MISSING && + stats.landed_time > stats.boost_time) System.out.printf("Flight time: %6.0f s\n", - stats.state_end[Altos.ao_flight_main] - - stats.state_start[Altos.ao_flight_boost]); + stats.landed_time - + stats.boost_time); + System.out.printf("\n"); + return true; + } + + static boolean process_oneline(File file) { + AltosRecordSet set = record_set(file); + if (set == null) + return false; + System.out.printf("%s", file.toString()); + AltosFlightSeries series = make_series(set); + AltosFlightStats stats = new AltosFlightStats(series); + if (stats.max_height != AltosLib.MISSING) + System.out.printf(" height %6.0f m", stats.max_height); + if (stats.max_speed != AltosLib.MISSING) + System.out.printf(" speed %6.0f m/s", stats.max_speed); + if (stats.state_enter_speed[AltosLib.ao_flight_drogue] != AltosLib.MISSING) + System.out.printf(" drogue-deploy %6.0f m/s", stats.state_enter_speed[AltosLib.ao_flight_drogue]); + if (stats.max_acceleration != AltosLib.MISSING) + System.out.printf(" accel %6.0f m/s²", stats.max_acceleration); System.out.printf("\n"); return true; } @@ -535,6 +570,7 @@ public class AltosUI extends AltosUIFrame { System.out.printf(" --replay \t\trelive the glory of past flights \n"); System.out.printf(" --graph \t\tgraph a flight\n"); System.out.printf(" --summary \t\tText summary of a flight\n"); + System.out.printf(" --oneline \t\tOne line summary of a flight\n"); System.out.printf(" --csv\tgenerate comma separated output for spreadsheets, etc\n"); System.out.printf(" --kml\tgenerate KML output for use with Google Earth\n"); System.exit(code); @@ -571,6 +607,8 @@ public class AltosUI extends AltosUIFrame { process = process_graph; else if (args[i].equals("--summary")) process = process_summary; + else if (args[i].equals("--oneline")) + process = process_oneline; else if (args[i].startsWith("--")) help(1); else { @@ -580,7 +618,7 @@ public class AltosUI extends AltosUIFrame { if (altosui == null) altosui = new AltosUI(); case process_graph: - if (!process_graph(file)) + if (!process_graph(null, file)) ++errors; break; case process_replay: @@ -599,6 +637,10 @@ public class AltosUI extends AltosUIFrame { if (!process_summary(file)) ++errors; break; + case process_oneline: + if (!process_oneline(file)) + ++errors; + break; } } }