#include <QtQuick/QQuickView>
#include <QtQuick/QQuickItem>
+#include <QtQuick/private/qquickaccessibleattached_p.h>
#include <qaccessibleplugin.h>
#include <qvariant.h>
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;
}
}
-
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
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