summaryrefslogtreecommitdiff
path: root/telegps
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2014-06-14 14:41:13 -0700
committerKeith Packard <keithp@keithp.com>2014-06-14 14:42:11 -0700
commitc11b2f5caa3fbe2bc977e716ec1c3ccee9e75884 (patch)
treea9d871e8fb4b0c80c861df81902affb2e9d7c0bc /telegps
parentf5887a3e7cf993e23dbb1e0f6b9ebece78c34413 (diff)
altosui/telegps: Switch to AltosUIIndicator and AltosUIFlightTab
Removes replicated code across all flight tabs Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'telegps')
-rw-r--r--telegps/TeleGPS.java68
-rw-r--r--telegps/TeleGPSInfo.java68
-rw-r--r--telegps/TeleGPSState.java87
-rw-r--r--telegps/TeleGPSStatus.java38
4 files changed, 116 insertions, 145 deletions
diff --git a/telegps/TeleGPS.java b/telegps/TeleGPS.java
index eddb47d8..6e68dd30 100644
--- a/telegps/TeleGPS.java
+++ b/telegps/TeleGPS.java
@@ -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;
@@ -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(),
@@ -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,37 @@ public class TeleGPS
}
reader.save_frequency();
}
- });
- menu_bar.add(frequencies);
+ };
+
+ frequencies.addActionListener(frequency_listener);
+ frequencies.set_product("Monitor");
+ frequencies.set_serial(serial);
+ frequencies.set_frequency(AltosUIPreferences.frequency(serial));
+ frequencies.setEnabled(true);
+
}
- void remove_frequency_menu() {
- if (frequencies != null) {
- menu_bar.remove(frequencies);
- menu_bar.repaint();
- frequencies = null;
+ void disable_frequency_menu() {
+ if (frequency_listener != null) {
+ frequencies.removeActionListener(frequency_listener);
+ frequencies.setEnabled(false);
+ 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 +434,10 @@ 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();
+ frequencies.setEnabled(false);
+ menu_bar.add(frequencies);
+
displays = new LinkedList<AltosFlightDisplay>();
int serial = -1;
@@ -476,15 +500,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) {
diff --git a/telegps/TeleGPSInfo.java b/telegps/TeleGPSInfo.java
index bbf4b472..e87fea90 100644
--- a/telegps/TeleGPSInfo.java
+++ b/telegps/TeleGPSInfo.java
@@ -24,13 +24,10 @@ import javax.swing.*;
import org.altusmetrum.altoslib_4.*;
import org.altusmetrum.altosuilib_2.*;
-public class TeleGPSInfo extends JComponent implements AltosFlightDisplay, HierarchyListener {
+public class TeleGPSInfo extends AltosUIFlightTab {
JLabel cur, max;
- private AltosState last_state;
- private AltosListenerState last_listener_state;
-
abstract class Value extends AltosUIUnitsIndicator {
public abstract void show(AltosState state, AltosListenerState listener_state);
@@ -48,7 +45,6 @@ public class TeleGPSInfo extends JComponent implements AltosFlightDisplay, Hiera
abstract class ValueHold extends DualValue {
public void reset() {
super.reset();
- last_values[1] = AltosLib.MISSING;
}
public ValueHold (Container container, int y, AltosUnits units, String text) {
super(container, y, units, text);
@@ -96,7 +92,9 @@ public class TeleGPSInfo extends JComponent implements AltosFlightDisplay, Hiera
public void show (AltosState state, AltosListenerState listener_state) {
double course = state.gps_course();
- if (course != AltosLib.MISSING)
+ if (course == AltosLib.MISSING)
+ show("Missing", "Missing");
+ else
show( String.format("%3.0f°", course),
AltosConvert.bearing_to_words(
AltosConvert.BEARING_LONG,
@@ -124,7 +122,7 @@ public class TeleGPSInfo extends JComponent implements AltosFlightDisplay, Hiera
if (state.gps != null && state.gps.connected && state.gps.lat != AltosLib.MISSING)
show(pos(state.gps.lat,"N", "S"));
else
- show("???");
+ show("Missing");
}
public Lat (Container container, int y) {
super (container, y, "Latitude", 1, false, 2);
@@ -148,7 +146,7 @@ public class TeleGPSInfo extends JComponent implements AltosFlightDisplay, Hiera
if (state.gps != null && state.gps.connected && state.gps.lon != AltosLib.MISSING)
show(pos(state.gps.lon,"E", "W"));
else
- show("???");
+ show("Missing");
}
public Lon (Container container, int y) {
super (container, y, "Longitude", 1, false, 2);
@@ -173,34 +171,10 @@ public class TeleGPSInfo extends JComponent implements AltosFlightDisplay, Hiera
}
}
- LinkedList<AltosUIIndicator> indicators = new LinkedList<AltosUIIndicator>();
-
- public void reset() {
- for (AltosUIIndicator i : indicators)
- i.reset();
- }
-
public void font_size_changed(int font_size) {
cur.setFont(AltosUILib.label_font);
max.setFont(AltosUILib.label_font);
- for (AltosUIIndicator i : indicators)
- i.font_size_changed(font_size);
- }
-
- public void units_changed(boolean imperial_units) {
- for (AltosUIIndicator i : indicators)
- i.units_changed(imperial_units);
- }
-
- public void show(AltosState state, AltosListenerState listener_state) {
- if (!isShowing()) {
- last_state = state;
- last_listener_state = listener_state;
- return;
- }
-
- for (AltosUIIndicator i : indicators)
- i.show(state, listener_state);
+ super.font_size_changed(font_size);
}
public void labels(Container container, int y) {
@@ -226,29 +200,15 @@ public class TeleGPSInfo extends JComponent implements AltosFlightDisplay, Hiera
return "Location";
}
- 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 TeleGPSInfo() {
- setLayout(new GridBagLayout());
-
int y = 0;
labels(this, y++);
- indicators.add(new Altitude(this, y++));
- indicators.add(new GroundSpeed(this, y++));
- indicators.add(new AscentRate(this, y++));
- indicators.add(new Course(this, y++));
- indicators.add(new Lat(this, y++));
- indicators.add(new Lon(this, y++));
- indicators.add(new GPSLocked(this, y++));
- addHierarchyListener(this);
+ add(new Altitude(this, y++));
+ add(new GroundSpeed(this, y++));
+ add(new AscentRate(this, y++));
+ add(new Course(this, y++));
+ add(new Lat(this, y++));
+ add(new Lon(this, y++));
+ add(new GPSLocked(this, y++));
}
}
diff --git a/telegps/TeleGPSState.java b/telegps/TeleGPSState.java
index b10e8e70..a76182ed 100644
--- a/telegps/TeleGPSState.java
+++ b/telegps/TeleGPSState.java
@@ -24,12 +24,9 @@ import javax.swing.*;
import org.altusmetrum.altoslib_4.*;
import org.altusmetrum.altosuilib_2.*;
-public class TeleGPSState extends JComponent implements AltosFlightDisplay, HierarchyListener {
- GridBagLayout layout;
- JLabel cur, max;
+public class TeleGPSState extends AltosUIFlightTab {
- private AltosState last_state;
- private AltosListenerState last_listener_state;
+ JLabel cur, max;
abstract class Value extends AltosUIUnitsIndicator {
public Value (Container container, int y, AltosUnits units, String text) {
@@ -44,10 +41,6 @@ public class TeleGPSState extends JComponent implements AltosFlightDisplay, Hier
}
abstract class ValueHold extends DualValue {
- public void reset() {
- super.reset();
- last_values[1] = AltosLib.MISSING;
- }
public ValueHold (Container container, int y, AltosUnits units, String text) {
super(container, y, units, text);
}
@@ -103,12 +96,12 @@ public class TeleGPSState extends JComponent implements AltosFlightDisplay, Hier
class Bearing extends AltosUIIndicator {
public void show (AltosState state, AltosListenerState listener_state) {
- if (state.from_pad != null) {
+ if (state.from_pad != null && state.from_pad.bearing != AltosLib.MISSING) {
show( String.format("%3.0f°", state.from_pad.bearing),
state.from_pad.bearing_words(
AltosGreatCircle.BEARING_LONG));
} else {
- show("???", "???");
+ show("Missing", "Missing");
}
}
public Bearing (Container container, int y) {
@@ -118,7 +111,10 @@ public class TeleGPSState extends JComponent implements AltosFlightDisplay, Hier
class Elevation extends AltosUIIndicator {
public void show (AltosState state, AltosListenerState listener_state) {
- show("%3.0f°", state.elevation);
+ if (state.elevation == AltosLib.MISSING)
+ show("Missing");
+ else
+ show("%3.0f°", state.elevation);
}
public Elevation (Container container, int y) {
super (container, y, "Elevation", 1, false, 2);
@@ -165,7 +161,6 @@ public class TeleGPSState extends JComponent implements AltosFlightDisplay, Hier
}
}
- LinkedList<AltosUIIndicator> indicators = new LinkedList<AltosUIIndicator>();
public void labels(Container container, int y) {
GridBagLayout layout = (GridBagLayout)(container.getLayout());
@@ -186,69 +181,27 @@ public class TeleGPSState extends JComponent implements AltosFlightDisplay, Hier
add(max);
}
- public void reset() {
- for (AltosUIIndicator i : indicators)
- i.reset();
- }
-
public void font_size_changed(int font_size) {
- for (AltosUIIndicator i : indicators)
- i.font_size_changed(font_size);
- }
-
- public void units_changed(boolean imperial_units) {
- for (AltosUIIndicator i : indicators)
- i.units_changed(imperial_units);
- }
-
- public void show(AltosState state, AltosListenerState listener_state) {
- if (!isShowing()) {
- last_state = state;
- last_listener_state = listener_state;
- return;
- }
-
- for (AltosUIIndicator i : indicators)
- i.show(state, listener_state);
+ cur.setFont(AltosUILib.label_font);
+ max.setFont(AltosUILib.label_font);
+ super.font_size_changed(font_size);
}
public String getName() {
return "Status";
}
- 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 TeleGPSState() {
- layout = new GridBagLayout();
-
- setLayout(layout);
-
- /* Elements in state display:
- *
- * config_version;
- * lon
- * height
- */
int y = 0;
labels(this, y++);
- indicators.add(new Height(this, y++));
- indicators.add(new Speed(this, y++));
- indicators.add(new Distance(this, y++));
- indicators.add(new Range(this, y++));
- indicators.add(new Bearing(this, y++));
- indicators.add(new Elevation(this, y++));
- indicators.add(new FirmwareVersion(this, y++));
- indicators.add(new FlightLogMax(this, y++));
- indicators.add(new BatteryVoltage(this, y++));
- addHierarchyListener(this);
+ add(new Height(this, y++));
+ add(new Speed(this, y++));
+ add(new Distance(this, y++));
+ add(new Range(this, y++));
+ add(new Bearing(this, y++));
+ add(new Elevation(this, y++));
+ add(new FirmwareVersion(this, y++));
+ add(new FlightLogMax(this, y++));
+ add(new BatteryVoltage(this, y++));
}
}
diff --git a/telegps/TeleGPSStatus.java b/telegps/TeleGPSStatus.java
index 14706877..f3951a37 100644
--- a/telegps/TeleGPSStatus.java
+++ b/telegps/TeleGPSStatus.java
@@ -83,6 +83,12 @@ public class TeleGPSStatus extends JComponent implements AltosFlightDisplay {
else
setVisible(true);
}
+
+ public void reset() {
+ super.reset();
+ call = "";
+ }
+
public Call (GridBagLayout layout, int x) {
super (layout, x, "Callsign");
}
@@ -101,6 +107,12 @@ public class TeleGPSStatus extends JComponent implements AltosFlightDisplay {
serial = state.serial;
}
}
+
+ public void reset() {
+ super.reset();
+ serial = -1;
+ }
+
public Serial (GridBagLayout layout, int x) {
super (layout, x, "Serial");
}
@@ -121,6 +133,12 @@ public class TeleGPSStatus extends JComponent implements AltosFlightDisplay {
last_flight = state.flight;
}
}
+
+ public void reset() {
+ super.reset();
+ last_flight = -1;
+ }
+
public Flight (GridBagLayout layout, int x) {
super (layout, x, "Flight");
}
@@ -143,6 +161,12 @@ public class TeleGPSStatus extends JComponent implements AltosFlightDisplay {
rssi = new_rssi;
}
}
+
+ public void reset() {
+ super.reset();
+ rssi = 10000;
+ }
+
public RSSI (GridBagLayout layout, int x) {
super (layout, x, "RSSI");
}
@@ -162,6 +186,16 @@ public class TeleGPSStatus extends JComponent implements AltosFlightDisplay {
last_secs = secs;
}
}
+
+ void reset() {
+ super.reset();
+ last_secs = -1;
+ }
+
+ void disable() {
+ value.setText("");
+ }
+
public LastPacket(GridBagLayout layout, int x) {
super (layout, x, "Age");
}
@@ -169,6 +203,10 @@ public class TeleGPSStatus extends JComponent implements AltosFlightDisplay {
LastPacket last_packet;
+ public void disable_receive() {
+ last_packet.disable();
+ }
+
public void reset () {
call.reset();
serial.reset();