altoslib: Start moving eeprom download logic to altoslib
authorKeith Packard <keithp@keithp.com>
Tue, 12 Nov 2013 05:06:20 +0000 (14:06 +0900)
committerKeith Packard <keithp@keithp.com>
Tue, 12 Nov 2013 05:06:20 +0000 (14:06 +0900)
Signed-off-by: Keith Packard <keithp@keithp.com>
altoslib/AltosEepromMonitor.java [new file with mode: 0644]
altoslib/Makefile.am
altosui/AltosEepromDownload.java
altosui/AltosEepromMonitorUI.java [new file with mode: 0644]
altosui/Makefile.am

diff --git a/altoslib/AltosEepromMonitor.java b/altoslib/AltosEepromMonitor.java
new file mode 100644 (file)
index 0000000..7765590
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+ * Copyright © 2013 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.altoslib_2;
+
+import org.altusmetrum.altosuilib_1.*;
+
+public interface AltosEepromMonitor {
+
+       public void set_states(int min_state, int max_state);
+
+       public void set_value(String in_state_name, int in_state, int in_state_block, int in_block);
+
+       public void set_serial(int in_serial);
+
+       public void set_flight(int in_flight);
+
+       public void set_filename(String in_file);
+
+       public void set_thread(Thread eeprom_thread);
+
+       public void start();
+
+       public void done();
+
+       public void reset();
+}
index c1cf053cc257aaaa0ddafef3ecb86e06f61a368c..2cf7b63dd19de2b1c37f503604f1baf35fd54ada 100644 (file)
@@ -43,6 +43,7 @@ altoslib_JAVA = \
        AltosEepromMega.java \
        AltosEepromMetrum2.java \
        AltosEepromMini.java \
+       AltosEepromMonitor.java \
        AltosFile.java \
        AltosFlash.java \
        AltosFlashListener.java \
index 7ccf26a5e359622463b6a8799b8f768cf23eaa54..27bde7995c93f976404062d42fa801c795b55115 100644 (file)
@@ -72,7 +72,7 @@ public class AltosEepromDownload implements Runnable {
 
                        eeprom_file = new FileWriter(eeprom_name);
                        if (eeprom_file != null) {
-                               monitor.set_file(eeprom_name.getName());
+                               monitor.set_filename(eeprom_name.getName());
                                FlushPending();
                                eeprom_pending = null;
                        }
@@ -298,12 +298,9 @@ public class AltosEepromDownload implements Runnable {
                flights = given_flights;
                success = false;
 
-               monitor = new AltosEepromMonitor(frame, Altos.ao_flight_boost, Altos.ao_flight_landed);
-               monitor.addActionListener(new ActionListener() {
-                               public void actionPerformed(ActionEvent e) {
-                                       if (eeprom_thread != null)
-                                               eeprom_thread.interrupt();
-                               }
-                       });
+               monitor = new AltosEepromMonitorUI(given_frame);
+               monitor.set_states(Altos.ao_flight_boost, Altos.ao_flight_landed);
+
+               monitor.set_thread(eeprom_thread);
        }
 }
diff --git a/altosui/AltosEepromMonitorUI.java b/altosui/AltosEepromMonitorUI.java
new file mode 100644 (file)
index 0000000..ddd1a56
--- /dev/null
@@ -0,0 +1,269 @@
+/*
+ * 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_1.*;
+import org.altusmetrum.altoslib_2.*;
+
+public class AltosEepromMonitorUI extends AltosUIDialog implements AltosEepromMonitor {
+
+       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 AltosEepromMonitorUI(JFrame owner) {
+               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);
+
+               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 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;
+               addActionListener(new ActionListener() {
+                               public void actionPerformed(ActionEvent e) {
+                                       if (eeprom_thread != null)
+                                               eeprom_thread.interrupt();
+                               }
+                       });
+       }
+
+       public void start() {
+               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_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() {
+               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_filename_internal("");
+       }
+
+       public void reset() {
+               Runnable r = new Runnable() {
+                               public void run() {
+                                       try {
+                                               reset_internal();
+                                       } catch (Exception ex) {
+                                       }
+                               }
+                       };
+               SwingUtilities.invokeLater(r);
+       }
+}
index 53f4ed0b90893c17ad17d4d5204f4fbc4cc82c71..b51f811296d6208fab2352b2475137b6e1135f59 100644 (file)
@@ -1,6 +1,6 @@
 
 JAVAROOT=classes
-AM_JAVACFLAGS=-encoding UTF-8 -Xlint:deprecation
+AM_JAVACFLAGS=-encoding UTF-8 -Xlint:deprecation -source 6
 
 man_MANS=altosui.1
 
@@ -37,7 +37,7 @@ altosui_JAVA = \
        AltosEepromDownload.java \
        AltosEepromList.java \
        AltosEepromManage.java \
-       AltosEepromMonitor.java \
+       AltosEepromMonitorUI.java \
        AltosEepromSelect.java \
        AltosFlashUI.java \
        AltosFlightDisplay.java \