diff options
author | Samuel Mehrbrodt <Samuel.Mehrbrodt@cib.de> | 2018-09-28 09:28:12 +0200 |
---|---|---|
committer | Samuel Mehrbrodt <Samuel.Mehrbrodt@cib.de> | 2018-09-28 11:05:23 +0200 |
commit | eb602dd74518ba30b5a692eae99bb20a3e9c47d7 (patch) | |
tree | 8acdeb210d5cc78e77a57bc3419bfe913c3dcfbd /vcl/qt5/Qt5AccessibleWidget.cxx | |
parent | 6b787aec5241b22c40a3acccc9a861f8b8dfd65b (diff) |
Qt5AccessibleWidget: Add state mapping
Change-Id: I6c846fcb56ecfc24d966dfd01b97c47460fdf16b
Reviewed-on: https://gerrit.libreoffice.org/61068
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 | 125 |
1 files changed, 125 insertions, 0 deletions
diff --git a/vcl/qt5/Qt5AccessibleWidget.cxx b/vcl/qt5/Qt5AccessibleWidget.cxx index 5228e29d4946..b07182fbee8f 100644 --- a/vcl/qt5/Qt5AccessibleWidget.cxx +++ b/vcl/qt5/Qt5AccessibleWidget.cxx @@ -28,11 +28,15 @@ #include <Qt5Widget.hxx> #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/XAccessibleStateSet.hpp> #include <sal/log.hxx> #include <vcl/popupmenuwindow.hxx> using namespace css::accessibility; +using namespace css::uno; Qt5AccessibleWidget::Qt5AccessibleWidget(Qt5Widget* pFrame, vcl::Window* pWindow) : m_pFrame(pFrame) @@ -428,9 +432,130 @@ QAccessible::Role Qt5AccessibleWidget::role() const } return QAccessible::NoRole; } + +namespace +{ +void lcl_addState(QAccessible::State* state, sal_Int16 nState) +{ + switch (nState) + { + case AccessibleStateType::INVALID: + state->invalid = true; + break; + case AccessibleStateType::ACTIVE: + state->active = true; + break; + case AccessibleStateType::ARMED: + // No match + break; + case AccessibleStateType::BUSY: + state->busy = true; + break; + case AccessibleStateType::CHECKED: + state->checked = true; + break; + case AccessibleStateType::EDITABLE: + state->editable = true; + break; + case AccessibleStateType::ENABLED: + state->disabled = false; + break; + case AccessibleStateType::EXPANDABLE: + state->expandable = true; + break; + case AccessibleStateType::FOCUSABLE: + state->focusable = true; + break; + case AccessibleStateType::FOCUSED: + state->focused = true; + break; + case AccessibleStateType::HORIZONTAL: + //state->horizontal = true; + break; + case AccessibleStateType::ICONIFIED: + //state->iconified = true; + break; + case AccessibleStateType::INDETERMINATE: + // No match + break; + case AccessibleStateType::MANAGES_DESCENDANTS: + // No match + break; + case AccessibleStateType::MODAL: + state->modal = true; + break; + case AccessibleStateType::OPAQUE: + // No match + break; + case AccessibleStateType::PRESSED: + state->pressed = true; + break; + case AccessibleStateType::RESIZABLE: + state->sizeable = true; + break; + case AccessibleStateType::SELECTABLE: + state->selectable = true; + break; + case AccessibleStateType::SELECTED: + state->selected = true; + break; + case AccessibleStateType::SENSITIVE: + // No match + break; + case AccessibleStateType::SHOWING: + // No match + break; + case AccessibleStateType::SINGLE_LINE: + // No match + break; + case AccessibleStateType::STALE: + // No match + break; + case AccessibleStateType::TRANSIENT: + // No match + break; + case AccessibleStateType::VERTICAL: + // No match + break; + case AccessibleStateType::VISIBLE: + state->invisible = false; + break; + case AccessibleStateType::DEFAULT: + // No match + break; + case AccessibleStateType::DEFUNC: + state->invalid = true; + break; + case AccessibleStateType::MULTI_SELECTABLE: + state->multiSelectable = true; + break; + default: + SAL_WARN("vcl.qt5", "Unmapped state: " << nState); + break; + } +} +} + QAccessible::State Qt5AccessibleWidget::state() const { QAccessible::State state; + + Reference<XAccessible> xAccessible(m_pWindow->GetAccessible()); + if (!xAccessible.is()) + return state; + Reference<XAccessibleStateSet> xStateSet( + xAccessible->getAccessibleContext()->getAccessibleStateSet()); + + if (!xStateSet.is()) + return state; + + Sequence<sal_Int16> aStates = xStateSet->getStates(); + + for (sal_Int32 n = 0; n < aStates.getLength(); n++) + { + lcl_addState(&state, n); + } + return state; } |