telegps: Hook up data download dialog
authorKeith Packard <keithp@keithp.com>
Thu, 29 May 2014 03:58:01 +0000 (20:58 -0700)
committerKeith Packard <keithp@keithp.com>
Thu, 29 May 2014 05:02:32 +0000 (22:02 -0700)
Signed-off-by: Keith Packard <keithp@keithp.com>
14 files changed:
altosui/AltosEepromDelete.java [deleted file]
altosui/AltosEepromManage.java [deleted file]
altosui/AltosEepromMonitor.java [deleted file]
altosui/AltosEepromMonitorUI.java [deleted file]
altosui/AltosEepromSelect.java [deleted file]
altosui/AltosUI.java
altosui/Makefile.am
altosuilib/AltosEepromDelete.java [new file with mode: 0644]
altosuilib/AltosEepromManage.java [new file with mode: 0644]
altosuilib/AltosEepromMonitor.java [new file with mode: 0644]
altosuilib/AltosEepromMonitorUI.java [new file with mode: 0644]
altosuilib/AltosEepromSelect.java [new file with mode: 0644]
altosuilib/Makefile.am
telegps/TeleGPS.java

diff --git a/altosui/AltosEepromDelete.java b/altosui/AltosEepromDelete.java
deleted file mode 100644 (file)
index df2ade7..0000000
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- * Copyright © 2011 Keith Packard <keithp@keithp.com>
- *
- * 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.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
- */
-
-package altosui;
-
-import java.awt.event.*;
-import javax.swing.*;
-import java.io.*;
-import java.util.concurrent.*;
-import org.altusmetrum.altosuilib_2.*;
-import org.altusmetrum.altoslib_4.*;
-
-public class AltosEepromDelete implements Runnable {
-       AltosEepromList         flights;
-       Thread                  eeprom_thread;
-       AltosSerial             serial_line;
-       boolean                 remote;
-       JFrame                  frame;
-       ActionListener          listener;
-       boolean                 success;
-
-       private void DeleteLog (AltosEepromLog log)
-               throws IOException, InterruptedException, TimeoutException {
-
-               if (flights.config_data.flight_log_max != 0 || flights.config_data.log_format != 0) {
-
-                       /* Devices with newer firmware can erase the
-                        * flash blocks containing each flight
-                        */
-                       serial_line.flush_input();
-                       serial_line.printf("d %d\n", log.flight);
-                       for (;;) {
-                               /* It can take a while to erase the flash... */
-                               String line = serial_line.get_reply(20000);
-                               if (line == null)
-                                       throw new TimeoutException();
-                               if (line.equals("Erased"))
-                                       break;
-                               if (line.startsWith("No such"))
-                                       throw new IOException(line);
-                       }
-               }
-       }
-
-       private void show_error_internal(String message, String title) {
-               JOptionPane.showMessageDialog(frame,
-                                             message,
-                                             title,
-                                             JOptionPane.ERROR_MESSAGE);
-       }
-
-       private void show_error(String in_message, String in_title) {
-               final String message = in_message;
-               final String title = in_title;
-               Runnable r = new Runnable() {
-                               public void run() {
-                                       try {
-                                               show_error_internal(message, title);
-                                       } catch (Exception ex) {
-                                       }
-                               }
-                       };
-               SwingUtilities.invokeLater(r);
-       }
-
-       public void run () {
-               success = false;
-               try {
-                       if (remote)
-                               serial_line.start_remote();
-
-                       for (AltosEepromLog log : flights) {
-                               if (log.selected) {
-                                       DeleteLog(log);
-                               }
-                       }
-                       success = true;
-               } catch (IOException ee) {
-                       show_error (ee.getLocalizedMessage(),
-                                   serial_line.device.toShortString());
-               } catch (InterruptedException ie) {
-               } catch (TimeoutException te) {
-                       show_error (String.format("Connection to \"%s\" failed",
-                                                 serial_line.device.toShortString()),
-                                   "Connection Failed");
-               } finally {
-                       try {
-                               if (remote)
-                                       serial_line.stop_remote();
-                       } catch (InterruptedException ie) {
-                       } finally {
-                               serial_line.flush_output();
-                               serial_line.close();
-                       }
-               }
-               if (listener != null) {
-                       Runnable r = new Runnable() {
-                                       public void run() {
-                                               try {
-                                                       listener.actionPerformed(new ActionEvent(this,
-                                                                                                success ? 1 : 0,
-                                                                                                "delete"));
-                                               } catch (Exception ex) {
-                                               }
-                                       }
-                               };
-                       SwingUtilities.invokeLater(r);
-               }
-       }
-
-       public void start() {
-               eeprom_thread = new Thread(this);
-               eeprom_thread.start();
-       }
-
-       public void addActionListener(ActionListener l) {
-               listener = l;
-       }
-
-       public AltosEepromDelete(JFrame given_frame,
-                                AltosSerial given_serial_line,
-                                boolean given_remote,
-                                AltosEepromList given_flights) {
-               frame = given_frame;
-               serial_line = given_serial_line;
-               remote = given_remote;
-               flights = given_flights;
-               success = false;
-       }
-}
diff --git a/altosui/AltosEepromManage.java b/altosui/AltosEepromManage.java
deleted file mode 100644 (file)
index aa43ab9..0000000
+++ /dev/null
@@ -1,242 +0,0 @@
-/*
- * Copyright © 2011 Keith Packard <keithp@keithp.com>
- *
- * 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.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
- */
-
-package altosui;
-
-import java.awt.event.*;
-import javax.swing.*;
-import java.io.*;
-import java.util.concurrent.*;
-import org.altusmetrum.altoslib_4.*;
-import org.altusmetrum.altosuilib_2.*;
-
-public class AltosEepromManage implements ActionListener {
-
-       JFrame                  frame;
-       boolean                 remote;
-       AltosDevice             device;
-       AltosSerial             serial_line;
-       AltosEepromList         flights;
-       AltosEepromDownload     download;
-       AltosEepromDelete       delete;
-
-       public void finish() {
-               if (serial_line != null) {
-                       try {
-                               serial_line.flush_input();
-                       } catch (InterruptedException ie) {
-                       }
-                       serial_line.close();
-                       serial_line = null;
-               }
-       }
-
-       private int countDeletedFlights() {
-               int count = 0;
-               for (AltosEepromLog flight : flights) {
-                       if (flight.selected)
-                               count++;
-               }
-               return count;
-       }
-
-       private String showDeletedFlights() {
-               String  result = "";
-
-               for (AltosEepromLog flight : flights) {
-                       if (flight.selected) {
-                               if (result.equals(""))
-                                       result = String.format("%d", flight.flight);
-                               else
-                                       result = String.format("%s, %d", result, flight.flight);
-                       }
-               }
-               return result;
-       }
-
-       public boolean download_done() {
-               AltosEepromSelect       select = new AltosEepromSelect(frame, flights, "Delete");
-
-               if (select.run()) {
-                       boolean any_selected = false;
-                       for (AltosEepromLog flight : flights)
-                               any_selected = any_selected || flight.selected;
-                       if (any_selected) {
-                               delete = new AltosEepromDelete(frame,
-                                                              serial_line,
-                                                              remote,
-                                                              flights);
-                               delete.addActionListener(this);
-                               /*
-                                * Start flight log delete
-                                */
-
-                               delete.start();
-                               return true;
-                       }
-               }
-               return false;
-       }
-
-       public void actionPerformed(ActionEvent e) {
-               String  cmd = e.getActionCommand();
-               boolean success = e.getID() != 0;
-               boolean running = false;
-
-               if (cmd.equals("download")) {
-                       if (success)
-                               running = download_done();
-               } else if (cmd.equals("delete")) {
-                       if (success) {
-                               JOptionPane.showMessageDialog(frame,
-                                                             String.format("%d flights erased: %s",
-                                                                           countDeletedFlights(),
-                                                                           showDeletedFlights()),
-                                                             serial_line.device.toShortString(),
-                                                             JOptionPane.INFORMATION_MESSAGE);
-                       }
-               }
-               if (!running)
-                       finish();
-       }
-
-       public void got_flights(AltosEepromList in_flights) {
-               boolean running = false;;
-
-               flights = in_flights;
-               try {
-                       if (flights.size() == 0) {
-                               JOptionPane.showMessageDialog(frame,
-                                                             String.format("No flights available on %d",
-                                                                           device.getSerial()),
-                                                             serial_line.device.toShortString(),
-                                                             JOptionPane.INFORMATION_MESSAGE);
-                       } else {
-                               AltosEepromSelect       select = new AltosEepromSelect(frame, flights, "Download");
-
-                               if (select.run()) {
-                                       boolean any_selected = false;
-                                       for (AltosEepromLog flight : flights)
-                                               any_selected = any_selected || flight.selected;
-                                       if (any_selected) {
-                                               AltosEepromMonitorUI monitor = new AltosEepromMonitorUI(frame);
-                                               monitor.addActionListener(this);
-                                               serial_line.set_frame(frame);
-                                               download = new AltosEepromDownload(monitor,
-                                                                                  serial_line,
-                                                                                  remote,
-                                                                                  flights);
-                                               /*
-                                                * Start flight log download
-                                                */
-
-                                               download.start();
-                                               running = true;
-                                       } else {
-                                               running = download_done();
-                                       }
-                               }
-                       }
-                       if (!running)
-                               finish();
-               } catch (Exception e) {
-                       got_exception(e);
-               }
-       }
-
-       public void got_exception(Exception e) {
-               if (e instanceof IOException) {
-                       IOException     ee = (IOException) e;
-                       JOptionPane.showMessageDialog(frame,
-                                                     device.toShortString(),
-                                                     ee.getLocalizedMessage(),
-                                                     JOptionPane.ERROR_MESSAGE);
-               } else if (e instanceof TimeoutException) {
-                       //TimeoutException te = (TimeoutException) e;
-                       JOptionPane.showMessageDialog(frame,
-                                                     String.format("Communications failed with \"%s\"",
-                                                                   device.toShortString()),
-                                                     "Cannot open target device",
-                                                     JOptionPane.ERROR_MESSAGE);
-               }
-               finish();
-       }
-
-       class EepromGetList implements Runnable {
-
-               AltosEepromManage       manage;
-
-               public void run () {
-                       Runnable r;
-                       try {
-                               flights = new AltosEepromList(serial_line, remote);
-                               r = new Runnable() {
-                                               public void run() {
-                                                       got_flights(flights);
-                                               }
-                                       };
-                       } catch (Exception e) {
-                               final Exception f_e = e;
-                               r = new Runnable() {
-                                               public void run() {
-                                                       got_exception(f_e);
-                                               }
-                                       };
-                       }
-                       SwingUtilities.invokeLater(r);
-               }
-
-               public EepromGetList(AltosEepromManage in_manage) {
-                       manage = in_manage;
-               }
-       }
-
-       public AltosEepromManage(JFrame given_frame) {
-
-               //boolean       running = false;
-
-               frame = given_frame;
-               device = AltosDeviceUIDialog.show(frame, Altos.product_any);
-
-               remote = false;
-
-               if (device != null) {
-                       try {
-                               serial_line = new AltosSerial(device);
-                               if (device.matchProduct(Altos.product_basestation))
-                                       remote = true;
-
-                               serial_line.set_frame(frame);
-
-                               EepromGetList   get_list = new EepromGetList(this);
-                               Thread          t = new Thread(get_list);
-                               t.start();
-                       } catch (FileNotFoundException ee) {
-                               JOptionPane.showMessageDialog(frame,
-                                                             ee.getMessage(),
-                                                             "Cannot open target device",
-                                                             JOptionPane.ERROR_MESSAGE);
-                       } catch (AltosSerialInUseException si) {
-                               JOptionPane.showMessageDialog(frame,
-                                                             String.format("Device \"%s\" already in use",
-                                                                           device.toShortString()),
-                                                             "Device in use",
-                                                             JOptionPane.ERROR_MESSAGE);
-                       }
-               }
-       }
-}
diff --git a/altosui/AltosEepromMonitor.java b/altosui/AltosEepromMonitor.java
deleted file mode 100644 (file)
index ce1c162..0000000
+++ /dev/null
@@ -1,252 +0,0 @@
-/*
- * Copyright © 2010 Keith Packard <keithp@keithp.com>
- *
- * 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.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
- */
-
-package altosui;
-
-import java.awt.*;
-import java.awt.event.*;
-import javax.swing.*;
-import org.altusmetrum.altosuilib_2.*;
-
-public class AltosEepromMonitor extends AltosUIDialog {
-
-       Container       pane;
-       Box             box;
-       JLabel          serial_label;
-       JLabel          flight_label;
-       JLabel          file_label;
-       JLabel          serial_value;
-       JLabel          flight_value;
-       JLabel          file_value;
-       JButton         cancel;
-       JProgressBar    pbar;
-       int             min_state, max_state;
-
-       public AltosEepromMonitor(JFrame owner, int in_min_state, int in_max_state) {
-               super (owner, "Download Flight Data", false);
-
-               GridBagConstraints c;
-               Insets il = new Insets(4,4,4,4);
-               Insets ir = new Insets(4,4,4,4);
-
-               pane = getContentPane();
-               pane.setLayout(new GridBagLayout());
-
-               c = new GridBagConstraints();
-               c.gridx = 0; c.gridy = 0;
-               c.fill = GridBagConstraints.NONE;
-               c.anchor = GridBagConstraints.LINE_START;
-               c.insets = il;
-               serial_label = new JLabel("Serial:");
-               pane.add(serial_label, c);
-
-               c = new GridBagConstraints();
-               c.gridx = 1; c.gridy = 0;
-               c.fill = GridBagConstraints.HORIZONTAL;
-               c.weightx = 1;
-               c.anchor = GridBagConstraints.LINE_START;
-               c.insets = ir;
-               serial_value = new JLabel("");
-               pane.add(serial_value, c);
-
-               c = new GridBagConstraints();
-               c.fill = GridBagConstraints.NONE;
-               c.gridx = 0; c.gridy = 1;
-               c.anchor = GridBagConstraints.LINE_START;
-               c.insets = il;
-               flight_label = new JLabel("Flight:");
-               pane.add(flight_label, c);
-
-               c = new GridBagConstraints();
-               c.fill = GridBagConstraints.HORIZONTAL;
-               c.weightx = 1;
-               c.gridx = 1; c.gridy = 1;
-               c.anchor = GridBagConstraints.LINE_START;
-               c.insets = ir;
-               flight_value = new JLabel("");
-               pane.add(flight_value, c);
-
-               c = new GridBagConstraints();
-               c.fill = GridBagConstraints.NONE;
-               c.gridx = 0; c.gridy = 2;
-               c.anchor = GridBagConstraints.LINE_START;
-               c.insets = il;
-               file_label = new JLabel("File:");
-               pane.add(file_label, c);
-
-               c = new GridBagConstraints();
-               c.fill = GridBagConstraints.HORIZONTAL;
-               c.weightx = 1;
-               c.gridx = 1; c.gridy = 2;
-               c.anchor = GridBagConstraints.LINE_START;
-               c.insets = ir;
-               file_value = new JLabel("");
-               pane.add(file_value, c);
-
-               min_state = in_min_state;
-               max_state = in_max_state;
-               pbar = new JProgressBar();
-               pbar.setMinimum(0);
-               pbar.setMaximum(1000);
-               pbar.setValue(0);
-               pbar.setString("startup");
-               pbar.setStringPainted(true);
-               pbar.setPreferredSize(new Dimension(600, 20));
-               c = new GridBagConstraints();
-               c.fill = GridBagConstraints.HORIZONTAL;
-               c.anchor = GridBagConstraints.CENTER;
-               c.gridx = 0; c.gridy = 3;
-               c.gridwidth = GridBagConstraints.REMAINDER;
-               Insets ib = new Insets(4,4,4,4);
-               c.insets = ib;
-               pane.add(pbar, c);
-
-
-               cancel = new JButton("Cancel");
-               c = new GridBagConstraints();
-               c.fill = GridBagConstraints.NONE;
-               c.anchor = GridBagConstraints.CENTER;
-               c.gridx = 0; c.gridy = 4;
-               c.gridwidth = GridBagConstraints.REMAINDER;
-               Insets ic = new Insets(4,4,4,4);
-               c.insets = ic;
-               pane.add(cancel, c);
-
-               pack();
-               setLocationRelativeTo(owner);
-               setVisible(true);
-       }
-
-       public void addActionListener (ActionListener l) {
-               cancel.addActionListener(l);
-       }
-
-       private void set_value_internal(String state_name, int state, int state_block, int block) {
-               if (state_block > 100)
-                       state_block = 100;
-               if (state < min_state) state = min_state;
-               if (state >= max_state) state = max_state - 1;
-               state -= min_state;
-
-               int pos = state * 100 + state_block;
-
-               pbar.setString(String.format("block %d state %s", block, state_name));
-               pbar.setValue(pos);
-       }
-
-       public void set_value(String in_state_name, int in_state, int in_state_block, int in_block) {
-               final String state_name = in_state_name;
-               final int state = in_state;
-               final int state_block = in_state_block;
-               final int block = in_block;
-               Runnable r = new Runnable() {
-                               public void run() {
-                                       try {
-                                               set_value_internal(state_name, state, state_block, block);
-                                       } catch (Exception ex) {
-                                       }
-                               }
-                       };
-               SwingUtilities.invokeLater(r);
-       }
-
-       private void set_serial_internal(int serial) {
-               serial_value.setText(String.format("%d", serial));
-       }
-
-       public void set_serial(int in_serial) {
-               final int serial = in_serial;
-               Runnable r = new Runnable() {
-                               public void run() {
-                                       try {
-                                               set_serial_internal(serial);
-                                       } catch (Exception ex) {
-                                       }
-                               }
-                       };
-               SwingUtilities.invokeLater(r);
-       }
-
-       private void set_flight_internal(int flight) {
-               flight_value.setText(String.format("%d", flight));
-       }
-
-       public void set_flight(int in_flight) {
-               final int flight = in_flight;
-               Runnable r = new Runnable() {
-                               public void run() {
-                                       try {
-                                               set_flight_internal(flight);
-                                       } catch (Exception ex) {
-                                       }
-                               }
-                       };
-               SwingUtilities.invokeLater(r);
-       }
-
-       private void set_file_internal(String file) {
-               file_value.setText(String.format("%s", file));
-       }
-
-       public void set_file(String in_file) {
-               final String file = in_file;
-               Runnable r = new Runnable() {
-                               public void run() {
-                                       try {
-                                               set_file_internal(file);
-                                       } catch (Exception ex) {
-                                       }
-                               }
-                       };
-               SwingUtilities.invokeLater(r);
-       }
-
-       private void done_internal() {
-               setVisible(false);
-               dispose();
-       }
-
-       public void done() {
-               Runnable r = new Runnable() {
-                               public void run() {
-                                       try {
-                                               done_internal();
-                                       } catch (Exception ex) {
-                                       }
-                               }
-                       };
-               SwingUtilities.invokeLater(r);
-       }
-
-       private void reset_internal() {
-               set_value_internal("startup",min_state,0, 0);
-               set_flight_internal(0);
-               set_file_internal("");
-       }
-
-       public void reset() {
-               Runnable r = new Runnable() {
-                               public void run() {
-                                       try {
-                                               reset_internal();
-                                       } catch (Exception ex) {
-                                       }
-                               }
-                       };
-               SwingUtilities.invokeLater(r);
-       }
-}
diff --git a/altosui/AltosEepromMonitorUI.java b/altosui/AltosEepromMonitorUI.java
deleted file mode 100644 (file)
index c1c1eb2..0000000
+++ /dev/null
@@ -1,311 +0,0 @@
-/*
- * Copyright © 2010 Keith Packard <keithp@keithp.com>
- *
- * 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.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
- */
-
-package altosui;
-
-import java.awt.*;
-import java.awt.event.*;
-import javax.swing.*;
-import org.altusmetrum.altosuilib_2.*;
-import org.altusmetrum.altoslib_4.*;
-
-public class AltosEepromMonitorUI extends AltosUIDialog implements AltosEepromMonitor {
-       JFrame          owner;
-       Container       pane;
-       Box             box;
-       JLabel          serial_label;
-       JLabel          flight_label;
-       JLabel          file_label;
-       JLabel          serial_value;
-       JLabel          flight_value;
-       JLabel          file_value;
-       JButton         cancel;
-       JProgressBar    pbar;
-       int             min_state, max_state;
-       ActionListener  listener;
-
-       public AltosEepromMonitorUI(JFrame owner) {
-               super (owner, "Download Flight Data", false);
-
-               this.owner = owner;
-
-               GridBagConstraints c;
-               Insets il = new Insets(4,4,4,4);
-               Insets ir = new Insets(4,4,4,4);
-
-               pane = getContentPane();
-               pane.setLayout(new GridBagLayout());
-
-               c = new GridBagConstraints();
-               c.gridx = 0; c.gridy = 0;
-               c.fill = GridBagConstraints.NONE;
-               c.anchor = GridBagConstraints.LINE_START;
-               c.insets = il;
-               serial_label = new JLabel("Serial:");
-               pane.add(serial_label, c);
-
-               c = new GridBagConstraints();
-               c.gridx = 1; c.gridy = 0;
-               c.fill = GridBagConstraints.HORIZONTAL;
-               c.weightx = 1;
-               c.anchor = GridBagConstraints.LINE_START;
-               c.insets = ir;
-               serial_value = new JLabel("");
-               pane.add(serial_value, c);
-
-               c = new GridBagConstraints();
-               c.fill = GridBagConstraints.NONE;
-               c.gridx = 0; c.gridy = 1;
-               c.anchor = GridBagConstraints.LINE_START;
-               c.insets = il;
-               flight_label = new JLabel("Flight:");
-               pane.add(flight_label, c);
-
-               c = new GridBagConstraints();
-               c.fill = GridBagConstraints.HORIZONTAL;
-               c.weightx = 1;
-               c.gridx = 1; c.gridy = 1;
-               c.anchor = GridBagConstraints.LINE_START;
-               c.insets = ir;
-               flight_value = new JLabel("");
-               pane.add(flight_value, c);
-
-               c = new GridBagConstraints();
-               c.fill = GridBagConstraints.NONE;
-               c.gridx = 0; c.gridy = 2;
-               c.anchor = GridBagConstraints.LINE_START;
-               c.insets = il;
-               file_label = new JLabel("File:");
-               pane.add(file_label, c);
-
-               c = new GridBagConstraints();
-               c.fill = GridBagConstraints.HORIZONTAL;
-               c.weightx = 1;
-               c.gridx = 1; c.gridy = 2;
-               c.anchor = GridBagConstraints.LINE_START;
-               c.insets = ir;
-               file_value = new JLabel("");
-               pane.add(file_value, c);
-
-               pbar = new JProgressBar();
-               pbar.setMinimum(0);
-               pbar.setMaximum(1000);
-               pbar.setValue(0);
-               pbar.setString("startup");
-               pbar.setStringPainted(true);
-               pbar.setPreferredSize(new Dimension(600, 20));
-               c = new GridBagConstraints();
-               c.fill = GridBagConstraints.HORIZONTAL;
-               c.anchor = GridBagConstraints.CENTER;
-               c.gridx = 0; c.gridy = 3;
-               c.gridwidth = GridBagConstraints.REMAINDER;
-               Insets ib = new Insets(4,4,4,4);
-               c.insets = ib;
-               pane.add(pbar, c);
-
-
-               cancel = new JButton("Cancel");
-               c = new GridBagConstraints();
-               c.fill = GridBagConstraints.NONE;
-               c.anchor = GridBagConstraints.CENTER;
-               c.gridx = 0; c.gridy = 4;
-               c.gridwidth = GridBagConstraints.REMAINDER;
-               Insets ic = new Insets(4,4,4,4);
-               c.insets = ic;
-               pane.add(cancel, c);
-
-               pack();
-               setLocationRelativeTo(owner);
-       }
-
-       public void addActionListener(ActionListener l) {
-               listener = l;
-       }
-
-       public void set_states(int min_state, int max_state) {
-               this.min_state = min_state;
-               this.max_state = max_state;
-       }
-
-       public void set_thread(Thread in_eeprom_thread) {
-               final Thread eeprom_thread = in_eeprom_thread;
-               cancel.addActionListener(new ActionListener() {
-                               public void actionPerformed(ActionEvent e) {
-                                       if (eeprom_thread != null)
-                                               eeprom_thread.interrupt();
-                               }
-                       });
-       }
-
-       public void start() {
-               setVisible(true);
-       }
-
-       private void set_value_internal(String state_name, int state, int state_block, int block) {
-               if (state_block > 100)
-                       state_block = 100;
-               if (state < min_state) state = min_state;
-               if (state >= max_state) state = max_state - 1;
-               state -= min_state;
-
-               int pos = state * 100 + state_block;
-
-               pbar.setString(String.format("block %d state %s", block, state_name));
-               pbar.setValue(pos);
-       }
-
-       public void set_value(String in_state_name, int in_state, int in_state_block, int in_block) {
-               final String state_name = in_state_name;
-               final int state = in_state;
-               final int state_block = in_state_block;
-               final int block = in_block;
-               Runnable r = new Runnable() {
-                               public void run() {
-                                       try {
-                                               set_value_internal(state_name, state, state_block, block);
-                                       } catch (Exception ex) {
-                                       }
-                               }
-                       };
-               SwingUtilities.invokeLater(r);
-       }
-
-       private void set_serial_internal(int serial) {
-               serial_value.setText(String.format("%d", serial));
-       }
-
-       public void set_serial(int in_serial) {
-               final int serial = in_serial;
-               Runnable r = new Runnable() {
-                               public void run() {
-                                       try {
-                                               set_serial_internal(serial);
-                                       } catch (Exception ex) {
-                                       }
-                               }
-                       };
-               SwingUtilities.invokeLater(r);
-       }
-
-       private void set_flight_internal(int flight) {
-               flight_value.setText(String.format("%d", flight));
-       }
-
-       public void set_flight(int in_flight) {
-               final int flight = in_flight;
-               Runnable r = new Runnable() {
-                               public void run() {
-                                       try {
-                                               set_flight_internal(flight);
-                                       } catch (Exception ex) {
-                                       }
-                               }
-                       };
-               SwingUtilities.invokeLater(r);
-       }
-
-       private void set_filename_internal(String filename) {
-               file_value.setText(String.format("%s", filename));
-       }
-
-       public void set_filename(String in_filename) {
-               final String filename = in_filename;
-               Runnable r = new Runnable() {
-                               public void run() {
-                                       try {
-                                               set_filename_internal(filename);
-                                       } catch (Exception ex) {
-                                       }
-                               }
-                       };
-               SwingUtilities.invokeLater(r);
-       }
-
-       private void done_internal(boolean success) {
-               listener.actionPerformed(new ActionEvent(this,
-                                                        success ? 1 : 0,
-                                                        "download"));
-               setVisible(false);
-               dispose();
-       }
-
-       public void done(boolean in_success) {
-               final boolean success = in_success;
-               Runnable r = new Runnable() {
-                               public void run() {
-                                       try {
-                                               done_internal(success);
-                                       } catch (Exception ex) {
-                                       }
-                               }
-                       };
-               SwingUtilities.invokeLater(r);
-       }
-
-       private void reset_internal() {
-               set_value_internal("startup",min_state,0, 0);
-               set_flight_internal(0);
-               set_filename_internal("");
-       }
-
-       public void reset() {
-               Runnable r = new Runnable() {
-                               public void run() {
-                                       try {
-                                               reset_internal();
-                                       } catch (Exception ex) {
-                                       }
-                               }
-                       };
-               SwingUtilities.invokeLater(r);
-       }
-
-       private void show_message_internal(String message, String title, int message_type) {
-               int joption_message_type = JOptionPane.ERROR_MESSAGE;
-
-               switch (message_type) {
-               case INFO_MESSAGE:
-                       joption_message_type = JOptionPane.INFORMATION_MESSAGE;
-                       break;
-               case WARNING_MESSAGE:
-                       joption_message_type = JOptionPane.WARNING_MESSAGE;
-                       break;
-               case ERROR_MESSAGE:
-                       joption_message_type = JOptionPane.ERROR_MESSAGE;
-                       break;
-               }
-               JOptionPane.showMessageDialog(owner,
-                                             message,
-                                             title,
-                                             joption_message_type);
-       }
-
-       public void show_message(String in_message, String in_title, int in_message_type) {
-               final String message = in_message;
-               final String title = in_title;
-               final int message_type = in_message_type;
-               Runnable r = new Runnable() {
-                               public void run() {
-                                       try {
-                                               show_message_internal(message, title, message_type);
-                                       } catch (Exception ex) {
-                                       }
-                               }
-                       };
-               SwingUtilities.invokeLater(r);
-       }
-}
diff --git a/altosui/AltosEepromSelect.java b/altosui/AltosEepromSelect.java
deleted file mode 100644 (file)
index 66a197c..0000000
+++ /dev/null
@@ -1,184 +0,0 @@
-/*
- * Copyright © 2011 Keith Packard <keithp@keithp.com>
- *
- * 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.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
- */
-
-package altosui;
-
-import javax.swing.*;
-import javax.swing.border.*;
-import java.awt.*;
-import java.awt.event.*;
-import org.altusmetrum.altoslib_4.*;
-import org.altusmetrum.altosuilib_2.*;
-
-class AltosEepromItem implements ActionListener {
-       AltosEepromLog  log;
-       JLabel          label;
-       JCheckBox       action;
-       JCheckBox       delete;
-
-       public void actionPerformed(ActionEvent e) {
-               log.selected = action.isSelected();
-       }
-
-       public AltosEepromItem(AltosEepromLog in_log) {
-               log = in_log;
-
-               String  text;
-               if (log.year != 0)
-                       text = String.format("Flight #%02d - %04d-%02d-%02d",
-                                            log.flight, log.year, log.month, log.day);
-               else
-                       text = String.format("Flight #%02d", log.flight);
-
-               label = new JLabel(text);
-
-               action = new JCheckBox("", log.selected);
-               action.addActionListener(this);
-       }
-}
-
-public class AltosEepromSelect extends AltosUIDialog implements ActionListener {
-       //private JList                 list;
-       private JFrame                  frame;
-       JButton                         ok;
-       JButton                         cancel;
-       boolean                         success;
-
-       /* Listen for events from our buttons */
-       public void actionPerformed(ActionEvent e) {
-               String  cmd = e.getActionCommand();
-
-               if (cmd.equals("ok"))
-                       success = true;
-               setVisible(false);
-       }
-
-       public boolean run() {
-               success = false;
-               setLocationRelativeTo(frame);
-               setVisible(true);
-               return success;
-       }
-
-       public AltosEepromSelect (JFrame in_frame,
-                                 AltosEepromList flights,
-                                 String action) {
-
-               super(in_frame, String.format("Flight list for serial %d", flights.config_data.serial), true);
-               frame = in_frame;
-
-               /* Create the container for the dialog */
-               Container contentPane = getContentPane();
-
-               /* First, we create a pane containing the dialog's header/title */
-               JLabel  selectLabel = new JLabel(String.format ("Select flights to %s", action), SwingConstants.CENTER);
-
-               JPanel  labelPane = new JPanel();
-               labelPane.setLayout(new BoxLayout(labelPane, BoxLayout.X_AXIS));
-               labelPane.setBorder(BorderFactory.createEmptyBorder(10, 0, 10, 0));
-               labelPane.add(Box.createHorizontalGlue());
-               labelPane.add(selectLabel);
-               labelPane.add(Box.createHorizontalGlue());
-
-               /* Add the header to the container. */
-               contentPane.add(labelPane, BorderLayout.PAGE_START);
-
-
-               /* Now we create the evilness that is a GridBag for the flight details */
-               GridBagConstraints c;
-               Insets i = new Insets(4,4,4,4);
-               JPanel flightPane = new JPanel();
-               flightPane.setLayout(new GridBagLayout());
-               flightPane.setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED));
-
-               /* Flight Header */
-               c = new GridBagConstraints();
-               c.gridx = 0; c.gridy = 0;
-               c.fill = GridBagConstraints.NONE;
-               c.weightx = 0.5;
-               c.anchor = GridBagConstraints.CENTER;
-               c.insets = i;
-               JLabel flightHeaderLabel = new JLabel("Flight");
-               flightPane.add(flightHeaderLabel, c);
-
-               /* Download Header */
-               c = new GridBagConstraints();
-               c.gridx = 1; c.gridy = 0;
-               c.fill = GridBagConstraints.NONE;
-               c.weightx = 0.5;
-               c.anchor = GridBagConstraints.CENTER;
-               c.insets = i;
-               JLabel downloadHeaderLabel = new JLabel(action);
-               flightPane.add(downloadHeaderLabel, c);
-
-               /* Add the flights to the GridBag */
-               AltosEepromItem item;
-               int itemNumber = 1;
-               for (AltosEepromLog flight : flights) {
-                       /* Create a flight object with handlers and
-                        * appropriate UI items
-                        */
-                       item = new AltosEepromItem(flight);
-
-                       /* Add a decriptive label for the flight */
-                       c = new GridBagConstraints();
-                       c.gridx = 0; c.gridy = itemNumber;
-                       c.fill = GridBagConstraints.NONE;
-                       c.weightx = 0.5;
-                       c.anchor = GridBagConstraints.CENTER;
-                       c.insets = i;
-                       flightPane.add(item.label, c);
-
-                       /* Add action checkbox for the flight */
-                       c = new GridBagConstraints();
-                       c.gridx = 1; c.gridy = itemNumber;
-                       c.fill = GridBagConstraints.NONE;
-                       c.weightx = 0.5;
-                       c.anchor = GridBagConstraints.CENTER;
-                       c.insets = i;
-                       flightPane.add(item.action, c);
-
-                       itemNumber++;
-               }
-
-               /* Add the GridBag to the container */
-               contentPane.add(flightPane, BorderLayout.CENTER);
-
-               /* Create the dialog buttons */
-               ok = new JButton("OK");
-               ok.addActionListener(this);
-               ok.setActionCommand("ok");
-
-               cancel = new JButton("Cancel");
-               cancel.addActionListener(this);
-               cancel.setActionCommand("cancel");
-
-               JPanel  buttonPane = new JPanel();
-               buttonPane.setLayout(new BoxLayout(buttonPane, BoxLayout.X_AXIS));
-               buttonPane.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
-               buttonPane.add(Box.createHorizontalGlue());
-               buttonPane.add(cancel);
-               buttonPane.add(Box.createRigidArea(new Dimension(10, 0)));
-               buttonPane.add(ok);
-
-               /* Add the buttons to the container */
-               contentPane.add(buttonPane, BorderLayout.PAGE_END);
-
-               /* Pack the window! */
-               pack();
-       }
-}
index ad7964e939a77c4f3ec1914c598395f0e35e4915..302f623ff295258a29075b63faecea01321cecff 100644 (file)
@@ -306,7 +306,7 @@ public class AltosUI extends AltosUIFrame {
         * a TeleDongle over the packet link
         */
        private void SaveFlightData() {
         * a TeleDongle over the packet link
         */
        private void SaveFlightData() {
-               new AltosEepromManage(AltosUI.this);
+               new AltosEepromManage(AltosUI.this, AltosLib.product_any);
        }
 
        /* Load a flight log file and write out a CSV file containing
        }
 
        /* Load a flight log file and write out a CSV file containing
index cd6af84b9929b01cc533a7035335a097cb2c2e26..c834646d499e4335c1305b9c6827ea82c3ef05b3 100644 (file)
@@ -22,10 +22,6 @@ altosui_JAVA = \
        AltosConfigTDUI.java \
        AltosCSVUI.java \
        AltosDescent.java \
        AltosConfigTDUI.java \
        AltosCSVUI.java \
        AltosDescent.java \
-       AltosEepromDelete.java \
-       AltosEepromManage.java \
-       AltosEepromMonitorUI.java \
-       AltosEepromSelect.java \
        AltosFlashUI.java \
        AltosFlightInfoTableModel.java \
        AltosFlightStatsTable.java \
        AltosFlashUI.java \
        AltosFlightInfoTableModel.java \
        AltosFlightStatsTable.java \
diff --git a/altosuilib/AltosEepromDelete.java b/altosuilib/AltosEepromDelete.java
new file mode 100644 (file)
index 0000000..981dadd
--- /dev/null
@@ -0,0 +1,143 @@
+/*
+ * Copyright © 2011 Keith Packard <keithp@keithp.com>
+ *
+ * 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.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+ */
+
+package org.altusmetrum.altosuilib_2;
+
+import java.awt.event.*;
+import javax.swing.*;
+import java.io.*;
+import java.util.concurrent.*;
+import org.altusmetrum.altoslib_4.*;
+
+public class AltosEepromDelete implements Runnable {
+       AltosEepromList         flights;
+       Thread                  eeprom_thread;
+       AltosSerial             serial_line;
+       boolean                 remote;
+       JFrame                  frame;
+       ActionListener          listener;
+       boolean                 success;
+
+       private void DeleteLog (AltosEepromLog log)
+               throws IOException, InterruptedException, TimeoutException {
+
+               if (flights.config_data.flight_log_max != 0 || flights.config_data.log_format != 0) {
+
+                       /* Devices with newer firmware can erase the
+                        * flash blocks containing each flight
+                        */
+                       serial_line.flush_input();
+                       serial_line.printf("d %d\n", log.flight);
+                       for (;;) {
+                               /* It can take a while to erase the flash... */
+                               String line = serial_line.get_reply(20000);
+                               if (line == null)
+                                       throw new TimeoutException();
+                               if (line.equals("Erased"))
+                                       break;
+                               if (line.startsWith("No such"))
+                                       throw new IOException(line);
+                       }
+               }
+       }
+
+       private void show_error_internal(String message, String title) {
+               JOptionPane.showMessageDialog(frame,
+                                             message,
+                                             title,
+                                             JOptionPane.ERROR_MESSAGE);
+       }
+
+       private void show_error(String in_message, String in_title) {
+               final String message = in_message;
+               final String title = in_title;
+               Runnable r = new Runnable() {
+                               public void run() {
+                                       try {
+                                               show_error_internal(message, title);
+                                       } catch (Exception ex) {
+                                       }
+                               }
+                       };
+               SwingUtilities.invokeLater(r);
+       }
+
+       public void run () {
+               success = false;
+               try {
+                       if (remote)
+                               serial_line.start_remote();
+
+                       for (AltosEepromLog log : flights) {
+                               if (log.selected) {
+                                       DeleteLog(log);
+                               }
+                       }
+                       success = true;
+               } catch (IOException ee) {
+                       show_error (ee.getLocalizedMessage(),
+                                   serial_line.device.toShortString());
+               } catch (InterruptedException ie) {
+               } catch (TimeoutException te) {
+                       show_error (String.format("Connection to \"%s\" failed",
+                                                 serial_line.device.toShortString()),
+                                   "Connection Failed");
+               } finally {
+                       try {
+                               if (remote)
+                                       serial_line.stop_remote();
+                       } catch (InterruptedException ie) {
+                       } finally {
+                               serial_line.flush_output();
+                               serial_line.close();
+                       }
+               }
+               if (listener != null) {
+                       Runnable r = new Runnable() {
+                                       public void run() {
+                                               try {
+                                                       listener.actionPerformed(new ActionEvent(this,
+                                                                                                success ? 1 : 0,
+                                                                                                "delete"));
+                                               } catch (Exception ex) {
+                                               }
+                                       }
+                               };
+                       SwingUtilities.invokeLater(r);
+               }
+       }
+
+       public void start() {
+               eeprom_thread = new Thread(this);
+               eeprom_thread.start();
+       }
+
+       public void addActionListener(ActionListener l) {
+               listener = l;
+       }
+
+       public AltosEepromDelete(JFrame given_frame,
+                                AltosSerial given_serial_line,
+                                boolean given_remote,
+                                AltosEepromList given_flights) {
+               frame = given_frame;
+               serial_line = given_serial_line;
+               remote = given_remote;
+               flights = given_flights;
+               success = false;
+       }
+}
diff --git a/altosuilib/AltosEepromManage.java b/altosuilib/AltosEepromManage.java
new file mode 100644 (file)
index 0000000..2b96733
--- /dev/null
@@ -0,0 +1,241 @@
+/*
+ * Copyright © 2011 Keith Packard <keithp@keithp.com>
+ *
+ * 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.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+ */
+
+package org.altusmetrum.altosuilib_2;
+
+import java.awt.event.*;
+import javax.swing.*;
+import java.io.*;
+import java.util.concurrent.*;
+import org.altusmetrum.altoslib_4.*;
+
+public class AltosEepromManage implements ActionListener {
+
+       JFrame                  frame;
+       boolean                 remote;
+       AltosDevice             device;
+       AltosSerial             serial_line;
+       AltosEepromList         flights;
+       AltosEepromDownload     download;
+       AltosEepromDelete       delete;
+
+       public void finish() {
+               if (serial_line != null) {
+                       try {
+                               serial_line.flush_input();
+                       } catch (InterruptedException ie) {
+                       }
+                       serial_line.close();
+                       serial_line = null;
+               }
+       }
+
+       private int countDeletedFlights() {
+               int count = 0;
+               for (AltosEepromLog flight : flights) {
+                       if (flight.selected)
+                               count++;
+               }
+               return count;
+       }
+
+       private String showDeletedFlights() {
+               String  result = "";
+
+               for (AltosEepromLog flight : flights) {
+                       if (flight.selected) {
+                               if (result.equals(""))
+                                       result = String.format("%d", flight.flight);
+                               else
+                                       result = String.format("%s, %d", result, flight.flight);
+                       }
+               }
+               return result;
+       }
+
+       public boolean download_done() {
+               AltosEepromSelect       select = new AltosEepromSelect(frame, flights, "Delete");
+
+               if (select.run()) {
+                       boolean any_selected = false;
+                       for (AltosEepromLog flight : flights)
+                               any_selected = any_selected || flight.selected;
+                       if (any_selected) {
+                               delete = new AltosEepromDelete(frame,
+                                                              serial_line,
+                                                              remote,
+                                                              flights);
+                               delete.addActionListener(this);
+                               /*
+                                * Start flight log delete
+                                */
+
+                               delete.start();
+                               return true;
+                       }
+               }
+               return false;
+       }
+
+       public void actionPerformed(ActionEvent e) {
+               String  cmd = e.getActionCommand();
+               boolean success = e.getID() != 0;
+               boolean running = false;
+
+               if (cmd.equals("download")) {
+                       if (success)
+                               running = download_done();
+               } else if (cmd.equals("delete")) {
+                       if (success) {
+                               JOptionPane.showMessageDialog(frame,
+                                                             String.format("%d flights erased: %s",
+                                                                           countDeletedFlights(),
+                                                                           showDeletedFlights()),
+                                                             serial_line.device.toShortString(),
+                                                             JOptionPane.INFORMATION_MESSAGE);
+                       }
+               }
+               if (!running)
+                       finish();
+       }
+
+       public void got_flights(AltosEepromList in_flights) {
+               boolean running = false;;
+
+               flights = in_flights;
+               try {
+                       if (flights.size() == 0) {
+                               JOptionPane.showMessageDialog(frame,
+                                                             String.format("No flights available on %d",
+                                                                           device.getSerial()),
+                                                             serial_line.device.toShortString(),
+                                                             JOptionPane.INFORMATION_MESSAGE);
+                       } else {
+                               AltosEepromSelect       select = new AltosEepromSelect(frame, flights, "Download");
+
+                               if (select.run()) {
+                                       boolean any_selected = false;
+                                       for (AltosEepromLog flight : flights)
+                                               any_selected = any_selected || flight.selected;
+                                       if (any_selected) {
+                                               AltosEepromMonitorUI monitor = new AltosEepromMonitorUI(frame);
+                                               monitor.addActionListener(this);
+                                               serial_line.set_frame(frame);
+                                               download = new AltosEepromDownload(monitor,
+                                                                                  serial_line,
+                                                                                  remote,
+                                                                                  flights);
+                                               /*
+                                                * Start flight log download
+                                                */
+
+                                               download.start();
+                                               running = true;
+                                       } else {
+                                               running = download_done();
+                                       }
+                               }
+                       }
+                       if (!running)
+                               finish();
+               } catch (Exception e) {
+                       got_exception(e);
+               }
+       }
+
+       public void got_exception(Exception e) {
+               if (e instanceof IOException) {
+                       IOException     ee = (IOException) e;
+                       JOptionPane.showMessageDialog(frame,
+                                                     device.toShortString(),
+                                                     ee.getLocalizedMessage(),
+                                                     JOptionPane.ERROR_MESSAGE);
+               } else if (e instanceof TimeoutException) {
+                       //TimeoutException te = (TimeoutException) e;
+                       JOptionPane.showMessageDialog(frame,
+                                                     String.format("Communications failed with \"%s\"",
+                                                                   device.toShortString()),
+                                                     "Cannot open target device",
+                                                     JOptionPane.ERROR_MESSAGE);
+               }
+               finish();
+       }
+
+       class EepromGetList implements Runnable {
+
+               AltosEepromManage       manage;
+
+               public void run () {
+                       Runnable r;
+                       try {
+                               flights = new AltosEepromList(serial_line, remote);
+                               r = new Runnable() {
+                                               public void run() {
+                                                       got_flights(flights);
+                                               }
+                                       };
+                       } catch (Exception e) {
+                               final Exception f_e = e;
+                               r = new Runnable() {
+                                               public void run() {
+                                                       got_exception(f_e);
+                                               }
+                                       };
+                       }
+                       SwingUtilities.invokeLater(r);
+               }
+
+               public EepromGetList(AltosEepromManage in_manage) {
+                       manage = in_manage;
+               }
+       }
+
+       public AltosEepromManage(JFrame given_frame, int product) {
+
+               //boolean       running = false;
+
+               frame = given_frame;
+               device = AltosDeviceUIDialog.show(frame, product);
+
+               remote = false;
+
+               if (device != null) {
+                       try {
+                               serial_line = new AltosSerial(device);
+                               if (device.matchProduct(AltosLib.product_basestation))
+                                       remote = true;
+
+                               serial_line.set_frame(frame);
+
+                               EepromGetList   get_list = new EepromGetList(this);
+                               Thread          t = new Thread(get_list);
+                               t.start();
+                       } catch (FileNotFoundException ee) {
+                               JOptionPane.showMessageDialog(frame,
+                                                             ee.getMessage(),
+                                                             "Cannot open target device",
+                                                             JOptionPane.ERROR_MESSAGE);
+                       } catch (AltosSerialInUseException si) {
+                               JOptionPane.showMessageDialog(frame,
+                                                             String.format("Device \"%s\" already in use",
+                                                                           device.toShortString()),
+                                                             "Device in use",
+                                                             JOptionPane.ERROR_MESSAGE);
+                       }
+               }
+       }
+}
diff --git a/altosuilib/AltosEepromMonitor.java b/altosuilib/AltosEepromMonitor.java
new file mode 100644 (file)
index 0000000..b1e8562
--- /dev/null
@@ -0,0 +1,251 @@
+/*
+ * Copyright © 2010 Keith Packard <keithp@keithp.com>
+ *
+ * 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.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+ */
+
+package org.altusmetrum.altosuilib_2;
+
+import java.awt.*;
+import java.awt.event.*;
+import javax.swing.*;
+
+public class AltosEepromMonitor extends AltosUIDialog {
+
+       Container       pane;
+       Box             box;
+       JLabel          serial_label;
+       JLabel          flight_label;
+       JLabel          file_label;
+       JLabel          serial_value;
+       JLabel          flight_value;
+       JLabel          file_value;
+       JButton         cancel;
+       JProgressBar    pbar;
+       int             min_state, max_state;
+
+       public AltosEepromMonitor(JFrame owner, int in_min_state, int in_max_state) {
+               super (owner, "Download Flight Data", false);
+
+               GridBagConstraints c;
+               Insets il = new Insets(4,4,4,4);
+               Insets ir = new Insets(4,4,4,4);
+
+               pane = getContentPane();
+               pane.setLayout(new GridBagLayout());
+
+               c = new GridBagConstraints();
+               c.gridx = 0; c.gridy = 0;
+               c.fill = GridBagConstraints.NONE;
+               c.anchor = GridBagConstraints.LINE_START;
+               c.insets = il;
+               serial_label = new JLabel("Serial:");
+               pane.add(serial_label, c);
+
+               c = new GridBagConstraints();
+               c.gridx = 1; c.gridy = 0;
+               c.fill = GridBagConstraints.HORIZONTAL;
+               c.weightx = 1;
+               c.anchor = GridBagConstraints.LINE_START;
+               c.insets = ir;
+               serial_value = new JLabel("");
+               pane.add(serial_value, c);
+
+               c = new GridBagConstraints();
+               c.fill = GridBagConstraints.NONE;
+               c.gridx = 0; c.gridy = 1;
+               c.anchor = GridBagConstraints.LINE_START;
+               c.insets = il;
+               flight_label = new JLabel("Flight:");
+               pane.add(flight_label, c);
+
+               c = new GridBagConstraints();
+               c.fill = GridBagConstraints.HORIZONTAL;
+               c.weightx = 1;
+               c.gridx = 1; c.gridy = 1;
+               c.anchor = GridBagConstraints.LINE_START;
+               c.insets = ir;
+               flight_value = new JLabel("");
+               pane.add(flight_value, c);
+
+               c = new GridBagConstraints();
+               c.fill = GridBagConstraints.NONE;
+               c.gridx = 0; c.gridy = 2;
+               c.anchor = GridBagConstraints.LINE_START;
+               c.insets = il;
+               file_label = new JLabel("File:");
+               pane.add(file_label, c);
+
+               c = new GridBagConstraints();
+               c.fill = GridBagConstraints.HORIZONTAL;
+               c.weightx = 1;
+               c.gridx = 1; c.gridy = 2;
+               c.anchor = GridBagConstraints.LINE_START;
+               c.insets = ir;
+               file_value = new JLabel("");
+               pane.add(file_value, c);
+
+               min_state = in_min_state;
+               max_state = in_max_state;
+               pbar = new JProgressBar();
+               pbar.setMinimum(0);
+               pbar.setMaximum(1000);
+               pbar.setValue(0);
+               pbar.setString("startup");
+               pbar.setStringPainted(true);
+               pbar.setPreferredSize(new Dimension(600, 20));
+               c = new GridBagConstraints();
+               c.fill = GridBagConstraints.HORIZONTAL;
+               c.anchor = GridBagConstraints.CENTER;
+               c.gridx = 0; c.gridy = 3;
+               c.gridwidth = GridBagConstraints.REMAINDER;
+               Insets ib = new Insets(4,4,4,4);
+               c.insets = ib;
+               pane.add(pbar, c);
+
+
+               cancel = new JButton("Cancel");
+               c = new GridBagConstraints();
+               c.fill = GridBagConstraints.NONE;
+               c.anchor = GridBagConstraints.CENTER;
+               c.gridx = 0; c.gridy = 4;
+               c.gridwidth = GridBagConstraints.REMAINDER;
+               Insets ic = new Insets(4,4,4,4);
+               c.insets = ic;
+               pane.add(cancel, c);
+
+               pack();
+               setLocationRelativeTo(owner);
+               setVisible(true);
+       }
+
+       public void addActionListener (ActionListener l) {
+               cancel.addActionListener(l);
+       }
+
+       private void set_value_internal(String state_name, int state, int state_block, int block) {
+               if (state_block > 100)
+                       state_block = 100;
+               if (state < min_state) state = min_state;
+               if (state >= max_state) state = max_state - 1;
+               state -= min_state;
+
+               int pos = state * 100 + state_block;
+
+               pbar.setString(String.format("block %d state %s", block, state_name));
+               pbar.setValue(pos);
+       }
+
+       public void set_value(String in_state_name, int in_state, int in_state_block, int in_block) {
+               final String state_name = in_state_name;
+               final int state = in_state;
+               final int state_block = in_state_block;
+               final int block = in_block;
+               Runnable r = new Runnable() {
+                               public void run() {
+                                       try {
+                                               set_value_internal(state_name, state, state_block, block);
+                                       } catch (Exception ex) {
+                                       }
+                               }
+                       };
+               SwingUtilities.invokeLater(r);
+       }
+
+       private void set_serial_internal(int serial) {
+               serial_value.setText(String.format("%d", serial));
+       }
+
+       public void set_serial(int in_serial) {
+               final int serial = in_serial;
+               Runnable r = new Runnable() {
+                               public void run() {
+                                       try {
+                                               set_serial_internal(serial);
+                                       } catch (Exception ex) {
+                                       }
+                               }
+                       };
+               SwingUtilities.invokeLater(r);
+       }
+
+       private void set_flight_internal(int flight) {
+               flight_value.setText(String.format("%d", flight));
+       }
+
+       public void set_flight(int in_flight) {
+               final int flight = in_flight;
+               Runnable r = new Runnable() {
+                               public void run() {
+                                       try {
+                                               set_flight_internal(flight);
+                                       } catch (Exception ex) {
+                                       }
+                               }
+                       };
+               SwingUtilities.invokeLater(r);
+       }
+
+       private void set_file_internal(String file) {
+               file_value.setText(String.format("%s", file));
+       }
+
+       public void set_file(String in_file) {
+               final String file = in_file;
+               Runnable r = new Runnable() {
+                               public void run() {
+                                       try {
+                                               set_file_internal(file);
+                                       } catch (Exception ex) {
+                                       }
+                               }
+                       };
+               SwingUtilities.invokeLater(r);
+       }
+
+       private void done_internal() {
+               setVisible(false);
+               dispose();
+       }
+
+       public void done() {
+               Runnable r = new Runnable() {
+                               public void run() {
+                                       try {
+                                               done_internal();
+                                       } catch (Exception ex) {
+                                       }
+                               }
+                       };
+               SwingUtilities.invokeLater(r);
+       }
+
+       private void reset_internal() {
+               set_value_internal("startup",min_state,0, 0);
+               set_flight_internal(0);
+               set_file_internal("");
+       }
+
+       public void reset() {
+               Runnable r = new Runnable() {
+                               public void run() {
+                                       try {
+                                               reset_internal();
+                                       } catch (Exception ex) {
+                                       }
+                               }
+                       };
+               SwingUtilities.invokeLater(r);
+       }
+}
diff --git a/altosuilib/AltosEepromMonitorUI.java b/altosuilib/AltosEepromMonitorUI.java
new file mode 100644 (file)
index 0000000..02c71cd
--- /dev/null
@@ -0,0 +1,310 @@
+/*
+ * Copyright © 2010 Keith Packard <keithp@keithp.com>
+ *
+ * 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.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+ */
+
+package org.altusmetrum.altosuilib_2;
+
+import java.awt.*;
+import java.awt.event.*;
+import javax.swing.*;
+import org.altusmetrum.altoslib_4.*;
+
+public class AltosEepromMonitorUI extends AltosUIDialog implements AltosEepromMonitor {
+       JFrame          owner;
+       Container       pane;
+       Box             box;
+       JLabel          serial_label;
+       JLabel          flight_label;
+       JLabel          file_label;
+       JLabel          serial_value;
+       JLabel          flight_value;
+       JLabel          file_value;
+       JButton         cancel;
+       JProgressBar    pbar;
+       int             min_state, max_state;
+       ActionListener  listener;
+
+       public AltosEepromMonitorUI(JFrame owner) {
+               super (owner, "Download Flight Data", false);
+
+               this.owner = owner;
+
+               GridBagConstraints c;
+               Insets il = new Insets(4,4,4,4);
+               Insets ir = new Insets(4,4,4,4);
+
+               pane = getContentPane();
+               pane.setLayout(new GridBagLayout());
+
+               c = new GridBagConstraints();
+               c.gridx = 0; c.gridy = 0;
+               c.fill = GridBagConstraints.NONE;
+               c.anchor = GridBagConstraints.LINE_START;
+               c.insets = il;
+               serial_label = new JLabel("Serial:");
+               pane.add(serial_label, c);
+
+               c = new GridBagConstraints();
+               c.gridx = 1; c.gridy = 0;
+               c.fill = GridBagConstraints.HORIZONTAL;
+               c.weightx = 1;
+               c.anchor = GridBagConstraints.LINE_START;
+               c.insets = ir;
+               serial_value = new JLabel("");
+               pane.add(serial_value, c);
+
+               c = new GridBagConstraints();
+               c.fill = GridBagConstraints.NONE;
+               c.gridx = 0; c.gridy = 1;
+               c.anchor = GridBagConstraints.LINE_START;
+               c.insets = il;
+               flight_label = new JLabel("Flight:");
+               pane.add(flight_label, c);
+
+               c = new GridBagConstraints();
+               c.fill = GridBagConstraints.HORIZONTAL;
+               c.weightx = 1;
+               c.gridx = 1; c.gridy = 1;
+               c.anchor = GridBagConstraints.LINE_START;
+               c.insets = ir;
+               flight_value = new JLabel("");
+               pane.add(flight_value, c);
+
+               c = new GridBagConstraints();
+               c.fill = GridBagConstraints.NONE;
+               c.gridx = 0; c.gridy = 2;
+               c.anchor = GridBagConstraints.LINE_START;
+               c.insets = il;
+               file_label = new JLabel("File:");
+               pane.add(file_label, c);
+
+               c = new GridBagConstraints();
+               c.fill = GridBagConstraints.HORIZONTAL;
+               c.weightx = 1;
+               c.gridx = 1; c.gridy = 2;
+               c.anchor = GridBagConstraints.LINE_START;
+               c.insets = ir;
+               file_value = new JLabel("");
+               pane.add(file_value, c);
+
+               pbar = new JProgressBar();
+               pbar.setMinimum(0);
+               pbar.setMaximum(1000);
+               pbar.setValue(0);
+               pbar.setString("startup");
+               pbar.setStringPainted(true);
+               pbar.setPreferredSize(new Dimension(600, 20));
+               c = new GridBagConstraints();
+               c.fill = GridBagConstraints.HORIZONTAL;
+               c.anchor = GridBagConstraints.CENTER;
+               c.gridx = 0; c.gridy = 3;
+               c.gridwidth = GridBagConstraints.REMAINDER;
+               Insets ib = new Insets(4,4,4,4);
+               c.insets = ib;
+               pane.add(pbar, c);
+
+
+               cancel = new JButton("Cancel");
+               c = new GridBagConstraints();
+               c.fill = GridBagConstraints.NONE;
+               c.anchor = GridBagConstraints.CENTER;
+               c.gridx = 0; c.gridy = 4;
+               c.gridwidth = GridBagConstraints.REMAINDER;
+               Insets ic = new Insets(4,4,4,4);
+               c.insets = ic;
+               pane.add(cancel, c);
+
+               pack();
+               setLocationRelativeTo(owner);
+       }
+
+       public void addActionListener(ActionListener l) {
+               listener = l;
+       }
+
+       public void set_states(int min_state, int max_state) {
+               this.min_state = min_state;
+               this.max_state = max_state;
+       }
+
+       public void set_thread(Thread in_eeprom_thread) {
+               final Thread eeprom_thread = in_eeprom_thread;
+               cancel.addActionListener(new ActionListener() {
+                               public void actionPerformed(ActionEvent e) {
+                                       if (eeprom_thread != null)
+                                               eeprom_thread.interrupt();
+                               }
+                       });
+       }
+
+       public void start() {
+               setVisible(true);
+       }
+
+       private void set_value_internal(String state_name, int state, int state_block, int block) {
+               if (state_block > 100)
+                       state_block = 100;
+               if (state < min_state) state = min_state;
+               if (state >= max_state) state = max_state - 1;
+               state -= min_state;
+
+               int pos = state * 100 + state_block;
+
+               pbar.setString(String.format("block %d state %s", block, state_name));
+               pbar.setValue(pos);
+       }
+
+       public void set_value(String in_state_name, int in_state, int in_state_block, int in_block) {
+               final String state_name = in_state_name;
+               final int state = in_state;
+               final int state_block = in_state_block;
+               final int block = in_block;
+               Runnable r = new Runnable() {
+                               public void run() {
+                                       try {
+                                               set_value_internal(state_name, state, state_block, block);
+                                       } catch (Exception ex) {
+                                       }
+                               }
+                       };
+               SwingUtilities.invokeLater(r);
+       }
+
+       private void set_serial_internal(int serial) {
+               serial_value.setText(String.format("%d", serial));
+       }
+
+       public void set_serial(int in_serial) {
+               final int serial = in_serial;
+               Runnable r = new Runnable() {
+                               public void run() {
+                                       try {
+                                               set_serial_internal(serial);
+                                       } catch (Exception ex) {
+                                       }
+                               }
+                       };
+               SwingUtilities.invokeLater(r);
+       }
+
+       private void set_flight_internal(int flight) {
+               flight_value.setText(String.format("%d", flight));
+       }
+
+       public void set_flight(int in_flight) {
+               final int flight = in_flight;
+               Runnable r = new Runnable() {
+                               public void run() {
+                                       try {
+                                               set_flight_internal(flight);
+                                       } catch (Exception ex) {
+                                       }
+                               }
+                       };
+               SwingUtilities.invokeLater(r);
+       }
+
+       private void set_filename_internal(String filename) {
+               file_value.setText(String.format("%s", filename));
+       }
+
+       public void set_filename(String in_filename) {
+               final String filename = in_filename;
+               Runnable r = new Runnable() {
+                               public void run() {
+                                       try {
+                                               set_filename_internal(filename);
+                                       } catch (Exception ex) {
+                                       }
+                               }
+                       };
+               SwingUtilities.invokeLater(r);
+       }
+
+       private void done_internal(boolean success) {
+               listener.actionPerformed(new ActionEvent(this,
+                                                        success ? 1 : 0,
+                                                        "download"));
+               setVisible(false);
+               dispose();
+       }
+
+       public void done(boolean in_success) {
+               final boolean success = in_success;
+               Runnable r = new Runnable() {
+                               public void run() {
+                                       try {
+                                               done_internal(success);
+                                       } catch (Exception ex) {
+                                       }
+                               }
+                       };
+               SwingUtilities.invokeLater(r);
+       }
+
+       private void reset_internal() {
+               set_value_internal("startup",min_state,0, 0);
+               set_flight_internal(0);
+               set_filename_internal("");
+       }
+
+       public void reset() {
+               Runnable r = new Runnable() {
+                               public void run() {
+                                       try {
+                                               reset_internal();
+                                       } catch (Exception ex) {
+                                       }
+                               }
+                       };
+               SwingUtilities.invokeLater(r);
+       }
+
+       private void show_message_internal(String message, String title, int message_type) {
+               int joption_message_type = JOptionPane.ERROR_MESSAGE;
+
+               switch (message_type) {
+               case INFO_MESSAGE:
+                       joption_message_type = JOptionPane.INFORMATION_MESSAGE;
+                       break;
+               case WARNING_MESSAGE:
+                       joption_message_type = JOptionPane.WARNING_MESSAGE;
+                       break;
+               case ERROR_MESSAGE:
+                       joption_message_type = JOptionPane.ERROR_MESSAGE;
+                       break;
+               }
+               JOptionPane.showMessageDialog(owner,
+                                             message,
+                                             title,
+                                             joption_message_type);
+       }
+
+       public void show_message(String in_message, String in_title, int in_message_type) {
+               final String message = in_message;
+               final String title = in_title;
+               final int message_type = in_message_type;
+               Runnable r = new Runnable() {
+                               public void run() {
+                                       try {
+                                               show_message_internal(message, title, message_type);
+                                       } catch (Exception ex) {
+                                       }
+                               }
+                       };
+               SwingUtilities.invokeLater(r);
+       }
+}
diff --git a/altosuilib/AltosEepromSelect.java b/altosuilib/AltosEepromSelect.java
new file mode 100644 (file)
index 0000000..293d304
--- /dev/null
@@ -0,0 +1,183 @@
+/*
+ * Copyright © 2011 Keith Packard <keithp@keithp.com>
+ *
+ * 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.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+ */
+
+package org.altusmetrum.altosuilib_2;
+
+import javax.swing.*;
+import javax.swing.border.*;
+import java.awt.*;
+import java.awt.event.*;
+import org.altusmetrum.altoslib_4.*;
+
+class AltosEepromItem implements ActionListener {
+       AltosEepromLog  log;
+       JLabel          label;
+       JCheckBox       action;
+       JCheckBox       delete;
+
+       public void actionPerformed(ActionEvent e) {
+               log.selected = action.isSelected();
+       }
+
+       public AltosEepromItem(AltosEepromLog in_log) {
+               log = in_log;
+
+               String  text;
+               if (log.year != 0)
+                       text = String.format("Flight #%02d - %04d-%02d-%02d",
+                                            log.flight, log.year, log.month, log.day);
+               else
+                       text = String.format("Flight #%02d", log.flight);
+
+               label = new JLabel(text);
+
+               action = new JCheckBox("", log.selected);
+               action.addActionListener(this);
+       }
+}
+
+public class AltosEepromSelect extends AltosUIDialog implements ActionListener {
+       //private JList                 list;
+       private JFrame                  frame;
+       JButton                         ok;
+       JButton                         cancel;
+       boolean                         success;
+
+       /* Listen for events from our buttons */
+       public void actionPerformed(ActionEvent e) {
+               String  cmd = e.getActionCommand();
+
+               if (cmd.equals("ok"))
+                       success = true;
+               setVisible(false);
+       }
+
+       public boolean run() {
+               success = false;
+               setLocationRelativeTo(frame);
+               setVisible(true);
+               return success;
+       }
+
+       public AltosEepromSelect (JFrame in_frame,
+                                 AltosEepromList flights,
+                                 String action) {
+
+               super(in_frame, String.format("Flight list for serial %d", flights.config_data.serial), true);
+               frame = in_frame;
+
+               /* Create the container for the dialog */
+               Container contentPane = getContentPane();
+
+               /* First, we create a pane containing the dialog's header/title */
+               JLabel  selectLabel = new JLabel(String.format ("Select flights to %s", action), SwingConstants.CENTER);
+
+               JPanel  labelPane = new JPanel();
+               labelPane.setLayout(new BoxLayout(labelPane, BoxLayout.X_AXIS));
+               labelPane.setBorder(BorderFactory.createEmptyBorder(10, 0, 10, 0));
+               labelPane.add(Box.createHorizontalGlue());
+               labelPane.add(selectLabel);
+               labelPane.add(Box.createHorizontalGlue());
+
+               /* Add the header to the container. */
+               contentPane.add(labelPane, BorderLayout.PAGE_START);
+
+
+               /* Now we create the evilness that is a GridBag for the flight details */
+               GridBagConstraints c;
+               Insets i = new Insets(4,4,4,4);
+               JPanel flightPane = new JPanel();
+               flightPane.setLayout(new GridBagLayout());
+               flightPane.setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED));
+
+               /* Flight Header */
+               c = new GridBagConstraints();
+               c.gridx = 0; c.gridy = 0;
+               c.fill = GridBagConstraints.NONE;
+               c.weightx = 0.5;
+               c.anchor = GridBagConstraints.CENTER;
+               c.insets = i;
+               JLabel flightHeaderLabel = new JLabel("Flight");
+               flightPane.add(flightHeaderLabel, c);
+
+               /* Download Header */
+               c = new GridBagConstraints();
+               c.gridx = 1; c.gridy = 0;
+               c.fill = GridBagConstraints.NONE;
+               c.weightx = 0.5;
+               c.anchor = GridBagConstraints.CENTER;
+               c.insets = i;
+               JLabel downloadHeaderLabel = new JLabel(action);
+               flightPane.add(downloadHeaderLabel, c);
+
+               /* Add the flights to the GridBag */
+               AltosEepromItem item;
+               int itemNumber = 1;
+               for (AltosEepromLog flight : flights) {
+                       /* Create a flight object with handlers and
+                        * appropriate UI items
+                        */
+                       item = new AltosEepromItem(flight);
+
+                       /* Add a decriptive label for the flight */
+                       c = new GridBagConstraints();
+                       c.gridx = 0; c.gridy = itemNumber;
+                       c.fill = GridBagConstraints.NONE;
+                       c.weightx = 0.5;
+                       c.anchor = GridBagConstraints.CENTER;
+                       c.insets = i;
+                       flightPane.add(item.label, c);
+
+                       /* Add action checkbox for the flight */
+                       c = new GridBagConstraints();
+                       c.gridx = 1; c.gridy = itemNumber;
+                       c.fill = GridBagConstraints.NONE;
+                       c.weightx = 0.5;
+                       c.anchor = GridBagConstraints.CENTER;
+                       c.insets = i;
+                       flightPane.add(item.action, c);
+
+                       itemNumber++;
+               }
+
+               /* Add the GridBag to the container */
+               contentPane.add(flightPane, BorderLayout.CENTER);
+
+               /* Create the dialog buttons */
+               ok = new JButton("OK");
+               ok.addActionListener(this);
+               ok.setActionCommand("ok");
+
+               cancel = new JButton("Cancel");
+               cancel.addActionListener(this);
+               cancel.setActionCommand("cancel");
+
+               JPanel  buttonPane = new JPanel();
+               buttonPane.setLayout(new BoxLayout(buttonPane, BoxLayout.X_AXIS));
+               buttonPane.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
+               buttonPane.add(Box.createHorizontalGlue());
+               buttonPane.add(cancel);
+               buttonPane.add(Box.createRigidArea(new Dimension(10, 0)));
+               buttonPane.add(ok);
+
+               /* Add the buttons to the container */
+               contentPane.add(buttonPane, BorderLayout.PAGE_END);
+
+               /* Pack the window! */
+               pack();
+       }
+}
index b4c4f79fb5606929ec7a62c0458d8ee3774bf0b6..4dc4c47f5b735588971929d89a9c0e8ec2bc1630 100644 (file)
@@ -46,6 +46,10 @@ altosuilib_JAVA = \
        AltosSerialInUseException.java \
        AltosConfigFreqUI.java \
        AltosScanUI.java \
        AltosSerialInUseException.java \
        AltosConfigFreqUI.java \
        AltosScanUI.java \
+       AltosEepromDelete.java \
+       AltosEepromManage.java \
+       AltosEepromMonitorUI.java \
+       AltosEepromSelect.java \
        AltosBTDevice.java \
        AltosBTDeviceIterator.java \
        AltosBTManage.java \
        AltosBTDevice.java \
        AltosBTDeviceIterator.java \
        AltosBTManage.java \
index 34509e4ec92ca95817bc9dc77c5ea3dce0b91ded..ad46fbdd865b755ccb26c96339531c62b5e3bfee 100644 (file)
@@ -217,6 +217,7 @@ public class TeleGPS extends AltosUIFrame implements AltosFlightDisplay, AltosFo
        }
 
        void download(){
        }
 
        void download(){
+               new AltosEepromManage(this, AltosLib.product_telegps);
        }
 
        void configure() {
        }
 
        void configure() {