From 71715337eb532a1fbe1a753240e7417d5223489f Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Thu, 29 May 2014 10:16:15 -0700 Subject: [PATCH 1/1] telegps: Add info table Move a couple of files from altosui to altosuilib, hook up the info table after changing it to implement the AltosFlightDisplay interface Signed-off-by: Keith Packard --- altoslib/AltosState.java | 4 ++ altosui/AltosCompanionInfo.java | 7 +- altosui/AltosIdleMonitorUI.java | 4 +- altosui/Makefile.am | 2 - .../AltosFlightInfoTableModel.java | 2 +- {altosui => altosuilib}/AltosInfoTable.java | 16 ++--- altosuilib/Makefile.am | 2 + telegps/TeleGPS.java | 72 +++++++++++-------- telegps/TeleGPSInfo.java | 4 ++ 9 files changed, 69 insertions(+), 44 deletions(-) rename {altosui => altosuilib}/AltosFlightInfoTableModel.java (98%) rename {altosui => altosuilib}/AltosInfoTable.java (95%) diff --git a/altoslib/AltosState.java b/altoslib/AltosState.java index 1162e522..ddda82b9 100644 --- a/altoslib/AltosState.java +++ b/altoslib/AltosState.java @@ -713,6 +713,7 @@ public class AltosState implements Cloneable { gps_ground_altitude = new AltosGpsGroundAltitude(); gps_ground_speed = new AltosValue(); gps_ascent_rate = new AltosValue(); + gps_course = new AltosValue(); speak_tick = AltosLib.MISSING; speak_altitude = AltosLib.MISSING; @@ -842,6 +843,9 @@ public class AltosState implements Cloneable { gps_altitude.copy(old.gps_altitude); gps_ground_altitude.copy(old.gps_ground_altitude); + gps_ground_speed.copy(old.gps_ground_speed); + gps_ascent_rate.copy(old.gps_ascent_rate); + gps_course.copy(old.gps_course); pad_lat = old.pad_lat; pad_lon = old.pad_lon; diff --git a/altosui/AltosCompanionInfo.java b/altosui/AltosCompanionInfo.java index 42413a57..f8d033a8 100644 --- a/altosui/AltosCompanionInfo.java +++ b/altosui/AltosCompanionInfo.java @@ -20,8 +20,9 @@ package altosui; import java.awt.*; import javax.swing.*; import org.altusmetrum.altoslib_4.*; +import org.altusmetrum.altosuilib_2.*; -public class AltosCompanionInfo extends JTable { +public class AltosCompanionInfo extends JTable implements AltosFlightDisplay { private AltosFlightInfoTableModel model; static final int info_columns = 2; @@ -50,7 +51,7 @@ public class AltosCompanionInfo extends JTable { return getPreferredSize(); } - void info_reset() { + public void reset() { model.reset(); } @@ -88,7 +89,7 @@ public class AltosCompanionInfo extends JTable { return; if (state.companion != null) companion = state.companion; - info_reset(); + reset(); info_add_row(0, "Companion board", "%s", board_name()); if (companion != null) { info_add_row(0, "Last Data", "%5d", companion.tick); diff --git a/altosui/AltosIdleMonitorUI.java b/altosui/AltosIdleMonitorUI.java index 62b50568..b5652df3 100644 --- a/altosui/AltosIdleMonitorUI.java +++ b/altosui/AltosIdleMonitorUI.java @@ -234,7 +234,9 @@ public class AltosIdleMonitorUI extends AltosUIFrame implements AltosFlightDispl try { disconnect(); } catch (Exception ex) { - System.out.println(Arrays.toString(ex.getStackTrace())); + System.out.printf("Exception %s\n", ex.toString()); + for (StackTraceElement e : ex.getStackTrace()) + System.out.printf("%s\n", e.toString()); } setVisible(false); dispose(); diff --git a/altosui/Makefile.am b/altosui/Makefile.am index 686b5967..add46825 100644 --- a/altosui/Makefile.am +++ b/altosui/Makefile.am @@ -21,7 +21,6 @@ altosui_JAVA = \ AltosConfigTD.java \ AltosConfigTDUI.java \ AltosDescent.java \ - AltosFlightInfoTableModel.java \ AltosFlightStatsTable.java \ AltosFlightStatus.java \ AltosFlightStatusUpdate.java \ @@ -32,7 +31,6 @@ altosui_JAVA = \ AltosIgnitor.java \ AltosLaunch.java \ AltosLaunchUI.java \ - AltosInfoTable.java \ AltosLanded.java \ AltosPad.java \ AltosUIPreferencesBackend.java \ diff --git a/altosui/AltosFlightInfoTableModel.java b/altosuilib/AltosFlightInfoTableModel.java similarity index 98% rename from altosui/AltosFlightInfoTableModel.java rename to altosuilib/AltosFlightInfoTableModel.java index 249f6497..3995efb3 100644 --- a/altosui/AltosFlightInfoTableModel.java +++ b/altosuilib/AltosFlightInfoTableModel.java @@ -15,7 +15,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package altosui; +package org.altusmetrum.altosuilib_2; import javax.swing.table.*; diff --git a/altosui/AltosInfoTable.java b/altosuilib/AltosInfoTable.java similarity index 95% rename from altosui/AltosInfoTable.java rename to altosuilib/AltosInfoTable.java index 125fa94c..0d8779d1 100644 --- a/altosui/AltosInfoTable.java +++ b/altosuilib/AltosInfoTable.java @@ -15,26 +15,26 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package altosui; +package org.altusmetrum.altosuilib_2; import java.awt.*; import javax.swing.*; import javax.swing.table.*; import org.altusmetrum.altoslib_4.*; -public class AltosInfoTable extends JTable { +public class AltosInfoTable extends JTable implements AltosFlightDisplay { private AltosFlightInfoTableModel model; static final int info_columns = 3; static final int info_rows = 17; int desired_row_height() { - FontMetrics infoValueMetrics = getFontMetrics(Altos.table_value_font); + FontMetrics infoValueMetrics = getFontMetrics(AltosUILib.table_value_font); return (infoValueMetrics.getHeight() + infoValueMetrics.getLeading()) * 18 / 10; } int text_width(String t) { - FontMetrics infoValueMetrics = getFontMetrics(Altos.table_value_font); + FontMetrics infoValueMetrics = getFontMetrics(AltosUILib.table_value_font); return infoValueMetrics.stringWidth(t); } @@ -55,7 +55,7 @@ public class AltosInfoTable extends JTable { public AltosInfoTable() { super(new AltosFlightInfoTableModel(info_rows, info_columns)); model = (AltosFlightInfoTableModel) getModel(); - setFont(Altos.table_value_font); + setFont(AltosUILib.table_value_font); setAutoResizeMode(AUTO_RESIZE_ALL_COLUMNS); setShowGrid(true); set_layout(); @@ -63,7 +63,7 @@ public class AltosInfoTable extends JTable { } public void set_font() { - setFont(Altos.table_value_font); + setFont(AltosUILib.table_value_font); set_layout(); doLayout(); } @@ -72,7 +72,7 @@ public class AltosInfoTable extends JTable { return getPreferredSize(); } - void info_reset() { + public void reset() { model.reset(); } @@ -105,7 +105,7 @@ public class AltosInfoTable extends JTable { } public void show(AltosState state, AltosListenerState listener_state) { - info_reset(); + reset(); if (state != null) { if (state.device_type != AltosLib.MISSING) info_add_row(0, "Device", "%s", AltosLib.product_name(state.device_type)); diff --git a/altosuilib/Makefile.am b/altosuilib/Makefile.am index e697b17c..65a8228a 100644 --- a/altosuilib/Makefile.am +++ b/altosuilib/Makefile.am @@ -56,6 +56,8 @@ altosuilib_JAVA = \ AltosLed.java \ AltosFlashUI.java \ AltosRomconfigUI.java \ + AltosInfoTable.java \ + AltosFlightInfoTableModel.java \ AltosBTDevice.java \ AltosBTDeviceIterator.java \ AltosBTManage.java \ diff --git a/telegps/TeleGPS.java b/telegps/TeleGPS.java index 7f34c763..d30d8dc5 100644 --- a/telegps/TeleGPS.java +++ b/telegps/TeleGPS.java @@ -50,16 +50,25 @@ public class TeleGPS extends AltosUIFrame implements AltosFlightDisplay, AltosFo AltosFlightReader reader; AltosDisplayThread thread; - JTabbedPane pane; + JMenuBar menu_bar; - AltosSiteMap sitemap; - TeleGPSInfo gps_info; - boolean has_map; + JMenu file_menu; + JMenu monitor_menu; + JMenu device_menu; + AltosFreqList frequencies; + + Container bag; + + TeleGPSStatus telegps_status; + TeleGPSStatusUpdate status_update; + + JTabbedPane pane; + + AltosSiteMap sitemap; + TeleGPSInfo gps_info; + AltosInfoTable info_table; - JMenuBar menu_bar; - JMenu file_menu; - JMenu monitor_menu; - JMenu device_menu; + LinkedList displays; /* File menu */ final static String new_command = "new"; @@ -113,41 +122,38 @@ public class TeleGPS extends AltosUIFrame implements AltosFlightDisplay, AltosFo } public void reset() { - sitemap.reset(); - gps_info.reset(); + for (AltosFlightDisplay display : displays) + display.reset(); } public void set_font() { - sitemap.set_font(); - gps_info.set_font(); + for (AltosFlightDisplay display : displays) + display.set_font(); } public void font_size_changed(int font_size) { set_font(); } - -// AltosFlightStatusUpdate status_update; - public void show(AltosState state, AltosListenerState listener_state) { -// status_update.saved_state = state; + try { + status_update.saved_state = state; - if (state == null) - state = new AltosState(); + if (state == null) + state = new AltosState(); - sitemap.show(state, listener_state); - gps_info.show(state, listener_state); - telegps_status.show(state, listener_state); + int i = 0; + for (AltosFlightDisplay display : displays) { + display.show(state, listener_state); + i++; + } + } catch (Exception ex) { + System.out.printf("Exception %s\n", ex.toString()); + for (StackTraceElement e : ex.getStackTrace()) + System.out.printf("%s\n", e.toString()); + } } - Container bag; - AltosFreqList frequencies; - JLabel telemetry; - TeleGPSStatus telegps_status; - TeleGPSStatusUpdate status_update; - - ActionListener show_timer; - void new_window() { new TeleGPS(); } @@ -379,6 +385,7 @@ public class TeleGPS extends AltosUIFrame implements AltosFlightDisplay, AltosFo file_menu = make_menu("File", file_menu_entries); monitor_menu = make_menu("Monitor", monitor_menu_entries); device_menu = make_menu("Device", device_menu_entries); + displays = new LinkedList(); int serial = -1; @@ -391,6 +398,7 @@ public class TeleGPS extends AltosUIFrame implements AltosFlightDisplay, AltosFo c.gridwidth = 2; bag.add(telegps_status, c); c.gridwidth = 1; + displays.add(telegps_status); /* The rest of the window uses a tabbed pane to @@ -409,9 +417,15 @@ public class TeleGPS extends AltosUIFrame implements AltosFlightDisplay, AltosFo sitemap = new AltosSiteMap(); pane.add("Site Map", sitemap); + displays.add(sitemap); gps_info = new TeleGPSInfo(); pane.add("Info", gps_info); + displays.add(gps_info); + + info_table = new AltosInfoTable(); + pane.add("Table", info_table); + displays.add(info_table); setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); diff --git a/telegps/TeleGPSInfo.java b/telegps/TeleGPSInfo.java index 0fba77d5..da3df44e 100644 --- a/telegps/TeleGPSInfo.java +++ b/telegps/TeleGPSInfo.java @@ -58,6 +58,10 @@ public class TeleGPSInfo extends JComponent implements AltosFlightDisplay { show(String.format(format, v)); } + void show(String format, int v) { + show(String.format(format, v)); + } + void reset() { lights.set(false); value.setText(""); -- 2.30.2