/*******************************************************************************
* Copyright (c) MOBAC developers
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
******************************************************************************/
package mobac.gui.actions;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.xml.bind.JAXBException;
import mobac.data.gpx.GPXUtils;
import mobac.data.gpx.gpx11.Gpx;
import mobac.gui.MainGUI;
import mobac.gui.gpxtree.GpxEntry;
import mobac.gui.panels.JGpxPanel;
import mobac.program.model.Settings;
import mobac.utilities.I18nUtils;
import mobac.utilities.file.GpxFileFilter;
public class GpxSave implements ActionListener {
private JGpxPanel panel;
private boolean saveAs;
public GpxSave(JGpxPanel panel) {
this(panel, false);
}
/**
*
* @param panel
* @param saveAs
* if true a file chooser dialog is displayed where the user can
* change the filename
*/
public GpxSave(JGpxPanel panel, boolean saveAs) {
super();
this.panel = panel;
this.saveAs = saveAs;
}
public void actionPerformed(ActionEvent event) {
GpxEntry entry = panel.getSelectedEntry();
if (entry == null) {
JOptionPane.showMessageDialog(null,
I18nUtils.localizedStringForKey("rp_gpx_msg_error_save_gpx_file"),
I18nUtils.localizedStringForKey("rp_gpx_msg_no_select_file"),
JOptionPane.ERROR_MESSAGE);
return;
}
if (!GPXUtils.checkJAXBVersion())
return;
Gpx gpx = entry.getLayer().getGpx();
try {
File f = entry.getLayer().getFile();
if (saveAs || f == null)
f = selectFile(f);
if (f == null)
return;
if (!f.getName().toLowerCase().endsWith(".gpx"))
f = new File(f.getAbsolutePath() + ".gpx");
entry.getLayer().setFile(f);
GPXUtils.saveGpxFile(gpx, f);
} catch (JAXBException e) {
throw new RuntimeException(e);
}
MainGUI.getMainGUI().previewMap.repaint();
}
private File selectFile(File f) {
JFileChooser fc = new JFileChooser();
try {
File dir = new File(Settings.getInstance().gpxFileChooserDir);
if (f == null)
fc.setCurrentDirectory(dir); // restore the saved directory
else
fc.setSelectedFile(f);
} catch (Exception e) {
}
fc.addChoosableFileFilter(new GpxFileFilter(true));
int returnVal = fc.showSaveDialog(MainGUI.getMainGUI());
if (returnVal != JFileChooser.APPROVE_OPTION)
return null;
Settings.getInstance().gpxFileChooserDir = fc.getCurrentDirectory().getAbsolutePath();
return fc.getSelectedFile();
}
}