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