package tim.prune.gui.colour;
import java.awt.Color;
import java.util.ArrayList;
import tim.prune.data.DataPoint;
import tim.prune.data.FileInfo;
import tim.prune.data.SourceInfo;
import tim.prune.data.TrackInfo;
/**
* Colours points according to which file (or source) they came from
*/
public class FileColourer extends DiscretePointColourer
{
/**
* Constructor
* @param inStartColour start colour of scale
* @param inEndColour end colour of scale
* @param inWrapLength number of unique colours before wrap
*/
public FileColourer(Color inStartColour, Color inEndColour, int inWrapLength)
{
super(inStartColour, inEndColour, inWrapLength);
}
/**
* Calculate the colours for each of the points in the given track
* @param inTrack track object
*/
@Override
public void calculateColours(TrackInfo inTrackInfo)
{
// initialise the array to the right size
final int numPoints = inTrackInfo == null ? 0 : inTrackInfo.getTrack().getNumPoints();
init(numPoints);
// loop over track points
FileInfo fInfo = inTrackInfo.getFileInfo();
ArrayList<SourceInfo> sourceList = new ArrayList<SourceInfo>();
for (int i=0; i<numPoints; i++)
{
DataPoint p = inTrackInfo.getTrack().getPoint(i);
if (p != null && !p.isWaypoint())
{
SourceInfo sInfo = fInfo.getSourceForPoint(p);
// Is this info object already in the list?
int foundIndex = -1;
int sIndex = 0;
for (SourceInfo si : sourceList) {
if (si == sInfo) {
foundIndex = sIndex;
break;
}
sIndex++;
}
// Add source info to list
if (foundIndex < 0)
{
sourceList.add(sInfo);
foundIndex = sourceList.size()-1;
}
// use this foundIndex to find the colour
setColour(i, foundIndex);
}
}
// generate the colours needed
generateDiscreteColours(sourceList.size());
}
}