diff options
author | Samuel Mehrbrodt <Samuel.Mehrbrodt@cib.de> | 2018-10-02 11:56:00 +0200 |
---|---|---|
committer | Samuel Mehrbrodt <Samuel.Mehrbrodt@cib.de> | 2018-10-02 15:46:54 +0200 |
commit | a8454eb805dfe3cddcef39189af126f5ca34295f (patch) | |
tree | ea8df8abb85efcf0b43cad247c7db1d07e541159 /vcl/qt5/Qt5AccessibleWidget.cxx | |
parent | 3f53647b6c66a5c1988bf7dd060c4b9624156e3d (diff) |
Implement filter for Qt5AccessibleWidget::relations
Change-Id: I1859d612e13b2f0d837aa65012552c441346cb1a
Reviewed-on: https://gerrit.libreoffice.org/61236
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 | 58 |
1 files changed, 45 insertions, 13 deletions
diff --git a/vcl/qt5/Qt5AccessibleWidget.cxx b/vcl/qt5/Qt5AccessibleWidget.cxx index dc8061f2f68a..ffbca8d0338e 100644 --- a/vcl/qt5/Qt5AccessibleWidget.cxx +++ b/vcl/qt5/Qt5AccessibleWidget.cxx @@ -62,7 +62,7 @@ int Qt5AccessibleWidget::indexOfChild(const QAccessibleInterface* /* child */) c namespace { -QAccessible::Relation lcl_matchRelation(short relationType) +QAccessible::Relation lcl_matchUnoRelation(short relationType) { switch (relationType) { @@ -82,13 +82,46 @@ QAccessible::Relation lcl_matchRelation(short relationType) case AccessibleRelationType::NODE_CHILD_OF: case AccessibleRelationType::DESCRIBED_BY: default: + SAL_WARN("vcl.qt5", "Unmatched relation: " << relationType); return 0x0; } } + +short lcl_matchQtRelation(QAccessible::Relation relationType) +{ + switch (relationType) + { + case QAccessible::Controller: + return AccessibleRelationType::CONTROLLER_FOR; + case QAccessible::Controlled: + return AccessibleRelationType::CONTROLLED_BY; + case QAccessible::Label: + return AccessibleRelationType::LABEL_FOR; + case QAccessible::Labelled: + return AccessibleRelationType::LABELED_BY; + default: + SAL_WARN("vcl.qt5", "Unmatched relation: " << relationType); + } + return 0; +} + +void lcl_appendRelation(QVector<QPair<QAccessibleInterface*, QAccessible::Relation>>* relations, + AccessibleRelation aRelation) +{ + QAccessible::Relation aQRelation = lcl_matchUnoRelation(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)); + } +} } QVector<QPair<QAccessibleInterface*, QAccessible::Relation>> - Qt5AccessibleWidget::relations(QAccessible::Relation /* match */) const +Qt5AccessibleWidget::relations(QAccessible::Relation match) const { QVector<QPair<QAccessibleInterface*, QAccessible::Relation>> relations; Reference<XAccessibleRelationSet> xRelationSet @@ -96,21 +129,20 @@ QVector<QPair<QAccessibleInterface*, QAccessible::Relation>> if (!xRelationSet.is()) return relations; - int count = xRelationSet->getRelationCount(); - for (int i = 0; i < count; i++) + if (match == QAccessible::AllRelations) { - 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++) + int count = xRelationSet->getRelationCount(); + for (int i = 0; i < count; i++) { - Reference<XAccessible> xAccessible(aRelation.TargetSet[i], uno::UNO_QUERY); - relations.append( - QPair(QAccessible::queryAccessibleInterface(new Qt5XAccessible(xAccessible)), - aQRelation)); + AccessibleRelation aRelation = xRelationSet->getRelation(i); + lcl_appendRelation(&relations, aRelation); } } + else + { + AccessibleRelation aRelation = xRelationSet->getRelation(lcl_matchQtRelation(match)); + lcl_appendRelation(&relations, aRelation); + } return relations; } |