NS_IMETHODIMP nsXULProgressMeterAccessible::GetValue(nsAString& aValue) { nsresult rv = nsFormControlAccessible::GetValue(aValue); NS_ENSURE_SUCCESS(rv, rv); if (!aValue.IsEmpty()) return NS_OK; double maxValue = 0; rv = GetMaximumValue(&maxValue); NS_ENSURE_SUCCESS(rv, rv); if (maxValue != 1) { double curValue = 0; rv = GetCurrentValue(&curValue); NS_ENSURE_SUCCESS(rv, rv); double percentValue = (curValue / maxValue) * 100; nsAutoString value; value.AppendFloat(percentValue); // AppendFloat isn't available on nsAString value.AppendLiteral("%"); aValue = value; return NS_OK; } mContent->GetAttr(kNameSpaceID_None, nsAccessibilityAtoms::value, aValue); if (aValue.IsEmpty()) aValue.AppendLiteral("0"); // Empty value for progress meter = 0% aValue.AppendLiteral("%"); return NS_OK; }
NS_IMETHODIMP ProgressMeterAccessible<Max>::GetValue(nsAString& aValue) { nsresult rv = nsFormControlAccessible::GetValue(aValue); NS_ENSURE_SUCCESS(rv, rv); if (!aValue.IsEmpty()) return NS_OK; double maxValue = 0; rv = GetMaximumValue(&maxValue); NS_ENSURE_SUCCESS(rv, rv); double curValue = 0; rv = GetCurrentValue(&curValue); NS_ENSURE_SUCCESS(rv, rv); // Treat the current value bigger than maximum as 100%. double percentValue = (curValue < maxValue) ? (curValue / maxValue) * 100 : 100; nsAutoString value; value.AppendFloat(percentValue); // AppendFloat isn't available on nsAString value.AppendLiteral("%"); aValue = value; return NS_OK; }