1 /****************************************************************************
3 ** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
4 ** Contact: http://www.qt-project.org/
6 ** This file is part of the QtQml module of the Qt Toolkit.
8 ** $QT_BEGIN_LICENSE:LGPL$
9 ** GNU Lesser General Public License Usage
10 ** This file may be used under the terms of the GNU Lesser General Public
11 ** License version 2.1 as published by the Free Software Foundation and
12 ** appearing in the file LICENSE.LGPL included in the packaging of this
13 ** file. Please review the following information to ensure the GNU Lesser
14 ** General Public License version 2.1 requirements will be met:
15 ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
17 ** In addition, as a special exception, Nokia gives you certain additional
18 ** rights. These rights are described in the Nokia Qt LGPL Exception
19 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
21 ** GNU General Public License Usage
22 ** Alternatively, this file may be used under the terms of the GNU General
23 ** Public License version 3.0 as published by the Free Software Foundation
24 ** and appearing in the file LICENSE.GPL included in the packaging of this
25 ** file. Please review the following information to ensure the GNU General
26 ** Public License version 3.0 requirements will be met:
27 ** http://www.gnu.org/copyleft/gpl.html.
30 ** Alternatively, this file may be used in accordance with the terms and
31 ** conditions contained in a signed written agreement between you and Nokia.
40 ****************************************************************************/
42 #include <private/qqmlglobal_p.h>
44 #include <QtCore/qvariant.h>
45 #include <QtCore/qstringlist.h>
46 #include <QtCore/qdebug.h>
50 QQmlValueTypeProvider::QQmlValueTypeProvider()
55 QQmlValueType *QQmlValueTypeProvider::createValueType(int type)
57 QQmlValueType *value = 0;
59 QQmlValueTypeProvider *p = this;
61 if (p->create(type, value))
63 } while ((p = p->next));
68 bool QQmlValueTypeProvider::initValueType(int type, void *data, size_t n)
72 QQmlValueTypeProvider *p = this;
74 if (p->init(type, data, n))
76 } while ((p = p->next));
81 bool QQmlValueTypeProvider::destroyValueType(int type, void *data, size_t n)
85 QQmlValueTypeProvider *p = this;
87 if (p->destroy(type, data, n))
89 } while ((p = p->next));
94 bool QQmlValueTypeProvider::copyValueType(int type, const void *src, void *dst, size_t n)
99 QQmlValueTypeProvider *p = this;
101 if (p->copy(type, src, dst, n))
103 } while ((p = p->next));
108 QVariant QQmlValueTypeProvider::createValueType(int type, int argc, const void *argv[])
112 QQmlValueTypeProvider *p = this;
114 if (p->create(type, argc, argv, &v))
116 } while ((p = p->next));
121 bool QQmlValueTypeProvider::createValueFromString(int type, const QString &s, void *data, size_t n)
125 QQmlValueTypeProvider *p = this;
127 if (p->createFromString(type, s, data, n))
129 } while ((p = p->next));
134 bool QQmlValueTypeProvider::createStringFromValue(int type, const void *data, QString *s)
139 QQmlValueTypeProvider *p = this;
141 if (p->createStringFrom(type, data, s))
143 } while ((p = p->next));
148 QVariant QQmlValueTypeProvider::createVariantFromString(const QString &s)
152 QQmlValueTypeProvider *p = this;
154 if (p->variantFromString(s, &v))
156 } while ((p = p->next));
158 // Return a variant containing the string itself
162 QVariant QQmlValueTypeProvider::createVariantFromString(int type, const QString &s, bool *ok)
166 QQmlValueTypeProvider *p = this;
168 if (p->variantFromString(type, s, &v)) {
172 } while ((p = p->next));
178 QVariant QQmlValueTypeProvider::createVariantFromJsObject(int type, QQmlV8Handle obj, QV8Engine *e, bool *ok)
182 QQmlValueTypeProvider *p = this;
184 if (p->variantFromJsObject(type, obj, e, &v)) {
188 } while ((p = p->next));
194 bool QQmlValueTypeProvider::equalValueType(int type, const void *lhs, const void *rhs, size_t rhsSize)
199 QQmlValueTypeProvider *p = this;
201 if (p->equal(type, lhs, rhs, rhsSize))
203 } while ((p = p->next));
208 bool QQmlValueTypeProvider::storeValueType(int type, const void *src, void *dst, size_t dstSize)
213 QQmlValueTypeProvider *p = this;
215 if (p->store(type, src, dst, dstSize))
217 } while ((p = p->next));
222 bool QQmlValueTypeProvider::readValueType(int srcType, const void *src, size_t srcSize, int dstType, void *dst)
227 QQmlValueTypeProvider *p = this;
229 if (p->read(srcType, src, srcSize, dstType, dst))
231 } while ((p = p->next));
236 bool QQmlValueTypeProvider::writeValueType(int type, const void *src, void *dst, size_t n)
241 QQmlValueTypeProvider *p = this;
243 if (p->write(type, src, dst, n))
245 } while ((p = p->next));
250 bool QQmlValueTypeProvider::create(int, QQmlValueType *&) { return false; }
251 bool QQmlValueTypeProvider::init(int, void *, size_t) { return false; }
252 bool QQmlValueTypeProvider::destroy(int, void *, size_t) { return false; }
253 bool QQmlValueTypeProvider::copy(int, const void *, void *, size_t) { return false; }
254 bool QQmlValueTypeProvider::create(int, int, const void *[], QVariant *) { return false; }
255 bool QQmlValueTypeProvider::createFromString(int, const QString &, void *, size_t) { return false; }
256 bool QQmlValueTypeProvider::createStringFrom(int, const void *, QString *) { return false; }
257 bool QQmlValueTypeProvider::variantFromString(const QString &, QVariant *) { return false; }
258 bool QQmlValueTypeProvider::variantFromString(int, const QString &, QVariant *) { return false; }
259 bool QQmlValueTypeProvider::variantFromJsObject(int, QQmlV8Handle, QV8Engine *, QVariant *) { return false; }
260 bool QQmlValueTypeProvider::equal(int, const void *, const void *, size_t) { return false; }
261 bool QQmlValueTypeProvider::store(int, const void *, void *, size_t) { return false; }
262 bool QQmlValueTypeProvider::read(int, const void *, size_t, int, void *) { return false; }
263 bool QQmlValueTypeProvider::write(int, const void *, void *, size_t) { return false; }
265 static QQmlValueTypeProvider *valueTypeProvider = 0;
267 static QQmlValueTypeProvider **getValueTypeProvider(void)
269 if (valueTypeProvider == 0) {
270 static QQmlValueTypeProvider nullValueTypeProvider;
271 valueTypeProvider = &nullValueTypeProvider;
274 return &valueTypeProvider;
277 Q_QML_PRIVATE_EXPORT void QQml_addValueTypeProvider(QQmlValueTypeProvider *newProvider)
279 static QQmlValueTypeProvider **providerPtr = getValueTypeProvider();
280 newProvider->next = *providerPtr;
281 *providerPtr = newProvider;
284 Q_AUTOTEST_EXPORT QQmlValueTypeProvider *QQml_valueTypeProvider(void)
286 static QQmlValueTypeProvider **providerPtr = getValueTypeProvider();
291 QVariant QQmlColorProvider::colorFromString(const QString &, bool *ok) { if (ok) *ok = false; return QVariant(); }
292 unsigned QQmlColorProvider::rgbaFromString(const QString &, bool *ok) { if (ok) *ok = false; return 0; }
293 QVariant QQmlColorProvider::fromRgbF(double, double, double, double) { return QVariant(); }
294 QVariant QQmlColorProvider::fromHslF(double, double, double, double) { return QVariant(); }
295 QVariant QQmlColorProvider::lighter(const QVariant &, qreal) { return QVariant(); }
296 QVariant QQmlColorProvider::darker(const QVariant &, qreal) { return QVariant(); }
297 QVariant QQmlColorProvider::tint(const QVariant &, const QVariant &) { return QVariant(); }
299 static QQmlColorProvider *colorProvider = 0;
301 Q_QML_PRIVATE_EXPORT QQmlColorProvider *QQml_setColorProvider(QQmlColorProvider *newProvider)
303 QQmlColorProvider *old = colorProvider;
304 colorProvider = newProvider;
308 static QQmlColorProvider **getColorProvider(void)
310 if (colorProvider == 0) {
311 qWarning() << "Warning: QQml_colorProvider: no color provider has been set!";
312 static QQmlColorProvider nullColorProvider;
313 colorProvider = &nullColorProvider;
316 return &colorProvider;
319 Q_AUTOTEST_EXPORT QQmlColorProvider *QQml_colorProvider(void)
321 static QQmlColorProvider **providerPtr = getColorProvider();
326 QObject *QQmlGuiProvider::application(QObject *) { return 0; }
327 QStringList QQmlGuiProvider::fontFamilies() { return QStringList(); }
328 bool QQmlGuiProvider::openUrlExternally(QUrl &) { return false; }
330 QObject *QQmlGuiProvider::inputMethod()
332 // We don't have any input method code by default
333 QObject *o = new QObject();
334 o->setObjectName(QString::fromLatin1("No inputMethod available"));
338 static QQmlGuiProvider *guiProvider = 0;
340 Q_QML_PRIVATE_EXPORT QQmlGuiProvider *QQml_setGuiProvider(QQmlGuiProvider *newProvider)
342 QQmlGuiProvider *old = guiProvider;
343 guiProvider = newProvider;
347 static QQmlGuiProvider **getGuiProvider(void)
349 if (guiProvider == 0) {
350 qWarning() << "Warning: QQml_guiProvider: no GUI provider has been set!";
351 static QQmlGuiProvider nullGuiProvider;
352 guiProvider = &nullGuiProvider;
358 Q_AUTOTEST_EXPORT QQmlGuiProvider *QQml_guiProvider(void)
360 static QQmlGuiProvider **providerPtr = getGuiProvider();