import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
-import org.altusmetrum.altoslib_3.*;
-import org.altusmetrum.altosuilib_1.*;
+import org.altusmetrum.altoslib_4.*;
+import org.altusmetrum.altosuilib_2.*;
public class AltosConfigUI
extends AltosUIDialog
implements ActionListener, ItemListener, DocumentListener, AltosConfigValues, AltosUnitsListener
{
- Container pane;
- JLabel product_label;
- JLabel version_label;
- JLabel serial_label;
- JLabel main_deploy_label;
- JLabel apogee_delay_label;
- JLabel apogee_lockout_label;
- JLabel frequency_label;
- JLabel radio_calibration_label;
- JLabel radio_frequency_label;
- JLabel radio_enable_label;
- JLabel aprs_interval_label;
- JLabel flight_log_max_label;
- JLabel ignite_mode_label;
- JLabel pad_orientation_label;
- JLabel callsign_label;
- JLabel beep_label;
+ Container pane;
+ JLabel product_label;
+ JLabel version_label;
+ JLabel serial_label;
+ JLabel main_deploy_label;
+ JLabel apogee_delay_label;
+ JLabel apogee_lockout_label;
+ JLabel frequency_label;
+ JLabel radio_calibration_label;
+ JLabel radio_frequency_label;
+ JLabel radio_enable_label;
+ JLabel aprs_interval_label;
+ JLabel flight_log_max_label;
+ JLabel ignite_mode_label;
+ JLabel pad_orientation_label;
+ JLabel callsign_label;
+ JLabel beep_label;
+ JLabel tracker_horiz_label;
+ JLabel tracker_vert_label;
public boolean dirty;
- JFrame owner;
- JLabel product_value;
- JLabel version_value;
- JLabel serial_value;
- JComboBox main_deploy_value;
- JComboBox apogee_delay_value;
- JComboBox apogee_lockout_value;
- AltosFreqList radio_frequency_value;
- JTextField radio_calibration_value;
- JRadioButton radio_enable_value;
- JComboBox aprs_interval_value;
- JComboBox flight_log_max_value;
- JComboBox ignite_mode_value;
- JComboBox pad_orientation_value;
- JTextField callsign_value;
- JComboBox beep_value;
-
- JButton pyro;
-
- JButton save;
- JButton reset;
- JButton reboot;
- JButton close;
-
- AltosPyro[] pyros;
-
- ActionListener listener;
-
- static String[] main_deploy_values_m = {
+ JFrame owner;
+ JLabel product_value;
+ JLabel version_value;
+ JLabel serial_value;
+ JComboBox<String> main_deploy_value;
+ JComboBox<String> apogee_delay_value;
+ JComboBox<String> apogee_lockout_value;
+ AltosFreqList radio_frequency_value;
+ JTextField radio_calibration_value;
+ JRadioButton radio_enable_value;
+ JComboBox<String> aprs_interval_value;
+ JComboBox<String> flight_log_max_value;
+ JComboBox<String> ignite_mode_value;
+ JComboBox<String> pad_orientation_value;
+ JTextField callsign_value;
+ JComboBox<String> beep_value;
+ JComboBox<String> tracker_horiz_value;
+ JComboBox<String> tracker_vert_value;
+
+ JButton pyro;
+
+ JButton save;
+ JButton reset;
+ JButton reboot;
+ JButton close;
+
+ AltosPyro[] pyros;
+
+ ActionListener listener;
+
+ static String[] main_deploy_values_m = {
"100", "150", "200", "250", "300", "350",
"400", "450", "500"
};
- static String[] main_deploy_values_ft = {
+ static String[] main_deploy_values_ft = {
"250", "500", "750", "1000", "1250", "1500",
"1750", "2000"
};
- static String[] apogee_delay_values = {
+ static String[] apogee_delay_values = {
"0", "1", "2", "3", "4", "5"
};
- static String[] apogee_lockout_values = {
+ static String[] apogee_lockout_values = {
"0", "5", "10", "15", "20"
};
- static String[] flight_log_max_values = {
+ static String[] flight_log_max_values = {
"64", "128", "192", "256", "320",
"384", "448", "512", "576", "640",
"704", "768", "832", "896", "960",
};
- static String[] ignite_mode_values = {
+ static String[] ignite_mode_values = {
"Dual Deploy",
"Redundant Apogee",
"Redundant Main",
};
- static String[] aprs_interval_values = {
+ static String[] aprs_interval_values = {
"Disabled",
"2",
"5",
"10"
};
- static String[] beep_values = {
+ static String[] beep_values = {
"3750",
"4000",
"4250",
};
- static String[] pad_orientation_values = {
+ static String[] pad_orientation_values = {
"Antenna Up",
"Antenna Down",
};
+ static String[] tracker_horiz_values_m = {
+ "250",
+ "500",
+ "1000",
+ "2000"
+ };
+
+ static String[] tracker_horiz_values_ft = {
+ "500",
+ "1000",
+ "2500",
+ "5000"
+ };
+
+ static String[] tracker_vert_values_m = {
+ "25",
+ "50",
+ "100",
+ "200"
+ };
+
+ static String[] tracker_vert_values_ft = {
+ "50",
+ "100",
+ "250",
+ "500"
+ };
+
/* A window listener to catch closing events and tell the config code */
class ConfigListener extends WindowAdapter {
AltosConfigUI ui;
c.anchor = GridBagConstraints.LINE_START;
c.insets = ir;
c.ipady = 5;
- main_deploy_value = new JComboBox(main_deploy_values());
+ main_deploy_value = new JComboBox<String>(main_deploy_values());
main_deploy_value.setEditable(true);
main_deploy_value.addItemListener(this);
pane.add(main_deploy_value, c);
c.anchor = GridBagConstraints.LINE_START;
c.insets = ir;
c.ipady = 5;
- apogee_delay_value = new JComboBox(apogee_delay_values);
+ apogee_delay_value = new JComboBox<String>(apogee_delay_values);
apogee_delay_value.setEditable(true);
apogee_delay_value.addItemListener(this);
pane.add(apogee_delay_value, c);
c.anchor = GridBagConstraints.LINE_START;
c.insets = ir;
c.ipady = 5;
- apogee_lockout_value = new JComboBox(apogee_lockout_values);
+ apogee_lockout_value = new JComboBox<String>(apogee_lockout_values);
apogee_lockout_value.setEditable(true);
apogee_lockout_value.addItemListener(this);
pane.add(apogee_lockout_value, c);
c.anchor = GridBagConstraints.LINE_START;
c.insets = ir;
c.ipady = 5;
- aprs_interval_value = new JComboBox(aprs_interval_values);
+ aprs_interval_value = new JComboBox<String>(aprs_interval_values);
aprs_interval_value.setEditable(true);
aprs_interval_value.addItemListener(this);
pane.add(aprs_interval_value, c);
c.anchor = GridBagConstraints.LINE_START;
c.insets = ir;
c.ipady = 5;
- flight_log_max_value = new JComboBox(flight_log_max_values);
+ flight_log_max_value = new JComboBox<String>(flight_log_max_values);
flight_log_max_value.setEditable(true);
flight_log_max_value.addItemListener(this);
pane.add(flight_log_max_value, c);
c.anchor = GridBagConstraints.LINE_START;
c.insets = ir;
c.ipady = 5;
- ignite_mode_value = new JComboBox(ignite_mode_values);
+ ignite_mode_value = new JComboBox<String>(ignite_mode_values);
ignite_mode_value.setEditable(false);
ignite_mode_value.addItemListener(this);
pane.add(ignite_mode_value, c);
c.anchor = GridBagConstraints.LINE_START;
c.insets = ir;
c.ipady = 5;
- pad_orientation_value = new JComboBox(pad_orientation_values);
+ pad_orientation_value = new JComboBox<String>(pad_orientation_values);
pad_orientation_value.setEditable(false);
pad_orientation_value.addItemListener(this);
pane.add(pad_orientation_value, c);
c.anchor = GridBagConstraints.LINE_START;
c.insets = ir;
c.ipady = 5;
- beep_value = new JComboBox(beep_values);
+ beep_value = new JComboBox<String>(beep_values);
beep_value.setEditable(true);
beep_value.addItemListener(this);
pane.add(beep_value, c);
set_beep_tool_tip();
row++;
+ /* Tracker triger horiz distances */
+ c = new GridBagConstraints();
+ c.gridx = 0; c.gridy = row;
+ c.gridwidth = 4;
+ c.fill = GridBagConstraints.NONE;
+ c.anchor = GridBagConstraints.LINE_START;
+ c.insets = il;
+ c.ipady = 5;
+ tracker_horiz_label = new JLabel(get_tracker_horiz_label());
+ pane.add(tracker_horiz_label, c);
+
+ c = new GridBagConstraints();
+ c.gridx = 4; c.gridy = row;
+ c.gridwidth = 4;
+ c.fill = GridBagConstraints.HORIZONTAL;
+ c.weightx = 1;
+ c.anchor = GridBagConstraints.LINE_START;
+ c.insets = ir;
+ c.ipady = 5;
+ tracker_horiz_value = new JComboBox<String>(tracker_horiz_values());
+ tracker_horiz_value.setEditable(true);
+ tracker_horiz_value.addItemListener(this);
+ pane.add(tracker_horiz_value, c);
+ row++;
+
+ /* Tracker triger vert distances */
+ c = new GridBagConstraints();
+ c.gridx = 0; c.gridy = row;
+ c.gridwidth = 4;
+ c.fill = GridBagConstraints.NONE;
+ c.anchor = GridBagConstraints.LINE_START;
+ c.insets = il;
+ c.ipady = 5;
+ tracker_vert_label = new JLabel(get_tracker_vert_label());
+ pane.add(tracker_vert_label, c);
+
+ c = new GridBagConstraints();
+ c.gridx = 4; c.gridy = row;
+ c.gridwidth = 4;
+ c.fill = GridBagConstraints.HORIZONTAL;
+ c.weightx = 1;
+ c.anchor = GridBagConstraints.LINE_START;
+ c.insets = ir;
+ c.ipady = 5;
+ tracker_vert_value = new JComboBox<String>(tracker_vert_values());
+ tracker_vert_value.setEditable(true);
+ tracker_vert_value.addItemListener(this);
+ pane.add(tracker_vert_value, c);
+ set_tracker_tool_tip();
+ row++;
+
/* Pyro channels */
c = new GridBagConstraints();
c.gridx = 4; c.gridy = row;
set_main_deploy_values();
int m = (int) (AltosConvert.height.parse(v, !imperial_units) + 0.5);
set_main_deploy(m);
+
+ if (tracker_horiz_value.isEnabled() && tracker_vert_value.isEnabled()) {
+ String th = tracker_horiz_value.getSelectedItem().toString();
+ String tv = tracker_vert_value.getSelectedItem().toString();
+ tracker_horiz_label.setText(get_tracker_horiz_label());
+ tracker_vert_label.setText(get_tracker_vert_label());
+ set_tracker_horiz_values();
+ set_tracker_vert_values();
+ int[] t = {
+ (int) (AltosConvert.height.parse(th, !imperial_units) + 0.5),
+ (int) (AltosConvert.height.parse(tv, !imperial_units) + 0.5)
+ };
+ set_tracker_distances(t);
+ }
}
public void set_apogee_delay(int new_apogee_delay) {
return -1;
}
+ String[] tracker_horiz_values() {
+ if (AltosConvert.imperial_units)
+ return tracker_horiz_values_ft;
+ else
+ return tracker_horiz_values_m;
+ }
+
+ void set_tracker_horiz_values() {
+ String[] v = tracker_horiz_values();
+ while (tracker_horiz_value.getItemCount() > 0)
+ tracker_horiz_value.removeItemAt(0);
+ for (int i = 0; i < v.length; i++)
+ tracker_horiz_value.addItem(v[i]);
+ tracker_horiz_value.setMaximumRowCount(v.length);
+ }
+
+ String get_tracker_horiz_label() {
+ return String.format("Logging Trigger Horizontal (%s):", AltosConvert.height.show_units());
+ }
+
+ String[] tracker_vert_values() {
+ if (AltosConvert.imperial_units)
+ return tracker_vert_values_ft;
+ else
+ return tracker_vert_values_m;
+ }
+
+ void set_tracker_vert_values() {
+ String[] v = tracker_vert_values();
+ while (tracker_vert_value.getItemCount() > 0)
+ tracker_vert_value.removeItemAt(0);
+ for (int i = 0; i < v.length; i++)
+ tracker_vert_value.addItem(v[i]);
+ tracker_vert_value.setMaximumRowCount(v.length);
+ }
+
+ void set_tracker_tool_tip() {
+ if (tracker_horiz_value.isEnabled())
+ tracker_horiz_value.setToolTipText("How far the device must move before logging is enabled");
+ else
+ tracker_horiz_value.setToolTipText("This device doesn't disable logging before motion");
+ if (tracker_vert_value.isEnabled())
+ tracker_vert_value.setToolTipText("How far the device must move before logging is enabled");
+ else
+ tracker_vert_value.setToolTipText("This device doesn't disable logging before motion");
+ }
+
+ String get_tracker_vert_label() {
+ return String.format("Logging Trigger Vertical (%s):", AltosConvert.height.show_units());
+ }
+
+ public void set_tracker_distances(int[] tracker_distances) {
+ if (tracker_distances != null) {
+ tracker_horiz_value.setSelectedItem(AltosConvert.height.say(tracker_distances[0]));
+ tracker_vert_value.setSelectedItem(AltosConvert.height.say(tracker_distances[1]));
+ tracker_horiz_value.setEnabled(true);
+ tracker_vert_value.setEnabled(true);
+ } else {
+ tracker_horiz_value.setEnabled(false);
+ tracker_vert_value.setEnabled(false);
+ }
+ }
+
+ public int[] tracker_distances() {
+ if (tracker_horiz_value.isEnabled() && tracker_vert_value.isEnabled()) {
+ int[] t = {
+ (int) (AltosConvert.height.parse(tracker_horiz_value.getSelectedItem().toString()) + 0.5),
+ (int) (AltosConvert.height.parse(tracker_vert_value.getSelectedItem().toString()) + 0.5),
+ };
+ return t;
+ }
+ return null;
+ }
+
public void set_pyros(AltosPyro[] new_pyros) {
pyros = new_pyros;
pyro.setVisible(pyros != null);