X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=blobdiff_plain;f=micropeak%2FMicroPeak.java;h=607bf20c678607f2f5621a230338ea5c000ed04d;hp=d4252fa95cf9bd0fa01a9cfbf7fd98a8a663d777;hb=a61217f0a6d0ef48b6471f632c4600255867e831;hpb=9e4c5b0a6ed3594cff6ab71398c172daa7c67177 diff --git a/micropeak/MicroPeak.java b/micropeak/MicroPeak.java index d4252fa9..607bf20c 100644 --- a/micropeak/MicroPeak.java +++ b/micropeak/MicroPeak.java @@ -3,7 +3,8 @@ * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; version 2 of the License. + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of @@ -23,14 +24,15 @@ import javax.swing.*; import java.io.*; import java.util.concurrent.*; import java.util.*; -import org.altusmetrum.AltosLib.*; -import org.altusmetrum.altosuilib.*; +import org.altusmetrum.altoslib_12.*; +import org.altusmetrum.altosuilib_12.*; public class MicroPeak extends MicroFrame implements ActionListener, ItemListener { File filename; - MicroGraph graph; - MicroStatsTable stats; + AltosGraph graph; + AltosUIEnable enable; + AltosFlightStatsTable statsTable; MicroRaw raw; MicroData data; Container container; @@ -44,8 +46,12 @@ public class MicroPeak extends MicroFrame implements ActionListener, ItemListene return mp.SetData(data); } this.data = data; - graph.setData(data); - stats.setData(data); + if (data.flight_series == null) + System.out.printf("no data in flight\n"); + if (data.flight_stats == null) + System.out.printf("no stats in flight\n"); + graph.set_data(data.flight_stats, data.flight_series); + statsTable.set_stats(data.flight_stats); raw.setData(data); setTitle(data.name); return this; @@ -56,40 +62,46 @@ public class MicroPeak extends MicroFrame implements ActionListener, ItemListene setTitle(name); } - private void RunFile(InputStream input, String name) { + private static MicroData ReadFile(File filename) throws IOException, FileNotFoundException { + MicroData data = null; + FileInputStream fis = new FileInputStream(filename); try { - MicroData data = new MicroData(input, name); - SetData(data); - } catch (IOException ioe) { - JOptionPane.showMessageDialog(this, - ioe.getMessage(), - "File Read Error", - JOptionPane.ERROR_MESSAGE); + data = new MicroData((InputStream) fis, filename.getName()); + AltosUIPreferences.set_last_logdir(filename); + } catch (MicroData.NonHexcharException nhe) { + data = null; + } catch (MicroData.FileEndedException nhe) { + data = null; } catch (InterruptedException ie) { + data = null; + } finally { + fis.close(); } - try { - input.close(); - } catch (IOException ioe) { - } + return data; } private void OpenFile(File filename) { try { - RunFile (new FileInputStream(filename), filename.getName()); + SetData(ReadFile(filename)); } catch (FileNotFoundException fne) { JOptionPane.showMessageDialog(this, fne.getMessage(), "Cannot open file", JOptionPane.ERROR_MESSAGE); + } catch (IOException ioe) { + JOptionPane.showMessageDialog(this, + ioe.getMessage(), + "File Read Error", + JOptionPane.ERROR_MESSAGE); } } private void SelectFile() { MicroFileChooser chooser = new MicroFileChooser(this); - InputStream input = chooser.runDialog(); + File file = chooser.runDialog(); - if (input != null) - RunFile(input, chooser.filename); + if (file != null) + OpenFile(file); } private void Preferences() { @@ -98,7 +110,7 @@ public class MicroPeak extends MicroFrame implements ActionListener, ItemListene private void DownloadData() { AltosDevice device = MicroDeviceDialog.show(this); - + if (device != null) new MicroDownload(this, device); } @@ -109,6 +121,7 @@ public class MicroPeak extends MicroFrame implements ActionListener, ItemListene "No data", JOptionPane.INFORMATION_MESSAGE); } + private void Save() { if (data == null) { no_data(); @@ -118,7 +131,7 @@ public class MicroPeak extends MicroFrame implements ActionListener, ItemListene if (save.runDialog()) SetName(data.name); } - + private void Export() { if (data == null) { no_data(); @@ -128,6 +141,30 @@ public class MicroPeak extends MicroFrame implements ActionListener, ItemListene export.runDialog(); } + private static void CommandGraph(File file) { + MicroPeak m = new MicroPeak(); + m.OpenFile(file); + } + + private static void CommandExport(File file) { + try { + MicroData d = ReadFile(file); + if (d != null) { + File csv = new File(AltosLib.replace_extension(file.getPath(), ".csv")); + try { + System.out.printf ("Export \"%s\" to \"%s\"\n", file.getPath(), csv.getPath()); + MicroExport.export(csv, d); + } catch (FileNotFoundException fe) { + System.err.printf("Cannot create file \"%s\" (%s)\n", csv.getName(), fe.getMessage()); + } catch (IOException ie) { + System.err.printf("Cannot write file \"%s\" (%s)\n", csv.getName(), ie.getMessage()); + } + } + } catch (IOException ie) { + System.err.printf("Cannot read file \"%s\" (%s)\n", file.getName(), ie.getMessage()); + } + } + private void Close() { setVisible(false); dispose(); @@ -156,10 +193,25 @@ public class MicroPeak extends MicroFrame implements ActionListener, ItemListene public void itemStateChanged(ItemEvent e) { } + /* OSXAdapter interfaces */ + public void macosx_file_handler(String path) { + CommandGraph(new File(path)); + } + + public void macosx_quit_handler() { + System.exit(0); + } + + public void macosx_preferences_handler() { + Preferences(); + } + public MicroPeak() { ++number_of_windows; + register_for_macosx_events(); + AltosUIPreferences.set_component(this); container = getContentPane(); @@ -201,19 +253,27 @@ public class MicroPeak extends MicroFrame implements ActionListener, ItemListene fileMenu.add(exitAction); exitAction.addActionListener(this); + JButton downloadButton = new JButton ("Download"); + downloadButton.addActionListener(this); + menuBar.add(downloadButton); + setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { + statsTable.tell_closing(); Close(); } }); - graph = new MicroGraph(); - stats = new MicroStatsTable(); + enable = new AltosUIEnable(); + + graph = new AltosGraph(enable); + statsTable = new AltosFlightStatsTable(); raw = new MicroRaw(); pane.add(graph.panel, "Graph"); - pane.add(stats, "Statistics"); + pane.add(enable, "Configure Graph"); + pane.add(statsTable, "Statistics"); JScrollPane scroll = new JScrollPane(raw); pane.add(scroll, "Raw Data"); pane.doLayout(); @@ -229,12 +289,20 @@ public class MicroPeak extends MicroFrame implements ActionListener, ItemListene ps.height += i.top + i.bottom; // setPreferredSize(ps); setSize(ps); - setLocationByPlatform(true); setVisible(true); } + public static void help(int code) { + System.out.printf("Usage: micropeak [OPTION] ... [FILE]...\n"); + System.out.printf(" Options:\n"); + System.out.printf(" --csv\tgenerate comma separated output for spreadsheets, etc\n"); + System.out.printf(" --graph\tgraph a flight\n"); + System.exit(code); + } + public static void main(final String[] args) { boolean opened = false; + boolean graphing = true; try { UIManager.setLookAndFeel(AltosUIPreferences.look_and_feel()); @@ -242,11 +310,30 @@ public class MicroPeak extends MicroFrame implements ActionListener, ItemListene } for (int i = 0; i < args.length; i++) { - MicroPeak m = new MicroPeak(); - m.OpenFile(new File(args[i])); - opened = true; + if (args[i].equals("--help")) + help(0); + else if (args[i].equals("--export")) + graphing = false; + else if (args[i].equals("--graph")) + graphing = true; + else if (args[i].startsWith("--")) + help(1); + else { + File file = new File(args[i]); + try { + if (graphing) + CommandGraph(file); + else + CommandExport(file); + opened = true; + } catch (Exception e) { + System.err.printf("Error processing \"%s\": %s %s\n", + file.getName(), e.toString(), e.getMessage()); + e.printStackTrace(); + } + } } if (!opened) new MicroPeak(); } -} \ No newline at end of file +}