import javax.swing.*;
import java.util.*;
import java.util.concurrent.*;
-import org.altusmetrum.altoslib_5.*;
-import org.altusmetrum.altosuilib_3.*;
+import org.altusmetrum.altoslib_7.*;
+import org.altusmetrum.altosuilib_7.*;
public class AltosFlightUI extends AltosUIFrame implements AltosFlightDisplay {
AltosVoice voice;
AltosDescent descent;
AltosLanded landed;
AltosCompanionInfo companion;
- AltosUIMap sitemap;
+ AltosUIMapNew sitemap;
boolean has_map;
boolean has_companion;
boolean has_state;
public void show(AltosState state, AltosListenerState listener_state) {
status_update.saved_state = state;
+ status_update.saved_listener_state = listener_state;
if (state == null)
state = new AltosState();
exit_on_close = true;
}
- Container bag;
-
- JMenuBar menu_bar;
- AltosFreqList frequencies;
- AltosUITelemetryMenu telemetries;
+ Container bag;
+ AltosUIFreqList frequencies;
+ AltosUIRateList rates;
+ AltosUITelemetryList telemetries;
JLabel telemetry;
ActionListener show_timer;
public AltosFlightUI(AltosVoice in_voice, AltosFlightReader in_reader, final int serial) {
- super();
-
AltosUIPreferences.set_component(this);
displays = new LinkedList<AltosFlightDisplay>();
bag = getContentPane();
bag.setLayout(new GridBagLayout());
- GridBagConstraints c = new GridBagConstraints();
-
setTitle(String.format("AltOS %s", reader.name));
/* Stick channel selector at top of table for telemetry monitoring */
if (serial >= 0) {
+ set_inset(3);
- menu_bar = new JMenuBar();
- setJMenuBar(menu_bar);
-
- // Channel menu
- frequencies = new AltosFreqList(AltosUIPreferences.frequency(serial));
+ // Frequency menu
+ frequencies = new AltosUIFreqList(AltosUIPreferences.frequency(serial));
frequencies.set_product("Monitor");
frequencies.set_serial(serial);
frequencies.addActionListener(new ActionListener() {
reader.save_frequency();
}
});
- menu_bar.add (frequencies);
+ bag.add (frequencies, constraints(0, 1));
- // Telemetry format menu
- if (reader.supports_telemetry(AltosLib.ao_telemetry_standard)) {
- telemetries = new AltosUITelemetryMenu(serial);
+ // Telemetry rate list
+ rates = new AltosUIRateList(AltosUIPreferences.telemetry_rate(serial));
+ rates.addActionListener(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.setEnabled(reader.supports_telemetry_rate(AltosLib.ao_telemetry_rate_2400));
+ bag.add (rates, constraints(1, 1));
+
+ // Telemetry format list
+ if (reader.supports_telemetry(Altos.ao_telemetry_standard)) {
+ telemetries = new AltosUITelemetryList(serial);
telemetries.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
int telemetry = telemetries.get_selected();
reader.save_telemetry();
}
});
- menu_bar.add(telemetries);
+ bag.add (telemetries, constraints(2, 1));
} else {
String version;
version = "Telemetry: None";
telemetry = new JLabel(version);
- menu_bar.add(telemetry);
+ bag.add (telemetry, constraints(2, 1));
}
+ next_row();
}
+ set_inset(0);
/* Flight status is always visible */
flightStatus = new AltosFlightStatus();
displays.add(flightStatus);
- c.gridx = 0;
- c.gridy = 1;
- c.fill = GridBagConstraints.HORIZONTAL;
- c.weightx = 1;
- c.gridwidth = 2;
- bag.add(flightStatus, c);
- c.gridwidth = 1;
+ 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
has_companion = false;
has_state = false;
- sitemap = new AltosUIMap();
+ sitemap = new AltosUIMapNew();
displays.add(sitemap);
has_map = false;
/* 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);
+ bag.add(pane, constraints(0, 4, GridBagConstraints.BOTH));
setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
AltosUIPreferences.register_font_listener(this);
AltosPreferences.register_units_listener(this);
+ status_update = new AltosFlightStatusUpdate(flightStatus);
+
+ flightStatus.start(status_update);
+
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
+ flightStatus.stop();
disconnect();
setVisible(false);
dispose();
thread = new AltosDisplayThread(this, voice, this, reader);
- status_update = new AltosFlightStatusUpdate(flightStatus);
-
- new javax.swing.Timer(100, status_update).start();
-
thread.start();
}