File indexing completed on 2026-05-03 08:28:30
0001
0002
0003
0004 #ifndef QACCESSIBLE_BASE_H
0005 #define QACCESSIBLE_BASE_H
0006
0007 #include <QtGui/qtguiglobal.h>
0008 #if QT_CONFIG(accessibility)
0009
0010 #if 0
0011
0012 #pragma qt_sync_stop_processing
0013 #endif
0014
0015 #include <QtCore/qobjectdefs.h>
0016
0017 #include <cstring> // memset, memcmp
0018
0019 QT_BEGIN_NAMESPACE
0020
0021 class QAccessibleInterface;
0022 class QAccessibleEvent;
0023 class QTextCursor;
0024
0025 class Q_GUI_EXPORT QAccessible
0026 {
0027 Q_GADGET
0028 public:
0029
0030 enum Event {
0031 SoundPlayed = 0x0001,
0032 Alert = 0x0002,
0033 ForegroundChanged = 0x0003,
0034 MenuStart = 0x0004,
0035 MenuEnd = 0x0005,
0036 PopupMenuStart = 0x0006,
0037 PopupMenuEnd = 0x0007,
0038 ContextHelpStart = 0x000C,
0039 ContextHelpEnd = 0x000D,
0040 DragDropStart = 0x000E,
0041 DragDropEnd = 0x000F,
0042 DialogStart = 0x0010,
0043 DialogEnd = 0x0011,
0044 ScrollingStart = 0x0012,
0045 ScrollingEnd = 0x0013,
0046
0047 MenuCommand = 0x0018,
0048
0049
0050 ActionChanged = 0x0101,
0051 ActiveDescendantChanged = 0x0102,
0052 AttributeChanged = 0x0103,
0053 DocumentContentChanged = 0x0104,
0054 DocumentLoadComplete = 0x0105,
0055 DocumentLoadStopped = 0x0106,
0056 DocumentReload = 0x0107,
0057 HyperlinkEndIndexChanged = 0x0108,
0058 HyperlinkNumberOfAnchorsChanged = 0x0109,
0059 HyperlinkSelectedLinkChanged = 0x010A,
0060 HypertextLinkActivated = 0x010B,
0061 HypertextLinkSelected = 0x010C,
0062 HyperlinkStartIndexChanged = 0x010D,
0063 HypertextChanged = 0x010E,
0064 HypertextNLinksChanged = 0x010F,
0065 ObjectAttributeChanged = 0x0110,
0066 PageChanged = 0x0111,
0067 SectionChanged = 0x0112,
0068 TableCaptionChanged = 0x0113,
0069 TableColumnDescriptionChanged = 0x0114,
0070 TableColumnHeaderChanged = 0x0115,
0071 TableModelChanged = 0x0116,
0072 TableRowDescriptionChanged = 0x0117,
0073 TableRowHeaderChanged = 0x0118,
0074 TableSummaryChanged = 0x0119,
0075 TextAttributeChanged = 0x011A,
0076 TextCaretMoved = 0x011B,
0077
0078 TextColumnChanged = 0x011D,
0079 TextInserted = 0x011E,
0080 TextRemoved = 0x011F,
0081 TextUpdated = 0x0120,
0082 TextSelectionChanged = 0x0121,
0083 VisibleDataChanged = 0x0122,
0084
0085 ObjectCreated = 0x8000,
0086 ObjectDestroyed = 0x8001,
0087 ObjectShow = 0x8002,
0088 ObjectHide = 0x8003,
0089 ObjectReorder = 0x8004,
0090 Focus = 0x8005,
0091 Selection = 0x8006,
0092 SelectionAdd = 0x8007,
0093 SelectionRemove = 0x8008,
0094 SelectionWithin = 0x8009,
0095 StateChanged = 0x800A,
0096 LocationChanged = 0x800B,
0097 NameChanged = 0x800C,
0098 DescriptionChanged = 0x800D,
0099 ValueChanged = 0x800E,
0100 ParentChanged = 0x800F,
0101 HelpChanged = 0x80A0,
0102 DefaultActionChanged = 0x80B0,
0103 AcceleratorChanged = 0x80C0,
0104 Announcement = 0x80D0,
0105 IdentifierChanged = 0x80E0,
0106
0107
0108 InvalidEvent = AcceleratorChanged + 1,
0109 };
0110 Q_ENUM(Event)
0111
0112
0113
0114 struct State {
0115
0116 quint64 disabled : 1;
0117 quint64 selected : 1;
0118 quint64 focusable : 1;
0119 quint64 focused : 1;
0120 quint64 pressed : 1;
0121 quint64 checkable : 1;
0122 quint64 checked : 1;
0123 quint64 checkStateMixed : 1;
0124 quint64 readOnly : 1;
0125 quint64 hotTracked : 1;
0126 quint64 defaultButton : 1;
0127 quint64 expanded : 1;
0128 quint64 collapsed : 1;
0129 quint64 busy : 1;
0130 quint64 expandable : 1;
0131 quint64 marqueed : 1;
0132 quint64 animated : 1;
0133 quint64 invisible : 1;
0134 quint64 offscreen : 1;
0135 quint64 sizeable : 1;
0136 quint64 movable : 1;
0137 quint64 selfVoicing : 1;
0138 quint64 selectable : 1;
0139 quint64 linked : 1;
0140 quint64 traversed : 1;
0141 quint64 multiSelectable : 1;
0142 quint64 extSelectable : 1;
0143 quint64 passwordEdit : 1;
0144 quint64 hasPopup : 1;
0145 quint64 modal : 1;
0146
0147
0148
0149 quint64 active : 1;
0150 quint64 invalid : 1;
0151 quint64 editable : 1;
0152 quint64 multiLine : 1;
0153 quint64 selectableText : 1;
0154 quint64 supportsAutoCompletion : 1;
0155
0156 quint64 searchEdit : 1;
0157
0158
0159
0160
0161
0162
0163
0164
0165
0166
0167
0168
0169
0170
0171
0172
0173
0174
0175
0176
0177
0178
0179 Q_DECL_UNUSED_MEMBER quint64 qt_reserved : 27;
0180
0181 State() {
0182 std::memset(this, 0, sizeof(State));
0183 }
0184 friend inline bool operator==(const QAccessible::State &first, const QAccessible::State &second)
0185 {
0186 static_assert(std::has_unique_object_representations_v<State>,
0187 "memcmp() cannot be used on types with padding");
0188 return std::memcmp(&first, &second, sizeof(QAccessible::State)) == 0;
0189 }
0190 };
0191
0192
0193
0194
0195
0196 enum Role {
0197 NoRole = 0x00000000,
0198 TitleBar = 0x00000001,
0199 MenuBar = 0x00000002,
0200 ScrollBar = 0x00000003,
0201 Grip = 0x00000004,
0202 Sound = 0x00000005,
0203 Cursor = 0x00000006,
0204 Caret = 0x00000007,
0205 AlertMessage = 0x00000008,
0206 Window = 0x00000009,
0207 Client = 0x0000000A,
0208 PopupMenu = 0x0000000B,
0209 MenuItem = 0x0000000C,
0210 ToolTip = 0x0000000D,
0211 Application = 0x0000000E,
0212 Document = 0x0000000F,
0213 Pane = 0x00000010,
0214 Chart = 0x00000011,
0215 Dialog = 0x00000012,
0216 Border = 0x00000013,
0217 Grouping = 0x00000014,
0218 Separator = 0x00000015,
0219 ToolBar = 0x00000016,
0220 StatusBar = 0x00000017,
0221 Table = 0x00000018,
0222 ColumnHeader = 0x00000019,
0223 RowHeader = 0x0000001A,
0224 Column = 0x0000001B,
0225 Row = 0x0000001C,
0226 Cell = 0x0000001D,
0227 Link = 0x0000001E,
0228 HelpBalloon = 0x0000001F,
0229 Assistant = 0x00000020,
0230 List = 0x00000021,
0231 ListItem = 0x00000022,
0232 Tree = 0x00000023,
0233 TreeItem = 0x00000024,
0234 PageTab = 0x00000025,
0235 PropertyPage = 0x00000026,
0236 Indicator = 0x00000027,
0237 Graphic = 0x00000028,
0238 StaticText = 0x00000029,
0239 EditableText = 0x0000002A,
0240 Button = 0x0000002B,
0241 #ifndef Q_QDOC
0242 PushButton = Button,
0243 #endif
0244 CheckBox = 0x0000002C,
0245 RadioButton = 0x0000002D,
0246 ComboBox = 0x0000002E,
0247
0248 ProgressBar = 0x00000030,
0249 Dial = 0x00000031,
0250 HotkeyField = 0x00000032,
0251 Slider = 0x00000033,
0252 SpinBox = 0x00000034,
0253 Canvas = 0x00000035,
0254 Animation = 0x00000036,
0255 Equation = 0x00000037,
0256 ButtonDropDown = 0x00000038,
0257 ButtonMenu = 0x00000039,
0258 ButtonDropGrid = 0x0000003A,
0259 Whitespace = 0x0000003B,
0260 PageTabList = 0x0000003C,
0261 Clock = 0x0000003D,
0262 Splitter = 0x0000003E,
0263
0264
0265
0266 LayeredPane = 0x00000080,
0267 Terminal = 0x00000081,
0268 Desktop = 0x00000082,
0269 Paragraph = 0x00000083,
0270 WebDocument = 0x00000084,
0271 Section = 0x00000085,
0272 Notification = 0x00000086,
0273
0274
0275
0276
0277
0278 ColorChooser = 0x404,
0279
0280
0281
0282
0283
0284
0285
0286
0287
0288 Footer = 0x40E,
0289
0290 Form = 0x410,
0291
0292
0293
0294
0295
0296 Heading = 0x414,
0297
0298
0299
0300
0301
0302
0303 Note = 0x41B,
0304
0305
0306
0307
0308
0309
0310
0311
0312
0313
0314
0315
0316
0317
0318
0319
0320 ComplementaryContent = 0x42C,
0321
0322
0323
0324
0325 BlockQuote = 0x431,
0326
0327
0328
0329
0330 UserRole = 0x0000ffff
0331 };
0332 Q_ENUM(Role)
0333
0334 enum Text {
0335 Name = 0,
0336 Description,
0337 Value,
0338 Help,
0339 Accelerator,
0340 DebugDescription,
0341 Identifier,
0342 UserText = 0x0000ffff
0343 };
0344
0345 enum RelationFlag {
0346 Label = 0x00000001,
0347 Labelled = 0x00000002,
0348 Controller = 0x00000004,
0349 Controlled = 0x00000008,
0350 DescriptionFor = 0x00000010,
0351 Described = 0x00000020,
0352 FlowsFrom = 0x00000040,
0353 FlowsTo = 0x00000080,
0354 AllRelations = 0xffffffff
0355 };
0356 Q_DECLARE_FLAGS(Relation, RelationFlag)
0357
0358 enum InterfaceType
0359 {
0360 TextInterface,
0361 EditableTextInterface,
0362 ValueInterface,
0363 ActionInterface,
0364 ImageInterface,
0365 TableInterface,
0366 TableCellInterface,
0367 HyperlinkInterface,
0368 SelectionInterface,
0369 AttributesInterface,
0370 };
0371
0372 enum TextBoundaryType {
0373 CharBoundary,
0374 WordBoundary,
0375 SentenceBoundary,
0376 ParagraphBoundary,
0377 LineBoundary,
0378 NoBoundary
0379 };
0380
0381 enum class Attribute {
0382 Custom,
0383 Level,
0384 Locale,
0385 };
0386 Q_ENUM(Attribute)
0387
0388 enum class AnnouncementPoliteness {
0389 Polite,
0390 Assertive,
0391 };
0392 Q_ENUM(AnnouncementPoliteness)
0393
0394 typedef QAccessibleInterface*(*InterfaceFactory)(const QString &key, QObject*);
0395 typedef void(*UpdateHandler)(QAccessibleEvent *event);
0396 typedef void(*RootObjectHandler)(QObject*);
0397
0398 typedef unsigned Id;
0399
0400 static void installFactory(InterfaceFactory);
0401 static void removeFactory(InterfaceFactory);
0402 static UpdateHandler installUpdateHandler(UpdateHandler);
0403 static RootObjectHandler installRootObjectHandler(RootObjectHandler);
0404
0405 class Q_GUI_EXPORT ActivationObserver
0406 {
0407 public:
0408 virtual ~ActivationObserver();
0409 virtual void accessibilityActiveChanged(bool active) = 0;
0410 };
0411 static void installActivationObserver(ActivationObserver *);
0412 static void removeActivationObserver(ActivationObserver *);
0413
0414 static QAccessibleInterface *queryAccessibleInterface(QObject *);
0415 static Id uniqueId(QAccessibleInterface *iface);
0416 static QAccessibleInterface *accessibleInterface(Id uniqueId);
0417 static Id registerAccessibleInterface(QAccessibleInterface *iface);
0418 static void deleteAccessibleInterface(Id uniqueId);
0419
0420 static void updateAccessibility(QAccessibleEvent *event);
0421
0422 static bool isActive();
0423 static void setActive(bool active);
0424 static void setRootObject(QObject *object);
0425
0426 static void cleanup();
0427
0428 static std::pair< int, int > qAccessibleTextBoundaryHelper(const QTextCursor &cursor, TextBoundaryType boundaryType);
0429
0430 private:
0431 static UpdateHandler updateHandler;
0432 static RootObjectHandler rootObjectHandler;
0433
0434 QAccessible() {}
0435
0436 friend class QAccessibleCache;
0437 };
0438
0439 Q_DECLARE_OPERATORS_FOR_FLAGS(QAccessible::Relation)
0440
0441 QT_END_NAMESPACE
0442
0443 #endif
0444 #endif