altosui: Display current altitude in monitor idle Pad tab
[fw/altos] / altosui / AltosIgnitor.java
index 27917b307bb9555e35dee659f10ea5ac54dcf903..09dcdf93b39247e17001c4660524ebf7426294d2 100644 (file)
@@ -3,7 +3,8 @@
  *
  * 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.
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
  *
  * This program is distributed in the hope that it will be useful, but
  * WITHOUT ANY WARRANTY; without even the implied warranty of
 package altosui;
 
 import java.awt.*;
+import java.awt.event.*;
 import javax.swing.*;
-import org.altusmetrum.altoslib_4.*;
-import org.altusmetrum.altosuilib_2.*;
+import org.altusmetrum.altoslib_11.*;
+import org.altusmetrum.altosuilib_11.*;
 
-public class AltosIgnitor extends JComponent implements AltosFlightDisplay {
-       GridBagLayout   layout;
+public class AltosIgnitor extends AltosUIFlightTab {
 
-       public class LaunchStatus implements AltosFontListener, AltosUnitsListener {
-               JLabel          label;
-               JTextField      value;
-               AltosLights     lights;
-
-               void show(AltosState state, AltosListenerState listener_state) {}
-
-               void reset() {
-                       value.setText("");
-                       lights.set(false);
-               }
-
-               public void show() {
-                       label.setVisible(true);
-                       value.setVisible(true);
-                       lights.setVisible(true);
-               }
-
-               void show(String s) {
-                       show();
-                       value.setText(s);
-               }
-
-               void show(String format, double value) {
-                       show(String.format(format, value));
-               }
-
-               void show(String format, int value) {
-                       show(String.format(format, value));
-               }
-
-               public void hide() {
-                       label.setVisible(false);
-                       value.setVisible(false);
-                       lights.setVisible(false);
-               }
-
-               public void dispose() {
-                       hide();
-               }
-
-               public void font_size_changed(int font_size) {
-                       label.setFont(Altos.label_font);
-                       value.setFont(Altos.value_font);
-               }
-
-               public void units_changed(boolean imperial_units) {
-               }
-
-               public void set_label(String text) {
-                       label.setText(text);
-               }
-
-               public LaunchStatus (GridBagLayout layout, int y, String text) {
-                       GridBagConstraints      c = new GridBagConstraints();
-                       c.weighty = 1;
-
-                       lights = new AltosLights();
-                       c.gridx = 0; c.gridy = y;
-                       c.anchor = GridBagConstraints.CENTER;
-                       c.fill = GridBagConstraints.VERTICAL;
-                       c.weightx = 0;
-                       layout.setConstraints(lights, c);
-                       add(lights);
-
-                       label = new JLabel(text);
-                       label.setFont(Altos.label_font);
-                       label.setHorizontalAlignment(SwingConstants.LEFT);
-                       c.gridx = 1; c.gridy = y;
-                       c.insets = new Insets(Altos.tab_elt_pad, Altos.tab_elt_pad, Altos.tab_elt_pad, Altos.tab_elt_pad);
-                       c.anchor = GridBagConstraints.WEST;
-                       c.fill = GridBagConstraints.VERTICAL;
-                       c.weightx = 0;
-                       layout.setConstraints(label, c);
-                       add(label);
-
-                       value = new JTextField(Altos.text_width);
-                       value.setFont(Altos.value_font);
-                       value.setHorizontalAlignment(SwingConstants.RIGHT);
-                       c.gridx = 2; c.gridy = y;
-                       c.anchor = GridBagConstraints.WEST;
-                       c.fill = GridBagConstraints.BOTH;
-                       c.weightx = 1;
-                       layout.setConstraints(value, c);
-                       add(value);
+       public class Ignitor extends AltosUIUnitsIndicator {
+               int             igniter;
 
+               public double value(AltosState state, int i) {
+                       if (state.igniter_voltage == null ||
+                           state.igniter_voltage.length < igniter)
+                               return AltosLib.MISSING;
+                       return state.igniter_voltage[igniter];
                }
-       }
 
-       public static String ignitor_name(int i) {
-               return String.format("Ignitor %c", 'A' + i);
-       }
+               public double good() { return AltosLib.ao_igniter_good; }
 
-       class Ignitor extends LaunchStatus {
-               int ignitor;
-
-               void show (AltosState state, AltosListenerState listener_state) {
-                       if (state == null || state.ignitor_voltage[ignitor] == AltosLib.MISSING) {
-                               hide();
-                       } else {
-                               show("%4.2f V", state.ignitor_voltage[ignitor]);
-                               lights.set(state.ignitor_voltage[ignitor] >= AltosLib.ao_igniter_good);
-                       }
-               }
-
-               public Ignitor (GridBagLayout layout, int y) {
-                       super(layout, y, String.format ("%s Voltage", ignitor_name(y)));
-                       ignitor = y;
+               public Ignitor (AltosUIFlightTab container, int y) {
+                       super(container, y, AltosConvert.voltage, String.format ("%s Voltage", AltosLib.igniter_name(y)), 1, true, 1);
+                       igniter = y;
                }
        }
 
-       Ignitor[] ignitors;
-
-       public void reset() {
-               if (ignitors == null)
-                       return;
-               for (int i = 0; i < ignitors.length; i++)
-                       ignitors[i].reset();
-       }
-
-       public void font_size_changed(int font_size) {
-               if (ignitors == null)
-                       return;
-               for (int i = 0; i < ignitors.length; i++)
-                       ignitors[i].font_size_changed(font_size);
-       }
-
-       public void units_changed(boolean imperial_units) {
-       }
+       Ignitor[] igniters;
 
        public void show(AltosState state, AltosListenerState listener_state) {
-               make_ignitors(state);
-               if (ignitors == null)
-                       return;
-               for (int i = 0; i < ignitors.length; i++)
-                       ignitors[i].show(state, listener_state);
-               return;
+               if (isShowing())
+                       make_igniters(state);
+               super.show(state, listener_state);
        }
 
        public boolean should_show(AltosState state) {
                if (state == null)
                        return false;
-               if (state.ignitor_voltage == null)
+               if (state.igniter_voltage == null)
                        return false;
-               return state.ignitor_voltage.length > 0;
+               return state.igniter_voltage.length > 0;
        }
 
-       void make_ignitors(AltosState state) {
-               int n = state == null ? 0 : state.ignitor_voltage.length;
+       void make_igniters(AltosState state) {
+               int n = (state == null || state.igniter_voltage == null) ? 0 : state.igniter_voltage.length;
+               int old_n = igniters == null ? 0 : igniters.length;
 
-               if (n > 0) {
+               if (n != old_n) {
 
-                       if (ignitors == null || ignitors.length != n) {
-                               layout = new GridBagLayout();
-
-                               setLayout(layout);
-                               ignitors = new Ignitor[n];
-                               for (int i = 0; i < n; i++)
-                                       ignitors[i] = new Ignitor(layout, i);
+                       if (igniters != null) {
+                               for (int i = 0; i < igniters.length; i++) {
+                                       remove(igniters[i]);
+                                       igniters[i].remove(this);
+                                       igniters = null;
+                               }
                        }
-               } else {
-                       if (ignitors != null) {
-                               for (int i = 0; i < n; i++)
-                                       ignitors[i].dispose();
-                               ignitors = null;
+
+                       if (n > 0) {
+                               setVisible(true);
+                               igniters = new Ignitor[n];
+                               for (int i = 0; i < n; i++) {
+                                       igniters[i] = new Ignitor(this, i);
+                                       add(igniters[i]);
+                               }
+                       } else
                                setVisible(false);
-                       }
                }
        }
 
        public String getName() {
                return "Ignitors";
        }
-
-       public AltosIgnitor() {
-               make_ignitors(null);
-       }
 }