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;
*/
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;
- private JList _trackList = null;
+ private JList<String> _trackList = null;
/**
* 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;
}
}
names[i] = name + " (" + _trackNameList.getNumPointsInTrack(i) + ")";
}
- _trackList = new JList(names);
+ _trackList = new JList<String>(names);
_trackList.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
mainPanel.add(new JScrollPane(_trackList), BorderLayout.CENTER);
// select all button
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
{
// 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++;
}
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);