import java.io.*;
import java.util.concurrent.*;
import java.util.*;
-import org.altusmetrum.altoslib_4.*;
-import org.altusmetrum.altosuilib_2.*;
+import java.text.*;
+import org.altusmetrum.altoslib_7.*;
+import org.altusmetrum.altosuilib_7.*;
public class TeleGPS
extends AltosUIFrame
{
static String[] telegps_icon_names = {
- "/telegps-16.png",
- "/telegps-32.png",
- "/telegps-48.png",
- "/telegps-64.png",
- "/telegps-128.png",
- "/telegps-256.png"
+ "/altusmetrum-telegps-16.png",
+ "/altusmetrum-telegps-32.png",
+ "/altusmetrum-telegps-48.png",
+ "/altusmetrum-telegps-64.png",
+ "/altusmetrum-telegps-128.png",
+ "/altusmetrum-telegps-256.png"
};
static { set_icon_names(telegps_icon_names); }
JMenu file_menu;
JMenu monitor_menu;
JMenu device_menu;
- AltosFreqList frequencies;
+ AltosUIFreqList frequencies;
ActionListener frequency_listener;
+ AltosUIRateList rates;
+ ActionListener rate_listener;
Container bag;
TeleGPSStatus telegps_status;
TeleGPSStatusUpdate status_update;
- javax.swing.Timer status_timer;
JTabbedPane pane;
- AltosUIMap map;
+ AltosUIMapNew map;
TeleGPSInfo gps_info;
TeleGPSState gps_state;
AltosInfoTable info_table;
public void show(AltosState state, AltosListenerState listener_state) {
try {
status_update.saved_state = state;
+ status_update.saved_listener_state = listener_state;
if (state == null)
state = new AltosState();
}
void load_maps() {
- new AltosUIMapPreload(this);
+ new AltosUIMapPreloadNew(this);
}
void disconnect() {
setTitle("TeleGPS");
stop_display();
- if (status_timer != null) {
- status_timer.stop();
- status_timer = null;
- status_update = null;
- }
+ telegps_status.stop();
telegps_status.disable_receive();
disable_frequency_menu();
+ disable_rate_menu();
}
void connect(AltosDevice device) {
}
+ void enable_rate_menu(int serial, final AltosFlightReader reader) {
+
+ if (rate_listener != null)
+ disable_rate_menu();
+
+ rate_listener = new ActionListener() {
+ public void actionPerformed(ActionEvent e) {
+ int rate = rates.rate();
+ try {
+ reader.set_telemetry_rate(rate);
+ } catch (TimeoutException te) {
+ } catch (InterruptedException ie) {
+ }
+ reader.save_telemetry_rate();
+ }
+ };
+
+ rates.addActionListener(rate_listener);
+ rates.set_product("Monitor");
+ rates.set_serial(serial);
+ rates.set_rate(AltosUIPreferences.telemetry_rate(serial));
+ rates.setEnabled(reader.supports_telemetry_rate(AltosLib.ao_telemetry_rate_2400));
+ }
+
+ void disable_rate_menu() {
+ if (rate_listener != null) {
+ rates.removeActionListener(rate_listener);
+ rates.setEnabled(false);
+ rate_listener = null;
+ }
+
+ }
+
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();
+ telegps_status.start(status_update);
setTitle(String.format("TeleGPS %s", reader.name));
thread = new TeleGPSDisplayThread(this, voice(), this, reader);
thread.start();
- if (device != null)
+ if (device != null) {
enable_frequency_menu(device.getSerial(), reader);
+ enable_rate_menu(device.getSerial(), reader);
+ }
}
static int number_of_windows;
private JMenu make_menu(String label, String[][] items) {
JMenu menu = new JMenu(label);
- for (int i = 0; i < items.length; i++)
+ for (int i = 0; i < items.length; i++) {
+ if (MAC_OS_X) {
+ if (items[i][1].equals("exit"))
+ continue;
+ if (items[i][1].equals("preferences"))
+ continue;
+ }
add_menu(menu, items[i][0], items[i][1]);
+ }
menu_bar.add(menu);
return menu;
}
+ /* OSXAdapter interfaces */
+ public void macosx_file_handler(String path) {
+ process_graph(new File(path));
+ }
+
+ public void macosx_quit_handler() {
+ System.exit(0);
+ }
+
+ public void macosx_preferences_handler() {
+ preferences();
+ }
+
public TeleGPS() {
AltosUIPreferences.set_component(this);
+ register_for_macosx_events();
+
reader = null;
bag = getContentPane();
bag.setLayout(new GridBagLayout());
- GridBagConstraints c = new GridBagConstraints();
-
setTitle("TeleGPS");
menu_bar = new JMenuBar();
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();
+
+ set_inset(3);
+ frequencies = new AltosUIFreqList();
frequencies.setEnabled(false);
- menu_bar.add(frequencies);
+ bag.add(frequencies, constraints (0, 1));
+
+ rates = new AltosUIRateList();
+ rates.setEnabled(false);
+ bag.add(rates, constraints(1, 1));
+ next_row();
+ set_inset(0);
displays = new LinkedList<AltosFlightDisplay>();
/* TeleGPS status is always visible */
telegps_status = new TeleGPSStatus();
- c.gridx = 0;
- c.gridy = 1;
- c.fill = GridBagConstraints.HORIZONTAL;
- c.weightx = 1;
- c.gridwidth = 2;
- bag.add(telegps_status, c);
- c.gridwidth = 1;
+ bag.add(telegps_status, constraints(0, 3, GridBagConstraints.HORIZONTAL));
+ next_row();
+
displays.add(telegps_status);
pane = new JTabbedPane();
/* Make the tabbed pane use the rest of the window space */
- c.gridx = 0;
- c.gridy = 2;
- c.fill = GridBagConstraints.BOTH;
- c.weightx = 1;
- c.weighty = 1;
- c.gridwidth = 2;
- bag.add(pane, c);
-
- map = new AltosUIMap();
+ bag.add(pane, constraints(0, 3, GridBagConstraints.BOTH));
+
+ map = new AltosUIMapNew();
pane.add(map.getName(), map);
displays.add(map);
public static void help(int code) {
System.out.printf("Usage: altosui [OPTION]... [FILE]...\n");
System.out.printf(" Options:\n");
- System.out.printf(" --fetchmaps <lat> <lon>\tpre-fetch maps for site map view\n");
System.out.printf(" --replay <filename>\t\trelive the glory of past flights \n");
System.out.printf(" --graph <filename>\t\tgraph a flight\n");
System.out.printf(" --csv\tgenerate comma separated output for spreadsheets, etc\n");
for (int i = 0; i < args.length; i++) {
if (args[i].equals("--help"))
help(0);
- else if (args[i].equals("--fetchmaps")) {
- if (args.length < i + 3) {
- help(1);
- } else {
- double lat = Double.parseDouble(args[i+1]);
- double lon = Double.parseDouble(args[i+2]);
- AltosUIMap.prefetch_maps(lat, lon);
- i += 2;
- }
- } else if (args[i].equals("--replay"))
+ else if (args[i].equals("--replay"))
process = process_replay;
else if (args[i].equals("--kml"))
process = process_kml;