Absolute File Name: | /home/opencoverage/opencoverage/guest-scripts/qtdeclarative/src/qtdeclarative/src/quick/accessible/qaccessiblequickitem.cpp |
Source code | Switch to Preprocessed file |
Line | Source | Count | ||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | /**************************************************************************** | - | ||||||||||||||||||||||||||||||||||||
2 | ** | - | ||||||||||||||||||||||||||||||||||||
3 | ** Copyright (C) 2016 The Qt Company Ltd. | - | ||||||||||||||||||||||||||||||||||||
4 | ** Contact: https://www.qt.io/licensing/ | - | ||||||||||||||||||||||||||||||||||||
5 | ** | - | ||||||||||||||||||||||||||||||||||||
6 | ** This file is part of the QtQuick module of the Qt Toolkit. | - | ||||||||||||||||||||||||||||||||||||
7 | ** | - | ||||||||||||||||||||||||||||||||||||
8 | ** $QT_BEGIN_LICENSE:LGPL$ | - | ||||||||||||||||||||||||||||||||||||
9 | ** Commercial License Usage | - | ||||||||||||||||||||||||||||||||||||
10 | ** Licensees holding valid commercial Qt licenses may use this file in | - | ||||||||||||||||||||||||||||||||||||
11 | ** accordance with the commercial license agreement provided with the | - | ||||||||||||||||||||||||||||||||||||
12 | ** Software or, alternatively, in accordance with the terms contained in | - | ||||||||||||||||||||||||||||||||||||
13 | ** a written agreement between you and The Qt Company. For licensing terms | - | ||||||||||||||||||||||||||||||||||||
14 | ** and conditions see https://www.qt.io/terms-conditions. For further | - | ||||||||||||||||||||||||||||||||||||
15 | ** information use the contact form at https://www.qt.io/contact-us. | - | ||||||||||||||||||||||||||||||||||||
16 | ** | - | ||||||||||||||||||||||||||||||||||||
17 | ** GNU Lesser General Public License Usage | - | ||||||||||||||||||||||||||||||||||||
18 | ** Alternatively, this file may be used under the terms of the GNU Lesser | - | ||||||||||||||||||||||||||||||||||||
19 | ** General Public License version 3 as published by the Free Software | - | ||||||||||||||||||||||||||||||||||||
20 | ** Foundation and appearing in the file LICENSE.LGPL3 included in the | - | ||||||||||||||||||||||||||||||||||||
21 | ** packaging of this file. Please review the following information to | - | ||||||||||||||||||||||||||||||||||||
22 | ** ensure the GNU Lesser General Public License version 3 requirements | - | ||||||||||||||||||||||||||||||||||||
23 | ** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. | - | ||||||||||||||||||||||||||||||||||||
24 | ** | - | ||||||||||||||||||||||||||||||||||||
25 | ** GNU General Public License Usage | - | ||||||||||||||||||||||||||||||||||||
26 | ** Alternatively, this file may be used under the terms of the GNU | - | ||||||||||||||||||||||||||||||||||||
27 | ** General Public License version 2.0 or (at your option) the GNU General | - | ||||||||||||||||||||||||||||||||||||
28 | ** Public license version 3 or any later version approved by the KDE Free | - | ||||||||||||||||||||||||||||||||||||
29 | ** Qt Foundation. The licenses are as published by the Free Software | - | ||||||||||||||||||||||||||||||||||||
30 | ** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 | - | ||||||||||||||||||||||||||||||||||||
31 | ** included in the packaging of this file. Please review the following | - | ||||||||||||||||||||||||||||||||||||
32 | ** information to ensure the GNU General Public License requirements will | - | ||||||||||||||||||||||||||||||||||||
33 | ** be met: https://www.gnu.org/licenses/gpl-2.0.html and | - | ||||||||||||||||||||||||||||||||||||
34 | ** https://www.gnu.org/licenses/gpl-3.0.html. | - | ||||||||||||||||||||||||||||||||||||
35 | ** | - | ||||||||||||||||||||||||||||||||||||
36 | ** $QT_END_LICENSE$ | - | ||||||||||||||||||||||||||||||||||||
37 | ** | - | ||||||||||||||||||||||||||||||||||||
38 | ****************************************************************************/ | - | ||||||||||||||||||||||||||||||||||||
39 | - | |||||||||||||||||||||||||||||||||||||
40 | #include "qaccessiblequickitem_p.h" | - | ||||||||||||||||||||||||||||||||||||
41 | - | |||||||||||||||||||||||||||||||||||||
42 | #include <QtGui/qtextdocument.h> | - | ||||||||||||||||||||||||||||||||||||
43 | - | |||||||||||||||||||||||||||||||||||||
44 | #include "QtQuick/private/qquickitem_p.h" | - | ||||||||||||||||||||||||||||||||||||
45 | #include "QtQuick/private/qquicktext_p.h" | - | ||||||||||||||||||||||||||||||||||||
46 | #include "QtQuick/private/qquickaccessibleattached_p.h" | - | ||||||||||||||||||||||||||||||||||||
47 | #include "QtQuick/qquicktextdocument.h" | - | ||||||||||||||||||||||||||||||||||||
48 | QT_BEGIN_NAMESPACE | - | ||||||||||||||||||||||||||||||||||||
49 | - | |||||||||||||||||||||||||||||||||||||
50 | #if QT_CONFIG(accessibility) | - | ||||||||||||||||||||||||||||||||||||
51 | - | |||||||||||||||||||||||||||||||||||||
52 | QAccessibleQuickItem::QAccessibleQuickItem(QQuickItem *item) | - | ||||||||||||||||||||||||||||||||||||
53 | : QAccessibleObject(item), m_doc(textDocument()) | - | ||||||||||||||||||||||||||||||||||||
54 | { | - | ||||||||||||||||||||||||||||||||||||
55 | } executed 84 times by 2 tests: end of block Executed by:
| 84 | ||||||||||||||||||||||||||||||||||||
56 | - | |||||||||||||||||||||||||||||||||||||
57 | QWindow *QAccessibleQuickItem::window() const | - | ||||||||||||||||||||||||||||||||||||
58 | { | - | ||||||||||||||||||||||||||||||||||||
59 | return item()->window(); never executed: return item()->window(); | 0 | ||||||||||||||||||||||||||||||||||||
60 | } | - | ||||||||||||||||||||||||||||||||||||
61 | - | |||||||||||||||||||||||||||||||||||||
62 | int QAccessibleQuickItem::childCount() const | - | ||||||||||||||||||||||||||||||||||||
63 | { | - | ||||||||||||||||||||||||||||||||||||
64 | return childItems().count(); executed 28 times by 1 test: return childItems().count(); Executed by:
| 28 | ||||||||||||||||||||||||||||||||||||
65 | } | - | ||||||||||||||||||||||||||||||||||||
66 | - | |||||||||||||||||||||||||||||||||||||
67 | QRect QAccessibleQuickItem::rect() const | - | ||||||||||||||||||||||||||||||||||||
68 | { | - | ||||||||||||||||||||||||||||||||||||
69 | const QRect r = itemScreenRect(item()); | - | ||||||||||||||||||||||||||||||||||||
70 | return r; executed 164 times by 1 test: return r; Executed by:
| 164 | ||||||||||||||||||||||||||||||||||||
71 | } | - | ||||||||||||||||||||||||||||||||||||
72 | - | |||||||||||||||||||||||||||||||||||||
73 | QRect QAccessibleQuickItem::viewRect() const | - | ||||||||||||||||||||||||||||||||||||
74 | { | - | ||||||||||||||||||||||||||||||||||||
75 | // ### no window in some cases. | - | ||||||||||||||||||||||||||||||||||||
76 | if (!item()->window()) {
| 0-80 | ||||||||||||||||||||||||||||||||||||
77 | return QRect(); never executed: return QRect(); | 0 | ||||||||||||||||||||||||||||||||||||
78 | } | - | ||||||||||||||||||||||||||||||||||||
79 | - | |||||||||||||||||||||||||||||||||||||
80 | QQuickWindow *window = item()->window(); | - | ||||||||||||||||||||||||||||||||||||
81 | QPoint screenPos = window->mapToGlobal(QPoint(0,0)); | - | ||||||||||||||||||||||||||||||||||||
82 | return QRect(screenPos, window->size()); executed 80 times by 1 test: return QRect(screenPos, window->size()); Executed by:
| 80 | ||||||||||||||||||||||||||||||||||||
83 | } | - | ||||||||||||||||||||||||||||||||||||
84 | - | |||||||||||||||||||||||||||||||||||||
85 | - | |||||||||||||||||||||||||||||||||||||
86 | bool QAccessibleQuickItem::clipsChildren() const | - | ||||||||||||||||||||||||||||||||||||
87 | { | - | ||||||||||||||||||||||||||||||||||||
88 | return static_cast<QQuickItem *>(item())->clip(); never executed: return static_cast<QQuickItem *>(item())->clip(); | 0 | ||||||||||||||||||||||||||||||||||||
89 | } | - | ||||||||||||||||||||||||||||||||||||
90 | - | |||||||||||||||||||||||||||||||||||||
91 | QAccessibleInterface *QAccessibleQuickItem::childAt(int x, int y) const | - | ||||||||||||||||||||||||||||||||||||
92 | { | - | ||||||||||||||||||||||||||||||||||||
93 | if (item()->clip()) {
| 8-52 | ||||||||||||||||||||||||||||||||||||
94 | if (!rect().contains(x, y))
| 2-6 | ||||||||||||||||||||||||||||||||||||
95 | return nullptr; executed 2 times by 1 test: return nullptr; Executed by:
| 2 | ||||||||||||||||||||||||||||||||||||
96 | } executed 6 times by 1 test: end of block Executed by:
| 6 | ||||||||||||||||||||||||||||||||||||
97 | - | |||||||||||||||||||||||||||||||||||||
98 | const QList<QQuickItem*> kids = accessibleUnignoredChildren(item(), true); | - | ||||||||||||||||||||||||||||||||||||
99 | for (int i = kids.count() - 1; i >= 0; --i) {
| 46-48 | ||||||||||||||||||||||||||||||||||||
100 | QAccessibleInterface *childIface = QAccessible::queryAccessibleInterface(kids.at(i)); | - | ||||||||||||||||||||||||||||||||||||
101 | if (QAccessibleInterface *childChild = childIface->childAt(x, y))
| 4-44 | ||||||||||||||||||||||||||||||||||||
102 | return childChild; executed 4 times by 1 test: return childChild; Executed by:
| 4 | ||||||||||||||||||||||||||||||||||||
103 | if (childIface && !childIface->state().invisible) {
| 0-44 | ||||||||||||||||||||||||||||||||||||
104 | if (childIface->rect().contains(x, y))
| 8-36 | ||||||||||||||||||||||||||||||||||||
105 | return childIface; executed 8 times by 1 test: return childIface; Executed by:
| 8 | ||||||||||||||||||||||||||||||||||||
106 | } executed 36 times by 1 test: end of block Executed by:
| 36 | ||||||||||||||||||||||||||||||||||||
107 | } executed 36 times by 1 test: end of block Executed by:
| 36 | ||||||||||||||||||||||||||||||||||||
108 | - | |||||||||||||||||||||||||||||||||||||
109 | return nullptr; executed 46 times by 1 test: return nullptr; Executed by:
| 46 | ||||||||||||||||||||||||||||||||||||
110 | } | - | ||||||||||||||||||||||||||||||||||||
111 | - | |||||||||||||||||||||||||||||||||||||
112 | QAccessibleInterface *QAccessibleQuickItem::parent() const | - | ||||||||||||||||||||||||||||||||||||
113 | { | - | ||||||||||||||||||||||||||||||||||||
114 | QQuickItem *parent = item()->parentItem(); | - | ||||||||||||||||||||||||||||||||||||
115 | QQuickWindow *window = item()->window(); | - | ||||||||||||||||||||||||||||||||||||
116 | QQuickItem *ci = window ? window->contentItem() : nullptr;
| 0 | ||||||||||||||||||||||||||||||||||||
117 | while (parent && !QQuickItemPrivate::get(parent)->isAccessible && parent != ci)
| 0 | ||||||||||||||||||||||||||||||||||||
118 | parent = parent->parentItem(); never executed: parent = parent->parentItem(); | 0 | ||||||||||||||||||||||||||||||||||||
119 | - | |||||||||||||||||||||||||||||||||||||
120 | if (parent) {
| 0 | ||||||||||||||||||||||||||||||||||||
121 | if (parent == ci) {
| 0 | ||||||||||||||||||||||||||||||||||||
122 | // Jump out to the scene widget if the parent is the root item. | - | ||||||||||||||||||||||||||||||||||||
123 | // There are two root items, QQuickWindow::rootItem and | - | ||||||||||||||||||||||||||||||||||||
124 | // QQuickView::declarativeRoot. The former is the true root item, | - | ||||||||||||||||||||||||||||||||||||
125 | // but is not a part of the accessibility tree. Check if we hit | - | ||||||||||||||||||||||||||||||||||||
126 | // it here and return an interface for the scene instead. | - | ||||||||||||||||||||||||||||||||||||
127 | return QAccessible::queryAccessibleInterface(window); never executed: return QAccessible::queryAccessibleInterface(window); | 0 | ||||||||||||||||||||||||||||||||||||
128 | } else { | - | ||||||||||||||||||||||||||||||||||||
129 | while (parent && !parent->d_func()->isAccessible)
| 0 | ||||||||||||||||||||||||||||||||||||
130 | parent = parent->parentItem(); never executed: parent = parent->parentItem(); | 0 | ||||||||||||||||||||||||||||||||||||
131 | return QAccessible::queryAccessibleInterface(parent); never executed: return QAccessible::queryAccessibleInterface(parent); | 0 | ||||||||||||||||||||||||||||||||||||
132 | } | - | ||||||||||||||||||||||||||||||||||||
133 | } | - | ||||||||||||||||||||||||||||||||||||
134 | return nullptr; never executed: return nullptr; | 0 | ||||||||||||||||||||||||||||||||||||
135 | } | - | ||||||||||||||||||||||||||||||||||||
136 | - | |||||||||||||||||||||||||||||||||||||
137 | QAccessibleInterface *QAccessibleQuickItem::child(int index) const | - | ||||||||||||||||||||||||||||||||||||
138 | { | - | ||||||||||||||||||||||||||||||||||||
139 | QList<QQuickItem *> children = childItems(); | - | ||||||||||||||||||||||||||||||||||||
140 | - | |||||||||||||||||||||||||||||||||||||
141 | if (index < 0 || index >= children.count())
| 0-34 | ||||||||||||||||||||||||||||||||||||
142 | return nullptr; never executed: return nullptr; | 0 | ||||||||||||||||||||||||||||||||||||
143 | - | |||||||||||||||||||||||||||||||||||||
144 | QQuickItem *child = children.at(index); | - | ||||||||||||||||||||||||||||||||||||
145 | return QAccessible::queryAccessibleInterface(child); executed 34 times by 1 test: return QAccessible::queryAccessibleInterface(child); Executed by:
| 34 | ||||||||||||||||||||||||||||||||||||
146 | } | - | ||||||||||||||||||||||||||||||||||||
147 | - | |||||||||||||||||||||||||||||||||||||
148 | int QAccessibleQuickItem::indexOfChild(const QAccessibleInterface *iface) const | - | ||||||||||||||||||||||||||||||||||||
149 | { | - | ||||||||||||||||||||||||||||||||||||
150 | QList<QQuickItem*> kids = childItems(); | - | ||||||||||||||||||||||||||||||||||||
151 | return kids.indexOf(static_cast<QQuickItem*>(iface->object())); executed 6 times by 1 test: return kids.indexOf(static_cast<QQuickItem*>(iface->object())); Executed by:
| 6 | ||||||||||||||||||||||||||||||||||||
152 | } | - | ||||||||||||||||||||||||||||||||||||
153 | - | |||||||||||||||||||||||||||||||||||||
154 | static void unignoredChildren(QQuickItem *item, QList<QQuickItem *> *items, bool paintOrder) | - | ||||||||||||||||||||||||||||||||||||
155 | { | - | ||||||||||||||||||||||||||||||||||||
156 | const QList<QQuickItem*> childItems = paintOrder ? QQuickItemPrivate::get(item)->paintOrderChildItems()
| 140-214 | ||||||||||||||||||||||||||||||||||||
157 | : item->childItems(); | - | ||||||||||||||||||||||||||||||||||||
158 | for (QQuickItem *child : childItems) { | - | ||||||||||||||||||||||||||||||||||||
159 | if (QQuickItemPrivate::get(child)->isAccessible) {
| 206-356 | ||||||||||||||||||||||||||||||||||||
160 | items->append(child); | - | ||||||||||||||||||||||||||||||||||||
161 | } else { executed 356 times by 1 test: end of block Executed by:
| 356 | ||||||||||||||||||||||||||||||||||||
162 | unignoredChildren(child, items, paintOrder); | - | ||||||||||||||||||||||||||||||||||||
163 | } executed 206 times by 1 test: end of block Executed by:
| 206 | ||||||||||||||||||||||||||||||||||||
164 | } | - | ||||||||||||||||||||||||||||||||||||
165 | } executed 354 times by 1 test: end of block Executed by:
| 354 | ||||||||||||||||||||||||||||||||||||
166 | - | |||||||||||||||||||||||||||||||||||||
167 | QList<QQuickItem *> accessibleUnignoredChildren(QQuickItem *item, bool paintOrder) | - | ||||||||||||||||||||||||||||||||||||
168 | { | - | ||||||||||||||||||||||||||||||||||||
169 | QList<QQuickItem *> items; | - | ||||||||||||||||||||||||||||||||||||
170 | unignoredChildren(item, &items, paintOrder); | - | ||||||||||||||||||||||||||||||||||||
171 | return items; executed 148 times by 1 test: return items; Executed by:
| 148 | ||||||||||||||||||||||||||||||||||||
172 | } | - | ||||||||||||||||||||||||||||||||||||
173 | - | |||||||||||||||||||||||||||||||||||||
174 | QList<QQuickItem *> QAccessibleQuickItem::childItems() const | - | ||||||||||||||||||||||||||||||||||||
175 | { | - | ||||||||||||||||||||||||||||||||||||
176 | return accessibleUnignoredChildren(item()); executed 68 times by 1 test: return accessibleUnignoredChildren(item()); Executed by:
| 68 | ||||||||||||||||||||||||||||||||||||
177 | } | - | ||||||||||||||||||||||||||||||||||||
178 | - | |||||||||||||||||||||||||||||||||||||
179 | QAccessible::State QAccessibleQuickItem::state() const | - | ||||||||||||||||||||||||||||||||||||
180 | { | - | ||||||||||||||||||||||||||||||||||||
181 | QQuickAccessibleAttached *attached = QQuickAccessibleAttached::attachedProperties(item()); | - | ||||||||||||||||||||||||||||||||||||
182 | if (!attached)
| 0-80 | ||||||||||||||||||||||||||||||||||||
183 | return QAccessible::State(); never executed: return QAccessible::State(); | 0 | ||||||||||||||||||||||||||||||||||||
184 | - | |||||||||||||||||||||||||||||||||||||
185 | QAccessible::State state = attached->state(); | - | ||||||||||||||||||||||||||||||||||||
186 | - | |||||||||||||||||||||||||||||||||||||
187 | QRect viewRect_ = viewRect(); | - | ||||||||||||||||||||||||||||||||||||
188 | QRect itemRect = rect(); | - | ||||||||||||||||||||||||||||||||||||
189 | - | |||||||||||||||||||||||||||||||||||||
190 | if (viewRect_.isNull() || itemRect.isNull() || !item()->window() || !item()->window()->isVisible() ||!item()->isVisible() || qFuzzyIsNull(item()->opacity()))
| 0-80 | ||||||||||||||||||||||||||||||||||||
191 | state.invisible = true; never executed: state.invisible = true; | 0 | ||||||||||||||||||||||||||||||||||||
192 | if (!viewRect_.intersects(itemRect))
| 0-80 | ||||||||||||||||||||||||||||||||||||
193 | state.offscreen = true; never executed: state.offscreen = true; | 0 | ||||||||||||||||||||||||||||||||||||
194 | if ((role() == QAccessible::CheckBox || role() == QAccessible::RadioButton) && object()->property("checked").toBool())
| 0-68 | ||||||||||||||||||||||||||||||||||||
195 | state.checked = true; executed 6 times by 1 test: state.checked = true; Executed by:
| 6 | ||||||||||||||||||||||||||||||||||||
196 | if (item()->activeFocusOnTab() || role() == QAccessible::EditableText)
| 0-80 | ||||||||||||||||||||||||||||||||||||
197 | state.focusable = true; never executed: state.focusable = true; | 0 | ||||||||||||||||||||||||||||||||||||
198 | if (item()->hasActiveFocus())
| 4-76 | ||||||||||||||||||||||||||||||||||||
199 | state.focused = true; executed 4 times by 1 test: state.focused = true; Executed by:
| 4 | ||||||||||||||||||||||||||||||||||||
200 | return state; executed 80 times by 1 test: return state; Executed by:
| 80 | ||||||||||||||||||||||||||||||||||||
201 | } | - | ||||||||||||||||||||||||||||||||||||
202 | - | |||||||||||||||||||||||||||||||||||||
203 | QAccessible::Role QAccessibleQuickItem::role() const | - | ||||||||||||||||||||||||||||||||||||
204 | { | - | ||||||||||||||||||||||||||||||||||||
205 | // Workaround for setAccessibleRole() not working for | - | ||||||||||||||||||||||||||||||||||||
206 | // Text items. Text items are special since they are defined | - | ||||||||||||||||||||||||||||||||||||
207 | // entirely from C++ (setting the role from QML works.) | - | ||||||||||||||||||||||||||||||||||||
208 | if (qobject_cast<QQuickText*>(const_cast<QQuickItem *>(item())))
| 4-236 | ||||||||||||||||||||||||||||||||||||
209 | return QAccessible::StaticText; executed 4 times by 1 test: return QAccessible::StaticText; Executed by:
| 4 | ||||||||||||||||||||||||||||||||||||
210 | - | |||||||||||||||||||||||||||||||||||||
211 | QAccessible::Role role = QAccessible::NoRole; | - | ||||||||||||||||||||||||||||||||||||
212 | if (item())
| 0-236 | ||||||||||||||||||||||||||||||||||||
213 | role = QQuickItemPrivate::get(item())->accessibleRole(); executed 236 times by 1 test: role = QQuickItemPrivate::get(item())->accessibleRole(); Executed by:
| 236 | ||||||||||||||||||||||||||||||||||||
214 | if (role == QAccessible::NoRole)
| 0-236 | ||||||||||||||||||||||||||||||||||||
215 | role = QAccessible::Client; never executed: role = QAccessible::Client; | 0 | ||||||||||||||||||||||||||||||||||||
216 | - | |||||||||||||||||||||||||||||||||||||
217 | return role; executed 236 times by 1 test: return role; Executed by:
| 236 | ||||||||||||||||||||||||||||||||||||
218 | } | - | ||||||||||||||||||||||||||||||||||||
219 | - | |||||||||||||||||||||||||||||||||||||
220 | bool QAccessibleQuickItem::isAccessible() const | - | ||||||||||||||||||||||||||||||||||||
221 | { | - | ||||||||||||||||||||||||||||||||||||
222 | return item()->d_func()->isAccessible; never executed: return item()->d_func()->isAccessible; | 0 | ||||||||||||||||||||||||||||||||||||
223 | } | - | ||||||||||||||||||||||||||||||||||||
224 | - | |||||||||||||||||||||||||||||||||||||
225 | QStringList QAccessibleQuickItem::actionNames() const | - | ||||||||||||||||||||||||||||||||||||
226 | { | - | ||||||||||||||||||||||||||||||||||||
227 | QStringList actions; | - | ||||||||||||||||||||||||||||||||||||
228 | switch (role()) { | - | ||||||||||||||||||||||||||||||||||||
229 | case QAccessible::PushButton: never executed: case QAccessible::PushButton: | 0 | ||||||||||||||||||||||||||||||||||||
230 | actions << QAccessibleActionInterface::pressAction(); | - | ||||||||||||||||||||||||||||||||||||
231 | break; never executed: break; | 0 | ||||||||||||||||||||||||||||||||||||
232 | case QAccessible::RadioButton: never executed: case QAccessible::RadioButton: | 0 | ||||||||||||||||||||||||||||||||||||
233 | case QAccessible::CheckBox: never executed: case QAccessible::CheckBox: | 0 | ||||||||||||||||||||||||||||||||||||
234 | actions << QAccessibleActionInterface::toggleAction() | - | ||||||||||||||||||||||||||||||||||||
235 | << QAccessibleActionInterface::pressAction(); | - | ||||||||||||||||||||||||||||||||||||
236 | break; never executed: break; | 0 | ||||||||||||||||||||||||||||||||||||
237 | case QAccessible::Slider: never executed: case QAccessible::Slider: | 0 | ||||||||||||||||||||||||||||||||||||
238 | case QAccessible::SpinBox: never executed: case QAccessible::SpinBox: | 0 | ||||||||||||||||||||||||||||||||||||
239 | case QAccessible::ScrollBar: never executed: case QAccessible::ScrollBar: | 0 | ||||||||||||||||||||||||||||||||||||
240 | actions << QAccessibleActionInterface::increaseAction() | - | ||||||||||||||||||||||||||||||||||||
241 | << QAccessibleActionInterface::decreaseAction(); | - | ||||||||||||||||||||||||||||||||||||
242 | break; never executed: break; | 0 | ||||||||||||||||||||||||||||||||||||
243 | default: never executed: default: | 0 | ||||||||||||||||||||||||||||||||||||
244 | break; never executed: break; | 0 | ||||||||||||||||||||||||||||||||||||
245 | } | - | ||||||||||||||||||||||||||||||||||||
246 | if (state().focusable)
| 0 | ||||||||||||||||||||||||||||||||||||
247 | actions.append(QAccessibleActionInterface::setFocusAction()); never executed: actions.append(QAccessibleActionInterface::setFocusAction()); | 0 | ||||||||||||||||||||||||||||||||||||
248 | - | |||||||||||||||||||||||||||||||||||||
249 | // ### The following can lead to duplicate action names. | - | ||||||||||||||||||||||||||||||||||||
250 | if (QQuickAccessibleAttached *attached = QQuickAccessibleAttached::attachedProperties(item()))
| 0 | ||||||||||||||||||||||||||||||||||||
251 | attached->availableActions(&actions); never executed: attached->availableActions(&actions); | 0 | ||||||||||||||||||||||||||||||||||||
252 | return actions; never executed: return actions; | 0 | ||||||||||||||||||||||||||||||||||||
253 | } | - | ||||||||||||||||||||||||||||||||||||
254 | - | |||||||||||||||||||||||||||||||||||||
255 | void QAccessibleQuickItem::doAction(const QString &actionName) | - | ||||||||||||||||||||||||||||||||||||
256 | { | - | ||||||||||||||||||||||||||||||||||||
257 | bool accepted = false; | - | ||||||||||||||||||||||||||||||||||||
258 | if (actionName == QAccessibleActionInterface::setFocusAction()) {
| 0 | ||||||||||||||||||||||||||||||||||||
259 | item()->forceActiveFocus(); | - | ||||||||||||||||||||||||||||||||||||
260 | accepted = true; | - | ||||||||||||||||||||||||||||||||||||
261 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||
262 | if (QQuickAccessibleAttached *attached = QQuickAccessibleAttached::attachedProperties(item()))
| 0 | ||||||||||||||||||||||||||||||||||||
263 | accepted = attached->doAction(actionName); never executed: accepted = attached->doAction(actionName); | 0 | ||||||||||||||||||||||||||||||||||||
264 | - | |||||||||||||||||||||||||||||||||||||
265 | if (accepted)
| 0 | ||||||||||||||||||||||||||||||||||||
266 | return; never executed: return; | 0 | ||||||||||||||||||||||||||||||||||||
267 | // Look for and call the accessible[actionName]Action() function on the item. | - | ||||||||||||||||||||||||||||||||||||
268 | // This allows for overriding the default action handling. | - | ||||||||||||||||||||||||||||||||||||
269 | const QByteArray functionName = "accessible" + actionName.toLatin1() + "Action"; | - | ||||||||||||||||||||||||||||||||||||
270 | if (object()->metaObject()->indexOfMethod(QByteArray(functionName + "()")) != -1) {
| 0 | ||||||||||||||||||||||||||||||||||||
271 | QMetaObject::invokeMethod(object(), functionName); | - | ||||||||||||||||||||||||||||||||||||
272 | return; never executed: return; | 0 | ||||||||||||||||||||||||||||||||||||
273 | } | - | ||||||||||||||||||||||||||||||||||||
274 | - | |||||||||||||||||||||||||||||||||||||
275 | // Role-specific default action handling follows. Items are expected to provide | - | ||||||||||||||||||||||||||||||||||||
276 | // properties according to role conventions. These will then be read and/or updated | - | ||||||||||||||||||||||||||||||||||||
277 | // by the accessibility system. | - | ||||||||||||||||||||||||||||||||||||
278 | // Checkable roles : checked | - | ||||||||||||||||||||||||||||||||||||
279 | // Value-based roles : (via the value interface: value, minimumValue, maximumValue), stepSize | - | ||||||||||||||||||||||||||||||||||||
280 | switch (role()) { | - | ||||||||||||||||||||||||||||||||||||
281 | case QAccessible::RadioButton: never executed: case QAccessible::RadioButton: | 0 | ||||||||||||||||||||||||||||||||||||
282 | case QAccessible::CheckBox: { never executed: case QAccessible::CheckBox: | 0 | ||||||||||||||||||||||||||||||||||||
283 | QVariant checked = object()->property("checked"); | - | ||||||||||||||||||||||||||||||||||||
284 | if (checked.isValid()) {
| 0 | ||||||||||||||||||||||||||||||||||||
285 | if (actionName == QAccessibleActionInterface::toggleAction() ||
| 0 | ||||||||||||||||||||||||||||||||||||
286 | actionName == QAccessibleActionInterface::pressAction()) {
| 0 | ||||||||||||||||||||||||||||||||||||
287 | - | |||||||||||||||||||||||||||||||||||||
288 | object()->setProperty("checked", QVariant(!checked.toBool())); | - | ||||||||||||||||||||||||||||||||||||
289 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||
290 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||
291 | break; never executed: break; | 0 | ||||||||||||||||||||||||||||||||||||
292 | } | - | ||||||||||||||||||||||||||||||||||||
293 | case QAccessible::Slider: never executed: case QAccessible::Slider: | 0 | ||||||||||||||||||||||||||||||||||||
294 | case QAccessible::SpinBox: never executed: case QAccessible::SpinBox: | 0 | ||||||||||||||||||||||||||||||||||||
295 | case QAccessible::Dial: never executed: case QAccessible::Dial: | 0 | ||||||||||||||||||||||||||||||||||||
296 | case QAccessible::ScrollBar: { never executed: case QAccessible::ScrollBar: | 0 | ||||||||||||||||||||||||||||||||||||
297 | if (actionName != QAccessibleActionInterface::increaseAction() &&
| 0 | ||||||||||||||||||||||||||||||||||||
298 | actionName != QAccessibleActionInterface::decreaseAction())
| 0 | ||||||||||||||||||||||||||||||||||||
299 | break; never executed: break; | 0 | ||||||||||||||||||||||||||||||||||||
300 | - | |||||||||||||||||||||||||||||||||||||
301 | // Update the value using QAccessibleValueInterface, respecting | - | ||||||||||||||||||||||||||||||||||||
302 | // the minimum and maximum value (if set). Also check for and | - | ||||||||||||||||||||||||||||||||||||
303 | // use the "stepSize" property on the item | - | ||||||||||||||||||||||||||||||||||||
304 | if (QAccessibleValueInterface *valueIface = valueInterface()) {
| 0 | ||||||||||||||||||||||||||||||||||||
305 | QVariant valueV = valueIface->currentValue(); | - | ||||||||||||||||||||||||||||||||||||
306 | qreal newValue = valueV.toReal(); | - | ||||||||||||||||||||||||||||||||||||
307 | - | |||||||||||||||||||||||||||||||||||||
308 | QVariant stepSizeV = object()->property("stepSize"); | - | ||||||||||||||||||||||||||||||||||||
309 | qreal stepSize = stepSizeV.isValid() ? stepSizeV.toReal() : qreal(1.0);
| 0 | ||||||||||||||||||||||||||||||||||||
310 | if (actionName == QAccessibleActionInterface::increaseAction()) {
| 0 | ||||||||||||||||||||||||||||||||||||
311 | newValue += stepSize; | - | ||||||||||||||||||||||||||||||||||||
312 | } else { never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||
313 | newValue -= stepSize; | - | ||||||||||||||||||||||||||||||||||||
314 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||
315 | - | |||||||||||||||||||||||||||||||||||||
316 | QVariant minimumValueV = valueIface->minimumValue(); | - | ||||||||||||||||||||||||||||||||||||
317 | if (minimumValueV.isValid()) {
| 0 | ||||||||||||||||||||||||||||||||||||
318 | newValue = qMax(newValue, minimumValueV.toReal()); | - | ||||||||||||||||||||||||||||||||||||
319 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||
320 | QVariant maximumValueV = valueIface->maximumValue(); | - | ||||||||||||||||||||||||||||||||||||
321 | if (maximumValueV.isValid()) {
| 0 | ||||||||||||||||||||||||||||||||||||
322 | newValue = qMin(newValue, maximumValueV.toReal()); | - | ||||||||||||||||||||||||||||||||||||
323 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||
324 | - | |||||||||||||||||||||||||||||||||||||
325 | valueIface->setCurrentValue(QVariant(newValue)); | - | ||||||||||||||||||||||||||||||||||||
326 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||
327 | break; never executed: break; | 0 | ||||||||||||||||||||||||||||||||||||
328 | } | - | ||||||||||||||||||||||||||||||||||||
329 | default: never executed: default: | 0 | ||||||||||||||||||||||||||||||||||||
330 | break; never executed: break; | 0 | ||||||||||||||||||||||||||||||||||||
331 | } | - | ||||||||||||||||||||||||||||||||||||
332 | } | - | ||||||||||||||||||||||||||||||||||||
333 | - | |||||||||||||||||||||||||||||||||||||
334 | QStringList QAccessibleQuickItem::keyBindingsForAction(const QString &actionName) const | - | ||||||||||||||||||||||||||||||||||||
335 | { | - | ||||||||||||||||||||||||||||||||||||
336 | Q_UNUSED(actionName) | - | ||||||||||||||||||||||||||||||||||||
337 | return QStringList(); never executed: return QStringList(); | 0 | ||||||||||||||||||||||||||||||||||||
338 | } | - | ||||||||||||||||||||||||||||||||||||
339 | - | |||||||||||||||||||||||||||||||||||||
340 | QString QAccessibleQuickItem::text(QAccessible::Text textType) const | - | ||||||||||||||||||||||||||||||||||||
341 | { | - | ||||||||||||||||||||||||||||||||||||
342 | // handles generic behavior not specific to an item | - | ||||||||||||||||||||||||||||||||||||
343 | switch (textType) { | - | ||||||||||||||||||||||||||||||||||||
344 | case QAccessible::Name: { executed 34 times by 1 test: case QAccessible::Name: Executed by:
| 34 | ||||||||||||||||||||||||||||||||||||
345 | QVariant accessibleName = QQuickAccessibleAttached::property(object(), "name"); | - | ||||||||||||||||||||||||||||||||||||
346 | if (!accessibleName.isNull())
| 0-34 | ||||||||||||||||||||||||||||||||||||
347 | return accessibleName.toString(); executed 34 times by 1 test: return accessibleName.toString(); Executed by:
| 34 | ||||||||||||||||||||||||||||||||||||
348 | break;} never executed: break; | 0 | ||||||||||||||||||||||||||||||||||||
349 | case QAccessible::Description: { never executed: case QAccessible::Description: | 0 | ||||||||||||||||||||||||||||||||||||
350 | QVariant accessibleDecription = QQuickAccessibleAttached::property(object(), "description"); | - | ||||||||||||||||||||||||||||||||||||
351 | if (!accessibleDecription.isNull())
| 0 | ||||||||||||||||||||||||||||||||||||
352 | return accessibleDecription.toString(); never executed: return accessibleDecription.toString(); | 0 | ||||||||||||||||||||||||||||||||||||
353 | break;} never executed: break; | 0 | ||||||||||||||||||||||||||||||||||||
354 | #ifdef Q_ACCESSIBLE_QUICK_ITEM_ENABLE_DEBUG_DESCRIPTION | - | ||||||||||||||||||||||||||||||||||||
355 | case QAccessible::DebugDescription: { | - | ||||||||||||||||||||||||||||||||||||
356 | QString debugString; | - | ||||||||||||||||||||||||||||||||||||
357 | debugString = QString::fromLatin1(object()->metaObject()->className()) + QLatin1Char(' '); | - | ||||||||||||||||||||||||||||||||||||
358 | debugString += isAccessible() ? QLatin1String("enabled") : QLatin1String("disabled"); | - | ||||||||||||||||||||||||||||||||||||
359 | return debugString; | - | ||||||||||||||||||||||||||||||||||||
360 | break; } | - | ||||||||||||||||||||||||||||||||||||
361 | #endif | - | ||||||||||||||||||||||||||||||||||||
362 | case QAccessible::Value: never executed: case QAccessible::Value: | 0 | ||||||||||||||||||||||||||||||||||||
363 | case QAccessible::Help: never executed: case QAccessible::Help: | 0 | ||||||||||||||||||||||||||||||||||||
364 | case QAccessible::Accelerator: never executed: case QAccessible::Accelerator: | 0 | ||||||||||||||||||||||||||||||||||||
365 | default: never executed: default: | 0 | ||||||||||||||||||||||||||||||||||||
366 | break; never executed: break; | 0 | ||||||||||||||||||||||||||||||||||||
367 | } | - | ||||||||||||||||||||||||||||||||||||
368 | - | |||||||||||||||||||||||||||||||||||||
369 | // the following block handles item-specific behavior | - | ||||||||||||||||||||||||||||||||||||
370 | if (role() == QAccessible::EditableText) {
| 0 | ||||||||||||||||||||||||||||||||||||
371 | if (textType == QAccessible::Value) {
| 0 | ||||||||||||||||||||||||||||||||||||
372 | if (QTextDocument *doc = textDocument()) {
| 0 | ||||||||||||||||||||||||||||||||||||
373 | return doc->toPlainText(); never executed: return doc->toPlainText(); | 0 | ||||||||||||||||||||||||||||||||||||
374 | } | - | ||||||||||||||||||||||||||||||||||||
375 | QVariant text = object()->property("text"); | - | ||||||||||||||||||||||||||||||||||||
376 | return text.toString(); never executed: return text.toString(); | 0 | ||||||||||||||||||||||||||||||||||||
377 | } | - | ||||||||||||||||||||||||||||||||||||
378 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||
379 | - | |||||||||||||||||||||||||||||||||||||
380 | return QString(); never executed: return QString(); | 0 | ||||||||||||||||||||||||||||||||||||
381 | } | - | ||||||||||||||||||||||||||||||||||||
382 | - | |||||||||||||||||||||||||||||||||||||
383 | void *QAccessibleQuickItem::interface_cast(QAccessible::InterfaceType t) | - | ||||||||||||||||||||||||||||||||||||
384 | { | - | ||||||||||||||||||||||||||||||||||||
385 | QAccessible::Role r = role(); | - | ||||||||||||||||||||||||||||||||||||
386 | if (t == QAccessible::ActionInterface)
| 0 | ||||||||||||||||||||||||||||||||||||
387 | return static_cast<QAccessibleActionInterface*>(this); never executed: return static_cast<QAccessibleActionInterface*>(this); | 0 | ||||||||||||||||||||||||||||||||||||
388 | if (t == QAccessible::ValueInterface &&
| 0 | ||||||||||||||||||||||||||||||||||||
389 | (r == QAccessible::Slider ||
| 0 | ||||||||||||||||||||||||||||||||||||
390 | r == QAccessible::SpinBox ||
| 0 | ||||||||||||||||||||||||||||||||||||
391 | r == QAccessible::Dial ||
| 0 | ||||||||||||||||||||||||||||||||||||
392 | r == QAccessible::ScrollBar))
| 0 | ||||||||||||||||||||||||||||||||||||
393 | return static_cast<QAccessibleValueInterface*>(this); never executed: return static_cast<QAccessibleValueInterface*>(this); | 0 | ||||||||||||||||||||||||||||||||||||
394 | - | |||||||||||||||||||||||||||||||||||||
395 | if (t == QAccessible::TextInterface &&
| 0 | ||||||||||||||||||||||||||||||||||||
396 | (r == QAccessible::EditableText))
| 0 | ||||||||||||||||||||||||||||||||||||
397 | return static_cast<QAccessibleTextInterface*>(this); never executed: return static_cast<QAccessibleTextInterface*>(this); | 0 | ||||||||||||||||||||||||||||||||||||
398 | - | |||||||||||||||||||||||||||||||||||||
399 | return QAccessibleObject::interface_cast(t); never executed: return QAccessibleObject::interface_cast(t); | 0 | ||||||||||||||||||||||||||||||||||||
400 | } | - | ||||||||||||||||||||||||||||||||||||
401 | - | |||||||||||||||||||||||||||||||||||||
402 | QVariant QAccessibleQuickItem::currentValue() const | - | ||||||||||||||||||||||||||||||||||||
403 | { | - | ||||||||||||||||||||||||||||||||||||
404 | return item()->property("value"); never executed: return item()->property("value"); | 0 | ||||||||||||||||||||||||||||||||||||
405 | } | - | ||||||||||||||||||||||||||||||||||||
406 | - | |||||||||||||||||||||||||||||||||||||
407 | void QAccessibleQuickItem::setCurrentValue(const QVariant &value) | - | ||||||||||||||||||||||||||||||||||||
408 | { | - | ||||||||||||||||||||||||||||||||||||
409 | item()->setProperty("value", value); | - | ||||||||||||||||||||||||||||||||||||
410 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||
411 | - | |||||||||||||||||||||||||||||||||||||
412 | QVariant QAccessibleQuickItem::maximumValue() const | - | ||||||||||||||||||||||||||||||||||||
413 | { | - | ||||||||||||||||||||||||||||||||||||
414 | return item()->property("maximumValue"); never executed: return item()->property("maximumValue"); | 0 | ||||||||||||||||||||||||||||||||||||
415 | } | - | ||||||||||||||||||||||||||||||||||||
416 | - | |||||||||||||||||||||||||||||||||||||
417 | QVariant QAccessibleQuickItem::minimumValue() const | - | ||||||||||||||||||||||||||||||||||||
418 | { | - | ||||||||||||||||||||||||||||||||||||
419 | return item()->property("minimumValue"); never executed: return item()->property("minimumValue"); | 0 | ||||||||||||||||||||||||||||||||||||
420 | } | - | ||||||||||||||||||||||||||||||||||||
421 | - | |||||||||||||||||||||||||||||||||||||
422 | QVariant QAccessibleQuickItem::minimumStepSize() const | - | ||||||||||||||||||||||||||||||||||||
423 | { | - | ||||||||||||||||||||||||||||||||||||
424 | return item()->property("stepSize"); never executed: return item()->property("stepSize"); | 0 | ||||||||||||||||||||||||||||||||||||
425 | } | - | ||||||||||||||||||||||||||||||||||||
426 | - | |||||||||||||||||||||||||||||||||||||
427 | /*! | - | ||||||||||||||||||||||||||||||||||||
428 | \internal | - | ||||||||||||||||||||||||||||||||||||
429 | Shared between QAccessibleQuickItem and QAccessibleQuickView | - | ||||||||||||||||||||||||||||||||||||
430 | */ | - | ||||||||||||||||||||||||||||||||||||
431 | QRect itemScreenRect(QQuickItem *item) | - | ||||||||||||||||||||||||||||||||||||
432 | { | - | ||||||||||||||||||||||||||||||||||||
433 | // ### no window in some cases. | - | ||||||||||||||||||||||||||||||||||||
434 | // ### Should we really check for 0 opacity? | - | ||||||||||||||||||||||||||||||||||||
435 | if (!item->window() ||!item->isVisible() || qFuzzyIsNull(item->opacity())) {
| 0-164 | ||||||||||||||||||||||||||||||||||||
436 | return QRect(); never executed: return QRect(); | 0 | ||||||||||||||||||||||||||||||||||||
437 | } | - | ||||||||||||||||||||||||||||||||||||
438 | - | |||||||||||||||||||||||||||||||||||||
439 | QSize itemSize((int)item->width(), (int)item->height()); | - | ||||||||||||||||||||||||||||||||||||
440 | // ### If the bounding rect fails, we first try the implicit size, then we go for the | - | ||||||||||||||||||||||||||||||||||||
441 | // parent size. WE MIGHT HAVE TO REVISIT THESE FALLBACKS. | - | ||||||||||||||||||||||||||||||||||||
442 | if (itemSize.isEmpty()) {
| 0-164 | ||||||||||||||||||||||||||||||||||||
443 | itemSize = QSize((int)item->implicitWidth(), (int)item->implicitHeight()); | - | ||||||||||||||||||||||||||||||||||||
444 | if (itemSize.isEmpty() && item->parentItem())
| 0 | ||||||||||||||||||||||||||||||||||||
445 | // ### Seems that the above fallback is not enough, fallback to use the parent size... | - | ||||||||||||||||||||||||||||||||||||
446 | itemSize = QSize((int)item->parentItem()->width(), (int)item->parentItem()->height()); never executed: itemSize = QSize((int)item->parentItem()->width(), (int)item->parentItem()->height()); | 0 | ||||||||||||||||||||||||||||||||||||
447 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||
448 | - | |||||||||||||||||||||||||||||||||||||
449 | QPointF scenePoint = item->mapToScene(QPointF(0, 0)); | - | ||||||||||||||||||||||||||||||||||||
450 | QPoint screenPos = item->window()->mapToGlobal(scenePoint.toPoint()); | - | ||||||||||||||||||||||||||||||||||||
451 | return QRect(screenPos, itemSize); executed 164 times by 1 test: return QRect(screenPos, itemSize); Executed by:
| 164 | ||||||||||||||||||||||||||||||||||||
452 | } | - | ||||||||||||||||||||||||||||||||||||
453 | - | |||||||||||||||||||||||||||||||||||||
454 | QTextDocument *QAccessibleQuickItem::textDocument() const | - | ||||||||||||||||||||||||||||||||||||
455 | { | - | ||||||||||||||||||||||||||||||||||||
456 | QVariant docVariant = item()->property("textDocument"); | - | ||||||||||||||||||||||||||||||||||||
457 | if (docVariant.canConvert<QQuickTextDocument*>()) {
| 0-84 | ||||||||||||||||||||||||||||||||||||
458 | QQuickTextDocument *qqdoc = docVariant.value<QQuickTextDocument*>(); | - | ||||||||||||||||||||||||||||||||||||
459 | return qqdoc->textDocument(); never executed: return qqdoc->textDocument(); | 0 | ||||||||||||||||||||||||||||||||||||
460 | } | - | ||||||||||||||||||||||||||||||||||||
461 | return nullptr; executed 84 times by 2 tests: return nullptr; Executed by:
| 84 | ||||||||||||||||||||||||||||||||||||
462 | } | - | ||||||||||||||||||||||||||||||||||||
463 | - | |||||||||||||||||||||||||||||||||||||
464 | int QAccessibleQuickItem::characterCount() const | - | ||||||||||||||||||||||||||||||||||||
465 | { | - | ||||||||||||||||||||||||||||||||||||
466 | if (m_doc) {
| 0 | ||||||||||||||||||||||||||||||||||||
467 | QTextCursor cursor = QTextCursor(m_doc); | - | ||||||||||||||||||||||||||||||||||||
468 | cursor.movePosition(QTextCursor::End); | - | ||||||||||||||||||||||||||||||||||||
469 | return cursor.position(); never executed: return cursor.position(); | 0 | ||||||||||||||||||||||||||||||||||||
470 | } | - | ||||||||||||||||||||||||||||||||||||
471 | return text(QAccessible::Value).size(); never executed: return text(QAccessible::Value).size(); | 0 | ||||||||||||||||||||||||||||||||||||
472 | } | - | ||||||||||||||||||||||||||||||||||||
473 | - | |||||||||||||||||||||||||||||||||||||
474 | int QAccessibleQuickItem::cursorPosition() const | - | ||||||||||||||||||||||||||||||||||||
475 | { | - | ||||||||||||||||||||||||||||||||||||
476 | QVariant pos = item()->property("cursorPosition"); | - | ||||||||||||||||||||||||||||||||||||
477 | return pos.toInt(); never executed: return pos.toInt(); | 0 | ||||||||||||||||||||||||||||||||||||
478 | } | - | ||||||||||||||||||||||||||||||||||||
479 | - | |||||||||||||||||||||||||||||||||||||
480 | void QAccessibleQuickItem::setCursorPosition(int position) | - | ||||||||||||||||||||||||||||||||||||
481 | { | - | ||||||||||||||||||||||||||||||||||||
482 | item()->setProperty("cursorPosition", position); | - | ||||||||||||||||||||||||||||||||||||
483 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||
484 | - | |||||||||||||||||||||||||||||||||||||
485 | QString QAccessibleQuickItem::text(int startOffset, int endOffset) const | - | ||||||||||||||||||||||||||||||||||||
486 | { | - | ||||||||||||||||||||||||||||||||||||
487 | if (m_doc) {
| 0 | ||||||||||||||||||||||||||||||||||||
488 | QTextCursor cursor = QTextCursor(m_doc); | - | ||||||||||||||||||||||||||||||||||||
489 | cursor.setPosition(startOffset); | - | ||||||||||||||||||||||||||||||||||||
490 | cursor.setPosition(endOffset, QTextCursor::KeepAnchor); | - | ||||||||||||||||||||||||||||||||||||
491 | return cursor.selectedText(); never executed: return cursor.selectedText(); | 0 | ||||||||||||||||||||||||||||||||||||
492 | } | - | ||||||||||||||||||||||||||||||||||||
493 | return text(QAccessible::Value).mid(startOffset, endOffset - startOffset); never executed: return text(QAccessible::Value).mid(startOffset, endOffset - startOffset); | 0 | ||||||||||||||||||||||||||||||||||||
494 | } | - | ||||||||||||||||||||||||||||||||||||
495 | - | |||||||||||||||||||||||||||||||||||||
496 | QString QAccessibleQuickItem::textBeforeOffset(int offset, QAccessible::TextBoundaryType boundaryType, | - | ||||||||||||||||||||||||||||||||||||
497 | int *startOffset, int *endOffset) const | - | ||||||||||||||||||||||||||||||||||||
498 | { | - | ||||||||||||||||||||||||||||||||||||
499 | Q_ASSERT(startOffset); | - | ||||||||||||||||||||||||||||||||||||
500 | Q_ASSERT(endOffset); | - | ||||||||||||||||||||||||||||||||||||
501 | - | |||||||||||||||||||||||||||||||||||||
502 | if (m_doc) {
| 0 | ||||||||||||||||||||||||||||||||||||
503 | QTextCursor cursor = QTextCursor(m_doc); | - | ||||||||||||||||||||||||||||||||||||
504 | cursor.setPosition(offset); | - | ||||||||||||||||||||||||||||||||||||
505 | QPair<int, int> boundaries = QAccessible::qAccessibleTextBoundaryHelper(cursor, boundaryType); | - | ||||||||||||||||||||||||||||||||||||
506 | cursor.setPosition(boundaries.first - 1); | - | ||||||||||||||||||||||||||||||||||||
507 | boundaries = QAccessible::qAccessibleTextBoundaryHelper(cursor, boundaryType); | - | ||||||||||||||||||||||||||||||||||||
508 | - | |||||||||||||||||||||||||||||||||||||
509 | *startOffset = boundaries.first; | - | ||||||||||||||||||||||||||||||||||||
510 | *endOffset = boundaries.second; | - | ||||||||||||||||||||||||||||||||||||
511 | - | |||||||||||||||||||||||||||||||||||||
512 | return text(boundaries.first, boundaries.second); never executed: return text(boundaries.first, boundaries.second); | 0 | ||||||||||||||||||||||||||||||||||||
513 | } else { | - | ||||||||||||||||||||||||||||||||||||
514 | return QAccessibleTextInterface::textBeforeOffset(offset, boundaryType, startOffset, endOffset); never executed: return QAccessibleTextInterface::textBeforeOffset(offset, boundaryType, startOffset, endOffset); | 0 | ||||||||||||||||||||||||||||||||||||
515 | } | - | ||||||||||||||||||||||||||||||||||||
516 | } | - | ||||||||||||||||||||||||||||||||||||
517 | - | |||||||||||||||||||||||||||||||||||||
518 | QString QAccessibleQuickItem::textAfterOffset(int offset, QAccessible::TextBoundaryType boundaryType, | - | ||||||||||||||||||||||||||||||||||||
519 | int *startOffset, int *endOffset) const | - | ||||||||||||||||||||||||||||||||||||
520 | { | - | ||||||||||||||||||||||||||||||||||||
521 | Q_ASSERT(startOffset); | - | ||||||||||||||||||||||||||||||||||||
522 | Q_ASSERT(endOffset); | - | ||||||||||||||||||||||||||||||||||||
523 | - | |||||||||||||||||||||||||||||||||||||
524 | if (m_doc) {
| 0 | ||||||||||||||||||||||||||||||||||||
525 | QTextCursor cursor = QTextCursor(m_doc); | - | ||||||||||||||||||||||||||||||||||||
526 | cursor.setPosition(offset); | - | ||||||||||||||||||||||||||||||||||||
527 | QPair<int, int> boundaries = QAccessible::qAccessibleTextBoundaryHelper(cursor, boundaryType); | - | ||||||||||||||||||||||||||||||||||||
528 | cursor.setPosition(boundaries.second); | - | ||||||||||||||||||||||||||||||||||||
529 | boundaries = QAccessible::qAccessibleTextBoundaryHelper(cursor, boundaryType); | - | ||||||||||||||||||||||||||||||||||||
530 | - | |||||||||||||||||||||||||||||||||||||
531 | *startOffset = boundaries.first; | - | ||||||||||||||||||||||||||||||||||||
532 | *endOffset = boundaries.second; | - | ||||||||||||||||||||||||||||||||||||
533 | - | |||||||||||||||||||||||||||||||||||||
534 | return text(boundaries.first, boundaries.second); never executed: return text(boundaries.first, boundaries.second); | 0 | ||||||||||||||||||||||||||||||||||||
535 | } else { | - | ||||||||||||||||||||||||||||||||||||
536 | return QAccessibleTextInterface::textAfterOffset(offset, boundaryType, startOffset, endOffset); never executed: return QAccessibleTextInterface::textAfterOffset(offset, boundaryType, startOffset, endOffset); | 0 | ||||||||||||||||||||||||||||||||||||
537 | } | - | ||||||||||||||||||||||||||||||||||||
538 | } | - | ||||||||||||||||||||||||||||||||||||
539 | - | |||||||||||||||||||||||||||||||||||||
540 | QString QAccessibleQuickItem::textAtOffset(int offset, QAccessible::TextBoundaryType boundaryType, | - | ||||||||||||||||||||||||||||||||||||
541 | int *startOffset, int *endOffset) const | - | ||||||||||||||||||||||||||||||||||||
542 | { | - | ||||||||||||||||||||||||||||||||||||
543 | Q_ASSERT(startOffset); | - | ||||||||||||||||||||||||||||||||||||
544 | Q_ASSERT(endOffset); | - | ||||||||||||||||||||||||||||||||||||
545 | - | |||||||||||||||||||||||||||||||||||||
546 | if (m_doc) {
| 0 | ||||||||||||||||||||||||||||||||||||
547 | QTextCursor cursor = QTextCursor(m_doc); | - | ||||||||||||||||||||||||||||||||||||
548 | cursor.setPosition(offset); | - | ||||||||||||||||||||||||||||||||||||
549 | QPair<int, int> boundaries = QAccessible::qAccessibleTextBoundaryHelper(cursor, boundaryType); | - | ||||||||||||||||||||||||||||||||||||
550 | - | |||||||||||||||||||||||||||||||||||||
551 | *startOffset = boundaries.first; | - | ||||||||||||||||||||||||||||||||||||
552 | *endOffset = boundaries.second; | - | ||||||||||||||||||||||||||||||||||||
553 | return text(boundaries.first, boundaries.second); never executed: return text(boundaries.first, boundaries.second); | 0 | ||||||||||||||||||||||||||||||||||||
554 | } else { | - | ||||||||||||||||||||||||||||||||||||
555 | return QAccessibleTextInterface::textAtOffset(offset, boundaryType, startOffset, endOffset); never executed: return QAccessibleTextInterface::textAtOffset(offset, boundaryType, startOffset, endOffset); | 0 | ||||||||||||||||||||||||||||||||||||
556 | } | - | ||||||||||||||||||||||||||||||||||||
557 | } | - | ||||||||||||||||||||||||||||||||||||
558 | - | |||||||||||||||||||||||||||||||||||||
559 | void QAccessibleQuickItem::selection(int selectionIndex, int *startOffset, int *endOffset) const | - | ||||||||||||||||||||||||||||||||||||
560 | { | - | ||||||||||||||||||||||||||||||||||||
561 | if (selectionIndex == 0) {
| 0 | ||||||||||||||||||||||||||||||||||||
562 | *startOffset = item()->property("selectionStart").toInt(); | - | ||||||||||||||||||||||||||||||||||||
563 | *endOffset = item()->property("selectionEnd").toInt(); | - | ||||||||||||||||||||||||||||||||||||
564 | } else { never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||
565 | *startOffset = 0; | - | ||||||||||||||||||||||||||||||||||||
566 | *endOffset = 0; | - | ||||||||||||||||||||||||||||||||||||
567 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||
568 | } | - | ||||||||||||||||||||||||||||||||||||
569 | - | |||||||||||||||||||||||||||||||||||||
570 | int QAccessibleQuickItem::selectionCount() const | - | ||||||||||||||||||||||||||||||||||||
571 | { | - | ||||||||||||||||||||||||||||||||||||
572 | if (item()->property("selectionStart").toInt() != item()->property("selectionEnd").toInt())
| 0 | ||||||||||||||||||||||||||||||||||||
573 | return 1; never executed: return 1; | 0 | ||||||||||||||||||||||||||||||||||||
574 | return 0; never executed: return 0; | 0 | ||||||||||||||||||||||||||||||||||||
575 | } | - | ||||||||||||||||||||||||||||||||||||
576 | - | |||||||||||||||||||||||||||||||||||||
577 | void QAccessibleQuickItem::addSelection(int /* startOffset */, int /* endOffset */) | - | ||||||||||||||||||||||||||||||||||||
578 | { | - | ||||||||||||||||||||||||||||||||||||
579 | - | |||||||||||||||||||||||||||||||||||||
580 | } | - | ||||||||||||||||||||||||||||||||||||
581 | void QAccessibleQuickItem::removeSelection(int /* selectionIndex */) | - | ||||||||||||||||||||||||||||||||||||
582 | { | - | ||||||||||||||||||||||||||||||||||||
583 | - | |||||||||||||||||||||||||||||||||||||
584 | } | - | ||||||||||||||||||||||||||||||||||||
585 | void QAccessibleQuickItem::setSelection(int /* selectionIndex */, int /* startOffset */, int /* endOffset */) | - | ||||||||||||||||||||||||||||||||||||
586 | { | - | ||||||||||||||||||||||||||||||||||||
587 | - | |||||||||||||||||||||||||||||||||||||
588 | } | - | ||||||||||||||||||||||||||||||||||||
589 | - | |||||||||||||||||||||||||||||||||||||
590 | - | |||||||||||||||||||||||||||||||||||||
591 | #endif // accessibility | - | ||||||||||||||||||||||||||||||||||||
592 | - | |||||||||||||||||||||||||||||||||||||
593 | QT_END_NAMESPACE | - | ||||||||||||||||||||||||||||||||||||
Source code | Switch to Preprocessed file |