-/*
- * 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);
- }
-}