X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=blobdiff_plain;f=telegps%2FTeleGPS.java;h=f765ee23e0d1a616917496abb8ec35de57e24cf2;hp=307b56103091254848b3696dca027ab31adc657a;hb=c8078d352a7f54a4a97d25af080155d3f875536a;hpb=3f7e885055f8a97f334e0cd3163b760b174114b6 diff --git a/telegps/TeleGPS.java b/telegps/TeleGPS.java index 307b5610..f765ee23 100644 --- a/telegps/TeleGPS.java +++ b/telegps/TeleGPS.java @@ -23,8 +23,8 @@ import javax.swing.*; import java.io.*; import java.util.concurrent.*; import java.util.*; -import org.altusmetrum.altoslib_4.*; -import org.altusmetrum.altosuilib_2.*; +import org.altusmetrum.altoslib_5.*; +import org.altusmetrum.altosuilib_3.*; public class TeleGPS extends AltosUIFrame @@ -59,11 +59,13 @@ public class TeleGPS JMenu monitor_menu; JMenu device_menu; AltosFreqList frequencies; + ActionListener frequency_listener; Container bag; TeleGPSStatus telegps_status; TeleGPSStatusUpdate status_update; + javax.swing.Timer status_timer; JTabbedPane pane; @@ -76,42 +78,42 @@ public class TeleGPS /* File menu */ final static String new_command = "new"; - final static String preferences_command = "preferences"; + final static String graph_command = "graph"; + final static String export_command = "export"; final static String load_maps_command = "loadmaps"; + final static String preferences_command = "preferences"; final static String close_command = "close"; final static String exit_command = "exit"; static final String[][] file_menu_entries = new String[][] { { "New Window", new_command }, - { "Preferences", preferences_command }, + { "Graph Data", graph_command }, + { "Export Data", export_command }, { "Load Maps", load_maps_command }, + { "Preferences", preferences_command }, { "Close", close_command }, { "Exit", exit_command }, }; /* Monitor menu */ - final static String monitor_command = "monitor"; + final static String connect_command = "connect"; final static String disconnect_command = "disconnect"; final static String scan_command = "scan"; static final String[][] monitor_menu_entries = new String[][] { - { "Monitor Device", monitor_command }, + { "Connect Device", connect_command }, { "Disconnect", disconnect_command }, { "Scan Channels", scan_command }, }; /* Device menu */ final static String download_command = "download"; - final static String export_command = "export"; - final static String graph_command = "graph"; final static String configure_command = "configure"; final static String flash_command = "flash"; static final String[][] device_menu_entries = new String[][] { { "Download Data", download_command }, { "Configure Device", configure_command }, - { "Export Data", export_command }, - { "Graph Data", graph_command }, { "Flash Device", flash_command }, }; @@ -174,7 +176,14 @@ public class TeleGPS void disconnect() { setTitle("TeleGPS"); stop_display(); - remove_frequency_menu(); + if (status_timer != null) { + status_timer.stop(); + status_timer = null; + status_update = null; + } + + telegps_status.disable_receive(); + disable_frequency_menu(); } void connect(AltosDevice device) { @@ -182,8 +191,7 @@ public class TeleGPS disconnect(); try { AltosFlightReader reader = new AltosTelemetryReader(new AltosSerial(device)); - set_reader(reader); - add_frequency_menu(device.getSerial(), reader); + set_reader(reader, device); } catch (FileNotFoundException ee) { JOptionPane.showMessageDialog(this, ee.getMessage(), @@ -213,7 +221,7 @@ public class TeleGPS } } - void monitor() { + void connect() { AltosDevice device = AltosDeviceUIDialog.show(this, AltosLib.product_basestation); if (device == null) @@ -286,8 +294,8 @@ public class TeleGPS System.exit(0); /* Monitor menu */ - if (monitor_command.equals(ev.getActionCommand())) { - monitor(); + if (connect_command.equals(ev.getActionCommand())) { + connect(); return; } if (disconnect_command.equals(ev.getActionCommand())) { @@ -322,15 +330,12 @@ public class TeleGPS } } - void add_frequency_menu(int serial, final AltosFlightReader reader) { - // Channel menu - if (frequencies != null) - return; + void enable_frequency_menu(int serial, final AltosFlightReader reader) { - frequencies = new AltosFreqList(AltosUIPreferences.frequency(serial)); - frequencies.set_product("Monitor"); - frequencies.set_serial(serial); - frequencies.addActionListener(new ActionListener() { + if (frequency_listener != null) + disable_frequency_menu(); + + frequency_listener = new ActionListener() { public void actionPerformed(ActionEvent e) { double frequency = frequencies.frequency(); try { @@ -340,22 +345,38 @@ public class TeleGPS } reader.save_frequency(); } - }); + }; + + frequencies.addActionListener(frequency_listener); + frequencies.set_product("Monitor"); + frequencies.set_serial(serial); + frequencies.set_frequency(AltosUIPreferences.frequency(serial)); + menu_bar.add(frequencies); + menu_bar.repaint(); } - void remove_frequency_menu() { - if (frequencies != null) { - menu_bar.remove(frequencies); - menu_bar.repaint(); - frequencies = null; - } + void disable_frequency_menu() { + if (frequency_listener == null) + return; + frequencies.removeActionListener(frequency_listener); + menu_bar.remove(frequencies); + menu_bar.repaint(); + frequency_listener = null; } - public void set_reader(AltosFlightReader reader) { + public void set_reader(AltosFlightReader reader, AltosDevice device) { + status_update = new TeleGPSStatusUpdate(telegps_status); + + status_timer = new javax.swing.Timer(100, status_update); + status_timer.start(); + setTitle(String.format("TeleGPS %s", reader.name)); thread = new TeleGPSDisplayThread(this, voice(), this, reader); thread.start(); + + if (device != null) + enable_frequency_menu(device.getSerial(), reader); } static int number_of_windows; @@ -414,6 +435,8 @@ public class TeleGPS file_menu = make_menu("File", file_menu_entries); monitor_menu = make_menu("Monitor", monitor_menu_entries); device_menu = make_menu("Device", device_menu_entries); + frequencies = new AltosFreqList(); + displays = new LinkedList(); int serial = -1; @@ -476,15 +499,11 @@ public class TeleGPS setVisible(true); add_window(); - - status_update = new TeleGPSStatusUpdate(telegps_status); - - new javax.swing.Timer(100, status_update).start(); } public TeleGPS(AltosFlightReader reader) { this(); - set_reader(reader); + set_reader(reader, null); } public TeleGPS(AltosDevice device) {