1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187
|
package tim.prune.load;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import tim.prune.App;
import tim.prune.I18nManager;
import tim.prune.config.Config;
import tim.prune.data.SourceInfo;
import tim.prune.data.SourceInfo.FILE_TYPE;
import tim.prune.load.babel.BabelFilterPanel;
/**
* Class to manage the loading of data from a GPS device using GpsBabel
*/
public class BabelLoadFromGps extends BabelLoader
{
// Text fields for entering device and format
private JTextField _deviceField = null, _formatField = null;
/**
* Constructor
* @param inApp Application object to inform of data load
*/
public BabelLoadFromGps(App inApp) {
super(inApp);
}
/** Get the name key */
public String getNameKey() {
return "function.loadfromgps";
}
/** @return device name as file path */
protected String getFilePath() {
return _deviceField.getText();
}
/** @return Source info */
protected SourceInfo getSourceInfo() {
return new SourceInfo(_deviceField.getText(), FILE_TYPE.GPSBABEL);
}
/** @return input format */
protected String getInputFormat() {
return _formatField.getText();
}
/** @return true if function can be run */
protected boolean isInputOk() {
return _waypointCheckbox.isSelected() || _trackCheckbox.isSelected();
}
/**
* @return a panel containing the main dialog components
*/
protected JPanel makeDialogComponents()
{
JPanel outerPanel = new JPanel();
outerPanel.setLayout(new BorderLayout());
// Main panel with options etc
JPanel mainPanel = new JPanel();
mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS));
// text fields for options
JPanel gridPanel = new JPanel();
gridPanel.setLayout(new GridLayout(0, 2, 10, 3));
JLabel deviceLabel = new JLabel(I18nManager.getText("dialog.gpsload.device"));
deviceLabel.setHorizontalAlignment(SwingConstants.RIGHT);
gridPanel.add(deviceLabel);
_deviceField = new JTextField(Config.getConfigString(Config.KEY_GPS_DEVICE), 12);
KeyAdapter escapeListener = new KeyAdapter() {
public void keyReleased(KeyEvent e)
{
// close dialog if escape pressed
if (e.getKeyCode() == KeyEvent.VK_ESCAPE) {
_dialog.dispose();
}
}
};
_deviceField.addKeyListener(escapeListener);
gridPanel.add(_deviceField);
JLabel formatLabel = new JLabel(I18nManager.getText("dialog.gpsload.format"));
formatLabel.setHorizontalAlignment(SwingConstants.RIGHT);
gridPanel.add(formatLabel);
_formatField = new JTextField(Config.getConfigString(Config.KEY_GPS_FORMAT), 12);
_formatField.addKeyListener(escapeListener);
gridPanel.add(_formatField);
gridPanel.setAlignmentX(Component.CENTER_ALIGNMENT);
gridPanel.setBorder(BorderFactory.createEmptyBorder(10, 5, 5, 20));
mainPanel.add(gridPanel);
// checkboxes
ChangeListener checkboxListener = new ChangeListener() {
public void stateChanged(ChangeEvent e)
{
enableOkButton();
}
};
_waypointCheckbox = new JCheckBox(I18nManager.getText("dialog.gpsload.getwaypoints"), true);
_waypointCheckbox.addChangeListener(checkboxListener);
_waypointCheckbox.setAlignmentX(Component.CENTER_ALIGNMENT);
mainPanel.add(_waypointCheckbox);
_trackCheckbox = new JCheckBox(I18nManager.getText("dialog.gpsload.gettracks"), true);
_trackCheckbox.addChangeListener(checkboxListener);
_trackCheckbox.setAlignmentX(Component.CENTER_ALIGNMENT);
mainPanel.add(_trackCheckbox);
// Checkbox for immediately saving to file
_saveCheckbox = new JCheckBox(I18nManager.getText("dialog.gpsload.save"));
_saveCheckbox.setAlignmentX(Component.CENTER_ALIGNMENT);
mainPanel.add(_saveCheckbox);
// Filter panel
_filterPanel = new BabelFilterPanel(_parentFrame);
// Give filter panel the contents of the config
String filter = Config.getConfigString(Config.KEY_GPSBABEL_FILTER);
if (filter != null) {
_filterPanel.setFilterString(filter);
}
mainPanel.add(_filterPanel);
// progress bar (initially invisible)
_progressBar = new JProgressBar(0, 10);
mainPanel.add(_progressBar);
outerPanel.add(mainPanel, BorderLayout.NORTH);
// Lower panel with ok and cancel buttons
JPanel buttonPanel = new JPanel();
buttonPanel.setLayout(new FlowLayout(FlowLayout.RIGHT));
_okButton = new JButton(I18nManager.getText("button.ok"));
ActionListener okListener = new ActionListener() {
public void actionPerformed(ActionEvent e)
{
// start thread to call gpsbabel
_cancelled = false;
new Thread(BabelLoadFromGps.this).start();
}
};
_okButton.addActionListener(okListener);
_deviceField.addActionListener(okListener);
_formatField.addActionListener(okListener);
buttonPanel.add(_okButton);
JButton cancelButton = new JButton(I18nManager.getText("button.cancel"));
cancelButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
_cancelled = true;
_dialog.dispose();
}
});
buttonPanel.add(cancelButton);
outerPanel.add(buttonPanel, BorderLayout.SOUTH);
return outerPanel;
}
/**
* Save GPS settings in config
*/
protected void saveConfigValues()
{
final String device = _deviceField.getText().trim();
final String format = _formatField.getText().trim();
final String filter = _filterPanel.getFilterString();
Config.setConfigString(Config.KEY_GPS_DEVICE, device);
Config.setConfigString(Config.KEY_GPS_FORMAT, format);
Config.setConfigString(Config.KEY_GPSBABEL_FILTER, filter);
}
}
|