first cut at turnon scripts for EasyTimer v2
[fw/altos] / micropeak / MicroPeak.java
index 9023f452df7f4d4578beda8b13b857c1351723e2..96fb33ba132d6a368e2436dfedb11fd98eaae256 100644 (file)
@@ -24,22 +24,47 @@ import javax.swing.*;
 import java.io.*;
 import java.util.concurrent.*;
 import java.util.*;
-import org.altusmetrum.altoslib_11.*;
-import org.altusmetrum.altosuilib_11.*;
+import org.altusmetrum.altoslib_14.*;
+import org.altusmetrum.altosuilib_14.*;
 
-public class MicroPeak extends MicroFrame implements ActionListener, ItemListener {
+public class MicroPeak extends MicroFrame implements ActionListener, ItemListener, AltosFilterListener {
 
        File            filename;
-       MicroGraph      graph;
+       AltosGraph      graph;
        AltosUIEnable   enable;
-       MicroStatsTable statsTable;
+       AltosFlightStatsTable   statsTable;
        MicroRaw        raw;
        MicroData       data;
-       MicroStats      stats;
        Container       container;
        JTabbedPane     pane;
+       JMenuBar        menu_bar;
        static int      number_of_windows;
 
+       /* File menu */
+       final static String     open_command = "open";
+       final static String     save_command = "save";
+       final static String     export_command = "export";
+       final static String     preferences_command = "preferences";
+       final static String     close_command = "close";
+       final static String     exit_command = "exit";
+
+       static final String[][] file_menu_entries = new String[][] {
+               { "Open",               open_command },
+               { "Save a Copy",        save_command },
+               { "Export Data",        export_command },
+               { "Preferences",        preferences_command },
+               { "Close",              close_command },
+               { "Exit",               exit_command },
+       };
+
+       /* Download menu */
+       final static String     download_command = "download";
+       final static String     download_label = "Download";
+
+       static final String[][] download_menu_entries = new String[][] {
+               { download_label,       download_command }
+       };
+
        MicroPeak SetData(MicroData data) {
                MicroPeak       mp = this;
                if (this.data != null) {
@@ -47,9 +72,12 @@ public class MicroPeak extends MicroFrame implements ActionListener, ItemListene
                        return mp.SetData(data);
                }
                this.data = data;
-               stats = new MicroStats(data);
-               graph.setDataSet(data);
-               statsTable.setStats(stats);
+               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;
@@ -108,9 +136,18 @@ public class MicroPeak extends MicroFrame implements ActionListener, ItemListene
 
        private void DownloadData() {
                AltosDevice     device = MicroDeviceDialog.show(this);
+               MicroSerial     serial = null;
+               try {
+                       serial = new MicroSerial(device);
+               } catch (FileNotFoundException fe) {
+                       JOptionPane.showMessageDialog(this,
+                                                     fe.getMessage(),
+                                                     "Cannot open device",
+                                                     JOptionPane.ERROR_MESSAGE);
+                       return;
+               }
 
-               if (device != null)
-                       new MicroDownload(this, device);
+               new MicroDownload(this, device, serial);
        }
 
        private void no_data() {
@@ -172,20 +209,20 @@ public class MicroPeak extends MicroFrame implements ActionListener, ItemListene
        }
 
        public void actionPerformed(ActionEvent ev) {
-               if ("Exit".equals(ev.getActionCommand()))
-                       System.exit(0);
-               else if ("Close".equals(ev.getActionCommand()))
-                       Close();
-               else if ("Open".equals(ev.getActionCommand()))
+               if (open_command.equals(ev.getActionCommand()))
                        SelectFile();
-               else if ("Download".equals(ev.getActionCommand()))
-                       DownloadData();
-               else if ("Export".equals(ev.getActionCommand()))
+               else if (save_command.equals(ev.getActionCommand()))
+                       Save();
+               else if (export_command.equals(ev.getActionCommand()))
                        Export();
-               else if ("Preferences".equals(ev.getActionCommand()))
+               else if (preferences_command.equals(ev.getActionCommand()))
                        Preferences();
-               else if ("Save a Copy".equals(ev.getActionCommand()))
-                       Save();
+               else if (close_command.equals(ev.getActionCommand()))
+                       Close();
+               else if (exit_command.equals(ev.getActionCommand()))
+                       System.exit(0);
+               else if (download_command.equals(ev.getActionCommand()))
+                       DownloadData();
        }
 
        public void itemStateChanged(ItemEvent e) {
@@ -204,6 +241,47 @@ public class MicroPeak extends MicroFrame implements ActionListener, ItemListene
                Preferences();
        }
 
+       public void filter_changed(double speed_filter, double accel_filter) {
+               data.flight_series.set_filter(speed_filter, accel_filter);
+               graph.filter_changed();
+               data.flight_stats = new AltosFlightStats(data.flight_series);
+               statsTable.filter_changed(data.flight_stats);
+       }
+
+       public double speed_filter() {
+               if (data != null && data.flight_series != null)
+                       return data.flight_series.speed_filter_width;
+               return 4.0;
+       }
+
+       public double accel_filter() {
+               if (data != null && data.flight_series != null)
+                       return data.flight_series.accel_filter_width;
+               return 1.0;
+       }
+
+       private void add_menu(JMenu menu, String label, String action) {
+               JMenuItem       item = new JMenuItem(label);
+               menu.add(item);
+               item.addActionListener(this);
+               item.setActionCommand(action);
+       }
+
+
+       private void make_menu(String label, String[][] items) {
+               JMenu   menu = new JMenu(label);
+               for (int i = 0; i < items.length; i++) {
+                       if (MAC_OS_X) {
+                               if (items[i][1].equals("exit"))
+                                       continue;
+                               if (items[i][1].equals("preferences"))
+                                       continue;
+                       }
+                       add_menu(menu, items[i][0], items[i][1]);
+               }
+               menu_bar.add(menu);
+       }
+
        public MicroPeak() {
 
                ++number_of_windows;
@@ -217,56 +295,34 @@ public class MicroPeak extends MicroFrame implements ActionListener, ItemListene
 
                setTitle("MicroPeak");
 
-               JMenuBar menuBar = new JMenuBar();
-               setJMenuBar(menuBar);
+               menu_bar = new JMenuBar();
+               setJMenuBar(menu_bar);
 
-               JMenu fileMenu = new JMenu("File");
-               menuBar.add(fileMenu);
+               make_menu("File", file_menu_entries);
 
-               JMenuItem openAction = new JMenuItem("Open");
-               fileMenu.add(openAction);
-               openAction.addActionListener(this);
-
-               JMenuItem downloadAction = new JMenuItem("Download");
-               fileMenu.add(downloadAction);
-               downloadAction.addActionListener(this);
-
-               JMenuItem saveAction = new JMenuItem("Save a Copy");
-               fileMenu.add(saveAction);
-               saveAction.addActionListener(this);
-
-               JMenuItem exportAction = new JMenuItem("Export");
-               fileMenu.add(exportAction);
-               exportAction.addActionListener(this);
-
-               JMenuItem preferencesAction = new JMenuItem("Preferences");
-               fileMenu.add(preferencesAction);
-               preferencesAction.addActionListener(this);
-
-               JMenuItem closeAction = new JMenuItem("Close");
-               fileMenu.add(closeAction);
-               closeAction.addActionListener(this);
-
-               JMenuItem exitAction = new JMenuItem("Exit");
-               fileMenu.add(exitAction);
-               exitAction.addActionListener(this);
-
-               JButton downloadButton = new JButton ("Download");
-               downloadButton.addActionListener(this);
-               menuBar.add(downloadButton);
+               if (MAC_OS_X) {
+                       make_menu(download_label, download_menu_entries);
+               } else {
+                       JButton download_button = new JButton (download_label);
+                       download_button.setActionCommand(download_command);
+                       download_button.addActionListener(this);
+                       menu_bar.add(download_button);
+               }
 
                setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
                addWindowListener(new WindowAdapter() {
                        @Override
                        public void windowClosing(WindowEvent e) {
                                statsTable.tell_closing();
+                               raw.tell_closing();
                                Close();
                        }
                });
 
-               enable = new AltosUIEnable();
-               graph = new MicroGraph(enable);
-               statsTable = new MicroStatsTable();
+               enable = new AltosUIEnable(this);
+
+               graph = new AltosGraph(enable);
+               statsTable = new AltosFlightStatsTable();
                raw = new MicroRaw();
                pane.add(graph.panel, "Graph");
                pane.add(enable, "Configure Graph");
@@ -284,8 +340,8 @@ public class MicroPeak extends MicroFrame implements ActionListener, ItemListene
                Dimension ps = pane.getPreferredSize();
                ps.width += i.left + i.right;
                ps.height += i.top + i.bottom;
-//             setPreferredSize(ps);
                setSize(ps);
+               pack();
                setVisible(true);
        }
 
@@ -324,8 +380,9 @@ public class MicroPeak extends MicroFrame implements ActionListener, ItemListene
                                                CommandExport(file);
                                        opened = true;
                                } catch (Exception e) {
-                                       System.err.printf("Error processing \"%s\": %s\n",
-                                                         file.getName(), e.getMessage());
+                                       System.err.printf("Error processing \"%s\": %s %s\n",
+                                                         file.getName(), e.toString(), e.getMessage());
+                                       e.printStackTrace();
                                }
                        }
                }