From: Keith Packard Date: Wed, 2 Jan 2013 17:31:35 +0000 (-0800) Subject: altosui: Use shared AltosDeviceDialog X-Git-Tag: 1.1.9.3~8^2~9^2~24 X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=commitdiff_plain;h=8af405f1ac4d1b930f10465fd0270a49176f16d1 altosui: Use shared AltosDeviceDialog Signed-off-by: Keith Packard --- diff --git a/altosui/AltosBTDevice.java b/altosui/AltosBTDevice.java index 03e7cbec..222b3c97 100644 --- a/altosui/AltosBTDevice.java +++ b/altosui/AltosBTDevice.java @@ -17,6 +17,7 @@ package altosui; import libaltosJNI.*; +import org.altusmetrum.altosuilib.*; public class AltosBTDevice extends altos_bt_device implements AltosDevice { diff --git a/altosui/AltosBTKnown.java b/altosui/AltosBTKnown.java index ae04ac8c..606c0349 100644 --- a/altosui/AltosBTKnown.java +++ b/altosui/AltosBTKnown.java @@ -18,6 +18,7 @@ package altosui; import java.util.*; import org.altusmetrum.AltosLib.*; +import org.altusmetrum.altosuilib.*; public class AltosBTKnown implements Iterable { LinkedList devices = new LinkedList(); diff --git a/altosui/AltosConfig.java b/altosui/AltosConfig.java index e1ffebb4..1cd61a89 100644 --- a/altosui/AltosConfig.java +++ b/altosui/AltosConfig.java @@ -21,8 +21,9 @@ import java.awt.event.*; import javax.swing.*; import java.io.*; import java.util.concurrent.*; -import org.altusmetrum.AltosLib.*; import java.text.*; +import org.altusmetrum.AltosLib.*; +import org.altusmetrum.altosuilib.*; public class AltosConfig implements ActionListener { @@ -270,7 +271,7 @@ public class AltosConfig implements ActionListener { public AltosConfig(JFrame given_owner) { owner = given_owner; - device = AltosDeviceDialog.show(owner, Altos.product_any); + device = AltosDeviceUIDialog.show(owner, Altos.product_any); if (device != null) { try { serial_line = new AltosSerial(device); diff --git a/altosui/AltosConfigTD.java b/altosui/AltosConfigTD.java index e7b9b81f..794f8103 100644 --- a/altosui/AltosConfigTD.java +++ b/altosui/AltosConfigTD.java @@ -21,8 +21,8 @@ import java.awt.event.*; import javax.swing.*; import java.io.*; import java.util.concurrent.*; - import org.altusmetrum.AltosLib.*; +import org.altusmetrum.altosuilib.*; public class AltosConfigTD implements ActionListener { @@ -315,7 +315,7 @@ public class AltosConfigTD implements ActionListener { version = new string_ref("unknown"); product = new string_ref("unknown"); - device = AltosDeviceDialog.show(owner, Altos.product_basestation); + device = AltosDeviceUIDialog.show(owner, Altos.product_basestation); if (device != null) { try { serial_line = new AltosSerial(device); diff --git a/altosui/AltosDebug.java b/altosui/AltosDebug.java index 16b10c3a..482f4c36 100644 --- a/altosui/AltosDebug.java +++ b/altosui/AltosDebug.java @@ -18,6 +18,7 @@ package altosui; import java.io.*; +import org.altusmetrum.altosuilib.*; public class AltosDebug extends AltosSerial { diff --git a/altosui/AltosDeviceDialog.java b/altosui/AltosDeviceDialog.java deleted file mode 100644 index 0aeadae6..00000000 --- a/altosui/AltosDeviceDialog.java +++ /dev/null @@ -1,185 +0,0 @@ -/* - * Copyright © 2010 Keith Packard - * - * 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 altosui; - -import javax.swing.*; -import java.awt.*; -import java.awt.event.*; - -public class AltosDeviceDialog extends AltosDialog implements ActionListener { - - private AltosDevice value; - private JList list; - private JButton cancel_button; - private JButton select_button; - private JButton manage_bluetooth_button; - private Frame frame; - private int product; - - private AltosDevice getValue() { - return value; - } - - private AltosDevice[] devices() { - java.util.List usb_devices = AltosUSBDevice.list(product); - int num_devices = usb_devices.size(); - java.util.List bt_devices = AltosBTKnown.bt_known().list(product); - num_devices += bt_devices.size(); - AltosDevice[] devices = new AltosDevice[num_devices]; - - for (int i = 0; i < usb_devices.size(); i++) - devices[i] = usb_devices.get(i); - int off = usb_devices.size(); - for (int j = 0; j < bt_devices.size(); j++) - devices[off + j] = bt_devices.get(j); - return devices; - } - - private void update_devices() { - AltosDevice[] devices = devices(); - list.setListData(devices); - select_button.setEnabled(devices.length > 0); - } - - private AltosDeviceDialog (Frame in_frame, Component location, int in_product) { - super(in_frame, "Device Selection", true); - - product = in_product; - frame = in_frame; - value = null; - - AltosDevice[] devices = devices(); - - cancel_button = new JButton("Cancel"); - cancel_button.setActionCommand("cancel"); - cancel_button.addActionListener(this); - - manage_bluetooth_button = new JButton("Manage Bluetooth"); - manage_bluetooth_button.setActionCommand("manage"); - manage_bluetooth_button.addActionListener(this); - - select_button = new JButton("Select"); - select_button.setActionCommand("select"); - select_button.addActionListener(this); - if (devices.length == 0) - select_button.setEnabled(false); - getRootPane().setDefaultButton(select_button); - - list = new JList(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 - //of the JScrollBar to a fixed value. You wouldn't get the nice - //aligned scrolling, but it should work. - public int getScrollableUnitIncrement(Rectangle visibleRect, - int orientation, - int direction) { - int row; - if (orientation == SwingConstants.VERTICAL && - direction < 0 && (row = getFirstVisibleIndex()) != -1) { - Rectangle r = getCellBounds(row, row); - if ((r.y == visibleRect.y) && (row != 0)) { - Point loc = r.getLocation(); - loc.y--; - int prevIndex = locationToIndex(loc); - Rectangle prevR = getCellBounds(prevIndex, prevIndex); - - if (prevR == null || prevR.y >= r.y) { - return 0; - } - return prevR.height; - } - } - return super.getScrollableUnitIncrement( - visibleRect, orientation, direction); - } - }; - - list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); - list.setLayoutOrientation(JList.HORIZONTAL_WRAP); - list.setVisibleRowCount(-1); - list.addMouseListener(new MouseAdapter() { - public void mouseClicked(MouseEvent e) { - if (e.getClickCount() == 2) { - select_button.doClick(); //emulate button click - } - } - }); - JScrollPane listScroller = new JScrollPane(list); - listScroller.setPreferredSize(new Dimension(400, 80)); - listScroller.setAlignmentX(LEFT_ALIGNMENT); - - //Create a container so that we can add a title around - //the scroll pane. Can't add a title directly to the - //scroll pane because its background would be white. - //Lay out the label and scroll pane from top to bottom. - JPanel listPane = new JPanel(); - listPane.setLayout(new BoxLayout(listPane, BoxLayout.PAGE_AXIS)); - - JLabel label = new JLabel("Select Device"); - label.setLabelFor(list); - listPane.add(label); - listPane.add(Box.createRigidArea(new Dimension(0,5))); - listPane.add(listScroller); - listPane.setBorder(BorderFactory.createEmptyBorder(10,10,10,10)); - - //Lay out the buttons from left to right. - JPanel buttonPane = new JPanel(); - buttonPane.setLayout(new BoxLayout(buttonPane, BoxLayout.LINE_AXIS)); - buttonPane.setBorder(BorderFactory.createEmptyBorder(0, 10, 10, 10)); - buttonPane.add(Box.createHorizontalGlue()); - buttonPane.add(cancel_button); - buttonPane.add(Box.createRigidArea(new Dimension(10, 0))); - buttonPane.add(manage_bluetooth_button); - buttonPane.add(Box.createRigidArea(new Dimension(10, 0))); - buttonPane.add(select_button); - - //Put everything together, using the content pane's BorderLayout. - Container contentPane = getContentPane(); - contentPane.add(listPane, BorderLayout.CENTER); - contentPane.add(buttonPane, BorderLayout.PAGE_END); - - //Initialize values. - if (devices != null && devices.length != 0) - list.setSelectedValue(devices[0], true); - pack(); - setLocationRelativeTo(location); - } - - //Handle clicks on the Set and Cancel buttons. - public void actionPerformed(ActionEvent e) { - if ("select".equals(e.getActionCommand())) - value = (AltosDevice)(list.getSelectedValue()); - if ("manage".equals(e.getActionCommand())) { - AltosBTManage.show(frame, AltosBTKnown.bt_known()); - update_devices(); - return; - } - setVisible(false); - } - - public static AltosDevice show (Component frameComp, int product) { - - Frame frame = JOptionPane.getFrameForComponent(frameComp); - AltosDeviceDialog dialog; - - dialog = new AltosDeviceDialog(frame, frameComp, product); - dialog.setVisible(true); - return dialog.getValue(); - } -} diff --git a/altosui/AltosDeviceUIDialog.java b/altosui/AltosDeviceUIDialog.java new file mode 100644 index 00000000..7ed599a3 --- /dev/null +++ b/altosui/AltosDeviceUIDialog.java @@ -0,0 +1,70 @@ +/* + * Copyright © 2010 Keith Packard + * + * 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 altosui; + +import javax.swing.*; +import java.awt.*; +import java.awt.event.*; +import org.altusmetrum.altosuilib.*; + +public class AltosDeviceUIDialog extends AltosDeviceDialog { + + public AltosDevice[] devices() { + java.util.List usb_devices = AltosUSBDevice.list(product); + int num_devices = usb_devices.size(); + java.util.List bt_devices = AltosBTKnown.bt_known().list(product); + num_devices += bt_devices.size(); + AltosDevice[] devices = new AltosDevice[num_devices]; + + for (int i = 0; i < usb_devices.size(); i++) + devices[i] = usb_devices.get(i); + int off = usb_devices.size(); + for (int j = 0; j < bt_devices.size(); j++) + devices[off + j] = bt_devices.get(j); + return devices; + } + + public void add_bluetooth() { + JButton manage_bluetooth_button = new JButton("Manage Bluetooth"); + manage_bluetooth_button.setActionCommand("manage"); + manage_bluetooth_button.addActionListener(this); + buttonPane.add(manage_bluetooth_button); + buttonPane.add(Box.createRigidArea(new Dimension(10, 0))); + } + + public void actionPerformed(ActionEvent e) { + super.actionPerformed(e); + if ("manage".equals(e.getActionCommand())) { + AltosBTManage.show(frame, AltosBTKnown.bt_known()); + update_devices(); + } + } + + public AltosDeviceUIDialog (Frame in_frame, Component location, int in_product) { + super(in_frame, location, in_product); + } + + public static AltosDevice show (Component frameComp, int product) { + Frame frame = JOptionPane.getFrameForComponent(frameComp); + AltosDeviceUIDialog dialog; + + dialog = new AltosDeviceUIDialog(frame, frameComp, product); + dialog.setVisible(true); + return dialog.getValue(); + } +} diff --git a/altosui/AltosEepromManage.java b/altosui/AltosEepromManage.java index b8de77da..cc9adb0c 100644 --- a/altosui/AltosEepromManage.java +++ b/altosui/AltosEepromManage.java @@ -22,6 +22,7 @@ import javax.swing.*; import java.io.*; import java.util.concurrent.*; import org.altusmetrum.AltosLib.*; +import org.altusmetrum.altosuilib.*; public class AltosEepromManage implements ActionListener { @@ -197,7 +198,7 @@ public class AltosEepromManage implements ActionListener { //boolean running = false; frame = given_frame; - device = AltosDeviceDialog.show(frame, Altos.product_any); + device = AltosDeviceUIDialog.show(frame, Altos.product_any); remote = false; diff --git a/altosui/AltosFlash.java b/altosui/AltosFlash.java index 313af70b..7a98ee14 100644 --- a/altosui/AltosFlash.java +++ b/altosui/AltosFlash.java @@ -20,6 +20,7 @@ package altosui; import java.awt.event.*; import javax.swing.*; import java.io.*; +import org.altusmetrum.altosuilib.*; public class AltosFlash { File file; diff --git a/altosui/AltosFlashUI.java b/altosui/AltosFlashUI.java index 3ccfa76c..878150f6 100644 --- a/altosui/AltosFlashUI.java +++ b/altosui/AltosFlashUI.java @@ -23,6 +23,7 @@ import javax.swing.*; import javax.swing.filechooser.FileNameExtensionFilter; import java.io.*; import java.util.concurrent.*; +import org.altusmetrum.altosuilib.*; public class AltosFlashUI extends AltosDialog @@ -175,7 +176,7 @@ public class AltosFlashUI } boolean select_debug_dongle() { - debug_dongle = AltosDeviceDialog.show(frame, Altos.product_any); + debug_dongle = AltosDeviceUIDialog.show(frame, Altos.product_any); if (debug_dongle == null) return false; diff --git a/altosui/AltosIdleMonitorUI.java b/altosui/AltosIdleMonitorUI.java index 6f696009..6d3450b6 100644 --- a/altosui/AltosIdleMonitorUI.java +++ b/altosui/AltosIdleMonitorUI.java @@ -23,6 +23,7 @@ import javax.swing.*; import java.io.*; import java.util.concurrent.*; import org.altusmetrum.AltosLib.*; +import org.altusmetrum.altosuilib.*; public class AltosIdleMonitorUI extends AltosFrame implements AltosFlightDisplay, AltosFontListener, AltosIdleMonitorListener { AltosDevice device; @@ -90,7 +91,7 @@ public class AltosIdleMonitorUI extends AltosFrame implements AltosFlightDisplay public AltosIdleMonitorUI(JFrame in_owner) throws FileNotFoundException, AltosSerialInUseException, TimeoutException, InterruptedException { - device = AltosDeviceDialog.show(in_owner, Altos.product_any); + device = AltosDeviceUIDialog.show(in_owner, Altos.product_any); remote = false; if (!device.matchProduct(Altos.product_altimeter)) remote = true; diff --git a/altosui/AltosIgniteUI.java b/altosui/AltosIgniteUI.java index ec331259..f1742203 100644 --- a/altosui/AltosIgniteUI.java +++ b/altosui/AltosIgniteUI.java @@ -24,6 +24,7 @@ import java.io.*; import java.text.*; import java.util.concurrent.*; import org.altusmetrum.AltosLib.*; +import org.altusmetrum.altosuilib.*; public class AltosIgniteUI extends AltosDialog @@ -304,7 +305,7 @@ public class AltosIgniteUI private boolean open() { command_queue = new LinkedBlockingQueue(); - device = AltosDeviceDialog.show(owner, Altos.product_any); + device = AltosDeviceUIDialog.show(owner, Altos.product_any); if (device != null) { IgniteHandler handler = new IgniteHandler(owner); Thread t = new Thread(handler); diff --git a/altosui/AltosLaunch.java b/altosui/AltosLaunch.java index de19221e..0bad80aa 100644 --- a/altosui/AltosLaunch.java +++ b/altosui/AltosLaunch.java @@ -20,6 +20,7 @@ package altosui; import java.io.*; import java.util.concurrent.*; import java.awt.*; +import org.altusmetrum.altosuilib.*; public class AltosLaunch { AltosDevice device; diff --git a/altosui/AltosLaunchUI.java b/altosui/AltosLaunchUI.java index 39b986c0..68c978dc 100644 --- a/altosui/AltosLaunchUI.java +++ b/altosui/AltosLaunchUI.java @@ -23,6 +23,7 @@ import javax.swing.*; import java.io.*; import java.text.*; import java.util.concurrent.*; +import org.altusmetrum.altosuilib.*; class FireButton extends JButton { protected void processMouseEvent(MouseEvent e) { @@ -370,7 +371,7 @@ public class AltosLaunchUI private boolean open() { command_queue = new LinkedBlockingQueue(); - device = AltosDeviceDialog.show(owner, Altos.product_any); + device = AltosDeviceUIDialog.show(owner, Altos.product_any); if (device != null) { LaunchHandler handler = new LaunchHandler(owner); Thread t = new Thread(handler); diff --git a/altosui/AltosScanUI.java b/altosui/AltosScanUI.java index 2a6e140a..6a8db0e0 100644 --- a/altosui/AltosScanUI.java +++ b/altosui/AltosScanUI.java @@ -26,6 +26,7 @@ import java.util.*; import java.text.*; import java.util.concurrent.*; import org.altusmetrum.AltosLib.*; +import org.altusmetrum.altosuilib.*; class AltosScanResult { String callsign; @@ -327,7 +328,7 @@ public class AltosScanUI } private boolean open() { - device = AltosDeviceDialog.show(owner, Altos.product_basestation); + device = AltosDeviceUIDialog.show(owner, Altos.product_basestation); if (device == null) return false; try { diff --git a/altosui/AltosSerial.java b/altosui/AltosSerial.java index 771fdd5d..78d862d0 100644 --- a/altosui/AltosSerial.java +++ b/altosui/AltosSerial.java @@ -26,6 +26,7 @@ import java.util.*; import java.awt.*; import javax.swing.*; import org.altusmetrum.AltosLib.*; +import org.altusmetrum.altosuilib.*; import libaltosJNI.*; diff --git a/altosui/AltosSerialInUseException.java b/altosui/AltosSerialInUseException.java index 7380f331..932a3684 100644 --- a/altosui/AltosSerialInUseException.java +++ b/altosui/AltosSerialInUseException.java @@ -16,6 +16,7 @@ */ package altosui; +import org.altusmetrum.altosuilib.*; public class AltosSerialInUseException extends Exception { public AltosDevice device; diff --git a/altosui/AltosUI.java b/altosui/AltosUI.java index dcc0de60..a385b8b3 100644 --- a/altosui/AltosUI.java +++ b/altosui/AltosUI.java @@ -23,6 +23,7 @@ import javax.swing.*; import java.io.*; import java.util.concurrent.*; import org.altusmetrum.AltosLib.*; +import org.altusmetrum.altosuilib.*; public class AltosUI extends AltosFrame { public AltosVoice voice = new AltosVoice(); @@ -241,7 +242,7 @@ public class AltosUI extends AltosFrame { } private void ConnectToDevice() { - AltosDevice device = AltosDeviceDialog.show(AltosUI.this, + AltosDevice device = AltosDeviceUIDialog.show(AltosUI.this, Altos.product_basestation); if (device != null) diff --git a/altosui/AltosUSBDevice.java b/altosui/AltosUSBDevice.java index 3af7a7fa..5c6a8976 100644 --- a/altosui/AltosUSBDevice.java +++ b/altosui/AltosUSBDevice.java @@ -18,6 +18,7 @@ package altosui; import java.util.*; import libaltosJNI.*; +import org.altusmetrum.altosuilib.*; public class AltosUSBDevice extends altos_device implements AltosDevice { diff --git a/altosui/Makefile.am b/altosui/Makefile.am index b3aa1f55..593eeb0a 100644 --- a/altosui/Makefile.am +++ b/altosui/Makefile.am @@ -32,8 +32,7 @@ altosui_JAVA = \ AltosCSVUI.java \ AltosDebug.java \ AltosDescent.java \ - AltosDeviceDialog.java \ - AltosDevice.java \ + AltosDeviceUIDialog.java \ AltosUSBDevice.java \ AltosDisplayThread.java \ AltosEepromDelete.java \ diff --git a/altosuilib/AltosDeviceDialog.java b/altosuilib/AltosDeviceDialog.java index 82620b8b..cde545a7 100644 --- a/altosuilib/AltosDeviceDialog.java +++ b/altosuilib/AltosDeviceDialog.java @@ -27,22 +27,24 @@ public abstract class AltosDeviceDialog extends AltosUIDialog implements ActionL private JList list; private JButton cancel_button; private JButton select_button; - private JButton manage_bluetooth_button; - private Frame frame; - private int product; - + public Frame frame; + public int product; + public JPanel buttonPane; + public AltosDevice getValue() { return value; } public abstract AltosDevice[] devices(); - private void update_devices() { + public void update_devices() { AltosDevice[] devices = devices(); list.setListData(devices); select_button.setEnabled(devices.length > 0); } + public void add_bluetooth() { } + public AltosDeviceDialog (Frame in_frame, Component location, int in_product) { super(in_frame, "Device Selection", true); @@ -56,10 +58,6 @@ public abstract class AltosDeviceDialog extends AltosUIDialog implements ActionL cancel_button.setActionCommand("cancel"); cancel_button.addActionListener(this); -// manage_bluetooth_button = new JButton("Manage Bluetooth"); -// manage_bluetooth_button.setActionCommand("manage"); -// manage_bluetooth_button.addActionListener(this); - select_button = new JButton("Select"); select_button.setActionCommand("select"); select_button.addActionListener(this); @@ -126,14 +124,15 @@ public abstract class AltosDeviceDialog extends AltosUIDialog implements ActionL listPane.setBorder(BorderFactory.createEmptyBorder(10,10,10,10)); //Lay out the buttons from left to right. - JPanel buttonPane = new JPanel(); + buttonPane = new JPanel(); buttonPane.setLayout(new BoxLayout(buttonPane, BoxLayout.LINE_AXIS)); buttonPane.setBorder(BorderFactory.createEmptyBorder(0, 10, 10, 10)); buttonPane.add(Box.createHorizontalGlue()); buttonPane.add(cancel_button); buttonPane.add(Box.createRigidArea(new Dimension(10, 0))); -// buttonPane.add(manage_bluetooth_button); -// buttonPane.add(Box.createRigidArea(new Dimension(10, 0))); + + add_bluetooth(); + buttonPane.add(select_button); //Put everything together, using the content pane's BorderLayout. @@ -150,14 +149,12 @@ public abstract class AltosDeviceDialog extends AltosUIDialog implements ActionL //Handle clicks on the Set and Cancel buttons. public void actionPerformed(ActionEvent e) { - if ("select".equals(e.getActionCommand())) + if ("select".equals(e.getActionCommand())) { value = (AltosDevice)(list.getSelectedValue()); -// if ("manage".equals(e.getActionCommand())) { -// AltosBTManage.show(frame, AltosBTKnown.bt_known()); -// update_devices(); -// return; -// } - setVisible(false); + setVisible(false); + } + if ("cancel".equals(e.getActionCommand())) + setVisible(false); } }