--- /dev/null
+package tim.prune.gui.profile;
+
+import tim.prune.I18nManager;
+import tim.prune.data.DataPoint;
+import tim.prune.data.Track;
+import tim.prune.data.UnitSet;
+
+/**
+ * Class to provide a source of altitude data for the profile chart
+ */
+public class AltitudeData extends ProfileData
+{
+ /**
+ * Constructor
+ * @param inTrack track object
+ */
+ public AltitudeData(Track inTrack) {
+ super(inTrack);
+ }
+
+ /**
+ * Get the data and populate the instance arrays
+ */
+ public void init(UnitSet inUnitSet)
+ {
+ setUnitSet(inUnitSet);
+ initArrays();
+ _hasData = false;
+ // multiplication factor for unit conversion
+ final double multFactor = _unitSet.getAltitudeUnit().getMultFactorFromStd();
+ if (_track != null)
+ {
+ try
+ {
+ for (int i=0; i<_track.getNumPoints(); i++)
+ {
+ DataPoint point = _track.getPoint(i);
+ if (point != null && point.hasAltitude())
+ {
+ // Point has an altitude - store value and maintain max and min values
+ double value = point.getAltitude().getMetricValue() * multFactor;
+ _pointValues[i] = value;
+ if (value < _minValue || !_hasData) {_minValue = value;}
+ if (value > _maxValue || !_hasData) {_maxValue = value;}
+
+ // if all values are zero then that's no data
+ _hasData = _hasData || (point.getAltitude().getValue() != 0);
+ _pointHasData[i] = true;
+ }
+ else _pointHasData[i] = false;
+ }
+ }
+ catch (ArrayIndexOutOfBoundsException obe)
+ {} // must be due to the track size changing during calculation
+ // assume that a redraw will be triggered
+ }
+ }
+
+ /**
+ * @return text description including units
+ */
+ public String getLabel()
+ {
+ return I18nManager.getText("fieldname.altitude") + " ("
+ + I18nManager.getText(_unitSet.getAltitudeUnit().getShortnameKey())
+ + ")";
+ }
+
+ /**
+ * @return key for message when no altitudes present
+ */
+ public String getNoDataKey() {
+ return "display.noaltitudes";
+ }
+}