--- /dev/null
+package tim.prune.gui.colour;
+
+import java.awt.Color;
+
+import tim.prune.config.Config;
+import tim.prune.data.Track;
+import tim.prune.gui.profile.ProfileData;
+
+/**
+ * Colourer based on speed values
+ */
+public abstract class ProfileDataColourer extends ContinuousPointColourer
+{
+ /**
+ * Constructor
+ * @param inStartColour start colour
+ * @param inEndColour end colour
+ */
+ public ProfileDataColourer(Color inStartColour, Color inEndColour)
+ {
+ super(inStartColour, inEndColour);
+ }
+
+ /**
+ * Calculate the colours according to the track and the profile data
+ */
+ public void calculateColours(Track inTrack, ProfileData inData)
+ {
+ final int numPoints = inTrack == null ? 0 : inTrack.getNumPoints();
+
+ // Calculate values for each point
+ inData.init(Config.getUnitSet());
+ // Figure out speed range
+ double minValue = inData.getMinValue();
+ double maxValue = inData.getMaxValue();
+ if (!inData.hasData() || (maxValue - minValue) < 0.1)
+ {
+ // not enough value range, set all to null
+ init(0);
+ }
+ else
+ {
+ // initialise the array to the right size
+ init(numPoints);
+ // loop over track points to calculate colours
+ for (int i=0; i<numPoints; i++)
+ {
+ if (inData.hasData(i))
+ {
+ double fraction = (inData.getData(i) - minValue) / (maxValue - minValue);
+ setColour(i, mixColour((float) fraction));
+ }
+ else setColour(i, null);
+ }
+ }
+ }
+}