X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=blobdiff_plain;f=altosuilib%2FAltosInfoTable.java;h=6bfe0cf51b20d59c787fab8aebec58c83a7c7742;hp=24a895eb22dafb7ac294baecdb54abb25d9c9533;hb=da499044c9d66e42915e3f6429b6b86999b06c2c;hpb=f80075be4ebb9c5fe00c24b8c7638fad23267424 diff --git a/altosuilib/AltosInfoTable.java b/altosuilib/AltosInfoTable.java index 24a895eb..6bfe0cf5 100644 --- a/altosuilib/AltosInfoTable.java +++ b/altosuilib/AltosInfoTable.java @@ -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 @@ -15,18 +16,22 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altosuilib_2; +package org.altusmetrum.altosuilib_13; import java.awt.*; +import java.awt.event.*; import javax.swing.*; import javax.swing.table.*; -import org.altusmetrum.altoslib_4.*; +import org.altusmetrum.altoslib_13.*; -public class AltosInfoTable extends JTable implements AltosFlightDisplay { +public class AltosInfoTable extends JTable implements AltosFlightDisplay, HierarchyListener { private AltosFlightInfoTableModel model; - static final int info_columns = 3; - static final int info_rows = 17; + static final int info_columns = 4; + static final int info_rows = 18; + + private AltosState last_state; + private AltosListenerState last_listener_state; int desired_row_height() { FontMetrics infoValueMetrics = getFontMetrics(AltosUILib.table_value_font); @@ -56,6 +61,7 @@ public class AltosInfoTable extends JTable implements AltosFlightDisplay { super(new AltosFlightInfoTableModel(info_rows, info_columns)); model = (AltosFlightInfoTableModel) getModel(); setFont(AltosUILib.table_value_font); + addHierarchyListener(this); setAutoResizeMode(AUTO_RESIZE_ALL_COLUMNS); setShowGrid(true); set_layout(); @@ -71,6 +77,17 @@ public class AltosInfoTable extends JTable implements AltosFlightDisplay { public void units_changed(boolean imperial_units) { } + public void hierarchyChanged(HierarchyEvent e) { + if (last_state != null && isShowing()) { + AltosState state = last_state; + AltosListenerState listener_state = last_listener_state; + + last_state = null; + last_listener_state = null; + show(state, listener_state); + } + } + public Dimension getPreferredScrollableViewportSize() { return getPreferredSize(); } @@ -107,15 +124,30 @@ public class AltosInfoTable extends JTable implements AltosFlightDisplay { model.clear(); } + public String getName() { return "Table"; } + public void show(AltosState state, AltosListenerState listener_state) { + + AltosCalData cal_data = state.cal_data(); + + if (!isShowing()) { + last_state = state; + last_listener_state = listener_state; + return; + } + reset(); if (state != null) { - if (state.device_type != AltosLib.MISSING) - info_add_row(0, "Device", "%s", AltosLib.product_name(state.device_type)); + if (cal_data.device_type != AltosLib.MISSING) + info_add_row(0, "Device", "%s", AltosLib.product_name(cal_data.device_type)); + else if (cal_data.product != null) + info_add_row(0, "Device", "%s", cal_data.product); + if (state.tick() != AltosLib.MISSING) + info_add_row(0, "Tick", "%6d", state.tick()); if (state.altitude() != AltosLib.MISSING) info_add_row(0, "Altitude", "%6.0f m", state.altitude()); - if (state.ground_altitude() != AltosLib.MISSING) - info_add_row(0, "Pad altitude", "%6.0f m", state.ground_altitude()); + if (cal_data.ground_altitude != AltosLib.MISSING) + info_add_row(0, "Pad altitude", "%6.0f m", cal_data.ground_altitude); if (state.height() != AltosLib.MISSING) info_add_row(0, "Height", "%6.0f m", state.height()); if (state.max_height() != AltosLib.MISSING) @@ -169,28 +201,32 @@ public class AltosInfoTable extends JTable implements AltosFlightDisplay { if (state.gps.lon != AltosLib.MISSING) info_add_deg(1, "Longitude", state.gps.lon, 'E', 'W'); if (state.gps.alt != AltosLib.MISSING) - info_add_row(1, "GPS altitude", "%8.1f", state.gps.alt); + info_add_row(1, "GPS altitude", "%8.1f m", state.gps.alt); if (state.gps_height != AltosLib.MISSING) - info_add_row(1, "GPS height", "%8.1f", state.gps_height); - - /* The SkyTraq GPS doesn't report these values */ - /* - if (false) { - info_add_row(1, "GPS ground speed", "%8.1f m/s %3d°", - state.gps.ground_speed, - state.gps.course); - info_add_row(1, "GPS climb rate", "%8.1f m/s", - state.gps.climb_rate); - info_add_row(1, "GPS error", "%6d m(h)%3d m(v)", - state.gps.h_error, state.gps.v_error); - } - */ - - info_add_row(1, "GPS hdop", "%8.1f", state.gps.hdop); + info_add_row(1, "GPS height", "%8.1f m", state.gps_height); + + if (state.gps.ground_speed != AltosLib.MISSING && state.gps.course != AltosLib.MISSING) + info_add_row(1, "GPS ground speed", "%6.1f m/s %3d°", + state.gps.ground_speed, + state.gps.course); + if (state.gps.climb_rate != AltosLib.MISSING) + info_add_row(1, "GPS climb rate", "%6.1f m/s", + state.gps.climb_rate); + + if (state.gps.h_error != AltosLib.MISSING && state.gps.v_error != AltosLib.MISSING) + info_add_row(1, "GPS error", "%6.0f m(h)%6.0f m(v)", + state.gps.h_error, state.gps.v_error); + if (state.gps.pdop != AltosLib.MISSING && + state.gps.hdop != AltosLib.MISSING && + state.gps.vdop != AltosLib.MISSING) + info_add_row(1, "GPS dop", "%3.1fp/%3.1fh/%3.1fv", + state.gps.pdop, + state.gps.hdop, + state.gps.vdop); if (state.npad > 0) { if (state.from_pad != null) { - info_add_row(1, "Distance from pad", "%6d m", + info_add_row(1, "Ground pad dist", "%6d m", (int) (state.from_pad.distance + 0.5)); info_add_row(1, "Direction from pad", "%6d°", (int) (state.from_pad.bearing + 0.5)); @@ -209,12 +245,12 @@ public class AltosInfoTable extends JTable implements AltosFlightDisplay { info_add_row(1, "Pad GPS alt", "%6.0f m", state.pad_alt); } if (state.gps.year != AltosLib.MISSING) - info_add_row(1, "GPS date", "%04d-%02d-%02d", + info_add_row(2, "GPS date", "%04d-%02d-%02d", state.gps.year, state.gps.month, state.gps.day); if (state.gps.hour != AltosLib.MISSING) - info_add_row(1, "GPS time", " %02d:%02d:%02d", + info_add_row(2, "GPS time", " %02d:%02d:%02d", state.gps.hour, state.gps.minute, state.gps.second); @@ -234,6 +270,27 @@ public class AltosInfoTable extends JTable implements AltosFlightDisplay { } } } + + if (state != null && state.accel_along() != AltosLib.MISSING) { + info_add_row(3, "Accel along", "%8.1f m/s²", state.accel_along()); + info_add_row(3, "Accel across", "%8.1f m/s²", state.accel_across()); + info_add_row(3, "Accel through", "%8.1f m/s²", state.accel_through()); + info_add_row(3, "Gyro roll", "%8.1f °/s", state.gyro_roll()); + info_add_row(3, "Gyro pitch", "%8.1f °/s", state.gyro_pitch()); + info_add_row(3, "Gyro yaw", "%8.1f °/s", state.gyro_yaw()); + if (state.mag_along() != AltosLib.MISSING) { + /* Report mag in nanoteslas (1 G = 100000 nT (or γ)) */ + info_add_row(3, "Mag along", "%8.1f γ", state.mag_along() * 100000.0); + info_add_row(3, "Mag across", "%8.1f γ", state.mag_across() * 100000.0); + info_add_row(3, "Mag Through", "%8.1f γ", state.mag_through() * 100000.0); + } + } + + if (state != null && state.igniter_voltage != null) { + for (int i = 0; i < state.igniter_voltage.length; i++) + info_add_row(3, AltosLib.igniter_name(i), "%9.2f V", state.igniter_voltage[i]); + } + info_finish(); } }