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";
}
}