diff options
author | Frederik Gladhorn <frederik.gladhorn@nokia.com> | 2012-01-04 13:02:10 +0100 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-01-06 09:45:16 +0100 |
commit | afbcb4fd4e3f22eac1b68fb9f44b8492c265d9f0 (patch) | |
tree | 1532ebe7a652501e4a2137c55961e55ed143820a /src/plugins | |
parent | 1976dcfe6b656855fbac6c638409aed95aa36b59 (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.cpp | 19 | ||||
-rw-r--r-- | src/plugins/accessible/quick/qaccessiblequickitem.cpp | 29 | ||||
-rw-r--r-- | src/plugins/accessible/quick/qaccessiblequickitem.h | 17 |
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 |