6#if QT_CONFIG(accessibility)
8#include "private/qaccessiblecache_p.h"
9#include "private/qcore_mac_p.h"
10#include "uistrings_p.h"
14@implementation QMacAccessibilityElement
16- (instancetype)initWithId:(
QAccessible::
Id)anId withAccessibilityContainer:(
id)view
19 self = [
super initWithAccessibilityContainer:view];
26+ (instancetype)elementWithId:(
QAccessible::
Id)anId withAccessibilityContainer:(
id)view
32 QAccessibleCache *
cache = QAccessibleCache::instance();
34 QMacAccessibilityElement *element =
cache->elementForId(anId);
36 Q_ASSERT(QAccessible::accessibleInterface(anId));
37 element = [[
self alloc] initWithId:anId withAccessibilityContainer:view];
38 cache->insertElement(anId, element);
48- (BOOL)isAccessibilityElement
53- (NSString*)accessibilityLabel
55 QAccessibleInterface *
iface = QAccessible::accessibleInterface(
self.axid);
57 qWarning() <<
"invalid accessible interface for: " <<
self.axid;
61 return iface->text(QAccessible::Name).toNSString();
64- (NSString*)accessibilityHint
66 QAccessibleInterface *
iface = QAccessible::accessibleInterface(
self.axid);
68 qWarning() <<
"invalid accessible interface for: " <<
self.axid;
71 return iface->text(QAccessible::Description).toNSString();
74- (NSString*)accessibilityValue
76 QAccessibleInterface *
iface = QAccessible::accessibleInterface(
self.axid);
78 qWarning() <<
"invalid accessible interface for: " <<
self.axid;
89 QAccessibleValueInterface *
val =
iface->valueInterface();
91 return val->currentValue().toString().toNSString();
92 }
else if (QAccessibleTextInterface *
text =
iface->textInterface()) {
93 return text->text(0,
text->characterCount()).toNSString();
96 return [
super accessibilityHint];
99- (CGRect)accessibilityFrame
101 QAccessibleInterface *
iface = QAccessible::accessibleInterface(
self.axid);
103 qWarning() <<
"invalid accessible interface for: " <<
self.axid;
111- (UIAccessibilityTraits)accessibilityTraits
113 UIAccessibilityTraits traits = UIAccessibilityTraitNone;
115 QAccessibleInterface *
iface = QAccessible::accessibleInterface(
self.axid);
117 qWarning() <<
"invalid accessible interface for: " <<
self.axid;
122 traits |= UIAccessibilityTraitNotEnabled;
124 if (
state.searchEdit)
125 traits |= UIAccessibilityTraitSearchField;
128 traits |= UIAccessibilityTraitSelected;
130 const auto accessibleRole =
iface->role();
131 if (accessibleRole == QAccessible::Button) {
132 traits |= UIAccessibilityTraitButton;
133 }
else if (accessibleRole == QAccessible::EditableText) {
134 static auto defaultTextFieldTraits = []{
135 auto *textField = [[[UITextField alloc] initWithFrame:CGRectZero] autorelease];
136 return textField.accessibilityTraits;
138 traits |= defaultTextFieldTraits;
139 }
else if (accessibleRole == QAccessible::Graphic) {
140 traits |= UIAccessibilityTraitImage;
141 }
else if (accessibleRole == QAccessible::Heading) {
142 traits |= UIAccessibilityTraitHeader;
143 }
else if (accessibleRole == QAccessible::Link) {
144 traits |= UIAccessibilityTraitLink;
145 }
else if (accessibleRole == QAccessible::StaticText) {
146 traits |= UIAccessibilityTraitStaticText;
149 if (
iface->valueInterface())
150 traits |= UIAccessibilityTraitAdjustable;
155- (BOOL)accessibilityActivate
157 QAccessibleInterface *
iface = QAccessible::accessibleInterface(
self.axid);
158 if (QAccessibleActionInterface *action =
iface->actionInterface()) {
159 if (action->actionNames().contains(QAccessibleActionInterface::pressAction())) {
160 action->doAction(QAccessibleActionInterface::pressAction());
162 }
else if (action->actionNames().contains(QAccessibleActionInterface::showMenuAction())) {
163 action->doAction(QAccessibleActionInterface::showMenuAction());
170- (
void)accessibilityIncrement
172 QAccessibleInterface *
iface = QAccessible::accessibleInterface(
self.axid);
173 if (QAccessibleActionInterface *action =
iface->actionInterface())
174 action->doAction(QAccessibleActionInterface::increaseAction());
177- (
void)accessibilityDecrement
179 QAccessibleInterface *
iface = QAccessible::accessibleInterface(
self.axid);
180 if (QAccessibleActionInterface *action =
iface->actionInterface())
181 action->doAction(QAccessibleActionInterface::decreaseAction());
184- (BOOL)accessibilityScroll:(UIAccessibilityScrollDirection)direction
186 QAccessibleInterface *
iface = QAccessible::accessibleInterface(
self.axid);
187 QAccessibleActionInterface *action =
iface->actionInterface();
191 case UIAccessibilityScrollDirectionRight:
192 action->doAction(QAccessibleActionInterface::scrollRightAction());
194 case UIAccessibilityScrollDirectionLeft:
195 action->doAction(QAccessibleActionInterface::scrollLeftAction());
197 case UIAccessibilityScrollDirectionUp:
198 action->doAction(QAccessibleActionInterface::scrollUpAction());
200 case UIAccessibilityScrollDirectionDown:
201 action->doAction(QAccessibleActionInterface::scrollDownAction());
203 case UIAccessibilityScrollDirectionNext:
204 action->doAction(QAccessibleActionInterface::nextPageAction());
206 case UIAccessibilityScrollDirectionPrevious:
207 action->doAction(QAccessibleActionInterface::previousPageAction());
The QAccessible class provides enums and static functions related to accessibility.
static QString translate(const char *context, const char *key, const char *disambiguation=nullptr, int n=-1)
\threadsafe
\inmodule QtCore\reentrant
QCache< int, Employee > cache
[0]
constexpr QBindableInterface iface
#define QT_NAMESPACE_ALIAS_OBJC_CLASS(__KLASS__)
DBusConnection const char DBusError DBusBusType DBusError return DBusConnection DBusHandleMessageFunction void DBusFreeFunction return DBusConnection return DBusConnection return const char DBusError return DBusConnection DBusMessage dbus_uint32_t return DBusConnection dbus_bool_t DBusConnection DBusAddWatchFunction DBusRemoveWatchFunction DBusWatchToggledFunction void DBusFreeFunction return DBusConnection DBusDispatchStatusFunction void DBusFreeFunction DBusTimeout return DBusTimeout return DBusWatch return DBusWatch unsigned int return DBusError const DBusError return const DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessageIter int const void return DBusMessageIter DBusMessageIter return DBusMessageIter void DBusMessageIter void int return DBusMessage DBusMessageIter return DBusMessageIter return DBusMessageIter DBusMessageIter const char const char const char const char return DBusMessage return DBusMessage const char return DBusMessage dbus_bool_t return DBusMessage dbus_uint32_t return DBusMessage void