altosuilib: Don't flicker missing voltages when changing units
authorKeith Packard <keithp@keithp.com>
Wed, 11 May 2016 06:04:23 +0000 (23:04 -0700)
committerKeith Packard <keithp@keithp.com>
Thu, 12 May 2016 06:22:15 +0000 (23:22 -0700)
For some reason, a value of MISSING -1 was getting used, which caused
displays to light up briefly with a weird value when switching between
metric and imperial units.

Signed-off-by: Keith Packard <keithp@keithp.com>
altosuilib/AltosUIUnitsIndicator.java
altosuilib/AltosUIVoltageIndicator.java

index a84bd0b2f1cd985fda652f8825e6d257f2feb456..1b900e54be306ea1cc83b212ebf72963ecb685b6 100644 (file)
@@ -46,10 +46,10 @@ public abstract class AltosUIUnitsIndicator extends AltosUIIndicator {
 
        public double[] last_values;
 
-       public void show(double... v) {
+       private void show(boolean force, double... v) {
                show();
                for (int i = 0; i < values.length; i++) {
-                       if (v[i] != last_values[i]) {
+                       if (force || v[i] != last_values[i]) {
                                String  value_text;
                                boolean good = false;
 
@@ -68,13 +68,19 @@ public abstract class AltosUIUnitsIndicator extends AltosUIIndicator {
                }
        }
 
+       boolean hide = false;
+
+       public void show(double... v) {
+               show(false, v);
+       }
+
        public void units_changed(boolean imperial_units) {
-               show(last_values);
+               if (!hide)
+                       show(true, last_values);
        }
 
        public void show (AltosState state, AltosListenerState listener_state) {
                double[] v = new double[values.length];
-               boolean hide = false;
 
                for (int i = 0; i < values.length; i++) {
                        if (state != null)
@@ -93,7 +99,7 @@ public abstract class AltosUIUnitsIndicator extends AltosUIIndicator {
 
        public void reset() {
                for (int i = 0; i < last_values.length; i++)
-                       last_values[i] = AltosLib.MISSING - 1;
+                       last_values[i] = AltosLib.MISSING;
        }
 
        public AltosUIUnitsIndicator (Container container, int x, int y, int label_width, AltosUnits units, String name, int number_values, boolean has_lights, int width) {
@@ -101,7 +107,7 @@ public abstract class AltosUIUnitsIndicator extends AltosUIIndicator {
                this.units = units;
                last_values = new double[values.length];
                for (int i = 0; i < last_values.length; i++)
-                       last_values[i] = AltosLib.MISSING - 1;
+                       last_values[i] = AltosLib.MISSING;
        }
 
        public AltosUIUnitsIndicator (Container container, int x, int y, AltosUnits units, String name, int number_values, boolean has_lights, int width) {
index d753b759e61d1b2a205f76639ba6cff120322eeb..ecf8bce9d792dde63fc1c55aff267736a6c86d9d 100644 (file)
@@ -30,7 +30,7 @@ public abstract class AltosUIVoltageIndicator extends AltosUIUnitsIndicator {
                return voltage(state);
        }
 
-       double last_voltage = -1;
+       double last_voltage = AltosLib.MISSING;
 
        public AltosUIVoltageIndicator (Container container, int x, int y, String name, int width) {
                super(container, x, y, AltosConvert.voltage, name, 1, true, width);