diff options
Diffstat (limited to 'altosui/AltosConfigUI.java')
| -rw-r--r-- | altosui/AltosConfigUI.java | 152 | 
1 files changed, 127 insertions, 25 deletions
| diff --git a/altosui/AltosConfigUI.java b/altosui/AltosConfigUI.java index 62394fa6..11f40593 100644 --- a/altosui/AltosConfigUI.java +++ b/altosui/AltosConfigUI.java @@ -20,25 +20,16 @@ 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 org.altusmetrum.AltosLib.*; - -import libaltosJNI.*; +import org.altusmetrum.altoslib_1.*; +import org.altusmetrum.altosuilib_1.*;  public class AltosConfigUI -	extends AltosDialog -	implements ActionListener, ItemListener, DocumentListener +	extends AltosUIDialog +	implements ActionListener, ItemListener, DocumentListener, AltosConfigValues  {  	Container	pane; -	Box		box;  	JLabel		product_label;  	JLabel		version_label;  	JLabel		serial_label; @@ -49,6 +40,7 @@ public class AltosConfigUI  	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; @@ -66,16 +58,21 @@ public class AltosConfigUI  	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; +	JButton		pyro; +  	JButton		save;  	JButton		reset;  	JButton		reboot;  	JButton		close; +	AltosPyro[]	pyros; +  	ActionListener	listener;  	static String[] main_deploy_values = { @@ -103,6 +100,13 @@ public class AltosConfigUI  		"Redundant Main",  	}; +	static String[] aprs_interval_values = { +		"Disabled", +		"2", +		"5", +		"10" +	}; +  	static String[] pad_orientation_values = {  		"Antenna Up",  		"Antenna Down", @@ -147,6 +151,13 @@ public class AltosConfigUI  			radio_enable_value.setToolTipText("Firmware version does not support disabling radio");  	} +	void set_aprs_interval_tool_tip() { +		if (aprs_interval_value.isEnabled()) +			aprs_interval_value.setToolTipText("Enable APRS and set the interval between APRS reports"); +		else +			aprs_interval_value.setToolTipText("Hardware doesn't support APRS"); +	} +  	void set_flight_log_max_tool_tip() {  		if (flight_log_max_value.isEnabled())  			flight_log_max_value.setToolTipText("Size reserved for each flight log (in kB)"); @@ -399,7 +410,7 @@ public class AltosConfigUI  		c.anchor = GridBagConstraints.LINE_START;  		c.insets = il;  		c.ipady = 5; -		radio_enable_label = new JLabel("Telemetry/RDF Enable:"); +		radio_enable_label = new JLabel("Telemetry/RDF/APRS Enable:");  		pane.add(radio_enable_label, c);  		c = new GridBagConstraints(); @@ -416,6 +427,32 @@ public class AltosConfigUI  		set_radio_enable_tool_tip();  		row++; +		/* APRS interval */ +		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; +		aprs_interval_label = new JLabel("APRS Interval(s):"); +		pane.add(aprs_interval_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; +		aprs_interval_value = new JComboBox(aprs_interval_values); +		aprs_interval_value.setEditable(true); +		aprs_interval_value.addItemListener(this); +		pane.add(aprs_interval_value, c); +		set_aprs_interval_tool_tip(); +		row++; +  		/* Callsign */  		c = new GridBagConstraints();  		c.gridx = 0; c.gridy = row; @@ -519,6 +556,20 @@ public class AltosConfigUI  		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 = row; @@ -591,10 +642,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; @@ -603,25 +674,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 */ @@ -648,6 +719,7 @@ public class AltosConfigUI  	public void set_main_deploy(int new_main_deploy) {  		main_deploy_value.setSelectedItem(Integer.toString(new_main_deploy)); +		main_deploy_value.setEnabled(new_main_deploy >= 0);  	}  	public int main_deploy() { @@ -656,6 +728,7 @@ 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() { @@ -664,6 +737,7 @@ public class AltosConfigUI  	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() { @@ -734,8 +808,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();  	} @@ -750,12 +823,12 @@ 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)); @@ -802,7 +875,36 @@ 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; +	} + +	public void set_aprs_interval(int new_aprs_interval) { +		String	s; + +		if (new_aprs_interval <= 0) +			s = "Disabled"; +		else +			s = Integer.toString(new_aprs_interval); +		aprs_interval_value.setSelectedItem(s); +		aprs_interval_value.setEnabled(new_aprs_interval >= 0); +		set_aprs_interval_tool_tip(); +	} + +	public int aprs_interval() { +		String	s = aprs_interval_value.getSelectedItem().toString(); + +		if (s.equals("Disabled")) +			return 0; +		return Integer.parseInt(s);  	}  } | 
