altosui/altosuilib: Cleanup -Xlint:unchecked warnings
[fw/altos] / altosui / AltosConfigPyroUI.java
index 5cdaf5647f3bfe7a4ba000a98c3c07f722b3f8e3..cd42a3b0bef46797b000b7e6dd472684b072ead2 100644 (file)
@@ -21,12 +21,12 @@ import java.awt.*;
 import java.awt.event.*;
 import javax.swing.*;
 import javax.swing.event.*;
-import org.altusmetrum.AltosLib.*;
-import org.altusmetrum.altosuilib.*;
+import org.altusmetrum.altoslib_3.*;
+import org.altusmetrum.altosuilib_1.*;
 
 public class AltosConfigPyroUI
        extends AltosUIDialog
-       implements ItemListener, DocumentListener
+       implements ItemListener, DocumentListener, AltosUnitsListener, ActionListener
 {
        AltosConfigUI   owner;
        Container       pane;
@@ -45,13 +45,14 @@ public class AltosConfigPyroUI
                }
        }
 
-       class PyroItem implements ItemListener, DocumentListener
+       class PyroItem implements ItemListener, DocumentListener, AltosUnitsListener
        {
                public int              flag;
-               public JRadioButton     enable;
+               public JCheckBox        enable;
                public JTextField       value;
-               public JComboBox        combo;
+               public JComboBox<String>        combo;
                AltosConfigPyroUI       ui;
+               boolean                 setting;
 
                public void set_enable(boolean enable) {
                        if (value != null)
@@ -62,36 +63,59 @@ public class AltosConfigPyroUI
 
                public void itemStateChanged(ItemEvent e) {
                        set_enable(enable.isSelected());
-                       ui.set_dirty();
+                       if (!setting)
+                               ui.set_dirty();
                }
 
                public void changedUpdate(DocumentEvent e) {
-                       ui.set_dirty();
+                       if (!setting)
+                               ui.set_dirty();
                }
 
                public void insertUpdate(DocumentEvent e) {
-                       ui.set_dirty();
+                       if (!setting)
+                               ui.set_dirty();
                }
 
                public void removeUpdate(DocumentEvent e) {
-                       ui.set_dirty();
+                       if (!setting)
+                               ui.set_dirty();
+               }
+
+               public void units_changed(boolean imperial_units) {
+                       AltosUnits units = AltosPyro.pyro_to_units(flag);
+
+                       if (units != null) {
+                               try {
+                                       double v = units.parse(value.getText(), !imperial_units);
+                                       set(enabled(), v);
+                               } catch (NumberFormatException ne) {
+                                       set(enabled(), 0.0);
+                               }
+                       }
                }
 
                public void set(boolean new_enable, double new_value) {
+                       setting = true;
                        enable.setSelected(new_enable);
                        set_enable(new_enable);
                        if (value != null) {
                                double  scale = AltosPyro.pyro_to_scale(flag);
+                               double  unit_value = new_value;
+                               AltosUnits units = AltosPyro.pyro_to_units(flag);
+                               if (units != null)
+                                       unit_value = units.value(new_value);
                                String  format = "%6.0f";
                                if (scale >= 10)
                                        format = "%6.1f";
                                else if (scale >= 100)
                                        format = "%6.2f";
-                               value.setText(String.format(format, new_value));
+                               value.setText(String.format(format, unit_value));
                        }
                        if (combo != null)
                                if (new_value >= AltosLib.ao_flight_boost && new_value <= AltosLib.ao_flight_landed)
                                        combo.setSelectedIndex((int) new_value - AltosLib.ao_flight_boost);
+                       setting = false;
                }
 
                public boolean enabled() {
@@ -99,8 +123,12 @@ public class AltosConfigPyroUI
                }
 
                public double value() {
-                       if (value != null)
+                       if (value != null) {
+                               AltosUnits units = AltosPyro.pyro_to_units(flag);
+                               if (units != null)
+                                       return units.parse(value.getText());
                                return Double.parseDouble(value.getText());
+                       }
                        if (combo != null)
                                return combo.getSelectedIndex() + AltosLib.ao_flight_boost;
                        return 0;
@@ -118,10 +146,10 @@ public class AltosConfigPyroUI
                        c.fill = GridBagConstraints.NONE;
                        c.anchor = GridBagConstraints.LINE_START;
                        c.insets = il;
-                       enable = new JRadioButton();
+                       enable = new JCheckBox();
                        enable.addItemListener(this);
                        pane.add(enable, c);
-                       
+
                        if ((flag & AltosPyro.pyro_no_value) == 0) {
                                c = new GridBagConstraints();
                                c.gridx = x+1; c.gridy = y;
@@ -131,7 +159,7 @@ public class AltosConfigPyroUI
                                c.insets = il;
                                if ((flag & AltosPyro.pyro_state_value) != 0) {
                                        make_state_names();
-                                       combo = new JComboBox(state_names);
+                                       combo = new JComboBox<String>(state_names);
                                        combo.addItemListener(this);
                                        pane.add(combo, c);
                                } else {
@@ -143,7 +171,7 @@ public class AltosConfigPyroUI
                }
        }
 
-       class PyroColumn {
+       class PyroColumn implements AltosUnitsListener {
                public PyroItem[]       items;
                public JLabel           label;
                int                     channel;
@@ -166,17 +194,25 @@ public class AltosConfigPyroUI
                        for (int flag = 1; flag < AltosPyro.pyro_all; flag <<= 1) {
                                if ((AltosPyro.pyro_all & flag) != 0) {
                                        if (items[row].enabled()) {
-                                               System.out.printf ("Flag %x enabled\n", flag);
                                                p.flags |= flag;
                                                p.set_value(flag, items[row].value());
                                        }
                                        row++;
                                }
                        }
-                       System.out.printf ("Pyro %x %s\n", p.flags, p.toString());
                        return p;
                }
 
+               public void units_changed(boolean imperial_units) {
+                       int row = 0;
+                       for (int flag = 1; flag < AltosPyro.pyro_all; flag <<= 1) {
+                               if ((AltosPyro.pyro_all & flag) != 0) {
+                                       items[row].units_changed(imperial_units);
+                                       row++;
+                               }
+                       }
+               }
+
                public PyroColumn(AltosConfigPyroUI ui, int x, int y, int in_channel) {
 
                        channel = in_channel;
@@ -188,7 +224,7 @@ public class AltosConfigPyroUI
 
                        items = new PyroItem[nrow];
                        int row = 0;
-                       
+
                        GridBagConstraints      c;
                        c = new GridBagConstraints();
                        c.gridx = x; c.gridy = y;
@@ -196,7 +232,7 @@ public class AltosConfigPyroUI
                        c.fill = GridBagConstraints.NONE;
                        c.anchor = GridBagConstraints.CENTER;
                        c.insets = il;
-                       label = new JLabel(String.format("Pyro Channel %d", channel));
+                       label = new JLabel(String.format("Pyro Channel %c", 'A' + channel));
                        pane.add(label, c);
                        y++;
 
@@ -209,6 +245,7 @@ public class AltosConfigPyroUI
        }
 
        PyroColumn[]    columns;
+       JLabel[]        labels;
 
        public void set_pyros(AltosPyro[] pyros) {
                for (int i = 0; i < pyros.length; i++) {
@@ -244,6 +281,42 @@ public class AltosConfigPyroUI
                owner.set_dirty();
        }
 
+       public void units_changed(boolean imperial_units) {
+               for (int c = 0; c < columns.length; c++)
+                       columns[c].units_changed(imperial_units);
+               int r = 0;
+               for (int flag = 1; flag <= AltosPyro.pyro_all; flag <<= 1) {
+                       String n = AltosPyro.pyro_to_name(flag);
+                       if (n != null) {
+                               labels[r].setText(n);
+                               r++;
+                       }
+               }
+       }
+
+       /* A window listener to catch closing events and tell the config code */
+       class ConfigListener extends WindowAdapter {
+               AltosConfigPyroUI       ui;
+               AltosConfigUI           owner;
+
+               public ConfigListener(AltosConfigPyroUI this_ui, AltosConfigUI this_owner) {
+                       ui = this_ui;
+                       owner = this_owner;
+               }
+
+               public void windowClosing(WindowEvent e) {
+                       ui.setVisible(false);
+               }
+       }
+
+       /* Listen for events from our buttons */
+       public void actionPerformed(ActionEvent e) {
+               String  cmd = e.getActionCommand();
+
+               if (cmd.equals("Close"))
+                       setVisible(false);
+       }
+
        public AltosConfigPyroUI(AltosConfigUI in_owner, AltosPyro[] pyros) {
 
                super(in_owner, "Configure Pyro Channels", false);
@@ -255,6 +328,13 @@ public class AltosConfigPyroUI
                pane = getContentPane();
                pane.setLayout(new GridBagLayout());
 
+               int     nrow = 0;
+               for (int flag = 1; flag < AltosPyro.pyro_all; flag <<= 1)
+                       if ((flag & AltosPyro.pyro_all) != 0)
+                               nrow++;
+
+               labels = new JLabel[nrow];
+
                int     row = 1;
 
                for (int flag = 1; flag <= AltosPyro.pyro_all; flag <<= 1) {
@@ -270,6 +350,7 @@ public class AltosConfigPyroUI
                                c.insets = il;
                                JLabel label = new JLabel(n);
                                pane.add(label, c);
+                               labels[row-1] = label;
                                row++;
                        }
                }
@@ -280,6 +361,24 @@ public class AltosConfigPyroUI
                        columns[i] = new PyroColumn(this, i*2 + 1, 0, i);
                        columns[i].set(pyros[i]);
                }
+
+               c = new GridBagConstraints();
+               c.gridx = pyros.length*2-1;
+               c.fill = GridBagConstraints.HORIZONTAL;
+               c.gridwidth = 2;
+               c.gridy = 1000;
+               JButton close = new JButton("Close");
+               pane.add(close, c);
+               close.addActionListener(this);
+               close.setActionCommand("Close");
+
+               addWindowListener(new ConfigListener(this, owner));
+               AltosPreferences.register_units_listener(this);
+       }
+
+       public void dispose() {
+               AltosPreferences.unregister_units_listener(this);
+               super.dispose();
        }
 
        public void make_visible() {