From: Keith Packard Date: Sun, 6 Apr 2014 01:14:35 +0000 (-0700) Subject: altosui: Add ignitor tab for TeleMega extra ignitors X-Git-Tag: 1.3.2.2~146 X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=commitdiff_plain;h=9cb10d73fee0e3f36c778fd2a9c9992b87669fe2;hp=ca66a035edecd7feffcd22257d3413ce0e189c07 altosui: Add ignitor tab for TeleMega extra ignitors Show the current state of the additional ignitors in another tab; there's not really room in the 'Pad' tab. Signed-off-by: Keith Packard --- diff --git a/altosui/AltosFlightUI.java b/altosui/AltosFlightUI.java index e8cf7f08..aac4c9b0 100644 --- a/altosui/AltosFlightUI.java +++ b/altosui/AltosFlightUI.java @@ -32,6 +32,7 @@ public class AltosFlightUI extends AltosUIFrame implements AltosFlightDisplay, A JTabbedPane pane; AltosPad pad; + AltosIgnitor ignitor; AltosAscent ascent; AltosDescent descent; AltosLanded landed; @@ -40,6 +41,7 @@ public class AltosFlightUI extends AltosUIFrame implements AltosFlightDisplay, A boolean has_map; boolean has_companion; boolean has_state; + boolean has_ignitor; private AltosFlightStatus flightStatus; private AltosInfoTable flightInfo; @@ -73,6 +75,7 @@ public class AltosFlightUI extends AltosUIFrame implements AltosFlightDisplay, A public void reset() { pad.reset(); + ignitor.reset(); ascent.reset(); descent.reset(); landed.reset(); @@ -82,6 +85,7 @@ public class AltosFlightUI extends AltosUIFrame implements AltosFlightDisplay, A public void set_font() { pad.set_font(); + ignitor.set_font(); ascent.set_font(); descent.set_font(); landed.set_font(); @@ -130,6 +134,19 @@ public class AltosFlightUI extends AltosUIFrame implements AltosFlightDisplay, A flightStatus.show(state, listener_state); flightInfo.show(state, listener_state); + if (ignitor.should_show(state)) { + if (!has_ignitor) { + pane.add("Ignitor", ignitor); + has_ignitor = true; + } + ignitor.show(state, listener_state); + } else { + if (has_ignitor) { + pane.remove(ignitor); + has_ignitor = false; + } + } + if (state.companion != null) { if (!has_companion) { pane.add("Companion", companion); @@ -274,6 +291,7 @@ public class AltosFlightUI extends AltosUIFrame implements AltosFlightDisplay, A pad = new AltosPad(); pane.add("Status", pad); + ignitor = new AltosIgnitor(); ascent = new AltosAscent(); descent = new AltosDescent(); landed = new AltosLanded(reader); diff --git a/altosui/AltosIgnitor.java b/altosui/AltosIgnitor.java new file mode 100644 index 00000000..fcab7427 --- /dev/null +++ b/altosui/AltosIgnitor.java @@ -0,0 +1,198 @@ +/* + * Copyright © 2014 Keith Packard + * + * 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 javax.swing.*; +import org.altusmetrum.altoslib_3.*; + +public class AltosIgnitor extends JComponent implements AltosFlightDisplay { + GridBagLayout layout; + + public class LaunchStatus { + 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 set_font() { + label.setFont(Altos.label_font); + value.setFont(Altos.value_font); + } + + 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 static String ignitor_name(int i) { + return String.format("Ignitor %c", 'A' + i); + } + + 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; + } + } + + Ignitor[] ignitors; + + public void reset() { + if (ignitors == null) + return; + for (int i = 0; i < ignitors.length; i++) + ignitors[i].reset(); + } + + public void set_font() { + if (ignitors == null) + return; + for (int i = 0; i < ignitors.length; i++) + ignitors[i].set_font(); + } + + 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; + } + + public boolean should_show(AltosState state) { + if (state == null) + return false; + if (state.ignitor_voltage == null) + return false; + return state.ignitor_voltage.length > 0; + } + + void make_ignitors(AltosState state) { + int n = state == null ? 0 : state.ignitor_voltage.length; + + if (n > 0) { + + 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); + } + } else { + if (ignitors != null) { + for (int i = 0; i < n; i++) + ignitors[i].dispose(); + ignitors = null; + setVisible(false); + } + } + } + + public String getName() { + return "Ignitors"; + } + + public AltosIgnitor() { + make_ignitors(null); + } +} diff --git a/altosui/Makefile.am b/altosui/Makefile.am index 7829a24c..3a2a1863 100644 --- a/altosui/Makefile.am +++ b/altosui/Makefile.am @@ -49,6 +49,7 @@ altosui_JAVA = \ Altos.java \ AltosIdleMonitorUI.java \ AltosIgniteUI.java \ + AltosIgnitor.java \ AltosLaunch.java \ AltosLaunchUI.java \ AltosInfoTable.java \