X-Git-Url: https://gitweb.fperrin.net/?p=GpsPrune.git;a=blobdiff_plain;f=tim%2Fprune%2Fdata%2FDataPoint.java;h=34d7bd72055275f81339e1fe23c434d2008603c6;hp=7acd4f9e364314985d0ea2abb85996901352037b;hb=4d5796d02a15808311c09448d79e6e7d1de9d636;hpb=1ee49ae3c8ef3aa2e63eadd458531e5f8bd4f92c diff --git a/tim/prune/data/DataPoint.java b/tim/prune/data/DataPoint.java index 7acd4f9..34d7bd7 100644 --- a/tim/prune/data/DataPoint.java +++ b/tim/prune/data/DataPoint.java @@ -17,7 +17,10 @@ public class DataPoint private Coordinate _latitude = null, _longitude = null; private Altitude _altitude; private Timestamp _timestamp = null; + /** Attached photo */ private Photo _photo = null; + /** Attached audio clip */ + private AudioClip _audio = null; private String _waypointName = null; private boolean _startOfSegment = false; private boolean _markedForDeletion = false; @@ -35,6 +38,8 @@ public class DataPoint _fieldValues = inValueArray; // save list of fields _fieldList = inFieldList; + // Remove double quotes around values + removeQuotes(_fieldValues); // parse fields into objects parseFields(null, inAltFormat); } @@ -152,12 +157,7 @@ public class DataPoint _fieldValues[fieldIndex] = inValue; // Increment edit count on all field edits except segment if (inField != Field.NEW_SEGMENT) { - if (!inUndo) { - _modifyCount++; - } - else { - _modifyCount--; - } + setModified(inUndo); } // Change Coordinate, Altitude, Name or Timestamp fields after edit if (_altitude != null && _altitude.getFormat() != Altitude.Format.NO_FORMAT) { @@ -166,7 +166,21 @@ public class DataPoint } else { // use default altitude format from config - parseFields(inField, Config.getConfigBoolean(Config.KEY_METRIC_UNITS)?Altitude.Format.METRES:Altitude.Format.FEET); + parseFields(inField, Config.getUnitSet().getDefaultAltitudeFormat()); + } + } + + /** + * Either increment or decrement the modify count, depending on whether it's an undo or not + * @param inUndo true for undo, false otherwise + */ + public void setModified(boolean inUndo) + { + if (!inUndo) { + _modifyCount++; + } + else { + _modifyCount--; } } @@ -290,20 +304,51 @@ public class DataPoint * Set the photo for this data point * @param inPhoto Photo object */ - public void setPhoto(Photo inPhoto) - { + public void setPhoto(Photo inPhoto) { _photo = inPhoto; + _modifyCount++; } - /** * @return associated Photo object */ - public Photo getPhoto() - { + public Photo getPhoto() { return _photo; } + /** + * Set the audio clip for this point + * @param inAudio audio object + */ + public void setAudio(AudioClip inAudio) { + _audio = inAudio; + _modifyCount++; + } + + /** + * @return associated audio object + */ + public AudioClip getAudio() { + return _audio; + } + + /** + * Attach the given media object according to type + * @param inMedia either a photo or an audio clip + */ + public void attachMedia(MediaObject inMedia) + { + if (inMedia != null) { + if (inMedia instanceof Photo) { + setPhoto((Photo) inMedia); + inMedia.setDataPoint(this); + } + else if (inMedia instanceof AudioClip) { + setAudio((AudioClip) inMedia); + inMedia.setDataPoint(this); + } + } + } /** * @return true if the point is valid @@ -313,6 +358,32 @@ public class DataPoint return _latitude.isValid() && _longitude.isValid(); } + /** + * @return true if the point has either a photo or audio attached + */ + public boolean hasMedia() { + return _photo != null || _audio != null; + } + + /** + * @return name of attached photo and/or audio + */ + public String getMediaName() + { + String mediaName = null; + if (_photo != null) mediaName = _photo.getName(); + if (_audio != null) + { + if (mediaName == null) { + mediaName = _audio.getName(); + } + else { + mediaName = mediaName + ", " + _audio.getName(); + } + } + return mediaName; + } + /** * Interpolate a set of points between this one and the given one * @param inEndPoint end point of interpolation @@ -407,6 +478,41 @@ public class DataPoint } + /** + * Remove all single and double quotes surrounding each value + * @param inValues array of values + */ + private static void removeQuotes(String[] inValues) + { + if (inValues == null) {return;} + for (int i=0; i