1// Copyright (C) 2016 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4#ifndef QACCESSIBLEWIDGETS_H
5#define QACCESSIBLEWIDGETS_H
6
7//
8// W A R N I N G
9// -------------
10//
11// This file is not part of the Qt API. It exists purely as an
12// implementation detail. This header file may change from version to
13// version without notice, or even be removed.
14//
15// We mean it.
16//
17
18#include <QtWidgets/private/qtwidgetsglobal_p.h>
19#include <QtWidgets/qaccessiblewidget.h>
20
21#if QT_CONFIG(accessibility)
22
23#include <QtCore/QPointer>
24
25QT_BEGIN_NAMESPACE
26
27class QTextEdit;
28class QStackedWidget;
29class QToolBox;
30class QMdiArea;
31class QMdiSubWindow;
32class QRubberBand;
33class QTextBrowser;
34class QCalendarWidget;
35class QAbstractItemView;
36class QDockWidget;
37class QDockWidgetLayout;
38class QMainWindow;
39class QPlainTextEdit;
40class QTextCursor;
41class QTextDocument;
42
43#ifndef QT_NO_CURSOR
44class QAccessibleTextWidget : public QAccessibleWidget,
45 public QAccessibleTextInterface,
46 public QAccessibleEditableTextInterface
47{
48public:
49 QAccessibleTextWidget(QWidget *o, QAccessible::Role r = QAccessible::EditableText, const QString &name = QString());
50
51 QAccessible::State state() const override;
52
53 // QAccessibleTextInterface
54 // selection
55 void selection(int selectionIndex, int *startOffset, int *endOffset) const override;
56 int selectionCount() const override;
57 void addSelection(int startOffset, int endOffset) override;
58 void removeSelection(int selectionIndex) override;
59 void setSelection(int selectionIndex, int startOffset, int endOffset) override;
60
61 // cursor
62 int cursorPosition() const override;
63 void setCursorPosition(int position) override;
64
65 // text
66 QString text(int startOffset, int endOffset) const override;
67 QString textBeforeOffset(int offset, QAccessible::TextBoundaryType boundaryType,
68 int *startOffset, int *endOffset) const override;
69 QString textAfterOffset(int offset, QAccessible::TextBoundaryType boundaryType,
70 int *startOffset, int *endOffset) const override;
71 QString textAtOffset(int offset, QAccessible::TextBoundaryType boundaryType,
72 int *startOffset, int *endOffset) const override;
73 int characterCount() const override;
74
75 // character <-> geometry
76 QRect characterRect(int offset) const override;
77 int offsetAtPoint(const QPoint &point) const override;
78
79 QString attributes(int offset, int *startOffset, int *endOffset) const override;
80
81 // QAccessibleEditableTextInterface
82 void deleteText(int startOffset, int endOffset) override;
83 void insertText(int offset, const QString &text) override;
84 void replaceText(int startOffset, int endOffset, const QString &text) override;
85
86 using QAccessibleWidget::text;
87
88protected:
89 QTextCursor textCursorForRange(int startOffset, int endOffset) const;
90 virtual QPoint scrollBarPosition() const;
91 // return the current text cursor at the caret position including a potential selection
92 virtual QTextCursor textCursor() const = 0;
93 virtual void setTextCursor(const QTextCursor &) = 0;
94 virtual QTextDocument *textDocument() const = 0;
95 virtual QWidget *viewport() const = 0;
96};
97
98#if QT_CONFIG(textedit)
99class QAccessiblePlainTextEdit : public QAccessibleTextWidget
100{
101public:
102 explicit QAccessiblePlainTextEdit(QWidget *o);
103
104 QString text(QAccessible::Text t) const override;
105 void setText(QAccessible::Text t, const QString &text) override;
106 QAccessible::State state() const override;
107
108 void *interface_cast(QAccessible::InterfaceType t) override;
109
110 // QAccessibleTextInterface
111 void scrollToSubstring(int startIndex, int endIndex) override;
112
113 using QAccessibleTextWidget::text;
114
115protected:
116 QPlainTextEdit *plainTextEdit() const;
117
118 QPoint scrollBarPosition() const override;
119 QTextCursor textCursor() const override;
120 void setTextCursor(const QTextCursor &textCursor) override;
121 QTextDocument *textDocument() const override;
122 QWidget *viewport() const override;
123};
124
125class QAccessibleTextEdit : public QAccessibleTextWidget
126{
127public:
128 explicit QAccessibleTextEdit(QWidget *o);
129
130 QString text(QAccessible::Text t) const override;
131 void setText(QAccessible::Text t, const QString &text) override;
132 QAccessible::State state() const override;
133
134 void *interface_cast(QAccessible::InterfaceType t) override;
135
136 // QAccessibleTextInterface
137 void scrollToSubstring(int startIndex, int endIndex) override;
138
139 using QAccessibleTextWidget::text;
140
141protected:
142 QTextEdit *textEdit() const;
143
144 QPoint scrollBarPosition() const override;
145 QTextCursor textCursor() const override;
146 void setTextCursor(const QTextCursor &textCursor) override;
147 QTextDocument *textDocument() const override;
148 QWidget *viewport() const override;
149};
150#endif // QT_CONFIG(textedit)
151#endif //QT_NO_CURSOR
152
153class QAccessibleStackedWidget : public QAccessibleWidget
154{
155public:
156 explicit QAccessibleStackedWidget(QWidget *widget);
157
158 QAccessibleInterface *childAt(int x, int y) const override;
159 int childCount() const override;
160 int indexOfChild(const QAccessibleInterface *child) const override;
161 QAccessibleInterface *child(int index) const override;
162
163protected:
164 QStackedWidget *stackedWidget() const;
165};
166
167class QAccessibleToolBox : public QAccessibleWidget
168{
169public:
170 explicit QAccessibleToolBox(QWidget *widget);
171
172// FIXME we currently expose the toolbox but it is not keyboard navigatable
173// and the accessible hierarchy is not exactly beautiful.
174// int childCount() const;
175// QAccessibleInterface *child(int index) const;
176// int indexOfChild(const QAccessibleInterface *child) const;
177
178protected:
179 QToolBox *toolBox() const;
180};
181
182#if QT_CONFIG(mdiarea)
183class QAccessibleMdiArea : public QAccessibleWidget
184{
185public:
186 explicit QAccessibleMdiArea(QWidget *widget);
187
188 int childCount() const override;
189 QAccessibleInterface *child(int index) const override;
190 int indexOfChild(const QAccessibleInterface *child) const override;
191
192protected:
193 QMdiArea *mdiArea() const;
194};
195
196class QAccessibleMdiSubWindow : public QAccessibleWidget
197{
198public:
199 explicit QAccessibleMdiSubWindow(QWidget *widget);
200
201 QString text(QAccessible::Text textType) const override;
202 void setText(QAccessible::Text textType, const QString &text) override;
203 QAccessible::State state() const override;
204 int childCount() const override;
205 QAccessibleInterface *child(int index) const override;
206 int indexOfChild(const QAccessibleInterface *child) const override;
207 QRect rect() const override;
208
209protected:
210 QMdiSubWindow *mdiSubWindow() const;
211};
212#endif // QT_CONFIG(mdiarea)
213
214#if QT_CONFIG(dialogbuttonbox)
215class QAccessibleDialogButtonBox : public QAccessibleWidget
216{
217public:
218 explicit QAccessibleDialogButtonBox(QWidget *widget);
219};
220#endif
221
222#if QT_CONFIG(textbrowser) && !defined(QT_NO_CURSOR)
223class QAccessibleTextBrowser : public QAccessibleTextEdit
224{
225public:
226 explicit QAccessibleTextBrowser(QWidget *widget);
227
228 QAccessible::Role role() const override;
229};
230#endif // QT_CONFIG(textbrowser) && QT_NO_CURSOR
231
232#if QT_CONFIG(calendarwidget)
233class QAccessibleCalendarWidget : public QAccessibleWidget
234{
235public:
236 explicit QAccessibleCalendarWidget(QWidget *widget);
237
238 int childCount() const override;
239 int indexOfChild(const QAccessibleInterface *child) const override;
240
241 QAccessibleInterface *child(int index) const override;
242
243protected:
244 QCalendarWidget *calendarWidget() const;
245
246private:
247 QAbstractItemView *calendarView() const;
248 QWidget *navigationBar() const;
249};
250#endif // QT_CONFIG(calendarwidget)
251
252#if QT_CONFIG(dockwidget)
253class QAccessibleDockWidget: public QAccessibleWidget
254{
255public:
256 explicit QAccessibleDockWidget(QWidget *widget);
257 QAccessibleInterface *child(int index) const override;
258 int indexOfChild(const QAccessibleInterface *child) const override;
259 int childCount() const override;
260 QRect rect () const override;
261 QString text(QAccessible::Text t) const override;
262
263 QDockWidget *dockWidget() const;
264protected:
265 QDockWidgetLayout *dockWidgetLayout() const;
266};
267
268#endif // QT_CONFIG(dockwidget)
269
270#if QT_CONFIG(mainwindow)
271class QAccessibleMainWindow : public QAccessibleWidget
272{
273public:
274 explicit QAccessibleMainWindow(QWidget *widget);
275
276 QAccessibleInterface *child(int index) const override;
277 int childCount() const override;
278 int indexOfChild(const QAccessibleInterface *iface) const override;
279 QAccessibleInterface *childAt(int x, int y) const override;
280 QMainWindow *mainWindow() const;
281
282};
283#endif // QT_CONFIG(mainwindow)
284
285#endif // QT_CONFIG(accessibility)
286
287QT_END_NAMESPACE
288
289#endif // QACESSIBLEWIDGETS_H
290

source code of qtbase/src/widgets/accessible/qaccessiblewidgets_p.h