X-Git-Url: https://gitweb.fperrin.net/?a=blobdiff_plain;f=tim%2Fprune%2Fgui%2Fprofile%2FAltitudeData.java;h=9c19862166b2421b4cdaab9d102a75b5eb26dad6;hb=4d5796d02a15808311c09448d79e6e7d1de9d636;hp=90130cc19a1f0985e2655da2c55f36ac34cc7305;hpb=c0387c124840c9407e040600fda88f3c3e8f6aa6;p=GpsPrune.git diff --git a/tim/prune/gui/profile/AltitudeData.java b/tim/prune/gui/profile/AltitudeData.java index 90130cc..9c19862 100644 --- a/tim/prune/gui/profile/AltitudeData.java +++ b/tim/prune/gui/profile/AltitudeData.java @@ -1,19 +1,15 @@ package tim.prune.gui.profile; import tim.prune.I18nManager; -import tim.prune.data.Altitude; 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 { - /** Altitude format for values */ - private Altitude.Format _altitudeFormat = Altitude.Format.NO_FORMAT; - - /** * Constructor * @param inTrack track object @@ -25,32 +21,36 @@ public class AltitudeData extends ProfileData /** * Get the data and populate the instance arrays */ - public void init() + public void init(UnitSet inUnitSet) { + setUnitSet(inUnitSet); initArrays(); _hasData = false; - _altitudeFormat = Altitude.Format.NO_FORMAT; - if (_track != null) { + // multiplication factor for unit conversion + final double multFactor = _unitSet.getAltitudeUnit().getMultFactorFromStd(); + if (_track != null) + { for (int i=0; i<_track.getNumPoints(); i++) { - DataPoint point = _track.getPoint(i); - if (point != null && point.hasAltitude()) + try { - // Point has an altitude - if it's the first one, use its format - if (_altitudeFormat == Altitude.Format.NO_FORMAT) + DataPoint point = _track.getPoint(i); + if (point != null && point.hasAltitude()) { - _altitudeFormat = point.getAltitude().getFormat(); - _minValue = _maxValue = point.getAltitude().getValue(); - } - // Store the value and maintain max and min values - double value = point.getAltitude().getValue(_altitudeFormat); - _pointValues[i] = value; - if (value < _minValue) {_minValue = value;} - if (value > _maxValue) {_maxValue = value;} + // 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;} - _hasData = true; - _pointHasData[i] = true; + _hasData = true; + _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 } } } @@ -61,7 +61,7 @@ public class AltitudeData extends ProfileData public String getLabel() { return I18nManager.getText("fieldname.altitude") + " (" - + I18nManager.getText(_altitudeFormat==Altitude.Format.FEET?"units.feet.short":"units.metres.short") + + I18nManager.getText(_unitSet.getAltitudeUnit().getShortnameKey()) + ")"; }