altosui: Make AltosEepromDownload not swing-dependent
authorKeith Packard <keithp@keithp.com>
Tue, 12 Nov 2013 05:28:30 +0000 (14:28 +0900)
committerKeith Packard <keithp@keithp.com>
Tue, 12 Nov 2013 05:28:30 +0000 (14:28 +0900)
Will move to altoslib

Signed-off-by: Keith Packard <keithp@keithp.com>
altoslib/AltosEepromMonitor.java
altosui/AltosEepromDownload.java
altosui/AltosEepromManage.java
altosui/AltosEepromMonitorUI.java

index 77655903539ba4662ca66068c4e8f77ee1786961..02cbed1e258fd91a02e2a6806d61b35c68443e66 100644 (file)
@@ -33,9 +33,15 @@ public interface AltosEepromMonitor {
 
        public void set_thread(Thread eeprom_thread);
 
 
        public void set_thread(Thread eeprom_thread);
 
+       final static int INFO_MESSAGE = 0;
+       final static int WARNING_MESSAGE = 1;
+       final static int ERROR_MESSAGE = 2;
+
+       public void show_message(String message, String title, int message_type);
+
        public void start();
 
        public void start();
 
-       public void done();
+       public void done(boolean success);
 
        public void reset();
 }
 
        public void reset();
 }
index 27bde7995c93f976404062d42fa801c795b55115..6ce420d323523eb40d6277d0f5617f3cfb78b744 100644 (file)
@@ -17,8 +17,6 @@
 
 package altosui;
 
 
 package altosui;
 
-import java.awt.event.*;
-import javax.swing.*;
 import java.io.*;
 import java.util.*;
 import java.text.*;
 import java.io.*;
 import java.util.*;
 import java.text.*;
@@ -27,7 +25,6 @@ import org.altusmetrum.altoslib_2.*;
 
 public class AltosEepromDownload implements Runnable {
 
 
 public class AltosEepromDownload implements Runnable {
 
-       JFrame                  frame;
        AltosSerial             serial_line;
        boolean                 remote;
        Thread                  eeprom_thread;
        AltosSerial             serial_line;
        boolean                 remote;
        Thread                  eeprom_thread;
@@ -38,7 +35,6 @@ public class AltosEepromDownload implements Runnable {
        LinkedList<String>      eeprom_pending;
 
        AltosEepromList         flights;
        LinkedList<String>      eeprom_pending;
 
        AltosEepromList         flights;
-       ActionListener          listener;
        boolean                 success;
        ParseException          parse_exception;
        AltosState              state;
        boolean                 success;
        ParseException          parse_exception;
        AltosState              state;
@@ -190,28 +186,6 @@ public class AltosEepromDownload implements Runnable {
                }
        }
 
                }
        }
 
