--- /dev/null
+package tim.prune.function;
+
+import tim.prune.App;
+import tim.prune.DataSubscriber;
+import tim.prune.GenericFunction;
+import tim.prune.I18nManager;
+import tim.prune.UpdateMessageBroker;
+import tim.prune.data.DataPoint;
+import tim.prune.data.Field;
+import tim.prune.data.TimestampUtc;
+import tim.prune.data.Track;
+import tim.prune.undo.UndoConvertNamesToTimes;
+
+/**
+ * Class to provide the function to convert waypoint names to timestamps
+ */
+public class ConvertNamesToTimes extends GenericFunction
+{
+ /**
+ * Constructor
+ * @param inApp application object for callback
+ */
+ public ConvertNamesToTimes(App inApp)
+ {
+ super(inApp);
+ }
+
+ /** Get the name key */
+ public String getNameKey() {
+ return "function.convertnamestotimes";
+ }
+
+ /**
+ * Begin the function
+ */
+ public void begin()
+ {
+ int selStart = _app.getTrackInfo().getSelection().getStart();
+ int selEnd = _app.getTrackInfo().getSelection().getEnd();
+ final Track track = _app.getTrackInfo().getTrack();
+ if (!track.hasData(Field.WAYPT_NAME, selStart, selEnd))
+ {
+ _app.showErrorMessage(getNameKey(), "error.convertnamestotimes.nonames");
+ return;
+ }
+ UndoConvertNamesToTimes undo = new UndoConvertNamesToTimes(_app.getTrackInfo());
+ int numConverted = 0;
+ // Loop over all points in selection
+ for (int i=selStart; i<=selEnd; i++)
+ {
+ DataPoint point = track.getPoint(i);
+ if (point.isWaypoint())
+ {
+ TimestampUtc tstamp = new TimestampUtc(point.getWaypointName());
+ if (tstamp.isValid())
+ {
+ // timestamp could be parsed!
+ point.setFieldValue(Field.TIMESTAMP, point.getWaypointName(), false);
+ // set waypoint name to nothing (track point)
+ point.setFieldValue(Field.WAYPT_NAME, null, false);
+ // increment counter
+ numConverted++;
+ }
+ }
+ }
+ if (numConverted > 0)
+ {
+ _app.getTrackInfo().getTrack().requestRescale();
+ UpdateMessageBroker.informSubscribers(DataSubscriber.DATA_EDITED);
+ _app.completeFunction(undo, I18nManager.getText("confirm.convertnamestotimes"));
+ }
+ }
+
+}