X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=blobdiff_plain;f=altosui%2FAltosAscent.java;h=10080efd47896b8bfd05a2b52f55b38636951331;hp=a05c44041ba2a91a4b681c9ceb3b7ad3080265b7;hb=2b57158737f85c7009658b3e923c66794f01bbdf;hpb=7894c27b2b2c3c46a7c107c8acd5977830f006cf diff --git a/altosui/AltosAscent.java b/altosui/AltosAscent.java index a05c4404..10080efd 100644 --- a/altosui/AltosAscent.java +++ b/altosui/AltosAscent.java @@ -17,374 +17,151 @@ package altosui; +import java.util.*; import java.awt.*; +import java.awt.event.*; import javax.swing.*; -import org.altusmetrum.AltosLib.*; +import org.altusmetrum.altoslib_6.*; +import org.altusmetrum.altosuilib_6.*; -public class AltosAscent extends JComponent implements AltosFlightDisplay { - GridBagLayout layout; - JLabel cur, max; +public class AltosAscent extends AltosUIFlightTab { + JLabel cur, max; - public class AscentStatus { - JLabel label; - JTextField value; - AltosLights lights; + class Height extends AltosUIUnitsIndicator { - void show() { - value.setVisible(true); - lights.setVisible(true); - label.setVisible(true); + public double value(AltosState state, int i) { + if (i == 0) + return state.height(); + else + return state.max_height(); } - void hide() { - value.setVisible(false); - lights.setVisible(false); - label.setVisible(false); + public Height(Container container, int y) { + super(container, y, AltosConvert.height, "Height", 2, false, 1); } + } - void show(AltosState state, int crc_errors) {} - - void show(String s) { - show(); - value.setText(s); - } - - void show(AltosUnits units, double v) { - show(units.show(8, v)); + class Speed extends AltosUIUnitsIndicator { + public double value(AltosState state, int i) { + if (i == 0) + return state.speed(); + else + return state.max_speed(); } - void show(String format, double v) { - show(String.format(format, v)); + public Speed(Container container, int y) { + super(container, y, AltosConvert.speed, "Speed", 2, false, 1); } + } - void reset() { - value.setText(""); - lights.set(false); - } + class Accel extends AltosUIUnitsIndicator { + public boolean hide(double v) { return v == AltosLib.MISSING; } - void set_font() { - label.setFont(Altos.label_font); - value.setFont(Altos.value_font); + public double value(AltosState state, int i) { + if (i == 0) + return state.acceleration(); + else + return state.max_acceleration(); } - public AscentStatus (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.gridwidth = 2; - c.anchor = GridBagConstraints.WEST; - c.fill = GridBagConstraints.BOTH; - c.weightx = 1; - layout.setConstraints(value, c); - add(value); - + public Accel(Container container, int y) { + super(container, y, AltosConvert.accel, "Acceleration", 2, false, 1); } } - public class AscentValue { - JLabel label; - JTextField value; - void show(AltosState state, int crc_errors) {} - - void reset() { - value.setText(""); - } - - void show() { - label.setVisible(true); - value.setVisible(true); - } + class Orient extends AltosUIUnitsIndicator { - void show(String s) { - show(); - value.setText(s); - } - - void show(AltosUnits units, double v) { - show(units.show(8, v)); - } + public boolean hide(double v) { return v == AltosLib.MISSING; } - void show(String format, double v) { - show(String.format(format, v)); + public double value(AltosState state, int i) { + if (i == 0) + return state.orient(); + else + return state.max_orient(); } - void hide() { - label.setVisible(false); - value.setVisible(false); - } - void set_font() { - label.setFont(Altos.label_font); - value.setFont(Altos.value_font); + public Orient(Container container, int y) { + super(container, y, AltosConvert.orient, "Tilt Angle", 2, false, 1); } - public AscentValue (GridBagLayout layout, int y, String text) { - GridBagConstraints c = new GridBagConstraints(); - c.weighty = 1; - - 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.gridwidth = 2; - c.weightx = 1; - layout.setConstraints(value, c); - add(value); - } } - public class AscentValueHold { - JLabel label; - JTextField value; - JTextField max_value; - double max; + class Apogee extends AltosUIUnitsIndicator { - void show(AltosState state, int crc_errors) {} - - void reset() { - value.setText(""); - max_value.setText(""); - max = AltosRecord.MISSING; + public double value(AltosState state, int i) { + return state.apogee_voltage; } - void set_font() { - label.setFont(Altos.label_font); - value.setFont(Altos.value_font); - max_value.setFont(Altos.value_font); - } + public boolean good(double v) { return v >= AltosLib.ao_igniter_good; } + public boolean hide(double v) { return v == AltosLib.MISSING; } - void show(AltosUnits units, double v) { - if (v == AltosRecord.MISSING) { - value.setText("Missing"); - max_value.setText("Missing"); - } else { - value.setText(units.show(8, v)); - if (v > max || max == AltosRecord.MISSING) { - max_value.setText(units.show(8, v)); - max = v; - } - } - } - public AscentValueHold (GridBagLayout layout, int y, String text) { - GridBagConstraints c = new GridBagConstraints(); - c.weighty = 1; - - 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.EAST; - c.fill = GridBagConstraints.BOTH; - c.weightx = 1; - layout.setConstraints(value, c); - add(value); - - max_value = new JTextField(Altos.text_width); - max_value.setFont(Altos.value_font); - max_value.setHorizontalAlignment(SwingConstants.RIGHT); - c.gridx = 3; c.gridy = y; - c.anchor = GridBagConstraints.EAST; - c.fill = GridBagConstraints.BOTH; - c.weightx = 1; - layout.setConstraints(max_value, c); - add(max_value); + public Apogee (Container container, int y) { + super(container, y, AltosConvert.voltage, "Apogee Igniter Voltage", 1, true, 2); } } - - class Height extends AscentValueHold { - void show (AltosState state, int crc_errors) { - show(AltosConvert.height, state.height); - } - public Height (GridBagLayout layout, int y) { - super (layout, y, "Height"); + class Main extends AltosUIUnitsIndicator { + public double value(AltosState state, int i) { + return state.main_voltage; } - } - Height height; + public boolean good(double v) { return v >= AltosLib.ao_igniter_good; } + public boolean hide(double v) { return v == AltosLib.MISSING; } - class Speed extends AscentValueHold { - void show (AltosState state, int crc_errors) { - double speed = state.accel_speed; - if (!state.ascent) - speed = state.baro_speed; - show(AltosConvert.speed, speed); - } - public Speed (GridBagLayout layout, int y) { - super (layout, y, "Speed"); + public Main (Container container, int y) { + super(container, y, AltosConvert.voltage, "Main Igniter Voltage", 1, true, 2); } } - Speed speed; + class Lat extends AltosUIUnitsIndicator { - class Accel extends AscentValueHold { - void show (AltosState state, int crc_errors) { - show(AltosConvert.accel, state.acceleration); - } - public Accel (GridBagLayout layout, int y) { - super (layout, y, "Acceleration"); + public boolean hide(AltosState state, int i) { + return state.gps == null || !state.gps.connected; } - } - Accel accel; - - String pos(double p, String pos, String neg) { - String h = pos; - if (p < 0) { - h = neg; - p = -p; + public double value(AltosState state, int i) { + if (state.gps == null) + return AltosLib.MISSING; + if (!state.gps.connected) + return AltosLib.MISSING; + return state.gps.lat; } - int deg = (int) Math.floor(p); - double min = (p - Math.floor(p)) * 60.0; - return String.format("%s %4d° %9.6f", h, deg, min); - } - class Apogee extends AscentStatus { - void show (AltosState state, int crc_errors) { - show("%4.2f V", state.drogue_sense); - lights.set(state.drogue_sense > 3.2); - } - public Apogee (GridBagLayout layout, int y) { - super(layout, y, "Apogee Igniter Voltage"); + Lat (Container container, int y) { + super (container, y, AltosConvert.latitude, "Latitude", 1, false, 2); } } - Apogee apogee; + class Lon extends AltosUIUnitsIndicator { - class Main extends AscentStatus { - void show (AltosState state, int crc_errors) { - show("%4.2f V", state.main_sense); - lights.set(state.main_sense > 3.2); + public boolean hide(AltosState state, int i) { + return state.gps == null || !state.gps.connected; } - public Main (GridBagLayout layout, int y) { - super(layout, y, "Main Igniter Voltage"); - } - } - - Main main; - class Lat extends AscentValue { - void show (AltosState state, int crc_errors) { - if (state.gps != null) - show(pos(state.gps.lat,"N", "S")); - else - show("???"); - } - public Lat (GridBagLayout layout, int y) { - super (layout, y, "Latitude"); + public double value(AltosState state, int i) { + if (state.gps == null) + return AltosLib.MISSING; + if (!state.gps.connected) + return AltosLib.MISSING; + return state.gps.lon; } - } - Lat lat; - - class Lon extends AscentValue { - void show (AltosState state, int crc_errors) { - if (state.gps != null) - show(pos(state.gps.lon,"E", "W")); - else - show("???"); - } - public Lon (GridBagLayout layout, int y) { - super (layout, y, "Longitude"); + Lon (Container container, int y) { + super (container, y, AltosConvert.longitude, "Longitude", 1, false, 2); } } - Lon lon; - - public void reset() { - lat.reset(); - lon.reset(); - main.reset(); - apogee.reset(); - height.reset(); - speed.reset(); - accel.reset(); - } - - public void set_font() { - cur.setFont(Altos.label_font); - max.setFont(Altos.label_font); - lat.set_font(); - lon.set_font(); - main.set_font(); - apogee.set_font(); - height.set_font(); - speed.set_font(); - accel.set_font(); - } - - public void show(AltosState state, int crc_errors) { - if (state.gps != null && state.gps.connected) { - lat.show(state, crc_errors); - lon.show(state, crc_errors); - } else { - lat.hide(); - lon.hide(); - } - height.show(state, crc_errors); - if (state.main_sense != AltosRecord.MISSING) - main.show(state, crc_errors); - else - main.hide(); - if (state.drogue_sense != AltosRecord.MISSING) - apogee.show(state, crc_errors); - else - apogee.hide(); - speed.show(state, crc_errors); - accel.show(state, crc_errors); + public void font_size_changed(int font_size) { + super.font_size_changed(font_size); + cur.setFont(AltosUILib.label_font); + max.setFont(AltosUILib.label_font); } public void labels(GridBagLayout layout, int y) { GridBagConstraints c; cur = new JLabel("Current"); - cur.setFont(Altos.label_font); + cur.setFont(AltosUILib.label_font); c = new GridBagConstraints(); c.gridx = 2; c.gridy = y; c.insets = new Insets(Altos.tab_elt_pad, Altos.tab_elt_pad, Altos.tab_elt_pad, Altos.tab_elt_pad); @@ -392,30 +169,26 @@ public class AltosAscent extends JComponent implements AltosFlightDisplay { add(cur); max = new JLabel("Maximum"); - max.setFont(Altos.label_font); + max.setFont(AltosUILib.label_font); c.gridx = 3; c.gridy = y; layout.setConstraints(max, c); add(max); } + public String getName() { + return "Ascent"; + } + public AltosAscent() { - layout = new GridBagLayout(); - - setLayout(layout); - - /* Elements in ascent display: - * - * lat - * lon - * height - */ - labels(layout, 0); - height = new Height(layout, 1); - speed = new Speed(layout, 2); - accel = new Accel(layout, 3); - lat = new Lat(layout, 4); - lon = new Lon(layout, 5); - apogee = new Apogee(layout, 6); - main = new Main(layout, 7); + int y = 0; + labels(layout, y++); + add(new Height(this, y++)); + add(new Speed(this, y++)); + add(new Accel(this, y++)); + add(new Orient(this, y++)); + add(new Lat(this, y++)); + add(new Lon(this, y++)); + add(new Apogee(this, y++)); + add(new Main(this, y++)); } }