diff options
| author | Keith Packard <keithp@keithp.com> | 2014-06-10 10:11:03 -0700 | 
|---|---|---|
| committer | Keith Packard <keithp@keithp.com> | 2014-06-10 10:11:03 -0700 | 
| commit | ae1174317fc476e39077f7dc257ec08709c6b301 (patch) | |
| tree | 2ec45054f13e08e24cfb93743b04a976cd68aac9 /telegps/TeleGPSConfigUI.java | |
| parent | 44ca50a2c9404c92cc887a23dfa25b335ebe6198 (diff) | |
altoslib/altosui/telegps: Change log size configuration
* Use new log-space value provided by firmware when available.
* Divide that up into 1-8 flights and offer those sizes as options to
  the user instead of a fixed set of sizes.
* Show how many flights each selection will store
* This also checks values provided by the user
Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'telegps/TeleGPSConfigUI.java')
| -rw-r--r-- | telegps/TeleGPSConfigUI.java | 64 | 
1 files changed, 41 insertions, 23 deletions
| diff --git a/telegps/TeleGPSConfigUI.java b/telegps/TeleGPSConfigUI.java index 863d61bb..03666036 100644 --- a/telegps/TeleGPSConfigUI.java +++ b/telegps/TeleGPSConfigUI.java @@ -65,12 +65,6 @@ public class TeleGPSConfigUI  	ActionListener		listener; -	static String[] 	flight_log_max_values = { -		"64", "128", "192", "256", "320", -		"384", "448", "512", "576", "640", -		"704", "768", "832", "896", "960", -	}; -  	static String[] 	aprs_interval_values = {  		"Disabled",  		"2", @@ -376,7 +370,7 @@ public class TeleGPSConfigUI  		c.anchor = GridBagConstraints.LINE_START;  		c.insets = il;  		c.ipady = 5; -		flight_log_max_label = new JLabel("Maximum Flight Log Size:"); +		flight_log_max_label = new JLabel("Maximum Log Size (kB):");  		pane.add(flight_log_max_label, c);  		c = new GridBagConstraints(); @@ -387,7 +381,7 @@ public class TeleGPSConfigUI  		c.anchor = GridBagConstraints.LINE_START;  		c.insets = ir;  		c.ipady = 5; -		flight_log_max_value = new JComboBox<String>(flight_log_max_values); +		flight_log_max_value = new JComboBox<String>();  		flight_log_max_value.setEditable(true);  		flight_log_max_value.addItemListener(this);  		pane.add(flight_log_max_value, c); @@ -636,8 +630,19 @@ public class TeleGPSConfigUI  			radio_calibration_value.setText(String.format("%d", new_radio_calibration));  	} -	public int radio_calibration() { -		return Integer.parseInt(radio_calibration_value.getText()); +	private int parse_int(String name, String s, boolean split) throws AltosConfigDataException { +		String v = s; +		if (split) +			v = s.split("\\s+")[0]; +		try { +			return Integer.parseInt(v); +		} catch (NumberFormatException ne) { +			throw new AltosConfigDataException("Invalid %s \"%s\"", name, s); +		} +	} + +	public int radio_calibration() throws AltosConfigDataException { +		return parse_int("radio calibration", radio_calibration_value.getText(), false);  	}  	public void set_radio_enable(int new_radio_enable) { @@ -668,8 +673,22 @@ public class TeleGPSConfigUI  		return callsign_value.getText();  	} +	int	flight_log_max_limit; +	int	flight_log_max; + +	public String flight_log_max_label(int flight_log_max) { +		if (flight_log_max_limit != 0) { +			int	nflight = flight_log_max_limit / flight_log_max; +			String	plural = nflight > 1 ? "s" : ""; + +			return String.format("%d (%d flight%s)", flight_log_max, nflight, plural); +		} +		return String.format("%d", flight_log_max); +	} +  	public void set_flight_log_max(int new_flight_log_max) { -		flight_log_max_value.setSelectedItem(Integer.toString(new_flight_log_max)); +		flight_log_max_value.setSelectedItem(flight_log_max_label(new_flight_log_max)); +		flight_log_max = new_flight_log_max;  		set_flight_log_max_tool_tip();  	} @@ -678,20 +697,19 @@ public class TeleGPSConfigUI  		set_flight_log_max_tool_tip();  	} -	public int flight_log_max() { -		return Integer.parseInt(flight_log_max_value.getSelectedItem().toString()); +	public int flight_log_max() throws AltosConfigDataException { +		return parse_int("flight log max", flight_log_max_value.getSelectedItem().toString(), true);  	} -	public void set_flight_log_max_limit(int flight_log_max_limit) { -		//boolean	any_added = false; +	public void set_flight_log_max_limit(int new_flight_log_max_limit) { +		flight_log_max_limit = new_flight_log_max_limit;  		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; -			} +		for (int i = 8; i >= 1; i--) { +			int	size = flight_log_max_limit / i; +			flight_log_max_value.addItem(String.format("%d (%d flights)", size, i));  		} -		flight_log_max_value.addItem(String.format("%d", flight_log_max_limit)); +		if (flight_log_max != 0) +			set_flight_log_max(flight_log_max);  	}  	public void set_ignite_mode(int new_ignite_mode) { } @@ -791,11 +809,11 @@ public class TeleGPSConfigUI  		set_aprs_interval_tool_tip();  	} -	public int aprs_interval() { +	public int aprs_interval() throws AltosConfigDataException {  		String	s = aprs_interval_value.getSelectedItem().toString();  		if (s.equals("Disabled"))  			return 0; -		return Integer.parseInt(s); +		return parse_int("aprs interval", s, false);  	}  } | 
