OpenCoverage

qquickdesignersupportitems.cpp

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/qtdeclarative/src/qtdeclarative/src/quick/designer/qquickdesignersupportitems.cpp
Source codeSwitch to Preprocessed file
LineSourceCount
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 "qquickdesignersupportitems_p.h"-
41#include "qquickdesignersupportproperties_p.h"-
42-
43#include <private/qabstractanimation_p.h>-
44#include <private/qobject_p.h>-
45#include <private/qquickbehavior_p.h>-
46#include <private/qquicktext_p.h>-
47#include <private/qquicktextinput_p.h>-
48#include <private/qquicktextedit_p.h>-
49#include <private/qquicktransition_p.h>-
50#include <private/qquickloader_p.h>-
51-
52#include <private/qquickanimation_p.h>-
53#include <private/qqmlmetatype_p.h>-
54#include <private/qqmltimer_p.h>-
55-
56QT_BEGIN_NAMESPACE-
57-
58static void (*fixResourcePathsForObjectCallBack)(QObject*) = nullptr;-
59-
60static void stopAnimation(QObject *object)-
61{-
62 if (object == nullptr)
object == nullptrDescription
TRUEnever evaluated
FALSEevaluated 6 times by 1 test
Evaluated by:
  • tst_qquickdesignersupport
0-6
63 return;
never executed: return;
0
64-
65 QQuickTransition *transition = qobject_cast<QQuickTransition*>(object);-
66 QQuickAbstractAnimation *animation = qobject_cast<QQuickAbstractAnimation*>(object);-
67 QQmlTimer *timer = qobject_cast<QQmlTimer*>(object);-
68 if (transition) {
transitionDescription
TRUEnever evaluated
FALSEevaluated 6 times by 1 test
Evaluated by:
  • tst_qquickdesignersupport
0-6
69 transition->setFromState(QString());-
70 transition->setToState(QString());-
71 } else if (animation) {
never executed: end of block
animationDescription
TRUEnever evaluated
FALSEevaluated 6 times by 1 test
Evaluated by:
  • tst_qquickdesignersupport
0-6
72// QQuickScriptAction *scriptAimation = qobject_cast<QQuickScriptAction*>(animation);-
73// if (scriptAimation) FIXME-
74// scriptAimation->setScript(QQmlScriptString());-
75 animation->setLoops(1);-
76 animation->complete();-
77 animation->setDisableUserControl();-
78 } else if (timer) {
never executed: end of block
timerDescription
TRUEnever evaluated
FALSEevaluated 6 times by 1 test
Evaluated by:
  • tst_qquickdesignersupport
0-6
79 timer->blockSignals(true);-
80 }
never executed: end of block
0
81}
executed 6 times by 1 test: end of block
Executed by:
  • tst_qquickdesignersupport
6
82-
83static void makeLoaderSynchronous(QObject *object)-
84{-
85 if (QQuickLoader *loader = qobject_cast<QQuickLoader*>(object))
QQuickLoader *...ader*>(object)Description
TRUEnever evaluated
FALSEevaluated 6 times by 1 test
Evaluated by:
  • tst_qquickdesignersupport
0-6
86 loader->setAsynchronous(false);
never executed: loader->setAsynchronous(false);
0
87}
executed 6 times by 1 test: end of block
Executed by:
  • tst_qquickdesignersupport
