From 5f68d32db3b57ae78b8e091eb3c642325dc7b187 Mon Sep 17 00:00:00 2001 From: Skycoder42 Date: Wed, 20 Jun 2018 00:42:50 +0200 Subject: [PATCH] added more qml service creators --- src/imports/mvvmcore/plugins.qmltypes | 26 ++++++++++++++++++++ src/imports/mvvmcore/qqmlserviceregistry.cpp | 20 +++++++++++++++ src/imports/mvvmcore/qqmlserviceregistry.h | 2 ++ 3 files changed, 48 insertions(+) diff --git a/src/imports/mvvmcore/plugins.qmltypes b/src/imports/mvvmcore/plugins.qmltypes index 07305d4..8ab2e16 100644 --- a/src/imports/mvvmcore/plugins.qmltypes +++ b/src/imports/mvvmcore/plugins.qmltypes @@ -450,6 +450,32 @@ Module { type: "bool" Parameter { name: "iid"; type: "string" } } + Method { + name: "registerObject" + Parameter { name: "object"; type: "QObject"; isPointer: true } + Parameter { name: "scope"; type: "QtMvvm::QQmlServiceRegistry::DestructionScope" } + Parameter { name: "weak"; type: "bool" } + } + Method { + name: "registerObject" + Parameter { name: "object"; type: "QObject"; isPointer: true } + Parameter { name: "scope"; type: "QtMvvm::QQmlServiceRegistry::DestructionScope" } + } + Method { + name: "registerObject" + Parameter { name: "object"; type: "QObject"; isPointer: true } + } + Method { + name: "registerObject" + Parameter { name: "iid"; type: "string" } + Parameter { name: "function"; type: "QJSValue" } + Parameter { name: "weak"; type: "bool" } + } + Method { + name: "registerObject" + Parameter { name: "iid"; type: "string" } + Parameter { name: "function"; type: "QJSValue" } + } Method { name: "registerObject" Parameter { name: "componentUrl"; type: "QUrl" } diff --git a/src/imports/mvvmcore/qqmlserviceregistry.cpp b/src/imports/mvvmcore/qqmlserviceregistry.cpp index 113773c..5237dcf 100644 --- a/src/imports/mvvmcore/qqmlserviceregistry.cpp +++ b/src/imports/mvvmcore/qqmlserviceregistry.cpp @@ -12,6 +12,26 @@ bool QQmlServiceRegistry::isRegistered(const QString &iid) const return ServiceRegistry::instance()->isRegistered(iid.toUtf8()); } +void QQmlServiceRegistry::registerObject(QObject *object, DestructionScope scope, bool weak) +{ + ServiceRegistry::instance()->registerService(__helpertypes::InjectablePrefix + object->metaObject()->className(), + [object](const QObjectList &) { + return object; + }, {}, static_cast(scope), weak); +} + +void QQmlServiceRegistry::registerObject(const QString &iid, const QJSValue &function, bool weak) +{ + if(!function.isCallable()) { + qmlWarning(this) << "function must be callable"; + return; + } + ServiceRegistry::instance()->registerService(iid.toUtf8(), [function](const QObjectList &) { + auto fn = function; + return fn.call().toQObject(); + }, {}, ServiceRegistry::DestroyOnAppQuit, weak); +} + void QQmlServiceRegistry::registerObject(const QUrl &componentUrl, bool weak) { ServiceRegistry::instance()->registerService(componentUrl.toString().toUtf8(), [this, componentUrl](const QObjectList &) -> QObject* { diff --git a/src/imports/mvvmcore/qqmlserviceregistry.h b/src/imports/mvvmcore/qqmlserviceregistry.h index 0c5ff0a..4f09423 100644 --- a/src/imports/mvvmcore/qqmlserviceregistry.h +++ b/src/imports/mvvmcore/qqmlserviceregistry.h @@ -28,6 +28,8 @@ public: Q_INVOKABLE bool isRegistered(const QString &iid) const; + Q_INVOKABLE void registerObject(QObject *object, QtMvvm::QQmlServiceRegistry::DestructionScope scope = DestroyOnAppQuit, bool weak = false); + Q_INVOKABLE void registerObject(const QString &iid, const QJSValue &function, bool weak = false); Q_INVOKABLE void registerObject(const QUrl &componentUrl, bool weak = false); Q_INVOKABLE QObject *service(const QString &iid);