X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=blobdiff_plain;f=altosui%2FAltosIdleMonitorUI.java;h=4d5c3b2df7661f96c6f91b67a8e7120bcd7d830a;hp=0230ff2f767959a2c73301e4c5d2ae21748a26e4;hb=0641326842bffbf4b3ae69459ca540131cb64e59;hpb=b0e903a76276e33f531eade42ac721c9490c6758 diff --git a/altosui/AltosIdleMonitorUI.java b/altosui/AltosIdleMonitorUI.java index 0230ff2f..4d5c3b2d 100644 --- a/altosui/AltosIdleMonitorUI.java +++ b/altosui/AltosIdleMonitorUI.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 @@ -24,8 +25,8 @@ import javax.swing.event.*; import java.io.*; import java.util.concurrent.*; import java.util.Arrays; -import org.altusmetrum.altoslib_5.*; -import org.altusmetrum.altosuilib_3.*; +import org.altusmetrum.altoslib_11.*; +import org.altusmetrum.altosuilib_11.*; public class AltosIdleMonitorUI extends AltosUIFrame implements AltosFlightDisplay, AltosIdleMonitorListener, DocumentListener { AltosDevice device; @@ -35,9 +36,11 @@ public class AltosIdleMonitorUI extends AltosUIFrame implements AltosFlightDispl AltosFlightStatus flightStatus; AltosIgnitor ignitor; AltosIdleMonitor thread; + AltosUIMap sitemap; int serial; boolean remote; boolean has_ignitor; + boolean has_map; void stop_display() { if (thread != null) { @@ -83,11 +86,26 @@ public class AltosIdleMonitorUI extends AltosUIFrame implements AltosFlightDispl has_ignitor = false; } } + if (state.gps != null && state.gps.connected) { + if (!has_map) { + pane.add("Site Map", sitemap); + has_map = true; + } + } else { + if (has_map) { + pane.remove(sitemap); + has_map = false; + } + } + // try { pad.show(state, listener_state); flightStatus.show(state, listener_state); flightInfo.show(state, listener_state); - ignitor.show(state, listener_state); + if (has_ignitor) + ignitor.show(state, listener_state); + if (has_map) + sitemap.show(state, listener_state); // } catch (Exception e) { // System.out.print("Show exception " + e); // } @@ -111,6 +129,19 @@ public class AltosIdleMonitorUI extends AltosUIFrame implements AltosFlightDispl SwingUtilities.invokeLater(r); } + public void error(final String reason) { + Runnable r = new Runnable() { + public void run() { + disconnect(); + JOptionPane.showMessageDialog(AltosIdleMonitorUI.this, + reason, + "Error fetching data", + JOptionPane.ERROR_MESSAGE); + } + }; + SwingUtilities.invokeLater(r); + } + Container bag; AltosUIFreqList frequencies; JTextField callsign_value; @@ -119,6 +150,7 @@ public class AltosIdleMonitorUI extends AltosUIFrame implements AltosFlightDispl public void changedUpdate(DocumentEvent e) { if (callsign_value != null) { String callsign = callsign_value.getText(); + System.out.printf("callsign set to %s\n", callsign); thread.set_callsign(callsign); AltosUIPreferences.set_callsign(callsign); } @@ -132,30 +164,6 @@ public class AltosIdleMonitorUI extends AltosUIFrame implements AltosFlightDispl changedUpdate(e); } - int row = 0; - - public GridBagConstraints constraints (int x, int width, int fill) { - GridBagConstraints c = new GridBagConstraints(); - Insets insets = new Insets(4, 4, 4, 4); - - c.insets = insets; - c.fill = fill; - if (width == 3) - c.anchor = GridBagConstraints.CENTER; - else if (x == 2) - c.anchor = GridBagConstraints.EAST; - else - c.anchor = GridBagConstraints.WEST; - c.gridx = x; - c.gridwidth = width; - c.gridy = row; - return c; - } - - public GridBagConstraints constraints(int x, int width) { - return constraints(x, width, GridBagConstraints.NONE); - } - void idle_exception(JFrame owner, Exception e) { if (e instanceof FileNotFoundException) { JOptionPane.showMessageDialog(owner, @@ -209,11 +217,14 @@ public class AltosIdleMonitorUI extends AltosUIFrame implements AltosFlightDispl AltosSerial link; try { link = new AltosSerial(device); - link.set_frame(this); } catch (Exception ex) { idle_exception(in_owner, ex); return; } + link.set_frame(this); + + /* We let the user set the freq/callsign, so don't bother with the cancel dialog */ + link.set_cancel_enable(false); bag = getContentPane(); bag.setLayout(new GridBagLayout()); @@ -222,6 +233,8 @@ public class AltosIdleMonitorUI extends AltosUIFrame implements AltosFlightDispl /* Stick frequency selector at top of table for telemetry monitoring */ if (remote && serial >= 0) { + set_inset(3); + // Frequency menu frequencies = new AltosUIFreqList(AltosUIPreferences.frequency(serial)); frequencies.addActionListener(new ActionListener() { @@ -238,15 +251,17 @@ public class AltosIdleMonitorUI extends AltosUIFrame implements AltosFlightDispl callsign_value = new JTextField(AltosUIPreferences.callsign()); callsign_value.getDocument().addDocumentListener(this); callsign_value.setToolTipText("Callsign sent in packet mode"); - bag.add(callsign_value, constraints(2, 1, GridBagConstraints.BOTH)); - row++; + bag.add(callsign_value, constraints(2, 1, GridBagConstraints.HORIZONTAL)); + next_row(); } + set_inset(0); /* Flight status is always visible */ flightStatus = new AltosFlightStatus(); - bag.add(flightStatus, constraints(0, 3, GridBagConstraints.HORIZONTAL)); - row++; + bag.add(flightStatus, constraints(0, 4, GridBagConstraints.HORIZONTAL)); + + next_row(); /* The rest of the window uses a tabbed pane to * show one of the alternate data views @@ -261,8 +276,10 @@ public class AltosIdleMonitorUI extends AltosUIFrame implements AltosFlightDispl ignitor = new AltosIgnitor(); + sitemap = new AltosUIMap(); + /* Make the tabbed pane use the rest of the window space */ - bag.add(pane, constraints(0, 3, GridBagConstraints.BOTH)); + bag.add(pane, constraints(0, 4, GridBagConstraints.BOTH)); setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);