diff options
| author | Keith Packard <keithp@keithp.com> | 2012-12-31 11:32:56 -0800 | 
|---|---|---|
| committer | Keith Packard <keithp@keithp.com> | 2012-12-31 11:36:38 -0800 | 
| commit | 03496dc47372c40f7faae1766b0e729a1feeab7c (patch) | |
| tree | cdc8ffa7bee9455e8af5eec4d30ddbe0d8d08017 /altosuilib/AltosConfigureUI.java | |
| parent | f7a56152808c7838c1886884bb77de2705ab076c (diff) | |
Create altosuilib to share code between altosui and micropeak
Need to convert altosui to using it, but that shouldn't be hard
Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'altosuilib/AltosConfigureUI.java')
| -rw-r--r-- | altosuilib/AltosConfigureUI.java | 393 | 
1 files changed, 393 insertions, 0 deletions
| diff --git a/altosuilib/AltosConfigureUI.java b/altosuilib/AltosConfigureUI.java new file mode 100644 index 00000000..a4b644bf --- /dev/null +++ b/altosuilib/AltosConfigureUI.java @@ -0,0 +1,393 @@ +/* + * Copyright © 2010 Keith Packard <keithp@keithp.com> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + */ + +package org.altusmetrum.altosuilib; + +import java.awt.*; +import java.awt.event.*; +import java.beans.*; +import javax.swing.*; +import javax.swing.event.*; + +class DelegatingRenderer implements ListCellRenderer { + +	// ... +	public static void install(JComboBox comboBox) { +		DelegatingRenderer renderer = new DelegatingRenderer(comboBox); +		renderer.initialise(); +		comboBox.setRenderer(renderer); +	} + +	// ... +	private final JComboBox comboBox; + +	// ... +	private ListCellRenderer delegate; + +	// ... +	private DelegatingRenderer(JComboBox comboBox) { +		this.comboBox = comboBox; +	} + +	// ... +	private void initialise() { +		delegate = new JComboBox().getRenderer(); +		comboBox.addPropertyChangeListener("UI", new PropertyChangeListener() { + +				public void propertyChange(PropertyChangeEvent evt) { +					delegate = new JComboBox().getRenderer(); +				} +			}); +	} + +	// ... +	public Component getListCellRendererComponent(JList list, +						      Object value, int index, boolean isSelected, boolean cellHasFocus) { + +		return delegate.getListCellRendererComponent(list, +							     ((UIManager.LookAndFeelInfo) value).getName(), +							     index, isSelected, cellHasFocus); +	} +} + +public class AltosConfigureUI +	extends AltosUIDialog +	implements DocumentListener +{ +	JFrame		owner; +	Container	pane; + +	JRadioButton	enable_voice; +	JButton		test_voice; +	JButton		close; + +	JButton		configure_log; +	JTextField	log_directory; + +	JLabel		callsign_label; +	JTextField	callsign_value; + +	JRadioButton	imperial_units; + +	JLabel		font_size_label; +	JComboBox	font_size_value; + +	JLabel		look_and_feel_label; +	JComboBox	look_and_feel_value; + +	JRadioButton	serial_debug; + +	JButton		manage_bluetooth; +	JButton		manage_frequencies; + +	int		row; + +	final static String[] font_size_names = { "Small", "Medium", "Large" }; + +	/* DocumentListener interface methods */ +	public void changedUpdate(DocumentEvent e) { +		if (callsign_value != null)  +			AltosUIPreferences.set_callsign(callsign_value.getText()); +	} + +	public void insertUpdate(DocumentEvent e) { +		changedUpdate(e); +	} + +	public void removeUpdate(DocumentEvent e) { +		changedUpdate(e); +	} + +	public GridBagConstraints constraints (int x, int width, int fill) { +		GridBagConstraints c = new GridBagConstraints(); +		Insets insets = new Insets(4, 4, 4, 4); + +		c.insets = insets; +		c.fill = fill; +		if (width == 3) +			c.anchor = GridBagConstraints.CENTER; +		else +			c.anchor = GridBagConstraints.WEST; +		c.gridx = x; +		c.gridwidth = width; +		c.gridy = row; +		return c; +	} + +	public GridBagConstraints constraints(int x, int width) { +		return constraints(x, width, GridBagConstraints.NONE); +	} + +	public void add_voice() { +//		GridBagConstraints c = new GridBagConstraints(); +// +//		/* Voice settings */ +//		c.gridx = 0; +//		c.gridy = row; +//		c.gridwidth = 1; +//		c.fill = GridBagConstraints.NONE; +//		c.anchor = GridBagConstraints.WEST; +//		pane.add(new JLabel("Voice"), c); +// +//		enable_voice = new JRadioButton("Enable", AltosUIPreferences.voice()); +//		enable_voice.addActionListener(new ActionListener() { +//				public void actionPerformed(ActionEvent e) { +//					JRadioButton item = (JRadioButton) e.getSource(); +//					boolean enabled = item.isSelected(); +//					AltosUIPreferences.set_voice(enabled); +//					if (enabled) +//						voice.speak_always("Enable voice."); +//					else +//						voice.speak_always("Disable voice."); +//				} +//			}); +//		c.gridx = 1; +//		c.gridy = row; +//		c.gridwidth = 1; +//		c.weightx = 1; +//		c.fill = GridBagConstraints.NONE; +//		c.anchor = GridBagConstraints.WEST; +//		pane.add(enable_voice, c); +//		enable_voice.setToolTipText("Enable/Disable all audio in-flight announcements"); +// +//		c.gridx = 2; +//		c.gridy = row++; +//		c.gridwidth = 1; +//		c.weightx = 1; +//		c.fill = GridBagConstraints.NONE; +//		c.anchor = GridBagConstraints.EAST; +//		test_voice = new JButton("Test Voice"); +//		test_voice.addActionListener(new ActionListener() { +//				public void actionPerformed(ActionEvent e) { +//					voice.speak("That's one small step for man; one giant leap for mankind."); +//				} +//			}); +//		pane.add(test_voice, c); +//		test_voice.setToolTipText("Play a stock audio clip to check volume"); +//		row++; +	} + +	public void add_log_dir() { +		/* Log directory settings */ +		pane.add(new JLabel("Log Directory"), constraints(0, 1)); + +		configure_log = new JButton(AltosUIPreferences.logdir().getPath()); +		configure_log.addActionListener(new ActionListener() { +				public void actionPerformed(ActionEvent e) { +					AltosUIPreferences.ConfigureLog(); +					configure_log.setText(AltosUIPreferences.logdir().getPath()); +				} +			}); +		pane.add(configure_log, constraints(1, 2)); +		configure_log.setToolTipText("Which directory flight logs are stored in"); +		row++; +	} + +	public void add_callsign() { +//		/* Callsign setting */ +//		pane.add(new JLabel("Callsign"), constraints(0, 1)); +// +//		callsign_value = new JTextField(AltosUIPreferences.callsign()); +//		callsign_value.getDocument().addDocumentListener(this); +//		callsign_value.setToolTipText("Callsign sent in packet mode"); +//		pane.add(callsign_value, constraints(1, 2, GridBagConstraints.BOTH)); +//		row++; +	} + +	public void add_units() { +		/* Imperial units setting */ +		pane.add(new JLabel("Imperial Units"), constraints(0, 1)); + +		imperial_units = new JRadioButton("Enable", AltosUIPreferences.imperial_units()); +		imperial_units.addActionListener(new ActionListener() { +				public void actionPerformed(ActionEvent e) { +					JRadioButton item = (JRadioButton) e.getSource(); +					boolean enabled = item.isSelected(); +					AltosUIPreferences.set_imperial_units(enabled); +				} +			}); +		imperial_units.setToolTipText("Use Imperial units instead of metric"); +		pane.add(imperial_units, constraints(1, 2)); +		row++; +	} + +	public void add_font_size() { +		/* Font size setting */ +		pane.add(new JLabel("Font size"), constraints(0, 1)); + +		font_size_value = new JComboBox(font_size_names); +		int font_size = AltosUIPreferences.font_size(); +		font_size_value.setSelectedIndex(font_size - AltosUILib.font_size_small); +		font_size_value.addActionListener(new ActionListener() { +				public void actionPerformed(ActionEvent e) { +					int	size = font_size_value.getSelectedIndex() + AltosUILib.font_size_small; + +					AltosUIPreferences.set_font_size(size); +				} +			}); +		pane.add(font_size_value, constraints(1, 2, GridBagConstraints.BOTH)); +		font_size_value.setToolTipText("Font size used in telemetry window"); +		row++; +	} + +	public void add_look_and_feel() { +		/* Look & Feel setting */ +		pane.add(new JLabel("Look & feel"), constraints(0, 1)); + +		/* +		class LookAndFeelRenderer extends BasicComboBoxRenderer implements ListCellRenderer { + +			public LookAndFeelRenderer() { +				super(); +			} + +			public Component getListCellRendererComponent( +				JList list, +				Object value, +				int index, +				boolean isSelected, +				boolean cellHasFocus) +			{ +				super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); +				setText(((UIManager.LookAndFeelInfo) value).getName()); +				return this; +			} +		} +		*/ + +		final UIManager.LookAndFeelInfo[] look_and_feels = UIManager.getInstalledLookAndFeels(); + +		look_and_feel_value = new JComboBox(look_and_feels); + +		DelegatingRenderer.install(look_and_feel_value); + +		String look_and_feel  = AltosUIPreferences.look_and_feel(); +		for (int i = 0; i < look_and_feels.length; i++) +			if (look_and_feel.equals(look_and_feels[i].getClassName())) +				look_and_feel_value.setSelectedIndex(i); + +		look_and_feel_value.addActionListener(new ActionListener() { +				public void actionPerformed(ActionEvent e) { +					int	id = look_and_feel_value.getSelectedIndex(); + +					AltosUIPreferences.set_look_and_feel(look_and_feels[id].getClassName()); +				} +			}); +		pane.add(look_and_feel_value, constraints(1, 2, GridBagConstraints.BOTH)); +		look_and_feel_value.setToolTipText("Look&feel used for new windows"); +		row++; +	} + +	public void add_serial_debug() { +		GridBagConstraints c = new GridBagConstraints(); + +		/* Serial debug setting */ +		pane.add(new JLabel("Serial Debug"), constraints(0, 1)); + +		serial_debug = new JRadioButton("Enable", AltosUIPreferences.serial_debug()); +		serial_debug.addActionListener(new ActionListener() { +				public void actionPerformed(ActionEvent e) { +					JRadioButton item = (JRadioButton) e.getSource(); +					boolean enabled = item.isSelected(); +					AltosUIPreferences.set_serial_debug(enabled); +				} +			}); +		serial_debug.setToolTipText("Enable/Disable USB I/O getting sent to the console"); +	} + +	public void add_bluetooth() { +//		GridBagConstraints c = new GridBagConstraints(); +//		c.gridx = 1; +//		c.gridy = row++; +//		c.gridwidth = 3; +//		c.fill = GridBagConstraints.NONE; +//		c.anchor = GridBagConstraints.WEST; +//		pane.add(serial_debug, c); +// +//		manage_bluetooth = new JButton("Manage Bluetooth"); +//		manage_bluetooth.addActionListener(new ActionListener() { +//				public void actionPerformed(ActionEvent e) { +//					AltosBTManage.show(owner, AltosBTKnown.bt_known()); +//				} +//			}); +//		c.gridx = 0; +//		c.gridy = row; +//		c.gridwidth = 2; +//		c.fill = GridBagConstraints.NONE; +//		c.anchor = GridBagConstraints.WEST; +//		pane.add(manage_bluetooth, c); +	} + +	public void add_frequencies() { +//		GridBagConstraints c = new GridBagConstraints(); +//		manage_frequencies = new JButton("Manage Frequencies"); +//		manage_frequencies.addActionListener(new ActionListener() { +//				public void actionPerformed(ActionEvent e) { +//					AltosConfigFreqUI.show(owner); +//				} +//			}); +//		manage_frequencies.setToolTipText("Configure which values are shown in frequency menus"); +//		c.gridx = 2; +//		c.gridx = 2; +//		c.gridy = row++; +//		c.gridwidth = 2; +//		c.fill = GridBagConstraints.NONE; +//		c.anchor = GridBagConstraints.WEST; +//		pane.add(manage_frequencies, c); +	} + +	public AltosConfigureUI(JFrame in_owner) { +		super(in_owner, "Configure AltosUI", false); + +		owner = in_owner; +		pane = getContentPane(); +		pane.setLayout(new GridBagLayout()); + +		row = 0; + +		/* Nice label at the top */ +		pane.add(new JLabel ("Configure AltOS UI"), +			 constraints(0, 3)); +		row++; + +		pane.add(new JLabel (String.format("AltOS version %s", AltosUIVersion.version)), +			 constraints(0, 3)); +		row++; + +		add_voice(); +		add_log_dir(); +		add_callsign(); +		add_units(); +		add_font_size(); +		add_look_and_feel(); +		add_bluetooth(); +		add_frequencies(); + +		/* And a close button at the bottom */ +		close = new JButton("Close"); +		close.addActionListener(new ActionListener() { +				public void actionPerformed(ActionEvent e) { +					setVisible(false); +				} +			}); +		pane.add(close, constraints(0, 3)); + +		pack(); +		setLocationRelativeTo(owner); +		setVisible(true); +	} +} | 