-       private void show_message_internal(String message, String title, int message_type) {
-               JOptionPane.showMessageDialog(frame,
-                                             message,
-                                             title,
-                                             message_type);
-       }
-
-       private 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);
-       }
-
        public void run () {
                try {
                        boolean failed = false;
        public void run () {
                try {
                        boolean failed = false;
@@ -230,28 +204,28 @@ public class AltosEepromDownload implements Runnable {
                                }
                                if (parse_exception != null) {
                                        failed = true;
                                }
                                if (parse_exception != null) {
                                        failed = true;
-                                       show_message(String.format("Flight %d download error\n%s\nValid log data saved",
-                                                                  log.flight,
-                                                                  parse_exception.getMessage()),
-                                                    serial_line.device.toShortString(),
-                                                    JOptionPane.WARNING_MESSAGE);
+                                       monitor.show_message(String.format("Flight %d download error\n%s\nValid log data saved",
+                                                                          log.flight,
+                                                                          parse_exception.getMessage()),
+                                                            serial_line.device.toShortString(),
+                                                            AltosEepromMonitor.WARNING_MESSAGE);
                                }
                        }
                        success = !failed;
                } catch (IOException ee) {
                                }
                        }
                        success = !failed;
                } catch (IOException ee) {
-                       show_message(ee.getLocalizedMessage(),
-                                    serial_line.device.toShortString(),
-                                    JOptionPane.ERROR_MESSAGE);
+                       monitor.show_message(ee.getLocalizedMessage(),
+                                            serial_line.device.toShortString(),
+                                            AltosEepromMonitor.ERROR_MESSAGE);
                } catch (InterruptedException ie) {
                } catch (InterruptedException ie) {
-                       show_message(String.format("Connection to \"%s\" interrupted",
-                                                  serial_line.device.toShortString()),
-                                    "Connection Interrupted",
-                                    JOptionPane.ERROR_MESSAGE);
+                       monitor.show_message(String.format("Connection to \"%s\" interrupted",
+                                                          serial_line.device.toShortString()),
+                                            "Connection Interrupted",
+                                            AltosEepromMonitor.ERROR_MESSAGE);
                } catch (TimeoutException te) {
                } catch (TimeoutException te) {
-                       show_message(String.format("Connection to \"%s\" failed",
-                                                  serial_line.device.toShortString()),
-                                    "Connection Failed",
-                                    JOptionPane.ERROR_MESSAGE);
+                       monitor.show_message(String.format("Connection to \"%s\" failed",
+                                                          serial_line.device.toShortString()),
+                                            "Connection Failed",
+                                            AltosEepromMonitor.ERROR_MESSAGE);
                } finally {
                        if (remote) {
                                try {
                } finally {
                        if (remote) {
                                try {
@@ -261,20 +235,7 @@ public class AltosEepromDownload implements Runnable {
                        }
                        serial_line.flush_output();
                }
                        }
                        serial_line.flush_output();
                }
-               monitor.done();
-               if (listener != null) {
-                       Runnable r = new Runnable() {
-                                       public void run() {
-                                               try {
-                                                       listener.actionPerformed(new ActionEvent(this,
-                                                                                                success ? 1 : 0,
-                                                                                                "download"));
-                                               } catch (Exception ex) {
-                                               }
-                                       }
-                               };
-                       SwingUtilities.invokeLater(r);
-               }
+               monitor.done(success);
        }
 
        public void start() {
        }
 
        public void start() {
@@ -282,25 +243,20 @@ public class AltosEepromDownload implements Runnable {
                eeprom_thread.start();
        }
 
                eeprom_thread.start();
        }
 
-       public void addActionListener(ActionListener l) {
-               listener = l;
-       }
-
-       public AltosEepromDownload(JFrame given_frame,
+       public AltosEepromDownload(AltosEepromMonitor given_monitor,
                                   AltosSerial given_serial_line,
                                   boolean given_remote,
                                   AltosEepromList given_flights) {
 
                                   AltosSerial given_serial_line,
                                   boolean given_remote,
                                   AltosEepromList given_flights) {
 
-               frame = given_frame;
+               monitor = given_monitor;
                serial_line = given_serial_line;
                serial_line = given_serial_line;
-               serial_line.set_frame(frame);
                remote = given_remote;
                flights = given_flights;
                success = false;
 
                remote = given_remote;
                flights = given_flights;
                success = false;
 
-               monitor = new AltosEepromMonitorUI(given_frame);
                monitor.set_states(Altos.ao_flight_boost, Altos.ao_flight_landed);
 
                monitor.set_thread(eeprom_thread);
                monitor.set_states(Altos.ao_flight_boost, Altos.ao_flight_landed);
 
                monitor.set_thread(eeprom_thread);
+               monitor.start();
        }
 }
        }
 }
