]> gitweb.fperrin.net Git - GpsPrune.git/blobdiff - tim/prune/function/SelectTracksFunction.java
Version 13, August 2011
[GpsPrune.git] / tim / prune / function / SelectTracksFunction.java
index b7ff0a46c4759ea5c8caa0dba23798af581dd255..f2fe23b1c5488f69a89a1c51f90d2fa712500277 100644 (file)
@@ -18,8 +18,7 @@ import javax.swing.ListSelectionModel;
 import tim.prune.App;
 import tim.prune.GenericFunction;
 import tim.prune.I18nManager;
-import tim.prune.data.Altitude;
-import tim.prune.data.Field;
+import tim.prune.data.DataPoint;
 import tim.prune.data.SourceInfo;
 import tim.prune.data.Track;
 import tim.prune.load.TrackNameList;
@@ -29,9 +28,7 @@ import tim.prune.load.TrackNameList;
  */
 public class SelectTracksFunction extends GenericFunction
 {
-       private Field[] _fieldArray = null;
-       private Object[][] _dataArray = null;
-       private Altitude.Format _altFormat = Altitude.Format.NO_FORMAT;
+       private Track _track = null;
        private SourceInfo _sourceInfo = null;
        private TrackNameList _trackNameList = null;
        private JDialog _dialog = null;
@@ -40,19 +37,15 @@ public class SelectTracksFunction extends GenericFunction
        /**
         * Constructor
         * @param inApp app object to use for load
-        * @param inFieldArray field array
-        * @param inDataArray data array
-        * @param inAltFormat altitude format
+        * @param inTrack loaded track object
         * @param inSourceInfo source information
         * @param inTrackNameList track name list
         */
-       public SelectTracksFunction(App inApp, Field[] inFieldArray, Object[][] inDataArray,
-               Altitude.Format inAltFormat, SourceInfo inSourceInfo, TrackNameList inTrackNameList)
+       public SelectTracksFunction(App inApp, Track inTrack, SourceInfo inSourceInfo,
+               TrackNameList inTrackNameList)
        {
                super(inApp);
-               _fieldArray = inFieldArray;
-               _dataArray = inDataArray;
-               _altFormat = inAltFormat;
+               _track = inTrack;
                _sourceInfo = inSourceInfo;
                _trackNameList = inTrackNameList;
        }
@@ -147,13 +140,10 @@ public class SelectTracksFunction extends GenericFunction
        private void finish()
        {
                _dialog.dispose();
-               // Load track as it is, which is expensive but makes interrogating waypoints easier
-               Track loadedTrack = new Track();
-               loadedTrack.load(_fieldArray, _dataArray, _altFormat);
                int[] tracks = _trackList.getSelectedIndices();
                // Check if all tracks are selected, then don't have to filter at all
                if (tracks.length == _trackNameList.getNumTracks()) {
-                       _app.informDataLoaded(loadedTrack, _sourceInfo);
+                       _app.informDataLoaded(_track, _sourceInfo);
                }
                else
                {
@@ -165,13 +155,13 @@ public class SelectTracksFunction extends GenericFunction
                        // Loop over all points, counting points which survive filter and making flag array
                        int numPointsSelected = 0;
                        int currentTrack = -1;
-                       final int totalPoints = loadedTrack.getNumPoints();
+                       final int totalPoints = _track.getNumPoints();
                        boolean[] selectedPoints = new boolean[totalPoints];
                        for (int i=0; i<totalPoints; i++)
                        {
                                final int startOfNextTrack = _trackNameList.getStartIndex(currentTrack+1);
                                if (i == startOfNextTrack) {currentTrack++;}
-                               if (currentTrack < 0 || selectedTracks[currentTrack] || loadedTrack.getPoint(i).isWaypoint()) {
+                               if (currentTrack < 0 || selectedTracks[currentTrack] || _track.getPoint(i).isWaypoint()) {
                                        selectedPoints[i] = true;
                                        numPointsSelected++;
                                }
@@ -180,21 +170,21 @@ public class SelectTracksFunction extends GenericFunction
                        if (numPointsSelected <= 0) {
                                _app.informNoDataLoaded();
                        }
-                       else {
-                               // Create new data array of required length
-                               Object[][] newDataArray = new String[numPointsSelected][];
-                               // Loop over all points again, copying surviving points
+                       else
+                       {
+                               // Create new point array of required length
+                               DataPoint[] croppedPoints = new DataPoint[numPointsSelected];
+                               // Loop over all points again, copying surviving ones
                                int currPoint = 0;
                                for (int i=0; i<totalPoints; i++)
                                {
                                        if (selectedPoints[i]) {
-                                               newDataArray[currPoint] = _dataArray[i];
+                                               croppedPoints[currPoint] = _track.getPoint(i);
                                                currPoint++;
                                        }
                                }
                                // Construct Track and call informDataLoaded
-                               Track filteredTrack = new Track();
-                               filteredTrack.load(_fieldArray, newDataArray, _altFormat);
+                               Track filteredTrack = new Track(_track.getFieldList(), croppedPoints);
                                // Tell source info object which points were selected (pass selectedPoints array)
                                _sourceInfo.setPointIndices(selectedPoints);
                                _app.informDataLoaded(filteredTrack, _sourceInfo);