altosui: remove un-used import
[fw/altos] / altosui / AltosConfigureUI.java
index 153c59fdedc719818f7fa605b8a2f825c30ac410..c576b052f71f2db15e9360ba253fbfc9762ad2fa 100644 (file)
@@ -19,18 +19,53 @@ package altosui;
 
 import java.awt.*;
 import java.awt.event.*;
+import java.beans.*;
 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;
+
+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 JDialog
+       extends AltosDialog
        implements DocumentListener
 {
        JFrame          owner;
@@ -47,9 +82,24 @@ public class AltosConfigureUI
        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;
+
+       final static String[] font_size_names = { "Small", "Medium", "Large" };
+
        /* DocumentListener interface methods */
        public void changedUpdate(DocumentEvent e) {
-               AltosPreferences.set_callsign(callsign_value.getText());
+               AltosUIPreferences.set_callsign(callsign_value.getText());
        }
 
        public void insertUpdate(DocumentEvent e) {
@@ -67,6 +117,8 @@ public class AltosConfigureUI
 
                Insets insets = new Insets(4, 4, 4, 4);
 
+               int row = 0;
+
                owner = in_owner;
                voice = in_voice;
                pane = getContentPane();
@@ -79,26 +131,33 @@ public class AltosConfigureUI
 
                /* Nice label at the top */
                c.gridx = 0;
-               c.gridy = 0;
+               c.gridy = row++;
                c.gridwidth = 3;
                c.fill = GridBagConstraints.NONE;
                c.anchor = GridBagConstraints.CENTER;
                pane.add(new JLabel ("Configure AltOS UI"), c);
 
+               c.gridx = 0;
+               c.gridy = row++;
+               c.gridwidth = 3;
+               c.fill = GridBagConstraints.NONE;
+               c.anchor = GridBagConstraints.CENTER;
+               pane.add(new JLabel (String.format("AltOS version %s", AltosVersion.version)), c);
+
                /* Voice settings */
                c.gridx = 0;
-               c.gridy = 1;
+               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", AltosPreferences.voice());
+               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();
-                                       AltosPreferences.set_voice(enabled);
+                                       AltosUIPreferences.set_voice(enabled);
                                        if (enabled)
                                                voice.speak_always("Enable voice.");
                                        else
@@ -106,15 +165,16 @@ public class AltosConfigureUI
                                }
                        });
                c.gridx = 1;
-               c.gridy = 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 = 1;
+               c.gridy = row++;
                c.gridwidth = 1;
                c.weightx = 1;
                c.fill = GridBagConstraints.NONE;
@@ -126,45 +186,207 @@ public class AltosConfigureUI
                                }
                        });
                pane.add(test_voice, c);
+               test_voice.setToolTipText("Play a stock audio clip to check volume");
 
                /* Log directory settings */
                c.gridx = 0;
-               c.gridy = 2;
+               c.gridy = row;
                c.gridwidth = 1;
                c.fill = GridBagConstraints.NONE;
                c.anchor = GridBagConstraints.WEST;
                pane.add(new JLabel("Log Directory"), c);
 
-               configure_log = new JButton(AltosPreferences.logdir().getPath());
+               configure_log = new JButton(AltosUIPreferences.logdir().getPath());
                configure_log.addActionListener(new ActionListener() {
                                public void actionPerformed(ActionEvent e) {
-                                       AltosPreferences.ConfigureLog();
-                                       configure_log.setText(AltosPreferences.logdir().getPath());
+                                       AltosUIPreferences.ConfigureLog();
+                                       configure_log.setText(AltosUIPreferences.logdir().getPath());
                                }
                        });
                c.gridx = 1;
-               c.gridy = 2;
+               c.gridy = row++;
                c.gridwidth = 2;
                c.fill = GridBagConstraints.BOTH;
                c.anchor = GridBagConstraints.WEST;
                pane.add(configure_log, c);
