+++ /dev/null
-package tim.prune.function.sew;
-
-import javax.swing.JOptionPane;
-
-import tim.prune.App;
-import tim.prune.I18nManager;
-import tim.prune.UpdateMessageBroker;
-import tim.prune.data.DataPoint;
-import tim.prune.function.DistanceTimeLimitFunction;
-import tim.prune.undo.UndoSplitSegments;
-
-/**
- * Function to split a track into segments using
- * either a distance limit or a time limit
- */
-public class SplitSegmentsFunction extends DistanceTimeLimitFunction
-{
- /**
- * Constructor
- */
- public SplitSegmentsFunction(App inApp) {
- super(inApp);
- }
-
- /**
- * @return name key
- */
- public String getNameKey() {
- return "function.splitsegments";
- }
-
-
- /**
- * The dialog has been completed and OK pressed, so do the split
- */
- protected void performFunction()
- {
- // Split either by distance or time
- final int timeLimitSeconds = getTimeLimitInSeconds();
- final boolean splitByTime = (timeLimitSeconds > 0);
- final double distLimitRadians = getDistanceLimitRadians();
- final boolean splitByDistance = (distLimitRadians > 0.0);
- if (!splitByTime && !splitByDistance) {
- return; // neither option selected
- }
-
- // Make undo object
- UndoSplitSegments undo = new UndoSplitSegments(_app.getTrackInfo().getTrack());
- final int numPoints = _app.getTrackInfo().getTrack().getNumPoints();
- DataPoint currPoint = null, prevPoint = null;
- int numSplitsMade = 0;
-
- // Now actually do it, looping through the points in the track
- for (int i=0; i<numPoints; i++)
- {
- currPoint = _app.getTrackInfo().getTrack().getPoint(i);
- if (!currPoint.isWaypoint())
- {
- boolean splitHere = (prevPoint != null)
- && ((splitByDistance && DataPoint.calculateRadiansBetween(prevPoint, currPoint) > distLimitRadians)
- || (splitByTime && currPoint.hasTimestamp() && prevPoint.hasTimestamp()
- && currPoint.getTimestamp().getSecondsSince(prevPoint.getTimestamp()) > timeLimitSeconds));
- if (splitHere && !currPoint.getSegmentStart())
- {
- currPoint.setSegmentStart(true);
- numSplitsMade++;
- }
- prevPoint = currPoint;
- }
- }
-
- if (numSplitsMade > 0)
- {
- _app.completeFunction(undo, I18nManager.getTextWithNumber("confirm.splitsegments", numSplitsMade));
- UpdateMessageBroker.informSubscribers();
- _dialog.dispose();
- }
- else
- {
- // Complain that no split was made
- JOptionPane.showMessageDialog(_parentFrame, I18nManager.getText("error.tracksplit.nosplit"),
- I18nManager.getText("error.function.noop.title"), JOptionPane.WARNING_MESSAGE);
- }
- }
-}