]> gitweb.fperrin.net Git - GpsPrune.git/blobdiff - tim/prune/save/FileSaver.java
Version 19, May 2018
[GpsPrune.git] / tim / prune / save / FileSaver.java
index f2ea066179efed753aef009243bc4ab174b12ba5..45af83e0a7cac09286848f55be8508b3d2e87c9e 100644 (file)
@@ -35,13 +35,15 @@ import tim.prune.App;
 import tim.prune.I18nManager;
 import tim.prune.UpdateMessageBroker;
 import tim.prune.config.Config;
-import tim.prune.data.Altitude;
 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.data.Unit;
+import tim.prune.data.UnitSetLibrary;
 import tim.prune.load.GenericFileFilter;
 import tim.prune.load.OneCharDocument;
 
@@ -71,8 +73,8 @@ public class FileSaver
 
        private static final int[] FORMAT_COORDS = {Coordinate.FORMAT_NONE, Coordinate.FORMAT_DEG_MIN_SEC,
                Coordinate.FORMAT_DEG_MIN, Coordinate.FORMAT_DEG};
-       private static final Altitude.Format[] FORMAT_ALTS = {Altitude.Format.NO_FORMAT, Altitude.Format.METRES, Altitude.Format.FEET};
-       private static final int[] FORMAT_TIMES = {Timestamp.FORMAT_ORIGINAL, Timestamp.FORMAT_LOCALE, Timestamp.FORMAT_ISO_8601};
+       private static final Unit[] UNIT_ALTS = {null, UnitSetLibrary.UNITS_METRES, UnitSetLibrary.UNITS_FEET};
+       private static final Timestamp.Format[] FORMAT_TIMES = {Timestamp.Format.ORIGINAL, Timestamp.Format.LOCALE, Timestamp.Format.ISO8601};
 
 
        /**
@@ -100,17 +102,25 @@ public class FileSaver
                        _dialog.getContentPane().add(makeDialogComponents());
                        _dialog.pack();
                }
+               // Has the track got media?
+               final boolean hasMedia = _app.getTrackInfo().getPhotoList().hasCorrelatedPhotos()
+                       || _app.getTrackInfo().getAudioList().hasCorrelatedAudios();
                // Check field list
                Track track = _app.getTrackInfo().getTrack();
                FieldList fieldList = track.getFieldList();
                int numFields = fieldList.getNumFields();
-               _model = new FieldSelectionTableModel(numFields);
+               _model = new FieldSelectionTableModel(numFields + (hasMedia ? 1 : 0));
                for (int i=0; i<numFields; i++)
                {
                        Field field = fieldList.getField(i);
                        FieldInfo info = new FieldInfo(field, track.hasData(field));
                        _model.addFieldInfo(info, i);
                }
+               // Add a field for photos / audio if any present
+               if (hasMedia)
+               {
+                       _model.addFieldInfo(new FieldInfo(Field.MEDIA_FILENAME, true), numFields);
+               }
                // Initialise dialog and show it
                initDialog(_model, inDefaultDelimiter);
                _dialog.setVisible(true);
@@ -427,15 +437,15 @@ public class FileSaver
                for (int i=0; i<_coordUnitsRadios.length; i++)
                        if (_coordUnitsRadios[i].isSelected())
                                coordFormat = FORMAT_COORDS[i];
-               Altitude.Format altitudeFormat = Altitude.Format.NO_FORMAT;
+               Unit altitudeUnit = null;
                for (int i=0; i<_altitudeUnitsRadios.length; i++)
                {
                        if (_altitudeUnitsRadios[i].isSelected()) {
-                               altitudeFormat = FORMAT_ALTS[i];
+                               altitudeUnit = UNIT_ALTS[i];
                        }
                }
                // Get timestamp format
-               int timestampFormat = Timestamp.FORMAT_ORIGINAL;
+               Timestamp.Format timestampFormat = Timestamp.Format.ORIGINAL;
                for (int i=0; i<_timestampUnitsRadios.length; i++)
                {
                        if (_timestampUnitsRadios[i].isSelected()) {
@@ -517,7 +527,7 @@ public class FileSaver
                                                        if (!firstField) {
                                                                buffer.append(delimiter);
                                                        }
-                                                       saveField(buffer, point, info.getField(), coordFormat, altitudeFormat, timestampFormat);
+                                                       saveField(buffer, point, info.getField(), coordFormat, altitudeUnit, timestampFormat);
                                                        firstField = false;
                                                }
                                        }
@@ -527,7 +537,10 @@ public class FileSaver
                                }
                                // Store directory in config for later
                                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")
                                         + " " + saveFile.getAbsolutePath());
@@ -563,11 +576,11 @@ public class FileSaver
         * @param inPoint point object
         * @param inField field object
         * @param inCoordFormat coordinate format
-        * @param inAltitudeFormat altitude format
+        * @param inAltitudeUnit altitude unit
         * @param inTimestampFormat timestamp format
         */
        private void saveField(StringBuffer inBuffer, DataPoint inPoint, Field inField,
-               int inCoordFormat, Altitude.Format inAltitudeFormat, int inTimestampFormat)
+               int inCoordFormat, Unit inAltitudeUnit, Timestamp.Format inTimestampFormat)
        {
                // Output field according to type
                if (inField == Field.LATITUDE)
@@ -582,7 +595,7 @@ public class FileSaver
                {
                        try
                        {
-                               inBuffer.append(inPoint.getAltitude().getStringValue(inAltitudeFormat));
+                               inBuffer.append(inPoint.getAltitude().getStringValue(inAltitudeUnit));
                        }
                        catch (NullPointerException npe) {}
                }
@@ -590,14 +603,15 @@ public class FileSaver
                {
                        if (inPoint.hasTimestamp())
                        {
-                               if (inTimestampFormat == Timestamp.FORMAT_ORIGINAL) {
-                                       // output original string
-                                       inBuffer.append(inPoint.getFieldValue(Field.TIMESTAMP));
-                               }
-                               else {
-                                       // format value accordingly
-                                       inBuffer.append(inPoint.getTimestamp().getText(inTimestampFormat));
-                               }
+                               // format value accordingly
+                               inBuffer.append(inPoint.getTimestamp().getText(inTimestampFormat, null));
+                       }
+               }
+               else if (inField == Field.MEDIA_FILENAME)
+               {
+                       if (inPoint.hasMedia())
+                       {
+                               inBuffer.append(inPoint.getMediaName());
                        }
                }
                else