diff options
author | Samuel Mehrbrodt <Samuel.Mehrbrodt@cib.de> | 2018-10-02 10:42:07 +0200 |
---|---|---|
committer | Samuel Mehrbrodt <Samuel.Mehrbrodt@cib.de> | 2018-10-02 15:45:43 +0200 |
commit | 3f53647b6c66a5c1988bf7dd060c4b9624156e3d (patch) | |
tree | b4b202a4bf0221df9293504b92ae1d04a291fe4b /vcl/qt5/Qt5AccessibleWidget.cxx | |
parent | 41b1038874a45097cd9a6b981142029a8466200c (diff) |
Implement Qt5AccessibleWidget::relations
without considering 'match' parameter for now
Change-Id: I03ec7017fdaae8c8e20f19e6c827aafb093e8a53
Reviewed-on: https://gerrit.libreoffice.org/61231
Tested-by: Jenkins
Reviewed-by: Samuel Mehrbrodt <Samuel.Mehrbrodt@cib.de>
Diffstat (limited to 'vcl/qt5/Qt5AccessibleWidget.cxx')
-rw-r--r-- | vcl/qt5/Qt5AccessibleWidget.cxx | 56 |
1 files changed, 54 insertions, 2 deletions
diff --git a/vcl/qt5/Qt5AccessibleWidget.cxx b/vcl/qt5/Qt5AccessibleWidget.cxx index 898123af0711..dc8061f2f68a 100644 --- a/vcl/qt5/Qt5AccessibleWidget.cxx +++ b/vcl/qt5/Qt5AccessibleWidget.cxx @@ -27,18 +27,20 @@ #include <Qt5Widget.hxx> #include <Qt5XAccessible.hxx> +#include <com/sun/star/accessibility/AccessibleRelationType.hpp> #include <com/sun/star/accessibility/AccessibleRole.hpp> #include <com/sun/star/accessibility/AccessibleStateType.hpp> #include <com/sun/star/accessibility/XAccessible.hpp> #include <com/sun/star/accessibility/XAccessibleAction.hpp> #include <com/sun/star/accessibility/XAccessibleComponent.hpp> #include <com/sun/star/accessibility/XAccessibleKeyBinding.hpp> +#include <com/sun/star/accessibility/XAccessibleRelationSet.hpp> #include <com/sun/star/accessibility/XAccessibleStateSet.hpp> #include <com/sun/star/uno/Sequence.hxx> +#include <comphelper/AccessibleImplementationHelper.hxx> #include <sal/log.hxx> #include <vcl/popupmenuwindow.hxx> -#include <comphelper/AccessibleImplementationHelper.hxx> using namespace css; using namespace css::accessibility; @@ -57,10 +59,60 @@ int Qt5AccessibleWidget::childCount() const } int Qt5AccessibleWidget::indexOfChild(const QAccessibleInterface* /* child */) const { return 0; } + +namespace +{ +QAccessible::Relation lcl_matchRelation(short relationType) +{ + switch (relationType) + { + case AccessibleRelationType::CONTROLLER_FOR: + return QAccessible::Controller; + case AccessibleRelationType::CONTROLLED_BY: + return QAccessible::Controlled; + case AccessibleRelationType::LABEL_FOR: + return QAccessible::Label; + case AccessibleRelationType::LABELED_BY: + return QAccessible::Labelled; + case AccessibleRelationType::INVALID: + case AccessibleRelationType::CONTENT_FLOWS_FROM: + case AccessibleRelationType::CONTENT_FLOWS_TO: + case AccessibleRelationType::MEMBER_OF: + case AccessibleRelationType::SUB_WINDOW_OF: + case AccessibleRelationType::NODE_CHILD_OF: + case AccessibleRelationType::DESCRIBED_BY: + default: + return 0x0; + } +} +} + QVector<QPair<QAccessibleInterface*, QAccessible::Relation>> Qt5AccessibleWidget::relations(QAccessible::Relation /* match */) const { - return QVector<QPair<QAccessibleInterface*, QAccessible::Relation>>(); + QVector<QPair<QAccessibleInterface*, QAccessible::Relation>> relations; + Reference<XAccessibleRelationSet> xRelationSet + = m_xAccessible->getAccessibleContext()->getAccessibleRelationSet(); + if (!xRelationSet.is()) + return relations; + + int count = xRelationSet->getRelationCount(); + for (int i = 0; i < count; i++) + { + AccessibleRelation aRelation = xRelationSet->getRelation(i); + QAccessible::Relation aQRelation = lcl_matchRelation(aRelation.RelationType); + sal_uInt32 nTargetCount = aRelation.TargetSet.getLength(); + + for (sal_uInt32 i = 0; i < nTargetCount; i++) + { + Reference<XAccessible> xAccessible(aRelation.TargetSet[i], uno::UNO_QUERY); + relations.append( + QPair(QAccessible::queryAccessibleInterface(new Qt5XAccessible(xAccessible)), + aQRelation)); + } + } + + return relations; } QAccessibleInterface* Qt5AccessibleWidget::focusChild() const |