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/qquickwebenginescript.h | |
parent | adaf70ce2b61590180207af34ad47ddd6fabafc2 (diff) | |
download | qtwebengine-cfda1a04cb7a0b389fc067fe2cccdbde93ebde27.tar.gz |
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/qquickwebenginescript.h')
-rw-r--r-- | src/webengine/api/qquickwebenginescript.h | 47 |
1 files changed, 22 insertions, 25 deletions
diff --git a/src/webengine/api/qquickwebenginescript.h b/src/webengine/api/qquickwebenginescript.h index d5c4310db..a5f20bc50 100644 --- a/src/webengine/api/qquickwebenginescript.h +++ b/src/webengine/api/qquickwebenginescript.h @@ -40,24 +40,26 @@ #ifndef QQUICKWEBENGINESCRIPT_H #define QQUICKWEBENGINESCRIPT_H -#include <QtCore/qobject.h> #include <QtCore/qurl.h> +#include <QtCore/QSharedDataPointer> #include <QtWebEngine/qtwebengineglobal.h> +namespace QtWebEngineCore { +class UserScript; +} // namespace + QT_BEGIN_NAMESPACE -class QQuickWebEngineScriptPrivate; class QQuickWebEngineView; -class Q_WEBENGINE_EXPORT QQuickWebEngineScript : public QObject +class Q_WEBENGINE_EXPORT QQuickWebEngineScript { - Q_OBJECT - Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged FINAL) - Q_PROPERTY(QUrl sourceUrl READ sourceUrl WRITE setSourceUrl NOTIFY sourceUrlChanged FINAL) - Q_PROPERTY(QString sourceCode READ sourceCode WRITE setSourceCode NOTIFY sourceCodeChanged FINAL) - Q_PROPERTY(InjectionPoint injectionPoint READ injectionPoint WRITE setInjectionPoint NOTIFY injectionPointChanged FINAL) - Q_PROPERTY(ScriptWorldId worldId READ worldId WRITE setWorldId NOTIFY worldIdChanged FINAL) - Q_PROPERTY(bool runOnSubframes READ runOnSubframes WRITE setRunOnSubframes NOTIFY runOnSubframesChanged FINAL) - + Q_GADGET + Q_PROPERTY(QString name READ name WRITE setName FINAL) + Q_PROPERTY(QUrl sourceUrl READ sourceUrl WRITE setSourceUrl FINAL) + Q_PROPERTY(QString sourceCode READ sourceCode WRITE setSourceCode FINAL) + Q_PROPERTY(InjectionPoint injectionPoint READ injectionPoint WRITE setInjectionPoint FINAL) + Q_PROPERTY(ScriptWorldId worldId READ worldId WRITE setWorldId FINAL) + Q_PROPERTY(bool runOnSubframes READ runOnSubframes WRITE setRunOnSubframes FINAL) public: enum InjectionPoint { @@ -74,9 +76,12 @@ public: }; Q_ENUM(ScriptWorldId) - explicit QQuickWebEngineScript(QObject *parent = Q_NULLPTR); + explicit QQuickWebEngineScript(); ~QQuickWebEngineScript(); - Q_INVOKABLE QString toString() const; + QQuickWebEngineScript(const QQuickWebEngineScript &other); + QQuickWebEngineScript &operator=(const QQuickWebEngineScript &other); + bool operator==(const QQuickWebEngineScript &other) const; + inline bool operator!=(const QQuickWebEngineScript &other) const { return !operator==(other); } QString name() const; QUrl sourceUrl() const; @@ -85,6 +90,7 @@ public: ScriptWorldId worldId() const; bool runOnSubframes() const; + Q_INVOKABLE QString toString() const; Q_INVOKABLE void setName(const QString &name); Q_INVOKABLE void setSourceUrl(const QUrl &url); Q_INVOKABLE void setSourceCode(const QString &code); @@ -92,22 +98,13 @@ public: Q_INVOKABLE void setWorldId(ScriptWorldId scriptWorldId); Q_INVOKABLE void setRunOnSubframes(bool on); -Q_SIGNALS: - void nameChanged(const QString &name); - void sourceUrlChanged(const QUrl &url); - void sourceCodeChanged(const QString &code); - void injectionPointChanged(InjectionPoint injectionPoint); - void worldIdChanged(ScriptWorldId scriptWorldId); - void runOnSubframesChanged(bool on); - -protected: - void timerEvent(QTimerEvent *e) override; private: + QQuickWebEngineScript(const QtWebEngineCore::UserScript &); + QSharedDataPointer<QtWebEngineCore::UserScript> d; friend class QQuickWebEngineProfilePrivate; friend class QQuickWebEngineViewPrivate; - Q_DECLARE_PRIVATE(QQuickWebEngineScript) - QScopedPointer<QQuickWebEngineScriptPrivate> d_ptr; + friend class QQuickWebEngineScriptCollectionPrivate; }; QT_END_NAMESPACE |