6
88-
89static void allSubObjects(QObject *object, QObjectList &objectList)-
90{-
91 // don't add null pointer and stop if the object is already in the list-
92 if (!object || objectList.contains(object))
!objectDescription
TRUEevaluated 6 times by 1 test
Evaluated by:
  • tst_qquickdesignersupport
FALSEevaluated 6 times by 1 test
Evaluated by:
  • tst_qquickdesignersupport
objectList.contains(object)Description
TRUEnever evaluated
FALSEevaluated 6 times by 1 test
Evaluated by:
  • tst_qquickdesignersupport
0-6
93 return;
executed 6 times by 1 test: return;
Executed by:
  • tst_qquickdesignersupport
6
94-
95 objectList.append(object);-
96-
97 const QMetaObject *mo = object->metaObject();-
98-
99 QByteArrayList deferredPropertyNames;-
100 const int namesIndex = mo->indexOfClassInfo("DeferredPropertyNames");-
101 if (namesIndex != -1) {
namesIndex != -1Description
TRUEnever evaluated
FALSEevaluated 6 times by 1 test
Evaluated by:
  • tst_qquickdesignersupport
0-6
102 QMetaClassInfo classInfo = mo->classInfo(namesIndex);-
103 deferredPropertyNames = QByteArray(classInfo.value()).split(',');-
104 }
never executed: end of block
0
105-
106 for (int index = QObject::staticMetaObject.propertyOffset();-
107 index < object->metaObject()->propertyCount();
index < object...ropertyCount()Description
TRUEevaluated 254 times by 1 test
Evaluated by:
  • tst_qquickdesignersupport
FALSEevaluated 6 times by 1 test
Evaluated by:
  • tst_qquickdesignersupport
6-254
108 index++) {-
109-
110 QMetaProperty metaProperty = object->metaObject()->property(index);-
111-
112 if (deferredPropertyNames.contains(metaProperty.name()))
deferredProper...operty.name())Description
TRUEnever evaluated
FALSEevaluated 254 times by 1 test
Evaluated by:
  • tst_qquickdesignersupport
0-254
113 continue;
never executed: continue;
0
114-
115 // search recursive in property objects-
116 if (metaProperty.isReadable()
metaProperty.isReadable()Description
TRUEevaluated 254 times by 1 test
Evaluated by:
  • tst_qquickdesignersupport
FALSEnever evaluated
0-254
117 && metaProperty.isWritable()
metaProperty.isWritable()Description
TRUEevaluated 140 times by 1 test
Evaluated by:
  • tst_qquickdesignersupport
FALSEevaluated 114 times by 1 test
Evaluated by:
  • tst_qquickdesignersupport
114-140
118 && QQmlMetaType::isQObject(metaProperty.userType())) {
QQmlMetaType::...ty.userType())Description
TRUEevaluated 12 times by 1 test
Evaluated by:
  • tst_qquickdesignersupport
FALSEevaluated 128 times by 1 test
Evaluated by:
  • tst_qquickdesignersupport
12-128
119 if (qstrcmp(metaProperty.name(), "parent")) {
qstrcmp(metaPr...e(), "parent")Description
TRUEevaluated 6 times by 1 test
Evaluated by:
  • tst_qquickdesignersupport
FALSEevaluated 6 times by 1 test
Evaluated by:
  • tst_qquickdesignersupport
6
120 QObject *propertyObject = QQmlMetaType::toQObject(metaProperty.read(object));-
121 allSubObjects(propertyObject, objectList);-
122 }
executed 6 times by 1 test: end of block
Executed by:
  • tst_qquickdesignersupport
6
123-
124 }
executed 12 times by 1 test: end of block
Executed by:
  • tst_qquickdesignersupport
12
125-
126 // search recursive in property object lists-
127 if (metaProperty.isReadable()
metaProperty.isReadable()Description
TRUEevaluated 254 times by 1 test
Evaluated by:
  • tst_qquickdesignersupport
FALSEnever evaluated
0-254
128 && QQmlMetaType::isList(metaProperty.userType())) {
QQmlMetaType::...ty.userType())Description
TRUEevaluated 42 times by 1 test
Evaluated by:
  • tst_qquickdesignersupport
FALSEevaluated 212 times by 1 test
Evaluated by:
  • tst_qquickdesignersupport
42-212
129 QQmlListReference list(object, metaProperty.name());-
130 if (list.canCount() && list.canAt()) {
list.canCount()Description
TRUEevaluated 42 times by 1 test
Evaluated by:
  • tst_qquickdesignersupport
FALSEnever evaluated
list.canAt()Description
TRUEevaluated 42 times by 1 test
Evaluated by:
  • tst_qquickdesignersupport
FALSEnever evaluated
0-42
131 for (int i = 0; i < list.count(); i++) {
i < list.count()Description
TRUEnever evaluated
FALSEevaluated 42 times by 1 test
Evaluated by:
  • tst_qquickdesignersupport
0-42
132 QObject *propertyObject = list.at(i);-
133 allSubObjects(propertyObject, objectList);-
134-
135 }
never executed: end of block
0
136 }
executed 42 times by 1 test: end of block
Executed by:
  • tst_qquickdesignersupport
42
137 }
executed 42 times by 1 test: end of block
Executed by:
  • tst_qquickdesignersupport
42
138 }
executed 254 times by 1 test: end of block
Executed by:
  • tst_qquickdesignersupport
