diff options
author | Michal Klocek <michal.klocek@qt.io> | 2020-08-20 07:17:23 +0200 |
---|---|---|
committer | Michal Klocek <michal.klocek@qt.io> | 2020-09-22 11:05:20 +0200 |
commit | cfda1a04cb7a0b389fc067fe2cccdbde93ebde27 (patch) | |
tree | 4c96c3857f8b87ab51560c738362fc249d25c826 /src/webengine/api/qquickwebenginescriptcollection.h | |
parent | adaf70ce2b61590180207af34ad47ddd6fabafc2 (diff) |
Introduce qml script collection and make webscript as basic type
In widget apis webenginescripts are value types and are managed
by webenginescriptcollection. Introduce same concept in qml and
make qquickwebenginescript a value type and reuse core userscript
as private implementation. Rewrite webenginscript list handling.
This patch is half baked since it does not include docs and tests
for new api, however aim is to move script classes to core and reuse
those in qml land. Therefore, new class introduced here is going to
be removed in follow up patches, so all the missing parts will be added
later. A new way of managing scripts in qml is as follows:
* using collection with javascript dictionaries
var script = { name: "FOO"
sourceUrl: Qt.resolvedUrl("foo.js"),
injectionPoint: WebEngineScript.DocumentReady }
webEngineView.userScripts.collection = [ script1, script2 ];
* using collection with webscript basic type
var script = WebEngine.script()
script.name = "FOO"
webEngineView.userScripts.collection = [ script ];
* using fine grain user script collection api with basic type
var script = WebEngine.script()
script.name = "FOO"
webEngineView.userScripts.insert(script)
Of course new api can be extended and we can provide more convince
overloads.
Note the main motivation here is to enable reuse webenginescript object
created in c++ land, which is now passed as value in follow up
patches.
This changes reuses private apis of qml and will most likely require
further changes when QTBUG-82443 is completed.
[ChangeLog] WebEngineScript is a basic value type in qml, it is no
longer declarative way of creating it, instead use WebEngine.script()
Change-Id: I6a0ac3607e4522ccaefcec0a7d2986577d7e7024
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Diffstat (limited to 'src/webengine/api/qquickwebenginescriptcollection.h')
-rw-r--r-- | src/webengine/api/qquickwebenginescriptcollection.h | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/src/webengine/api/qquickwebenginescriptcollection.h b/src/webengine/api/qquickwebenginescriptcollection.h new file mode 100644 index 000000000..e2fd8488d --- /dev/null +++ b/src/webengine/api/qquickwebenginescriptcollection.h @@ -0,0 +1,93 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the QtWebEngine module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QQUICKWEBENGINESCRIPTCOLLECTION_H +#define QQUICKWEBENGINESCRIPTCOLLECTION_H + +#include <QtWebEngine/qtwebengineglobal.h> +#include "qquickwebenginescript.h" +#include <QtCore/qscopedpointer.h> +#include <QtCore/qlist.h> +#include <QtCore/qset.h> +#include <QtCore/QObject> +#include <QtQml/QJSValue> + +QT_BEGIN_NAMESPACE +class QQuickWebEngineScriptCollectionPrivate; + +class Q_WEBENGINE_EXPORT QQuickWebEngineScriptCollection : public QObject +{ + Q_OBJECT +public: + Q_PROPERTY(QJSValue collection READ collection WRITE setCollection NOTIFY collectionChanged) + ~QQuickWebEngineScriptCollection(); + bool isEmpty() const { return !count(); } + int count() const; + inline int size() const { return count(); } + bool contains(const QQuickWebEngineScript &value) const; + + Q_INVOKABLE QQuickWebEngineScript findScript(const QString &name) const; + Q_INVOKABLE QList<QQuickWebEngineScript> findScripts(const QString &name) const; + + Q_INVOKABLE void insert(const QQuickWebEngineScript &); + Q_INVOKABLE void insert(const QList<QQuickWebEngineScript> &list); + + Q_INVOKABLE bool remove(const QQuickWebEngineScript &); + Q_INVOKABLE void clear(); + + QJSValue collection() const; + void setCollection(const QJSValue &scripts); + + QList<QQuickWebEngineScript> toList() const; +Q_SIGNALS: + void collectionChanged(); + +private: + Q_DISABLE_COPY(QQuickWebEngineScriptCollection) + QQuickWebEngineScriptCollection(QQuickWebEngineScriptCollectionPrivate *); + QScopedPointer<QQuickWebEngineScriptCollectionPrivate> d; + friend class QQuickWebEngineProfilePrivate; + friend class QQuickWebEngineViewPrivate; +}; + +QT_END_NAMESPACE + +Q_DECLARE_METATYPE(QQuickWebEngineScriptCollection *) + +#endif // QWEBENGINESCRIPTCOLLECTION_H |