X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=blobdiff_plain;f=altosui%2FAltosConfigUI.java;h=2c3435c18a47494834663d00c1626c9041399dc8;hp=c8ec06d26fc18495981735434939f0e75af8cbec;hb=688a9458bb03a81e71554c14295d1baacbbbd530;hpb=d8ebb83e64d66fa159e75aa560d39d80bb6d9d04 diff --git a/altosui/AltosConfigUI.java b/altosui/AltosConfigUI.java index c8ec06d2..2c3435c1 100644 --- a/altosui/AltosConfigUI.java +++ b/altosui/AltosConfigUI.java @@ -20,29 +20,21 @@ package altosui; import java.awt.*; import java.awt.event.*; import javax.swing.*; -import javax.swing.filechooser.FileNameExtensionFilter; -import javax.swing.table.*; import javax.swing.event.*; -import java.io.*; -import java.util.*; -import java.text.*; -import java.util.prefs.*; -import java.util.concurrent.LinkedBlockingQueue; - -import libaltosJNI.*; +import org.altusmetrum.AltosLib.*; public class AltosConfigUI extends AltosDialog - implements ActionListener, ItemListener, DocumentListener + implements ActionListener, ItemListener, DocumentListener, AltosConfigValues { Container pane; - Box box; 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; @@ -60,6 +52,7 @@ public class AltosConfigUI 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; @@ -68,11 +61,15 @@ public class AltosConfigUI JComboBox pad_orientation_value; JTextField callsign_value; + JButton pyro; + JButton save; JButton reset; JButton reboot; JButton close; + AltosPyro[] pyros; + ActionListener listener; static String[] main_deploy_values = { @@ -84,6 +81,10 @@ public class AltosConfigUI "0", "1", "2", "3", "4", "5" }; + static String[] apogee_lockout_values = { + "0", "5", "10", "15", "20" + }; + static String[] flight_log_max_values = { "64", "128", "192", "256", "320", "384", "448", "512", "576", "640", @@ -179,6 +180,7 @@ public class AltosConfigUI owner = in_owner; GridBagConstraints c; + int row = 0; Insets il = new Insets(4,4,4,4); Insets ir = new Insets(4,4,4,4); @@ -188,7 +190,7 @@ public class AltosConfigUI /* Product */ c = new GridBagConstraints(); - c.gridx = 0; c.gridy = 0; + c.gridx = 0; c.gridy = row; c.gridwidth = 4; c.fill = GridBagConstraints.NONE; c.anchor = GridBagConstraints.LINE_START; @@ -197,7 +199,7 @@ public class AltosConfigUI pane.add(product_label, c); c = new GridBagConstraints(); - c.gridx = 4; c.gridy = 0; + c.gridx = 4; c.gridy = row; c.gridwidth = 4; c.fill = GridBagConstraints.HORIZONTAL; c.weightx = 1; @@ -205,10 +207,11 @@ public class AltosConfigUI c.insets = ir; product_value = new JLabel(""); pane.add(product_value, c); + row++; /* Version */ c = new GridBagConstraints(); - c.gridx = 0; c.gridy = 1; + c.gridx = 0; c.gridy = row; c.gridwidth = 4; c.fill = GridBagConstraints.NONE; c.anchor = GridBagConstraints.LINE_START; @@ -218,7 +221,7 @@ public class AltosConfigUI pane.add(version_label, c); c = new GridBagConstraints(); - c.gridx = 4; c.gridy = 1; + c.gridx = 4; c.gridy = row; c.gridwidth = 4; c.fill = GridBagConstraints.HORIZONTAL; c.weightx = 1; @@ -227,10 +230,11 @@ public class AltosConfigUI c.ipady = 5; version_value = new JLabel(""); pane.add(version_value, c); + row++; /* Serial */ c = new GridBagConstraints(); - c.gridx = 0; c.gridy = 2; + c.gridx = 0; c.gridy = row; c.gridwidth = 4; c.fill = GridBagConstraints.NONE; c.anchor = GridBagConstraints.LINE_START; @@ -240,7 +244,7 @@ public class AltosConfigUI pane.add(serial_label, c); c = new GridBagConstraints(); - c.gridx = 4; c.gridy = 2; + c.gridx = 4; c.gridy = row; c.gridwidth = 4; c.fill = GridBagConstraints.HORIZONTAL; c.weightx = 1; @@ -249,10 +253,11 @@ public class AltosConfigUI c.ipady = 5; serial_value = new JLabel(""); pane.add(serial_value, c); + row++; /* Main deploy */ c = new GridBagConstraints(); - c.gridx = 0; c.gridy = 3; + c.gridx = 0; c.gridy = row; c.gridwidth = 4; c.fill = GridBagConstraints.NONE; c.anchor = GridBagConstraints.LINE_START; @@ -262,7 +267,7 @@ public class AltosConfigUI pane.add(main_deploy_label, c); c = new GridBagConstraints(); - c.gridx = 4; c.gridy = 3; + c.gridx = 4; c.gridy = row; c.gridwidth = 4; c.fill = GridBagConstraints.HORIZONTAL; c.weightx = 1; @@ -274,10 +279,11 @@ public class AltosConfigUI main_deploy_value.addItemListener(this); pane.add(main_deploy_value, c); main_deploy_value.setToolTipText("Height above pad altitude to fire main charge"); + row++; /* Apogee delay */ c = new GridBagConstraints(); - c.gridx = 0; c.gridy = 4; + c.gridx = 0; c.gridy = row; c.gridwidth = 4; c.fill = GridBagConstraints.NONE; c.anchor = GridBagConstraints.LINE_START; @@ -287,7 +293,7 @@ public class AltosConfigUI pane.add(apogee_delay_label, c); c = new GridBagConstraints(); - c.gridx = 4; c.gridy = 4; + c.gridx = 4; c.gridy = row; c.gridwidth = 4; c.fill = GridBagConstraints.HORIZONTAL; c.weightx = 1; @@ -299,10 +305,37 @@ public class AltosConfigUI apogee_delay_value.addItemListener(this); pane.add(apogee_delay_value, c); apogee_delay_value.setToolTipText("Delay after apogee before charge fires"); + row++; + + /* Apogee lockout */ + 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; + apogee_lockout_label = new JLabel("Apogee Lockout(s):"); + pane.add(apogee_lockout_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; + apogee_lockout_value = new JComboBox(apogee_lockout_values); + apogee_lockout_value.setEditable(true); + apogee_lockout_value.addItemListener(this); + pane.add(apogee_lockout_value, c); + apogee_lockout_value.setToolTipText("Time after boost while apogee detection is locked out"); + row++; /* Frequency */ c = new GridBagConstraints(); - c.gridx = 0; c.gridy = 5; + c.gridx = 0; c.gridy = row; c.gridwidth = 4; c.fill = GridBagConstraints.NONE; c.anchor = GridBagConstraints.LINE_START; @@ -312,7 +345,7 @@ public class AltosConfigUI pane.add(radio_frequency_label, c); c = new GridBagConstraints(); - c.gridx = 4; c.gridy = 5; + c.gridx = 4; c.gridy = row; c.gridwidth = 4; c.fill = GridBagConstraints.HORIZONTAL; c.weightx = 1; @@ -323,10 +356,11 @@ public class AltosConfigUI radio_frequency_value.addItemListener(this); pane.add(radio_frequency_value, c); radio_frequency_value.setToolTipText("Telemetry, RDF and packet frequency"); + row++; /* Radio Calibration */ c = new GridBagConstraints(); - c.gridx = 0; c.gridy = 6; + c.gridx = 0; c.gridy = row; c.gridwidth = 4; c.fill = GridBagConstraints.NONE; c.anchor = GridBagConstraints.LINE_START; @@ -336,7 +370,7 @@ public class AltosConfigUI pane.add(radio_calibration_label, c); c = new GridBagConstraints(); - c.gridx = 4; c.gridy = 6; + c.gridx = 4; c.gridy = row; c.gridwidth = 4; c.fill = GridBagConstraints.HORIZONTAL; c.weightx = 1; @@ -349,10 +383,11 @@ public class AltosConfigUI radio_calibration_value.setEnabled(false); pane.add(radio_calibration_value, c); set_radio_calibration_tool_tip(); + row++; /* Radio Enable */ c = new GridBagConstraints(); - c.gridx = 0; c.gridy = 7; + c.gridx = 0; c.gridy = row; c.gridwidth = 4; c.fill = GridBagConstraints.NONE; c.anchor = GridBagConstraints.LINE_START; @@ -362,7 +397,7 @@ public class AltosConfigUI pane.add(radio_enable_label, c); c = new GridBagConstraints(); - c.gridx = 4; c.gridy = 7; + c.gridx = 4; c.gridy = row; c.gridwidth = 4; c.fill = GridBagConstraints.HORIZONTAL; c.weightx = 1; @@ -373,10 +408,11 @@ public class AltosConfigUI radio_enable_value.addItemListener(this); pane.add(radio_enable_value, c); set_radio_enable_tool_tip(); + row++; /* Callsign */ c = new GridBagConstraints(); - c.gridx = 0; c.gridy = 8; + c.gridx = 0; c.gridy = row; c.gridwidth = 4; c.fill = GridBagConstraints.NONE; c.anchor = GridBagConstraints.LINE_START; @@ -386,21 +422,22 @@ public class AltosConfigUI pane.add(callsign_label, c); c = new GridBagConstraints(); - c.gridx = 4; c.gridy = 8; + 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; - callsign_value = new JTextField(AltosPreferences.callsign()); + callsign_value = new JTextField(AltosUIPreferences.callsign()); callsign_value.getDocument().addDocumentListener(this); pane.add(callsign_value, c); callsign_value.setToolTipText("Callsign reported in telemetry data"); + row++; /* Flight log max */ c = new GridBagConstraints(); - c.gridx = 0; c.gridy = 9; + c.gridx = 0; c.gridy = row; c.gridwidth = 4; c.fill = GridBagConstraints.NONE; c.anchor = GridBagConstraints.LINE_START; @@ -410,7 +447,7 @@ public class AltosConfigUI pane.add(flight_log_max_label, c); c = new GridBagConstraints(); - c.gridx = 4; c.gridy = 9; + c.gridx = 4; c.gridy = row; c.gridwidth = 4; c.fill = GridBagConstraints.HORIZONTAL; c.weightx = 1; @@ -422,10 +459,11 @@ public class AltosConfigUI flight_log_max_value.addItemListener(this); pane.add(flight_log_max_value, c); set_flight_log_max_tool_tip(); + row++; /* Ignite mode */ c = new GridBagConstraints(); - c.gridx = 0; c.gridy = 10; + c.gridx = 0; c.gridy = row; c.gridwidth = 4; c.fill = GridBagConstraints.NONE; c.anchor = GridBagConstraints.LINE_START; @@ -435,7 +473,7 @@ public class AltosConfigUI pane.add(ignite_mode_label, c); c = new GridBagConstraints(); - c.gridx = 4; c.gridy = 10; + c.gridx = 4; c.gridy = row; c.gridwidth = 4; c.fill = GridBagConstraints.HORIZONTAL; c.weightx = 1; @@ -447,10 +485,11 @@ public class AltosConfigUI ignite_mode_value.addItemListener(this); pane.add(ignite_mode_value, c); set_ignite_mode_tool_tip(); + row++; /* Pad orientation */ c = new GridBagConstraints(); - c.gridx = 0; c.gridy = 11; + c.gridx = 0; c.gridy = row; c.gridwidth = 4; c.fill = GridBagConstraints.NONE; c.anchor = GridBagConstraints.LINE_START; @@ -460,7 +499,7 @@ public class AltosConfigUI pane.add(pad_orientation_label, c); c = new GridBagConstraints(); - c.gridx = 4; c.gridy = 11; + c.gridx = 4; c.gridy = row; c.gridwidth = 4; c.fill = GridBagConstraints.HORIZONTAL; c.weightx = 1; @@ -472,10 +511,25 @@ public class AltosConfigUI pad_orientation_value.addItemListener(this); pane.add(pad_orientation_value, c); set_pad_orientation_tool_tip(); + row++; + + /* Pyro channels */ + c = new GridBagConstraints(); + c.gridx = 4; c.gridy = row; + c.gridwidth = 4; + c.fill = GridBagConstraints.HORIZONTAL; + c.anchor = GridBagConstraints.LINE_START; + c.insets = il; + c.ipady = 5; + pyro = new JButton("Configure Pyro Channels"); + pane.add(pyro, c); + pyro.addActionListener(this); + pyro.setActionCommand("Pyro"); + row++; /* Buttons */ c = new GridBagConstraints(); - c.gridx = 0; c.gridy = 12; + c.gridx = 0; c.gridy = row; c.gridwidth = 2; c.fill = GridBagConstraints.NONE; c.anchor = GridBagConstraints.LINE_START; @@ -486,7 +540,7 @@ public class AltosConfigUI save.setActionCommand("Save"); c = new GridBagConstraints(); - c.gridx = 2; c.gridy = 12; + c.gridx = 2; c.gridy = row; c.gridwidth = 2; c.fill = GridBagConstraints.NONE; c.anchor = GridBagConstraints.CENTER; @@ -497,7 +551,7 @@ public class AltosConfigUI reset.setActionCommand("Reset"); c = new GridBagConstraints(); - c.gridx = 4; c.gridy = 12; + c.gridx = 4; c.gridy = row; c.gridwidth = 2; c.fill = GridBagConstraints.NONE; c.anchor = GridBagConstraints.CENTER; @@ -508,7 +562,7 @@ public class AltosConfigUI reboot.setActionCommand("Reboot"); c = new GridBagConstraints(); - c.gridx = 6; c.gridy = 12; + c.gridx = 6; c.gridy = row; c.gridwidth = 2; c.fill = GridBagConstraints.NONE; c.anchor = GridBagConstraints.LINE_END; @@ -545,10 +599,30 @@ public class AltosConfigUI return true; } + void set_dirty() { + dirty = true; + save.setEnabled(true); + } + + public void set_clean() { + dirty = false; + save.setEnabled(false); + } + + AltosConfigPyroUI pyro_ui; + /* Listen for events from our buttons */ public void actionPerformed(ActionEvent e) { String cmd = e.getActionCommand(); + if (cmd.equals("Pyro")) { + if (pyro_ui == null && pyros != null) { + pyro_ui = new AltosConfigPyroUI(this, pyros); + pyro_ui.make_visible(); + } + return; + } + if (cmd.equals("Close") || cmd.equals("Reboot")) if (!check_dirty(cmd)) return; @@ -557,25 +631,25 @@ public class AltosConfigUI setVisible(false); dispose(); } - dirty = false; + set_clean(); } /* ItemListener interface method */ public void itemStateChanged(ItemEvent e) { - dirty = true; + set_dirty(); } /* DocumentListener interface methods */ public void changedUpdate(DocumentEvent e) { - dirty = true; + set_dirty(); } public void insertUpdate(DocumentEvent e) { - dirty = true; + set_dirty(); } public void removeUpdate(DocumentEvent e) { - dirty = true; + set_dirty(); } /* Let the config code hook on a listener */ @@ -610,12 +684,22 @@ public class AltosConfigUI public void set_apogee_delay(int new_apogee_delay) { apogee_delay_value.setSelectedItem(Integer.toString(new_apogee_delay)); + apogee_delay_value.setEnabled(new_apogee_delay >= 0); } public int apogee_delay() { return Integer.parseInt(apogee_delay_value.getSelectedItem().toString()); } + public void set_apogee_lockout(int new_apogee_lockout) { + apogee_lockout_value.setSelectedItem(Integer.toString(new_apogee_lockout)); + apogee_lockout_value.setEnabled(new_apogee_lockout >= 0); + } + + public int apogee_lockout() { + return Integer.parseInt(apogee_lockout_value.getSelectedItem().toString()); + } + public void set_radio_frequency(double new_radio_frequency) { int i; for (i = 0; i < radio_frequency_value.getItemCount(); i++) { @@ -636,7 +720,7 @@ public class AltosConfigUI product_value.getText(), serial_value.getText()); AltosFrequency new_frequency = new AltosFrequency(new_radio_frequency, description); - AltosPreferences.add_common_frequency(new_frequency); + AltosUIPreferences.add_common_frequency(new_frequency); radio_frequency_value.insertItemAt(new_frequency, i); radio_frequency_value.setSelectedIndex(i); } @@ -680,8 +764,7 @@ public class AltosConfigUI } public void set_flight_log_max(int new_flight_log_max) { - if (new_flight_log_max == 0) - flight_log_max_value.setEnabled(false); + flight_log_max_value.setEnabled(new_flight_log_max > 0); flight_log_max_value.setSelectedItem(Integer.toString(new_flight_log_max)); set_flight_log_max_tool_tip(); } @@ -696,18 +779,20 @@ public class AltosConfigUI } public void set_flight_log_max_limit(int flight_log_max_limit) { - boolean any_added = false; + //boolean any_added = false; flight_log_max_value.removeAllItems(); for (int i = 0; i < flight_log_max_values.length; i++) { if (Integer.parseInt(flight_log_max_values[i]) < flight_log_max_limit){ flight_log_max_value.addItem(flight_log_max_values[i]); - any_added = true; + //any_added = true; } } flight_log_max_value.addItem(String.format("%d", flight_log_max_limit)); } public void set_ignite_mode(int new_ignite_mode) { + if (new_ignite_mode >= ignite_mode_values.length) + new_ignite_mode = 0; if (new_ignite_mode < 0) { ignite_mode_value.setEnabled(false); new_ignite_mode = 0; @@ -727,6 +812,8 @@ public class AltosConfigUI public void set_pad_orientation(int new_pad_orientation) { + if (new_pad_orientation >= pad_orientation_values.length) + new_pad_orientation = 0; if (new_pad_orientation < 0) { pad_orientation_value.setEnabled(false); new_pad_orientation = 0; @@ -744,7 +831,16 @@ public class AltosConfigUI return -1; } - public void set_clean() { - dirty = false; + public void set_pyros(AltosPyro[] new_pyros) { + pyros = new_pyros; + pyro.setEnabled(pyros != null); + if (pyros != null && pyro_ui != null) + pyro_ui.set_pyros(pyros); + } + + public AltosPyro[] pyros() { + if (pyro_ui != null) + pyros = pyro_ui.get_pyros(); + return pyros; } }