+++ /dev/null
-package tim.prune.load;
-
-import java.awt.BorderLayout;
-import java.awt.Component;
-import java.awt.FlowLayout;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.io.File;
-
-import javax.swing.BorderFactory;
-import javax.swing.BoxLayout;
-import javax.swing.JButton;
-import javax.swing.JCheckBox;
-import javax.swing.JComboBox;
-import javax.swing.JFileChooser;
-import javax.swing.JLabel;
-import javax.swing.JPanel;
-import javax.swing.JProgressBar;
-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.gui.GuiGridLayout;
-import tim.prune.load.babel.BabelFilterPanel;
-
-
-/**
- * Class to manage the loading of data from a file using GpsBabel.
- * This allows the use of Gpsbabel's importing functions to convert to gpx.
- */
-public class BabelLoadFromFile extends BabelLoader
-{
- // file chooser
- private JFileChooser _fileChooser = null;
- // Input file
- private File _inputFile = null;
- // Label for filename
- private JLabel _inputFileLabel = null;
- // Dropdown for format of file
- private JComboBox<String> _formatDropdown = null;
- // Last used file suffix
- private String _lastSuffix = null;
-
- /**
- * Constructor
- * @param inApp Application object to inform of data load
- */
- public BabelLoadFromFile(App inApp) {
- super(inApp);
- }
-
- /** Get the name key */
- public String getNameKey() {
- return "function.importwithgpsbabel";
- }
-
- /** @return complete input file path for gpsbabel call */
- protected String getFilePath() {
- return _inputFile.getAbsolutePath();
- }
-
- /** @return Source info */
- protected SourceInfo getSourceInfo() {
- return new SourceInfo(_inputFile, FILE_TYPE.GPSBABEL);
- }
-
- /** @return input format */
- protected String getInputFormat() {
- return BabelFileFormats.getFormat(_formatDropdown.getSelectedIndex());
- }
-
- /** @return true if function can be run */
- protected boolean isInputOk() {
- return _inputFile.exists() && _inputFile.canRead();
- }
-
- /**
- * Override the begin method to specify input file first
- */
- public void begin()
- {
- // Construct file chooser if necessary
- if (_fileChooser == null)
- {
- _fileChooser = new JFileChooser();
- // start from directory in config if already set
- String configDir = Config.getConfigString(Config.KEY_TRACK_DIR);
- if (configDir == null) {configDir = Config.getConfigString(Config.KEY_PHOTO_DIR);}
- if (configDir != null) {_fileChooser.setCurrentDirectory(new File(configDir));}
- _fileChooser.setMultiSelectionEnabled(false); // Single files only
- }
- // Show the open dialog
- if (_fileChooser.showOpenDialog(_parentFrame) == JFileChooser.APPROVE_OPTION)
- {
- _inputFile = _fileChooser.getSelectedFile();
- if (_inputFile != null && isInputOk()) {
- super.begin();
- }
- }
- }
-
- /**
- * Begin the load function with a previously-specified file
- * @param inFile file to load
- */
- public void beginWithFile(File inFile)
- {
- _inputFile = inFile;
- super.begin();
- }
-
- /**
- * @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();
- GuiGridLayout grid = new GuiGridLayout(gridPanel);
- JLabel nameLabel = new JLabel(I18nManager.getText("details.track.file"));
- grid.add(nameLabel);
- _inputFileLabel = new JLabel("------------");
- grid.add(_inputFileLabel);
- JLabel formatLabel = new JLabel(I18nManager.getText("dialog.gpsload.format"));
- grid.add(formatLabel);
- _formatDropdown = new JComboBox<String>(BabelFileFormats.getDescriptions());
- grid.add(_formatDropdown);
- 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(BabelLoadFromFile.this).start();
- }
- };
- _okButton.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;
- }
-
- /**
- * @return the suffix of the selected filename
- */
- private String getSelectedSuffix()
- {
- String filename = _inputFile.getName();
- if (filename == null) {return "";}
- int dotPos = filename.lastIndexOf('.');
- return (dotPos > 0 ? filename.substring(dotPos) : "");
- }
-
- /**
- * Initialise dialog
- */
- protected void initDialog()
- {
- _inputFileLabel.setText(_inputFile.getName());
- // Get suffix of filename and compare with previous one
- String suffix = getSelectedSuffix();
- if (_lastSuffix == null || !suffix.equalsIgnoreCase(_lastSuffix))
- {
- // New suffix has been chosen, so select first appropriate format (if any)
- int selIndex = BabelFileFormats.getIndexForFileSuffix(suffix);
- if (selIndex < 0)
- {
- // Use the previous one from the Config (if any)
- selIndex = Config.getConfigInt(Config.KEY_IMPORT_FILE_FORMAT);
- }
- if (selIndex >= 0) {
- _formatDropdown.setSelectedIndex(selIndex);
- }
- }
- _lastSuffix = suffix;
- }
-
- /**
- * Save settings in config
- */
- protected void saveConfigValues()
- {
- // Save the filter string, clear it if it's now blank
- final String filter = _filterPanel.getFilterString();
- Config.setConfigString(Config.KEY_GPSBABEL_FILTER, filter);
-
- // Check if there is a standard file type for the selected suffix
- int selIndex = BabelFileFormats.getIndexForFileSuffix(getSelectedSuffix());
- // If there is none, then get the index which the user chose and set in the Config
- if (selIndex < 0) {
- Config.setConfigInt(Config.KEY_IMPORT_FILE_FORMAT, _formatDropdown.getSelectedIndex());
- }
- }
-}