aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins
diff options
context:
space:
mode:
authorFrederik Gladhorn <frederik.gladhorn@nokia.com>2012-01-04 13:02:10 +0100
committerQt by Nokia <qt-info@nokia.com>2012-01-06 09:45:16 +0100
commitafbcb4fd4e3f22eac1b68fb9f44b8492c265d9f0 (patch)
tree1532ebe7a652501e4a2137c55961e55ed143820a /src/plugins
parent1976dcfe6b656855fbac6c638409aed95aa36b59 (diff)
Create a value interface for qml accessibles.
Change-Id: I472052c6d61a3a32033544ebb5afc5b11fb093e2 Reviewed-by: Jan-Arve Sæther <jan-arve.saether@nokia.com>
Diffstat (limited to 'src/plugins')
-rw-r--r--src/plugins/accessible/quick/main.cpp19
-rw-r--r--src/plugins/accessible/quick/qaccessiblequickitem.cpp29
-rw-r--r--src/plugins/accessible/quick/qaccessiblequickitem.h17
3 files changed, 61 insertions, 4 deletions
diff --git a/src/plugins/accessible/quick/main.cpp b/src/plugins/accessible/quick/main.cpp
index 533ea52e38..15d5b9589b 100644
--- a/src/plugins/accessible/quick/main.cpp
+++ b/src/plugins/accessible/quick/main.cpp
@@ -46,6 +46,7 @@
#include <QtQuick/QQuickView>
#include <QtQuick/QQuickItem>
+#include <QtQuick/private/qquickaccessibleattached_p.h>
#include <qaccessibleplugin.h>
#include <qvariant.h>
@@ -82,9 +83,23 @@ QAccessibleInterface *AccessibleQuickFactory::create(const QString &classname, Q
if (classname == QLatin1String("QQuickView")) {
return new QAccessibleQuickView(qobject_cast<QQuickView *>(object)); // FIXME
} else if (classname == QLatin1String("QQuickItem")) {
- QQuickItem * item = qobject_cast<QQuickItem *>(object);
- Q_ASSERT(item);
+ QQuickItem * item = qobject_cast<QQuickItem *>(object);
+ Q_ASSERT(item);
+
+ QVariant v = QQuickAccessibleAttached::property(item, "role");
+ bool ok;
+ QAccessible::Role role = (QAccessible::Role)v.toInt(&ok);
+ if (!ok) // Not sure if this check is needed.
+ return new QAccessibleQuickItem(item);
+
+ switch (role) {
+ case QAccessible::Slider:
+ case QAccessible::SpinBox:
+ case QAccessible::Dial:
+ return new QAccessibleQuickItemValueInterface(item);
+ default:
return new QAccessibleQuickItem(item);
+ }
}
return 0;
diff --git a/src/plugins/accessible/quick/qaccessiblequickitem.cpp b/src/plugins/accessible/quick/qaccessiblequickitem.cpp
index 206168e202..7fe44014e3 100644
--- a/src/plugins/accessible/quick/qaccessiblequickitem.cpp
+++ b/src/plugins/accessible/quick/qaccessiblequickitem.cpp
@@ -251,8 +251,35 @@ QString QAccessibleQuickItem::text(QAccessible::Text textType) const
}
}
-
return QString();
}
+void *QAccessibleQuickItemValueInterface::interface_cast(QAccessible::InterfaceType t)
+{
+ if (t == QAccessible::ValueInterface)
+ return static_cast<QAccessibleValueInterface*>(this);
+ return QAccessibleQuickItem::interface_cast(t);
+}
+
+QVariant QAccessibleQuickItemValueInterface::currentValue()
+{
+ return m_item->property("value");
+}
+
+void QAccessibleQuickItemValueInterface::setCurrentValue(const QVariant &value)
+{
+ m_item->setProperty("value", value);
+}
+
+QVariant QAccessibleQuickItemValueInterface::maximumValue()
+{
+ return m_item->property("maximumValue");
+}
+
+QVariant QAccessibleQuickItemValueInterface::minimumValue()
+{
+ return m_item->property("minimumValue");
+}
+
+
QT_END_NAMESPACE
diff --git a/src/plugins/accessible/quick/qaccessiblequickitem.h b/src/plugins/accessible/quick/qaccessiblequickitem.h
index 6e0bf2ebc8..92aa8edd4c 100644
--- a/src/plugins/accessible/quick/qaccessiblequickitem.h
+++ b/src/plugins/accessible/quick/qaccessiblequickitem.h
@@ -72,10 +72,25 @@ public:
QString text(QAccessible::Text) const;
bool isAccessible() const;
-private:
+
+protected:
QQuickItem *m_item;
};
+class QAccessibleQuickItemValueInterface: public QAccessibleQuickItem, public QAccessibleValueInterface
+{
+public:
+ QAccessibleQuickItemValueInterface(QQuickItem *item) : QAccessibleQuickItem(item)
+ {}
+
+ void *interface_cast(QAccessible::InterfaceType t);
+
+ QVariant currentValue();
+ void setCurrentValue(const QVariant &value);
+ QVariant maximumValue();
+ QVariant minimumValue();
+};
+
#endif // QT_NO_ACCESSIBILITY
QT_END_NAMESPACE