import java.text.*;
import java.util.prefs.*;
import java.util.concurrent.*;
+import org.altusmetrum.AltosLib.*;
public class AltosIgniteUI
- extends JDialog
+ extends AltosDialog
implements ActionListener
{
AltosDevice device;
JToggleButton arm;
JButton fire;
javax.swing.Timer timer;
+ JButton close;
int apogee_status;
int main_status;
class IgniteHandler implements Runnable {
AltosIgnite ignite;
+ JFrame owner;
+
+ void send_exception(Exception e) {
+ final Exception f_e = e;
+ Runnable r = new Runnable() {
+ public void run() {
+ ignite_exception(f_e);
+ }
+ };
+ SwingUtilities.invokeLater(r);
+ }
public void run () {
+ try {
+ ignite = new AltosIgnite(device);
+ } catch (Exception e) {
+ send_exception(e);
+ return;
+ }
+ ignite.set_frame(owner);
+
for (;;) {
Runnable r;
ignite_reply(f_reply);
}
};
+ SwingUtilities.invokeLater(r);
} catch (Exception e) {
- final Exception f_e = e;
- r = new Runnable() {
- public void run() {
- ignite_exception(f_e);
- }
- };
+ send_exception(e);
}
- SwingUtilities.invokeLater(r);
}
}
- public IgniteHandler(AltosIgnite in_ignite) {
- ignite = in_ignite;
+ public IgniteHandler(JFrame in_owner) {
+ owner = in_owner;
}
}
void ignite_exception(Exception e) {
- abort();
+ if (e instanceof FileNotFoundException) {
+ JOptionPane.showMessageDialog(owner,
+ ((FileNotFoundException) e).getMessage(),
+ "Cannot open target device",
+ JOptionPane.ERROR_MESSAGE);
+ } else if (e instanceof AltosSerialInUseException) {
+ JOptionPane.showMessageDialog(owner,
+ String.format("Device \"%s\" already in use",
+ device.toShortString()),
+ "Device in use",
+ JOptionPane.ERROR_MESSAGE);
+ } else if (e instanceof IOException) {
+ IOException ee = (IOException) e;
+ JOptionPane.showMessageDialog(owner,
+ device.toShortString(),
+ ee.getLocalizedMessage(),
+ JOptionPane.ERROR_MESSAGE);
+ } else {
+ JOptionPane.showMessageDialog(owner,
+ String.format("Connection to \"%s\" failed",
+ device.toShortString()),
+ "Connection Failed",
+ JOptionPane.ERROR_MESSAGE);
+ }
+ close();
}
void ignite_reply(String reply) {
try {
command_queue.put(command);
} catch (Exception ex) {
- abort();
+ ignite_exception(ex);
}
}
dispose();
}
- void abort() {
- close();
- JOptionPane.showMessageDialog(owner,
- String.format("Connection to \"%s\" failed",
- device.toShortString()),
- "Connection Failed",
- JOptionPane.ERROR_MESSAGE);
- }
-
void tick_timer() {
if (timer_running) {
--time_remaining;
device = AltosDeviceDialog.show(owner, Altos.product_any);
if (device != null) {
- try {
- AltosIgnite ignite = new AltosIgnite(device);
- IgniteHandler handler = new IgniteHandler(ignite);
+ IgniteHandler handler = new IgniteHandler(owner);
Thread t = new Thread(handler);
- ignite.set_frame(owner);
t.start();
return true;
- } catch (FileNotFoundException ee) {
- JOptionPane.showMessageDialog(owner,
- String.format("Cannot open device \"%s\"",
- device.toShortString()),
- "Cannot open target device",
- JOptionPane.ERROR_MESSAGE);
- } catch (AltosSerialInUseException si) {
- JOptionPane.showMessageDialog(owner,
- String.format("Device \"%s\" already in use",
- device.toShortString()),
- "Device in use",
- JOptionPane.ERROR_MESSAGE);
- } catch (IOException ee) {
- JOptionPane.showMessageDialog(owner,
- device.toShortString(),
- ee.getLocalizedMessage(),
- JOptionPane.ERROR_MESSAGE);
- }
}
return false;
}
c.fill = GridBagConstraints.NONE;
c.anchor = GridBagConstraints.CENTER;
c.insets = i;
- c.weightx = 1;
- c.weighty = 1;
+ c.weightx = 0;
+ c.weighty = 0;
c.gridx = 0;
c.gridy = 0;
fire.addActionListener(this);
fire.setActionCommand("fire");
+ c.gridx = 0;
+ c.gridy = 4;
+ c.gridwidth = 2;
+ c.anchor = GridBagConstraints.CENTER;
+ close = new JButton ("Close");
+ pane.add(close, c);
+ close.addActionListener(this);
+ close.setActionCommand("close");
+
pack();
setLocationRelativeTo(owner);