package tim.prune.gui.profile;
import tim.prune.I18nManager;
import tim.prune.data.SpeedCalculator;
import tim.prune.data.SpeedValue;
import tim.prune.data.Track;
import tim.prune.data.UnitSet;
/**
* Class to provide a source of vertical speed data for the profile chart
*/
public class VerticalSpeedData extends ProfileData
{
/**
* Constructor
* @param inTrack track object
*/
public VerticalSpeedData(Track inTrack) {
super(inTrack);
}
/**
* Get the data and populate the instance arrays
*/
public void init(UnitSet inUnitSet)
{
setUnitSet(inUnitSet);
initArrays();
_hasData = false;
_minValue = _maxValue = 0.0;
SpeedValue speed = new SpeedValue();
if (_track != null)
{
for (int i=0; i<_track.getNumPoints(); i++)
{
SpeedCalculator.calculateVerticalSpeed(_track, i, speed);
// Check whether we got a value from either method
if (speed.isValid())
{
// Store the value and maintain max and min values
double speedValue = speed.getValue();
_pointValues[i] = speedValue;
if (speedValue < _minValue || !_hasData) {_minValue = speedValue;}
if (speedValue > _maxValue || !_hasData) {_maxValue = speedValue;}
_hasData = true;
}
_pointHasData[i] = speed.isValid();
}
}
}
/**
* @return text description including units
*/
public String getLabel()
{
return I18nManager.getText("fieldname.verticalspeed") + " ("
+ I18nManager.getText(_unitSet.getVerticalSpeedUnit().getShortnameKey()) + ")";
}
/**
* @return key for message when no speeds present
*/
public String getNoDataKey()
{
if (!_track.hasAltitudeData()) {
return "display.noaltitudes";
}
return "display.notimestamps";
}
}