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>
15#include <QtCore/qlist.h>
19using namespace QWindowsUiAutomation;
22QWindowsUiaSelectionProvider::QWindowsUiaSelectionProvider(QAccessible::Id
id) :
23 QWindowsUiaBaseProvider(
id)
27QWindowsUiaSelectionProvider::~QWindowsUiaSelectionProvider()
32HRESULT STDMETHODCALLTYPE QWindowsUiaSelectionProvider::GetSelection(SAFEARRAY **
pRetVal)
34 qCDebug(lcQpaUiAutomation) << __FUNCTION__;
40 QAccessibleInterface *accessible = accessibleInterface();
46 for (
int i = 0;
i < accessible->childCount(); ++
i) {
47 if (QAccessibleInterface *
child = accessible->child(
i)) {
48 if (accessible->role() == QAccessible::PageTabList) {
49 if (
child->role() == QAccessible::PageTab &&
child->state().focused) {
53 if (
child->state().selected) {
60 if ((*
pRetVal = SafeArrayCreateVector(VT_UNKNOWN, 0, selectedList.
size()))) {
61 for (LONG
i = 0;
i < selectedList.
size(); ++
i) {
62 if (QWindowsUiaMainProvider *childProvider = QWindowsUiaMainProvider::providerForAccessible(selectedList.
at(
i))) {
63 SafeArrayPutElement(*
pRetVal, &
i,
static_cast<IRawElementProviderSimple *
>(childProvider));
64 childProvider->Release();
71HRESULT STDMETHODCALLTYPE QWindowsUiaSelectionProvider::get_CanSelectMultiple(BOOL *
pRetVal)
73 qCDebug(lcQpaUiAutomation) << __FUNCTION__;
79 QAccessibleInterface *accessible = accessibleInterface();
83 *
pRetVal = accessible->state().multiSelectable;
87HRESULT STDMETHODCALLTYPE QWindowsUiaSelectionProvider::get_IsSelectionRequired(BOOL *
pRetVal)
89 qCDebug(lcQpaUiAutomation) << __FUNCTION__;
95 QAccessibleInterface *accessible = accessibleInterface();
99 if (accessible->role() == QAccessible::PageTabList) {
104 bool anySelected =
false;
105 for (
int i = 0;
i < accessible->childCount(); ++
i) {
106 if (QAccessibleInterface *
child = accessible->child(
i)) {
107 if (
child->state().selected) {
114 *
pRetVal = anySelected && !accessible->state().multiSelectable && !accessible->state().extSelectable;
qsizetype size() const noexcept
const_reference at(qsizetype i) const noexcept
void append(parameter_type t)
Combined button and popup list for selecting options.
#define qCDebug(category,...)
#define UIA_E_ELEMENTNOTAVAILABLE
IRawElementProviderFragment __RPC__deref_out_opt IRawElementProviderFragment ** pRetVal