254
139-
140 // search recursive in object children list-
141 for (QObject *childObject : object->children()) {-
142 allSubObjects(childObject, objectList);-
143 }
never executed: end of block
0
144-
145 // search recursive in quick item childItems list-
146 QQuickItem *quickItem = qobject_cast<QQuickItem*>(object);-
147 if (quickItem) {
quickItemDescription
TRUEevaluated 6 times by 1 test
Evaluated by:
  • tst_qquickdesignersupport
FALSEnever evaluated
0-6
148 const auto childItems = quickItem->childItems();-
149 for (QQuickItem *childItem : childItems)-
150 allSubObjects(childItem, objectList);
never executed: allSubObjects(childItem, objectList);
0
151 }
executed 6 times by 1 test: end of block
Executed by:
  • tst_qquickdesignersupport
6
152}
executed 6 times by 1 test: end of block
Executed by:
  • tst_qquickdesignersupport
6
153-
154void QQuickDesignerSupportItems::tweakObjects(QObject *object)-
155{-
156 QObjectList objectList;-
157 allSubObjects(object, objectList);-
158 for (QObject* childObject : qAsConst(objectList)) {-
159 stopAnimation(childObject);-
160 makeLoaderSynchronous(childObject);-
161 if (fixResourcePathsForObjectCallBack)
fixResourcePat...ObjectCallBackDescription
TRUEevaluated 2 times by 1 test
Evaluated by:
  • tst_qquickdesignersupport
FALSEevaluated 4 times by 1 test
Evaluated by:
  • tst_qquickdesignersupport
2-4
162 fixResourcePathsForObjectCallBack(childObject);
executed 2 times by 1 test: fixResourcePathsForObjectCallBack(childObject);
Executed by:
  • tst_qquickdesignersupport
2
163 }
executed 6 times by 1 test: end of block
Executed by:
  • tst_qquickdesignersupport
6
164}
executed 6 times by 1 test: end of block
Executed by:
  • tst_qquickdesignersupport
6
165-
166static QObject *createDummyWindow(QQmlEngine *engine)-
167{-
168 QQmlComponent component(engine, QUrl(QStringLiteral("qrc:/qtquickplugin/mockfiles/Window.qml")));
never executed: return qstring_literal_temp;
0
169 return component.create();
never executed: return component.create();
0
170}-
171-
172static bool isWindowMetaObject(const QMetaObject *metaObject)-
173{-
174 if (metaObject) {
metaObjectDescription
TRUEevaluated 4 times by 1 test
Evaluated by:
  • tst_qquickdesignersupport
FALSEevaluated 2 times by 1 test
Evaluated by:
  • tst_qquickdesignersupport
2-4
175 if (metaObject->className() == QByteArrayLiteral("QWindow"))
executed 4 times by 1 test: return ba;
Executed by:
  • tst_qquickdesignersupport
metaObject->cl...eturn ba; }())Description
TRUEnever evaluated
FALSEevaluated 4 times by 1 test
Evaluated by:
  • tst_qquickdesignersupport
0-4
176 return true;
never executed: return true;
0
177-
178 return isWindowMetaObject(metaObject->superClass());
executed 4 times by 1 test: return isWindowMetaObject(metaObject->superClass());
Executed by:
  • tst_qquickdesignersupport
4
179 }-
180-
181 return false;
executed 2 times by 1 test: return false;
Executed by:
  • tst_qquickdesignersupport
