1/*
2 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Library General Public
6 * License as published by the Free Software Foundation; either
7 * version 2 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12 * Library General Public License for more details.
13 *
14 * You should have received a copy of the GNU Library General Public License
15 * along with this library; see the file COPYING.LIB.  If not, write to
16 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17 * Boston, MA 02110-1301, USA.
18 *
19 */
20
21#include "config.h"
22#include "AccessibilityProgressIndicator.h"
23
24#include "FloatConversion.h"
25#include "HTMLMeterElement.h"
26#include "HTMLNames.h"
27#include "HTMLProgressElement.h"
28#include "RenderMeter.h"
29#include "RenderObject.h"
30#include "RenderProgress.h"
31
32namespace WebCore {
33
34using namespace HTMLNames;
35
36AccessibilityProgressIndicator::AccessibilityProgressIndicator(RenderProgress* renderer)
37    : AccessibilityRenderObject(renderer)
38{
39}
40
41PassRefPtr<AccessibilityProgressIndicator> AccessibilityProgressIndicator::create(RenderProgress* renderer)
42{
43    return adoptRef(new AccessibilityProgressIndicator(renderer));
44}
45
46#if ENABLE(METER_ELEMENT)
47AccessibilityProgressIndicator::AccessibilityProgressIndicator(RenderMeter* renderer)
48    : AccessibilityRenderObject(renderer)
49{
50}
51
52PassRefPtr<AccessibilityProgressIndicator> AccessibilityProgressIndicator::create(RenderMeter* renderer)
53{
54    return adoptRef(new AccessibilityProgressIndicator(renderer));
55}
56#endif
57
58bool AccessibilityProgressIndicator::computeAccessibilityIsIgnored() const
59{
60    return accessibilityIsIgnoredByDefault();
61}
62
63float AccessibilityProgressIndicator::valueForRange() const
64{
65    if (!m_renderer)
66        return 0.0;
67
68    if (m_renderer->isProgress()) {
69        HTMLProgressElement* progress = progressElement();
70        if (progress && progress->position() >= 0)
71            return narrowPrecisionToFloat(progress->value());
72    }
73
74#if ENABLE(METER_ELEMENT)
75    if (m_renderer->isMeter()) {
76        if (HTMLMeterElement* meter = meterElement())
77            return narrowPrecisionToFloat(meter->value());
78    }
79#endif
80
81    // Indeterminate progress bar should return 0.
82    return 0.0;
83}
84
85float AccessibilityProgressIndicator::maxValueForRange() const
86{
87    if (!m_renderer)
88        return 0.0;
89
90    if (m_renderer->isProgress()) {
91        if (HTMLProgressElement* progress = progressElement())
92            return narrowPrecisionToFloat(progress->max());
93    }
94
95#if ENABLE(METER_ELEMENT)
96    if (m_renderer->isMeter()) {
97        if (HTMLMeterElement* meter = meterElement())
98            return narrowPrecisionToFloat(meter->max());
99    }
100#endif
101
102    return 0.0;
103}
104
105float AccessibilityProgressIndicator::minValueForRange() const
106{
107    if (!m_renderer)
108        return 0.0;
109
110    if (m_renderer->isProgress())
111        return 0.0;
112
113#if ENABLE(METER_ELEMENT)
114    if (m_renderer->isMeter()) {
115        if (HTMLMeterElement* meter = meterElement())
116            return narrowPrecisionToFloat(meter->min());
117    }
118#endif
119
120    return 0.0;
121}
122
123HTMLProgressElement* AccessibilityProgressIndicator::progressElement() const
124{
125    if (!m_renderer->isProgress())
126        return 0;
127
128    return toRenderProgress(m_renderer)->progressElement();
129}
130
131#if ENABLE(METER_ELEMENT)
132HTMLMeterElement* AccessibilityProgressIndicator::meterElement() const
133{
134    if (!m_renderer->isMeter())
135        return 0;
136
137    return toRenderMeter(m_renderer)->meterElement();
138}
139#endif
140
141} // namespace WebCore
142
143