+               configure_log.setToolTipText("Which directory flight logs are stored in");
 
                /* Callsign setting */
                c.gridx = 0;
-               c.gridy = 3;
+               c.gridy = row;
                c.gridwidth = 1;
                c.fill = GridBagConstraints.NONE;
                c.anchor = GridBagConstraints.WEST;
                pane.add(new JLabel("Callsign"), c);
 
-               callsign_value = new JTextField(AltosPreferences.callsign());
+               callsign_value = new JTextField(AltosUIPreferences.callsign());
                callsign_value.getDocument().addDocumentListener(this);
                c.gridx = 1;
-               c.gridy = 3;
+               c.gridy = row++;
                c.gridwidth = 2;
                c.fill = GridBagConstraints.BOTH;
                c.anchor = GridBagConstraints.WEST;
                pane.add(callsign_value, c);
+               callsign_value.setToolTipText("Callsign sent in packet mode");
+
+               /* Imperial units setting */
+               c.gridx = 0;
+               c.gridy = row;
+               c.gridwidth = 1;
+               c.fill = GridBagConstraints.NONE;
+               c.anchor = GridBagConstraints.WEST;
+               pane.add(new JLabel("Imperial Units"), c);
+
+               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");
+
+               c.gridx = 1;
+               c.gridy = row++;
+               c.gridwidth = 3;
+               c.fill = GridBagConstraints.NONE;
+               c.anchor = GridBagConstraints.WEST;
+               pane.add(imperial_units, c);
+
+               /* Font size setting */
+               c.gridx = 0;
+               c.gridy = row;
+               c.gridwidth = 1;
+               c.fill = GridBagConstraints.NONE;
+               c.anchor = GridBagConstraints.WEST;
+               pane.add(new JLabel("Font size"), c);
+
+               font_size_value = new JComboBox(font_size_names);
+               int font_size = AltosUIPreferences.font_size();
+               font_size_value.setSelectedIndex(font_size - Altos.font_size_small);
+               font_size_value.addActionListener(new ActionListener() {
+                               public void actionPerformed(ActionEvent e) {
+                                       int     size = font_size_value.getSelectedIndex() + Altos.font_size_small;
+
+                                       AltosUIPreferences.set_font_size(size);
+                               }
+                       });
+               c.gridx = 1;
+               c.gridy = row++;
+               c.gridwidth = 2;
+               c.fill = GridBagConstraints.BOTH;
+               c.anchor = GridBagConstraints.WEST;
+               pane.add(font_size_value, c);
+               font_size_value.setToolTipText("Font size used in telemetry window");
+
+               /* Look & Feel setting */
+               c.gridx = 0;
+               c.gridy = row;
+               c.gridwidth = 1;
+               c.fill = GridBagConstraints.NONE;
+               c.anchor = GridBagConstraints.WEST;
+               pane.add(new JLabel("Look & feel"), c);
+
+               /*
+               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());
+                               }
+                       });
+               c.gridx = 1;
+               c.gridy = row++;
+               c.gridwidth = 2;
+               c.fill = GridBagConstraints.BOTH;
+               c.anchor = GridBagConstraints.WEST;
+               pane.add(look_and_feel_value, c);
+               look_and_feel_value.setToolTipText("Look&feel used for new windows");
+
+               /* Serial debug setting */
+               c.gridx = 0;
+               c.gridy = row;
+               c.gridwidth = 1;
+               c.fill = GridBagConstraints.NONE;
+               c.anchor = GridBagConstraints.WEST;
+               pane.add(new JLabel("Serial Debug"), c);
+
+               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");
+
+               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);
+
+               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);
 
                /* And a close button at the bottom */
                close = new JButton("Close");
@@ -174,7 +396,7 @@ public class AltosConfigureUI
                                }
                        });
                c.gridx = 0;
-               c.gridy = 4;
+               c.gridy = row++;
                c.gridwidth = 3;
                c.fill = GridBagConstraints.NONE;
                c.anchor = GridBagConstraints.CENTER;