2
182}-
183-
184static bool isWindow(QObject *object) {-
185 if (object)
objectDescription
TRUEevaluated 2 times by 1 test
Evaluated by:
  • tst_qquickdesignersupport
FALSEnever evaluated
0-2
186 return isWindowMetaObject(object->metaObject());
executed 2 times by 1 test: return isWindowMetaObject(object->metaObject());
Executed by:
  • tst_qquickdesignersupport
2
187-
188 return false;
never executed: return false;
0
189}-
190-
191static bool isCrashingType(const QQmlType &type)-
192{-
193 QString name = type.qmlTypeName();-
194-
195 if (type.qmlTypeName() == QLatin1String("QtMultimedia/MediaPlayer"))
type.qmlTypeNa.../MediaPlayer")Description
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • tst_qquickdesignersupport
0-2
196 return true;
never executed: return true;
0
197-
198 if (type.qmlTypeName() == QLatin1String("QtMultimedia/Audio"))
type.qmlTypeNa...imedia/Audio")Description
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • tst_qquickdesignersupport
0-2
199 return true;
never executed: return true;
0
200-
201 if (type.qmlTypeName() == QLatin1String("QtQuick.Controls/MenuItem"))
type.qmlTypeNa...ols/MenuItem")Description
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • tst_qquickdesignersupport
0-2
202 return true;
never executed: return true;
0
203-
204 if (type.qmlTypeName() == QLatin1String("QtQuick.Controls/Menu"))
type.qmlTypeNa...ontrols/Menu")Description
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • tst_qquickdesignersupport
0-2
205 return true;
never executed: return true;
0
206-
207 if (type.qmlTypeName() == QLatin1String("QtQuick/Timer"))
type.qmlTypeNa...tQuick/Timer")Description
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • tst_qquickdesignersupport
0-2
208 return true;
never executed: return true;
0
209-
210 return false;
executed 2 times by 1 test: return false;
Executed by:
  • tst_qquickdesignersupport
2
211}-
212-
213QObject *QQuickDesignerSupportItems::createPrimitive(const QString &typeName, int majorNumber, int minorNumber, QQmlContext *context)-
214{-
215 ComponentCompleteDisabler disableComponentComplete;-
216-
217 Q_UNUSED(disableComponentComplete)-
218-
219 QObject *object = nullptr;-
220 QQmlType type = QQmlMetaType::qmlType(typeName, majorNumber, minorNumber);-
221-
222 if (isCrashingType(type)) {
isCrashingType(type)Description
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • tst_qquickdesignersupport
0-2
223 object = new QObject;-
224 } else if (type.isValid()) {
never executed: end of block
type.isValid()Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • tst_qquickdesignersupport
FALSEnever evaluated
0-2
225 if ( type.isComposite()) {
type.isComposite()Description
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • tst_qquickdesignersupport
0-2
226 object = createComponent(type.sourceUrl(), context);-
227 } else
never executed: end of block
0
228 {-
229 if (type.typeName() == "QQmlComponent") {
type.typeName(...QQmlComponent"Description
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • tst_qquickdesignersupport
0-2
230 object = new QQmlComponent(context->engine(), nullptr);-
231 } else {
never executed: end of block
0
232 object = type.create();-
233 }
executed 2 times by 1 test: end of block
Executed by:
  • tst_qquickdesignersupport
2
234 }-
235-
236 if (isWindow(object)) {
isWindow(object)Description
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • tst_qquickdesignersupport
0-2
237 delete object;-
238 object = createDummyWindow(context->engine());-
239 }
never executed: end of block
0
240-
241 }
executed 2 times by 1 test: end of block
Executed by:
  • tst_qquickdesignersupport
2
242-
243 if (!object) {
!objectDescription
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • tst_qquickdesignersupport
0-2
244 qWarning() << "QuickDesigner: Cannot create an object of type"-
245 << QString::fromLatin1("%1 %2,%3").arg(typeName).arg(majorNumber).arg(minorNumber)-
246 << "- type isn't known to declarative meta type system";-
247 }
never executed: end of block
0
248-
249 tweakObjects(object);-
250-
251 if (object && QQmlEngine::contextForObject(object) == nullptr)
objectDescription
TRUEevaluated 2 times by 1 test
Evaluated by:
  • tst_qquickdesignersupport
FALSEnever evaluated
QQmlEngine::co...ct) == nullptrDescription
TRUEevaluated 2 times by 1 test
Evaluated by:
  • tst_qquickdesignersupport
FALSEnever evaluated
0-2
252 QQmlEngine::setContextForObject(object, context);
executed 2 times by 1 test: QQmlEngine::setContextForObject(object, context);
Executed by:
  • tst_qquickdesignersupport
2
253-
254 QQmlEngine::setObjectOwnership(object, QQmlEngine::CppOwnership);-
255-
256 return object;
executed 2 times by 1 test: return object;
Executed by:
  • tst_qquickdesignersupport
2
257}-
258-
259QObject *QQuickDesignerSupportItems::createComponent(const QUrl &componentUrl, QQmlContext *context)-
260{-
261 ComponentCompleteDisabler disableComponentComplete;-
262 Q_UNUSED(disableComponentComplete)-
263-
264 QQmlComponent component(context->engine(), componentUrl);-
265-
266 QObject *object = component.beginCreate(context);-
267 tweakObjects(object);-
268 component.completeCreate();-
269 QQmlEngine::setObjectOwnership(object, QQmlEngine::CppOwnership);-
270-
271 if (component.isError()) {
component.isError()Description
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • tst_qquickdesignersupport
0-2
272 qWarning() << "Error in:" << Q_FUNC_INFO << componentUrl;-
273 const auto errors = component.errors();-
274 for (const QQmlError &error : errors)-
275 qWarning() << error;
never executed: QMessageLogger(__FILE__, 275, __PRETTY_FUNCTION__).warning() << error;
0
276 }
never executed: end of block
0
277 return object;
executed 2 times by 1 test: return object;
Executed by:
  • tst_qquickdesignersupport
2
278}-
279-
280bool QQuickDesignerSupportItems::objectWasDeleted(QObject *object)-
281{-
282 return QObjectPrivate::get(object)->wasDeleted;
never executed: return QObjectPrivate::get(object)->wasDeleted;
0
283}-
284-
285void QQuickDesignerSupportItems::disableNativeTextRendering(QQuickItem *item)-
286{-
287 QQuickText *text = qobject_cast<QQuickText*>(item);-
288 if (text)
textDescription
TRUEnever evaluated
FALSEnever evaluated
0
289 text->setRenderType(QQuickText::QtRendering);
never executed: text->setRenderType(QQuickText::QtRendering);
0
290-
291 QQuickTextInput *textInput = qobject_cast<QQuickTextInput*>(item);-
292 if (textInput)
textInputDescription
TRUEnever evaluated
FALSEnever evaluated
0
293 textInput->setRenderType(QQuickTextInput::QtRendering);
never executed: textInput->setRenderType(QQuickTextInput::QtRendering);
0
294-
295 QQuickTextEdit *textEdit = qobject_cast<QQuickTextEdit*>(item);-
296 if (textEdit)
textEditDescription
TRUEnever evaluated
FALSEnever evaluated
0
297 textEdit->setRenderType(QQuickTextEdit::QtRendering);
never executed: textEdit->setRenderType(QQuickTextEdit::QtRendering);
0
298}
never executed: end of block
0
299-
300void QQuickDesignerSupportItems::disableTextCursor(QQuickItem *item)-
301{-
302 const auto childItems = item->childItems();-
303 for (QQuickItem *childItem : childItems)-
304 disableTextCursor(childItem);
never executed: disableTextCursor(childItem);
0
305-
306 QQuickTextInput *textInput = qobject_cast<QQuickTextInput*>(item);-
307 if (textInput)
textInputDescription
TRUEnever evaluated
FALSEnever evaluated
0
308 textInput->setCursorVisible(false);
never executed: textInput->setCursorVisible(false);
0
309-
310 QQuickTextEdit *textEdit = qobject_cast<QQuickTextEdit*>(item);-
311 if (textEdit)
textEditDescription
TRUEnever evaluated
FALSEnever evaluated
0
312 textEdit->setCursorVisible(false);
never executed: textEdit->setCursorVisible(false);
0
313}
never executed: end of block
0
314-
315void QQuickDesignerSupportItems::disableTransition(QObject *object)-
316{-
317 QQuickTransition *transition = qobject_cast<QQuickTransition*>(object);-
318 Q_ASSERT(transition);-
319 const QString invalidState = QLatin1String("invalidState");-
320 transition->setToState(invalidState);-
321 transition->setFromState(invalidState);-
322}
never executed: end of block
0
323-
324void QQuickDesignerSupportItems::disableBehaivour(QObject *object)-
325{-
326 QQuickBehavior* behavior = qobject_cast<QQuickBehavior*>(object);-
327 Q_ASSERT(behavior);-
328 behavior->setEnabled(false);-
329}
never executed: end of block
0
330-
331void QQuickDesignerSupportItems::stopUnifiedTimer()-
332{-
333 QUnifiedTimer::instance()->setSlowdownFactor(0.00001);-
334 QUnifiedTimer::instance()->setSlowModeEnabled(true);-
335}
never executed: end of block
0
336-
337void QQuickDesignerSupportItems::registerFixResourcePathsForObjectCallBack(void (*callback)(QObject *))-
338{-
339 fixResourcePathsForObjectCallBack = callback;-
340}
executed 2 times by 1 test: end of block
Executed by:
  • tst_qquickdesignersupport
2
341-
342QT_END_NAMESPACE-
343-
344-
Source codeSwitch to Preprocessed file

Generated by Squish Coco 4.2.0