4#include <QtGui/qtguiglobal.h>
5#if QT_CONFIG(accessibility)
12#include <QtGui/qaccessible.h>
13#include <QtCore/qloggingcategory.h>
14#include <QtCore/qstring.h>
18using namespace QWindowsUiAutomation;
21QWindowsUiaSelectionItemProvider::QWindowsUiaSelectionItemProvider(QAccessible::Id
id) :
22 QWindowsUiaBaseProvider(
id)
26QWindowsUiaSelectionItemProvider::~QWindowsUiaSelectionItemProvider()
31HRESULT STDMETHODCALLTYPE QWindowsUiaSelectionItemProvider::Select()
33 qCDebug(lcQpaUiAutomation) << __FUNCTION__;
35 QAccessibleInterface *accessible = accessibleInterface();
39 QAccessibleActionInterface *actionInterface = accessible->actionInterface();
43 if (accessible->role() == QAccessible::RadioButton || accessible->role() == QAccessible::PageTab) {
45 actionInterface->doAction(QAccessibleActionInterface::pressAction());
48 if (!accessible->state().selected) {
49 actionInterface->doAction(QAccessibleActionInterface::toggleAction());
52 if (QAccessibleInterface *
parent = accessible->parent()) {
53 for (
int i = 0;
i <
parent->childCount(); ++
i) {
54 if (QAccessibleInterface *sibling =
parent->child(
i)) {
55 if ((sibling != accessible) && (sibling->state().selected)) {
56 if (QAccessibleActionInterface *siblingAction = sibling->actionInterface()) {
57 siblingAction->doAction(QAccessibleActionInterface::toggleAction());
68HRESULT STDMETHODCALLTYPE QWindowsUiaSelectionItemProvider::AddToSelection()
70 qCDebug(lcQpaUiAutomation) << __FUNCTION__;
72 QAccessibleInterface *accessible = accessibleInterface();
76 QAccessibleActionInterface *actionInterface = accessible->actionInterface();
80 if (accessible->role() == QAccessible::RadioButton || accessible->role() == QAccessible::PageTab) {
82 actionInterface->doAction(QAccessibleActionInterface::pressAction());
85 if (!accessible->state().selected) {
86 actionInterface->doAction(QAccessibleActionInterface::toggleAction());
93HRESULT STDMETHODCALLTYPE QWindowsUiaSelectionItemProvider::RemoveFromSelection()
95 qCDebug(lcQpaUiAutomation) << __FUNCTION__;
97 QAccessibleInterface *accessible = accessibleInterface();
101 QAccessibleActionInterface *actionInterface = accessible->actionInterface();
102 if (!actionInterface)
105 if (accessible->role() != QAccessible::RadioButton && accessible->role() != QAccessible::PageTab) {
106 if (accessible->state().selected) {
107 actionInterface->doAction(QAccessibleActionInterface::toggleAction());
115HRESULT STDMETHODCALLTYPE QWindowsUiaSelectionItemProvider::get_IsSelected(BOOL *
pRetVal)
117 qCDebug(lcQpaUiAutomation) << __FUNCTION__;
123 QAccessibleInterface *accessible = accessibleInterface();
127 if (accessible->role() == QAccessible::RadioButton)
128 *
pRetVal = accessible->state().checked;
129 else if (accessible->role() == QAccessible::PageTab)
130 *
pRetVal = accessible->state().focused;
132 *
pRetVal = accessible->state().selected;
137HRESULT STDMETHODCALLTYPE QWindowsUiaSelectionItemProvider::get_SelectionContainer(IRawElementProviderSimple **
pRetVal)
139 qCDebug(lcQpaUiAutomation) << __FUNCTION__;
145 QAccessibleInterface *accessible = accessibleInterface();
149 QAccessibleActionInterface *actionInterface = accessible->actionInterface();
150 if (!actionInterface)
154 if (QAccessibleInterface *
parent = accessible->parent()) {
155 if ((accessible->role() == QAccessible::ListItem &&
parent->role() == QAccessible::List)
156 || (accessible->role() == QAccessible::PageTab &&
parent->role() == QAccessible::PageTabList)) {
157 *
pRetVal = QWindowsUiaMainProvider::providerForAccessible(
parent);
Combined button and popup list for selecting options.
#define qCDebug(category,...)
IUIAutomationTreeWalker __RPC__deref_out_opt IUIAutomationElement ** parent
#define UIA_E_ELEMENTNOTAVAILABLE
IRawElementProviderFragment __RPC__deref_out_opt IRawElementProviderFragment ** pRetVal