index b2d8a130fba1bbe11db4c1ec0a349c726e7e4e34..da0a977733083696bacd66870a42f5118ddb6646 100644 (file)
@@ -133,11 +133,13 @@ public class AltosEepromManage implements ActionListener {
                                        for (AltosEepromLog flight : flights)
                                                any_selected = any_selected || flight.selected;
                                        if (any_selected) {
                                        for (AltosEepromLog flight : flights)
                                                any_selected = any_selected || flight.selected;
                                        if (any_selected) {
-                                               download = new AltosEepromDownload(frame,
+                                               AltosEepromMonitorUI monitor = new AltosEepromMonitorUI(frame);
+                                               monitor.addActionListener(this);
+                                               serial_line.set_frame(frame);
+                                               download = new AltosEepromDownload(monitor,
                                                                                   serial_line,
                                                                                   remote,
                                                                                   flights);
                                                                                   serial_line,
                                                                                   remote,
                                                                                   flights);
-                                               download.addActionListener(this);
                                                /*
                                                 * Start flight log download
                                                 */
                                                /*
                                                 * Start flight log download
                                                 */
index ddd1a564d1ef3acd6370f6a0523754d715fc6792..6ad4ca5c54a1f5cd0330e70af8efe15823b19bb9 100644 (file)
@@ -24,7 +24,7 @@ import org.altusmetrum.altosuilib_1.*;
 import org.altusmetrum.altoslib_2.*;
 
 public class AltosEepromMonitorUI extends AltosUIDialog implements AltosEepromMonitor {
 import org.altusmetrum.altoslib_2.*;
 
 public class AltosEepromMonitorUI extends AltosUIDialog implements AltosEepromMonitor {
-
+       JFrame          owner;
        Container       pane;
        Box             box;
        JLabel          serial_label;
        Container       pane;
        Box             box;
        JLabel          serial_label;
@@ -36,10 +36,13 @@ public class AltosEepromMonitorUI extends AltosUIDialog implements AltosEepromMo
        JButton         cancel;
        JProgressBar    pbar;
        int             min_state, max_state;
        JButton         cancel;
        JProgressBar    pbar;
        int             min_state, max_state;
+       ActionListener  listener;
 
        public AltosEepromMonitorUI(JFrame owner) {
                super (owner, "Download Flight Data", false);
 
 
        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);
                GridBagConstraints c;
                Insets il = new Insets(4,4,4,4);
                Insets ir = new Insets(4,4,4,4);
@@ -129,6 +132,10 @@ public class AltosEepromMonitorUI extends AltosUIDialog implements AltosEepromMo
                setLocationRelativeTo(owner);
        }
 
                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_states(int min_state, int max_state) {
                this.min_state = min_state;
                this.max_state = max_state;
@@ -136,7 +143,7 @@ public class AltosEepromMonitorUI extends AltosUIDialog implements AltosEepromMo
 
        public void set_thread(Thread in_eeprom_thread) {
                final Thread eeprom_thread = in_eeprom_thread;
 
        public void set_thread(Thread in_eeprom_thread) {
                final Thread eeprom_thread = in_eeprom_thread;
-               addActionListener(new ActionListener() {
+               cancel.addActionListener(new ActionListener() {
                                public void actionPerformed(ActionEvent e) {
                                        if (eeprom_thread != null)
                                                eeprom_thread.interrupt();
                                public void actionPerformed(ActionEvent e) {
                                        if (eeprom_thread != null)
                                                eeprom_thread.interrupt();
@@ -148,10 +155,6 @@ public class AltosEepromMonitorUI extends AltosUIDialog implements AltosEepromMo
                setVisible(true);
        }
 
                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;
        private void set_value_internal(String state_name, int state, int state_block, int block) {
                if (state_block > 100)
                        state_block = 100;
@@ -232,16 +235,20 @@ public class AltosEepromMonitorUI extends AltosUIDialog implements AltosEepromMo
                SwingUtilities.invokeLater(r);
        }
 
                SwingUtilities.invokeLater(r);
        }
 
-       private void done_internal() {
+       private void done_internal(boolean success) {
+               listener.actionPerformed(new ActionEvent(this,
+                                                        success ? 1 : 0,
+                                                        "download"));
                setVisible(false);
                dispose();
        }
 
                setVisible(false);
                dispose();
        }
 
-       public void done() {
+       public void done(boolean in_success) {
+               final boolean success = in_success;
                Runnable r = new Runnable() {
                                public void run() {
                                        try {
                Runnable r = new Runnable() {
                                public void run() {
                                        try {
-                                               done_internal();
+                                               done_internal(success);
                                        } catch (Exception ex) {
                                        }
                                }
                                        } catch (Exception ex) {
                                        }
                                }
@@ -266,4 +273,39 @@ public class AltosEepromMonitorUI extends AltosUIDialog implements AltosEepromMo
                        };
                SwingUtilities.invokeLater(r);
        }
                        };
                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);
+       }
 }
 }