Merge branch 'micropeak-1.1'
[fw/altos] / altosui / AltosConfigUI.java
index eddb223ffda155a942facc12b87f05d7d24114ff..2c3435c18a47494834663d00c1626c9041399dc8 100644 (file)
@@ -20,24 +20,15 @@ package altosui;
 import java.awt.*;
 import java.awt.event.*;
 import javax.swing.*;
-import javax.swing.filechooser.FileNameExtensionFilter;
-import javax.swing.table.*;
 import javax.swing.event.*;
-import java.io.*;
-import java.util.*;
-import java.text.*;
-import java.util.prefs.*;
-import java.util.concurrent.LinkedBlockingQueue;
-
-import libaltosJNI.*;
+import org.altusmetrum.AltosLib.*;
 
 public class AltosConfigUI
        extends AltosDialog
-       implements ActionListener, ItemListener, DocumentListener
+       implements ActionListener, ItemListener, DocumentListener, AltosConfigValues
 {
 
        Container       pane;
-       Box             box;
        JLabel          product_label;
        JLabel          version_label;
        JLabel          serial_label;
@@ -70,11 +61,15 @@ public class AltosConfigUI
        JComboBox       pad_orientation_value;
        JTextField      callsign_value;
 
+       JButton         pyro;
+
        JButton         save;
        JButton         reset;
        JButton         reboot;
        JButton         close;
 
+       AltosPyro[]     pyros;
+
        ActionListener  listener;
 
        static String[] main_deploy_values = {
@@ -518,6 +513,20 @@ public class AltosConfigUI
                set_pad_orientation_tool_tip();
                row++;
 
+               /* Pyro channels */
+               c = new GridBagConstraints();
+               c.gridx = 4; c.gridy = row;
+               c.gridwidth = 4;
+               c.fill = GridBagConstraints.HORIZONTAL;
+               c.anchor = GridBagConstraints.LINE_START;
+               c.insets = il;
+               c.ipady = 5;
+               pyro = new JButton("Configure Pyro Channels");
+               pane.add(pyro, c);
+               pyro.addActionListener(this);
+               pyro.setActionCommand("Pyro");
+               row++;
+
                /* Buttons */
                c = new GridBagConstraints();
                c.gridx = 0; c.gridy = row;
@@ -590,10 +599,30 @@ public class AltosConfigUI
                return true;
        }
 
+       void set_dirty() {
+               dirty = true;
+               save.setEnabled(true);
+       }
+
+       public void set_clean() {
+               dirty = false;
+               save.setEnabled(false);
+       }
+
+       AltosConfigPyroUI       pyro_ui;
+
        /* Listen for events from our buttons */
        public void actionPerformed(ActionEvent e) {
                String  cmd = e.getActionCommand();
 
+               if (cmd.equals("Pyro")) {
+                       if (pyro_ui == null && pyros != null) {
+                               pyro_ui = new AltosConfigPyroUI(this, pyros);
+                               pyro_ui.make_visible();
+                       }
+                       return;
+               }
+
                if (cmd.equals("Close") || cmd.equals("Reboot"))
                        if (!check_dirty(cmd))
                                return;
@@ -602,25 +631,25 @@ public class AltosConfigUI
                        setVisible(false);
                        dispose();
                }
-               dirty = false;
+               set_clean();
        }
 
        /* ItemListener interface method */
        public void itemStateChanged(ItemEvent e) {
-               dirty = true;
+               set_dirty();
        }
 
        /* DocumentListener interface methods */
        public void changedUpdate(DocumentEvent e) {
-               dirty = true;
+               set_dirty();
        }
 
        public void insertUpdate(DocumentEvent e) {
-               dirty = true;
+               set_dirty();
        }
 
        public void removeUpdate(DocumentEvent e) {
-               dirty = true;
+               set_dirty();
        }
 
        /* Let the config code hook on a listener */
@@ -655,6 +684,7 @@ public class AltosConfigUI
 
        public void set_apogee_delay(int new_apogee_delay) {
                apogee_delay_value.setSelectedItem(Integer.toString(new_apogee_delay));
+               apogee_delay_value.setEnabled(new_apogee_delay >= 0);
        }
 
        public int apogee_delay() {
@@ -663,6 +693,7 @@ public class AltosConfigUI
 
        public void set_apogee_lockout(int new_apogee_lockout) {
                apogee_lockout_value.setSelectedItem(Integer.toString(new_apogee_lockout));
+               apogee_lockout_value.setEnabled(new_apogee_lockout >= 0);
        }
 
        public int apogee_lockout() {
@@ -733,8 +764,7 @@ public class AltosConfigUI
        }
 
        public void set_flight_log_max(int new_flight_log_max) {
-               if (new_flight_log_max == 0)
-                       flight_log_max_value.setEnabled(false);
+               flight_log_max_value.setEnabled(new_flight_log_max > 0);
                flight_log_max_value.setSelectedItem(Integer.toString(new_flight_log_max));
                set_flight_log_max_tool_tip();
        }
@@ -749,12 +779,12 @@ public class AltosConfigUI
        }
 
        public void set_flight_log_max_limit(int flight_log_max_limit) {
-               boolean any_added = false;
+               //boolean       any_added = false;
                flight_log_max_value.removeAllItems();
                for (int i = 0; i < flight_log_max_values.length; i++) {
                        if (Integer.parseInt(flight_log_max_values[i]) < flight_log_max_limit){
                                flight_log_max_value.addItem(flight_log_max_values[i]);
-                               any_added = true;
+                               //any_added = true;
                        }
                }
                flight_log_max_value.addItem(String.format("%d", flight_log_max_limit));
@@ -801,7 +831,16 @@ public class AltosConfigUI
                        return -1;
        }
 
-       public void set_clean() {
-               dirty = false;
+       public void set_pyros(AltosPyro[] new_pyros) {
+               pyros = new_pyros;
+               pyro.setEnabled(pyros != null);
+               if (pyros != null && pyro_ui != null)
+                       pyro_ui.set_pyros(pyros);
+       }
+
+       public AltosPyro[] pyros() {
+               if (pyro_ui != null)
+                       pyros = pyro_ui.get_pyros();
+               return pyros;
        }
 }