altos: Remove pdclib bits from Makefile
[fw/altos] / altosuilib / AltosDeviceDialog.java
index 73bc0b2f5141cd117b15c0c2d7d2e3f458556bc4..d8a24b1841d0e0c58c3606907055c8622e96863e 100644 (file)
@@ -3,7 +3,8 @@
  *
  * 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.
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
  *
  * This program is distributed in the hope that it will be useful, but
  * WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -15,7 +16,7 @@
  * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
  */
 
-package org.altusmetrum.altosuilib_1;
+package org.altusmetrum.altosuilib_13;
 
 import javax.swing.*;
 import java.awt.*;
@@ -23,14 +24,16 @@ import java.awt.event.*;
 
 public abstract class AltosDeviceDialog extends AltosUIDialog implements ActionListener {
 
-       private AltosDevice     value;
-       private JList           list;
-       private JButton         cancel_button;
-       private JButton         select_button;
-       public Frame            frame;
-       public int              product;
-       public JPanel           buttonPane;
-       
+       private AltosDevice             value;
+       private JList<AltosDevice>      list;
+       private JButton                 cancel_button;
+       private JButton                 select_button;
+       public Frame                    frame;
+       public int                      product;
+       public JPanel                   buttonPane;
+       private Timer                   timer;
+       AltosDevice[]                   devices;
+
        public AltosDevice getValue() {
                return value;
        }
@@ -38,8 +41,16 @@ public abstract class AltosDeviceDialog extends AltosUIDialog implements ActionL
        public abstract AltosDevice[] devices();
 
        public void update_devices() {
-               AltosDevice[] devices = devices();
+               AltosDevice selected = list.getSelectedValue();
+
+               devices = devices();
                list.setListData(devices);
+               for (AltosDevice d : devices) {
+                       if (d.equals(selected)) {
+                               list.setSelectedValue(d, true);
+                               break;
+                       }
+               }
                select_button.setEnabled(devices.length > 0);
        }
 
@@ -52,8 +63,6 @@ public abstract class AltosDeviceDialog extends AltosUIDialog implements ActionL
                frame = in_frame;
                value = null;
 
-               AltosDevice[]   devices = devices();
-
                cancel_button = new JButton("Cancel");
                cancel_button.setActionCommand("cancel");
                cancel_button.addActionListener(this);
@@ -61,11 +70,10 @@ public abstract class AltosDeviceDialog extends AltosUIDialog implements ActionL
                select_button = new JButton("Select");
                select_button.setActionCommand("select");
                select_button.addActionListener(this);
-               if (devices.length == 0)
-                       select_button.setEnabled(false);
+               select_button.setEnabled(false);
                getRootPane().setDefaultButton(select_button);
 
-               list = new JList(devices) {
+               list = new JList<AltosDevice>(devices) {
                                //Subclass JList to workaround bug 4832765, which can cause the
                                //scroll pane to not let the user easily scroll up to the beginning
                                //of the list.  An alternative would be to set the unitIncrement
@@ -131,7 +139,8 @@ public abstract class AltosDeviceDialog extends AltosUIDialog implements ActionL
                buttonPane.add(cancel_button);
                buttonPane.add(Box.createRigidArea(new Dimension(10, 0)));
 
-               add_bluetooth();
+               if (AltosUILib.has_bluetooth)
+                       add_bluetooth();
 
                buttonPane.add(select_button);
 
@@ -141,10 +150,31 @@ public abstract class AltosDeviceDialog extends AltosUIDialog implements ActionL
                contentPane.add(buttonPane, BorderLayout.PAGE_END);
 
                //Initialize values.
+               update_devices();
                if (devices != null && devices.length != 0)
                        list.setSelectedValue(devices[0], true);
                pack();
                setLocationRelativeTo(location);
+
+               timer = new Timer(1000, new ActionListener () {
+                               public void actionPerformed(ActionEvent evt) {
+                                       update_devices();
+                               }
+                       });
+
+               addComponentListener(new ComponentListener() {
+                               public void componentShown(ComponentEvent e) {
+                                       timer.start();
+                               }
+                               public void componentMoved(ComponentEvent e) {
+                               }
+                               public void componentResized(ComponentEvent e) {
+                               }
+                               public void componentHidden(ComponentEvent e) {
+                                       timer.stop();
+                               }
+                       });
+
        }
 
        //Handle clicks on the Set and Cancel buttons.