X-Git-Url: https://gitweb.fperrin.net/?a=blobdiff_plain;f=tim%2Fprune%2Fsave%2FFileSaver.java;h=b4a73d43d86f301a464d8ab5dde1e68be189d332;hb=7f5ed2be62905bd37717376dc22d09e5ea7edb4d;hp=63810143800e92aca3eeb81944529c563ae76862;hpb=1ee49ae3c8ef3aa2e63eadd458531e5f8bd4f92c;p=GpsPrune.git diff --git a/tim/prune/save/FileSaver.java b/tim/prune/save/FileSaver.java index 6381014..b4a73d4 100644 --- a/tim/prune/save/FileSaver.java +++ b/tim/prune/save/FileSaver.java @@ -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,7 +73,7 @@ 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 Unit[] UNIT_ALTS = {null, UnitSetLibrary.UNITS_METRES, UnitSetLibrary.UNITS_FEET}; private static final int[] FORMAT_TIMES = {Timestamp.FORMAT_ORIGINAL, Timestamp.FORMAT_LOCALE, Timestamp.FORMAT_ISO_8601}; @@ -397,8 +399,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); @@ -429,11 +429,11 @@ 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 @@ -445,9 +445,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 +459,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 +502,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,12 +515,11 @@ 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); + saveField(buffer, point, info.getField(), coordFormat, altitudeUnit, timestampFormat); firstField = false; } } @@ -525,11 +528,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) @@ -562,11 +568,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, int inTimestampFormat) { // Output field according to type if (inField == Field.LATITUDE) @@ -581,7 +587,7 @@ public class FileSaver { try { - inBuffer.append(inPoint.getAltitude().getStringValue(inAltitudeFormat)); + inBuffer.append(inPoint.getAltitude().getStringValue(inAltitudeUnit)); } catch (NullPointerException npe) {} } @@ -591,7 +597,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 +633,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"))); + } }