package com.aerodynelabs.habtk.ui; import java.awt.Container; import java.awt.Dimension; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JDialog; import javax.swing.JLabel; import javax.swing.JSeparator; import javax.swing.JTextField; import javax.swing.SpringLayout; import com.aerodynelabs.habtk.tracking.Tracker; import com.aerodynelabs.habtk.tracking.TrackingService; @SuppressWarnings("serial") public class TrackingConfigDialog extends JDialog { private boolean accepted = false; private JTextField fPrimary; private JTextField fSecondary; private JTextField fRecovery; private JCheckBox fNearby; private Tracker primary; private Tracker secondary; private Tracker recovery; private boolean nearby; public TrackingConfigDialog(TrackingService tracker) { setTitle("Setup Flight"); setModal(true); SpringLayout layout = new SpringLayout(); setLayout(layout); Container pane = getContentPane(); primary = tracker.getPrimary(); secondary = tracker.getSecondary(); recovery = tracker.getRecovery(); JLabel lPrimary = new JLabel("Primary Tracking"); layout.putConstraint(SpringLayout.NORTH, lPrimary, 6, SpringLayout.NORTH, pane); layout.putConstraint(SpringLayout.WEST, lPrimary, 6, SpringLayout.WEST, pane); add(lPrimary); JSeparator sPrimary = new JSeparator(); layout.putConstraint(SpringLayout.VERTICAL_CENTER, sPrimary, 0, SpringLayout.VERTICAL_CENTER, lPrimary); layout.putConstraint(SpringLayout.WEST, sPrimary, 6, SpringLayout.EAST, lPrimary); layout.putConstraint(SpringLayout.EAST, sPrimary, -6, SpringLayout.EAST, pane); add(sPrimary); fPrimary = new JTextField(30); fPrimary.setEditable(false); if(primary != null) { fPrimary.setText(primary.toString()); } else { fPrimary.setText("Not Configured"); } JButton bPrimary = new JButton("Configure"); bPrimary.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { Tracker t = Tracker.create(); if(t != null) { primary = t; fPrimary.setText(t.toString()); } } }); layout.putConstraint(SpringLayout.NORTH, fPrimary, 6, SpringLayout.SOUTH, lPrimary); layout.putConstraint(SpringLayout.NORTH, bPrimary, 0, SpringLayout.NORTH, fPrimary); layout.putConstraint(SpringLayout.SOUTH, bPrimary, 0, SpringLayout.SOUTH, fPrimary); layout.putConstraint(SpringLayout.WEST, bPrimary, 6, SpringLayout.WEST, pane); layout.putConstraint(SpringLayout.WEST, fPrimary, 6, SpringLayout.EAST, bPrimary); layout.putConstraint(SpringLayout.EAST, pane, 6, SpringLayout.EAST, fPrimary); add(fPrimary); add(bPrimary); JLabel lSecondary = new JLabel("Secondary Tracking"); layout.putConstraint(SpringLayout.NORTH, lSecondary, 6, SpringLayout.SOUTH, fPrimary); layout.putConstraint(SpringLayout.WEST, lSecondary, 6, SpringLayout.WEST, pane); add(lSecondary); JSeparator sSecondary = new JSeparator(); layout.putConstraint(SpringLayout.VERTICAL_CENTER, sSecondary, 0, SpringLayout.VERTICAL_CENTER, lSecondary); layout.putConstraint(SpringLayout.WEST, sSecondary, 6, SpringLayout.EAST, lSecondary); layout.putConstraint(SpringLayout.EAST, sSecondary, -6, SpringLayout.EAST, pane); add(sSecondary); fSecondary = new JTextField(30); fSecondary.setEditable(false); if(secondary != null) { fSecondary.setText(secondary.toString()); } else { fSecondary.setText("Not Configured"); } JButton bSecondary = new JButton("Configure"); bSecondary.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { Tracker t = Tracker.create(); if(t != null) { secondary = t; fSecondary.setText(t.toString()); } } }); layout.putConstraint(SpringLayout.NORTH, fSecondary, 6, SpringLayout.SOUTH, lSecondary); layout.putConstraint(SpringLayout.NORTH, bSecondary, 0, SpringLayout.NORTH, fSecondary); layout.putConstraint(SpringLayout.SOUTH, bSecondary, 0, SpringLayout.SOUTH, fSecondary); layout.putConstraint(SpringLayout.WEST, bSecondary, 6, SpringLayout.WEST, pane); layout.putConstraint(SpringLayout.WEST, fSecondary, 6, SpringLayout.EAST, bSecondary); layout.putConstraint(SpringLayout.EAST, fSecondary, -6, SpringLayout.EAST, pane); add(fSecondary); add(bSecondary); JLabel lRecovery = new JLabel("Recovery Tracking"); layout.putConstraint(SpringLayout.NORTH, lRecovery, 6, SpringLayout.SOUTH, fSecondary); layout.putConstraint(SpringLayout.WEST, lRecovery, 6, SpringLayout.WEST, pane); add(lRecovery); JSeparator sRecovery = new JSeparator(); layout.putConstraint(SpringLayout.VERTICAL_CENTER, sRecovery, 0, SpringLayout.VERTICAL_CENTER, lRecovery); layout.putConstraint(SpringLayout.WEST, sRecovery, 6, SpringLayout.EAST, lRecovery); layout.putConstraint(SpringLayout.EAST, sRecovery, -6, SpringLayout.EAST, pane); add(sRecovery); fRecovery = new JTextField(30); fRecovery.setEditable(false); if(recovery != null) { fRecovery.setText(recovery.toString()); } else { fRecovery.setText("Not Configured"); } JButton bRecovery = new JButton("Configure"); bRecovery.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { Tracker t = Tracker.create(); if(t != null) { recovery = t; fRecovery.setText(t.toString()); } } }); layout.putConstraint(SpringLayout.NORTH, fRecovery, 6, SpringLayout.SOUTH, lRecovery); layout.putConstraint(SpringLayout.NORTH, bRecovery, 0, SpringLayout.NORTH, fRecovery); layout.putConstraint(SpringLayout.SOUTH, bRecovery, 0, SpringLayout.SOUTH, fRecovery); layout.putConstraint(SpringLayout.WEST, bRecovery, 6, SpringLayout.WEST, pane); layout.putConstraint(SpringLayout.WEST, fRecovery, 6, SpringLayout.EAST, bRecovery); layout.putConstraint(SpringLayout.EAST, fRecovery, -6, SpringLayout.EAST, pane); add(fRecovery); add(bRecovery); fNearby = new JCheckBox("Map Nearby Objects"); fNearby.setEnabled(false); layout.putConstraint(SpringLayout.NORTH, fNearby, 6, SpringLayout.SOUTH, fRecovery); layout.putConstraint(SpringLayout.WEST, fNearby, 6, SpringLayout.WEST, pane); add(fNearby); JButton cancel = new JButton("Cancel"); cancel.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { accepted = false; dispose(); } }); JButton ok = new JButton("Accept"); ok.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { try { nearby = fNearby.isSelected(); accepted = true; } catch(Exception e1) { e1.printStackTrace(); accepted = false; } dispose(); } }); layout.putConstraint(SpringLayout.NORTH, ok, 6, SpringLayout.SOUTH, fNearby); layout.putConstraint(SpringLayout.SOUTH, pane, 6, SpringLayout.SOUTH, ok); layout.putConstraint(SpringLayout.NORTH, cancel, 0, SpringLayout.NORTH, ok); layout.putConstraint(SpringLayout.EAST, ok, -6, SpringLayout.EAST, pane); layout.putConstraint(SpringLayout.EAST, cancel, -6, SpringLayout.WEST, ok); add(cancel); add(ok); pack(); Dimension screen = Toolkit.getDefaultToolkit().getScreenSize(); setLocation((screen.width - getWidth()) / 2, (screen.height - getHeight()) / 2); setVisible(true); } public boolean wasAccepted() { return accepted; } public Tracker getPrimary() { return primary; } public Tracker getSecondary() { return secondary; } public Tracker getRecovery() { return recovery; } public boolean isMapNearbyEnabled() { return nearby; } }