*
* 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
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-package org.altusmetrum.altosuilib_2;
+package org.altusmetrum.altosuilib_12;
import java.awt.*;
+import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.*;
-import org.altusmetrum.altoslib_4.*;
+import org.altusmetrum.altoslib_12.*;
-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;
+ private AltosState last_state;
+ private AltosListenerState last_listener_state;
+
int desired_row_height() {
FontMetrics infoValueMetrics = getFontMetrics(AltosUILib.table_value_font);
return (infoValueMetrics.getHeight() + infoValueMetrics.getLeading()) * 18 / 10;
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();
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();
}
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.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)
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);
+ 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));
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);