]> gitweb.fperrin.net Git - GpsPrune.git/blobdiff - tim/prune/save/FileSaver.java
Version 14, October 2012
[GpsPrune.git] / tim / prune / save / FileSaver.java
index 63810143800e92aca3eeb81944529c563ae76862..6be44eb80bc3eb6beb828f0270db15c75255954e 100644 (file)
@@ -40,6 +40,7 @@ import tim.prune.data.Coordinate;
 import tim.prune.data.DataPoint;
 import tim.prune.data.Field;
 import tim.prune.data.FieldList;
+import tim.prune.data.RecentFile;
 import tim.prune.data.Timestamp;
 import tim.prune.data.Track;
 import tim.prune.load.GenericFileFilter;
@@ -397,8 +398,6 @@ public class FileSaver
                        _fileChooser = new JFileChooser();
                        _fileChooser.setDialogType(JFileChooser.SAVE_DIALOG);
                        _fileChooser.addChoosableFileFilter(new GenericFileFilter("filetype.txt", new String[] {"txt", "text"}));
-                       _fileChooser.addChoosableFileFilter(new GenericFileFilter("filetype.gpx", new String[] {"gpx"}));
-                       _fileChooser.addChoosableFileFilter(new GenericFileFilter("filetype.kml", new String[] {"kml"}));
                        _fileChooser.setAcceptAllFileFilterUsed(true);
                        // start from directory in config which should be set
                        String configDir = Config.getConfigString(Config.KEY_TRACK_DIR);
@@ -445,9 +444,12 @@ public class FileSaver
                        }
                }
 
+               // Correct chosen filename if necessary
+               final File saveFile = (isFilenameOk(inSaveFile)?inSaveFile:new File(inSaveFile.getAbsolutePath() + ".txt"));
+
                // Check if file exists, and confirm overwrite if necessary
                Object[] buttonTexts = {I18nManager.getText("button.overwrite"), I18nManager.getText("button.cancel")};
-               if (!inSaveFile.exists() || JOptionPane.showOptionDialog(_parentFrame,
+               if (!saveFile.exists() || JOptionPane.showOptionDialog(_parentFrame,
                                I18nManager.getText("dialog.save.overwrite.text"),
                                I18nManager.getText("dialog.save.overwrite.title"), JOptionPane.YES_NO_OPTION,
                                JOptionPane.WARNING_MESSAGE, null, buttonTexts, buttonTexts[1])
@@ -456,7 +458,7 @@ public class FileSaver
                        try
                        {
                                // Create output file
-                               writer = new FileWriter(inSaveFile);
+                               writer = new FileWriter(saveFile);
                                // Determine delimiter character to use
                                final char delimiter = getDelimiter();
                                FieldInfo info = null;
@@ -499,8 +501,9 @@ public class FileSaver
                                {
                                        DataPoint point = track.getPoint(p);
                                        boolean savePoint = ((point.isWaypoint() && _pointTypeSelector.getWaypointsSelected())
-                                               || (!point.isWaypoint() && point.getPhoto()==null && _pointTypeSelector.getTrackpointsSelected())
-                                               || (!point.isWaypoint() && point.getPhoto()!=null && _pointTypeSelector.getPhotopointsSelected()))
+                                               || (!point.isWaypoint() && !point.hasMedia() && _pointTypeSelector.getTrackpointsSelected())
+                                               || (!point.isWaypoint() && point.getPhoto()!=null && _pointTypeSelector.getPhotopointsSelected())
+                                               || (!point.isWaypoint() && point.getAudio()!=null && _pointTypeSelector.getAudiopointsSelected()))
                                                && (!_pointTypeSelector.getJustSelection() || (p>=selStart && p<=selEnd));
                                        if (!savePoint) {continue;}
                                        numSaved++;
@@ -511,9 +514,8 @@ public class FileSaver
                                                info = _model.getFieldInfo(f);
                                                if (info.isSelected())
                                                {
-                                                       if (!firstField)
-                                                       {
-                                                               // output field separator
+                                                       // output field separator
+                                                       if (!firstField) {
                                                                buffer.append(delimiter);
                                                        }
                                                        saveField(buffer, point, info.getField(), coordFormat, altitudeFormat, timestampFormat);
@@ -525,11 +527,14 @@ public class FileSaver
                                        writer.write(lineSeparator);
                                }
                                // Store directory in config for later
-                               Config.setConfigString(Config.KEY_TRACK_DIR, inSaveFile.getParentFile().getAbsolutePath());
+                               Config.setConfigString(Config.KEY_TRACK_DIR, saveFile.getParentFile().getAbsolutePath());
+                               // Add to recent file list
+                               Config.getRecentFileList().addFile(new RecentFile(inSaveFile, true));
                                // Save successful
+                               UpdateMessageBroker.informSubscribers();
                                UpdateMessageBroker.informSubscribers(I18nManager.getText("confirm.save.ok1")
                                         + " " + numSaved + " " + I18nManager.getText("confirm.save.ok2")
-                                        + " " + inSaveFile.getAbsolutePath());
+                                        + " " + saveFile.getAbsolutePath());
                                _app.informDataSaved();
                        }
                        catch (IOException ioe)
@@ -591,7 +596,7 @@ public class FileSaver
                        {
                                if (inTimestampFormat == Timestamp.FORMAT_ORIGINAL) {
                                        // output original string
-                                       inBuffer.append(inPoint.getFieldValue(Field.TIMESTAMP));
+                                       inBuffer.append(inPoint.getTimestamp().getText(Timestamp.FORMAT_ORIGINAL));
                                }
                                else {
                                        // format value accordingly
@@ -627,4 +632,17 @@ public class FileSaver
                // Wasn't any of those so must be 'other'
                return _otherDelimiterText.getText().charAt(0);
        }
+
+
+       /**
+        * Check the selected filename to see if it is acceptable
+        * @param inFile chosen file to save
+        * @return true if filename is ok
+        */
+       private static boolean isFilenameOk(File inFile)
+       {
+               String filename = inFile.getName().toLowerCase();
+               return (filename.length() <4 || (!filename.endsWith(".gpx")
+                       && !filename.endsWith(".kml") && !filename.endsWith(".kmz") && !filename.endsWith(".zip")));
+       }
 }