diff --git a/doc/coreapp.dox b/doc/coreapp.dox
index 8756e13..2cf42c2 100644
--- a/doc/coreapp.dox
+++ b/doc/coreapp.dox
@@ -133,7 +133,7 @@ consideration where neccessary.
*/
/*!
-@fn QtMvvm::CoreApp::showDialog
+@fn QtMvvm::CoreApp::showDialog(const MessageConfig &)
@param config The configuration of the message to be shown
@returns A message result to keep track of the shown dialog
@@ -148,7 +148,7 @@ been closed.
*/
/*!
-@fn QtMvvm::CoreApp::safeCastInputType
+@fn QtMvvm::CoreApp::safeCastInputType(const QByteArray &, const QVariant &)
@param type The edit type the given value is supposed to be of
@param value The value to be cast to the type specified by the edit type
diff --git a/doc/qtmvvm.dox b/doc/qtmvvm.dox
index 096d6ce..4ea3ca9 100644
--- a/doc/qtmvvm.dox
+++ b/doc/qtmvvm.dox
@@ -54,8 +54,11 @@ The following list shows which classes belong to which Qt module, in alphabetica
Available Types
- @ref QtMvvm::MessageConfig "MessageConfig" (uncreatable)
- @ref QtMvvm::MessageResult "MessageResult" (uncreatable)
+- @ref QtMvvm::ProgressControl "ProgressControl" (uncreatable)
- MvvmBinding
- Message (singleton)
+- CoreApp (singleton)
+- ServiceRegistry (singleton)
- @ref QtMvvm::SettingsViewModel "SettingsViewModel" (uncreatable)
- @ref QtMvvm::ViewModel "ViewModel" (uncreatable)
*/
diff --git a/doc/serviceregistry.dox b/doc/serviceregistry.dox
index 156b246..f981e25 100644
--- a/doc/serviceregistry.dox
+++ b/doc/serviceregistry.dox
@@ -365,14 +365,15 @@ as it is requested for the first time. It is created by calling the given `fn` f
The function must return an object that implements the interface of `iid`, unless it is the id
of the service itself. The arguments are passed as object list and are determined by the
`injectables` parameter. That is a list of iids. When the function is called internally, the
-registry will "inject" all services found by the iids as parameters of this function, comnined
+registry will "inject" all services found by the iids as parameters of this function, combined
to a list of objects.
If the service is registered as weak, registering another service for the same iid will not
throw an exception but instead discard (and delete) this one.
@sa QtMvvm::registerInterface, ServiceRegistry::registerObject,
-ServiceRegistry::registerPlugin, ServiceRegistry::serviceObj*/
+ServiceRegistry::registerPlugin, ServiceRegistry::serviceObj
+*/
/*!
@fn QtMvvm::ServiceRegistry::registerService(QByteArray, QString, QString, DestructionScope, bool)
diff --git a/src/imports/mvvmcore/plugins.qmltypes b/src/imports/mvvmcore/plugins.qmltypes
index a13d321..084e680 100644
--- a/src/imports/mvvmcore/plugins.qmltypes
+++ b/src/imports/mvvmcore/plugins.qmltypes
@@ -565,6 +565,18 @@ Module {
Parameter { name: "onResult"; type: "QJSValue" }
}
Method { name: "getColor"; revision: 1 }
+ Method {
+ name: "showProgress"
+ revision: 1
+ type: "QtMvvm::ProgressControl*"
+ Parameter { name: "title"; type: "string" }
+ Parameter { name: "label"; type: "string" }
+ Parameter { name: "maximum"; type: "int" }
+ Parameter { name: "minimum"; type: "int" }
+ Parameter { name: "allowCancel"; type: "bool" }
+ Parameter { name: "value"; type: "int" }
+ Parameter { name: "cancelText"; type: "string" }
+ }
Method {
name: "showProgress"
revision: 1
@@ -617,6 +629,15 @@ Module {
Parameter { name: "title"; type: "string" }
}
Method { name: "showProgress"; revision: 1; type: "QtMvvm::ProgressControl*" }
+ Method {
+ name: "showIndeterminateProgress"
+ revision: 1
+ type: "QtMvvm::ProgressControl*"
+ Parameter { name: "title"; type: "string" }
+ Parameter { name: "label"; type: "string" }
+ Parameter { name: "allowCancel"; type: "bool" }
+ Parameter { name: "cancelText"; type: "string" }
+ }
Method {
name: "showIndeterminateProgress"
revision: 1
@@ -639,6 +660,15 @@ Module {
Parameter { name: "title"; type: "string" }
}
Method { name: "showIndeterminateProgress"; revision: 1; type: "QtMvvm::ProgressControl*" }
+ Method {
+ name: "showBusy"
+ revision: 1
+ type: "QtMvvm::ProgressControl*"
+ Parameter { name: "title"; type: "string" }
+ Parameter { name: "label"; type: "string" }
+ Parameter { name: "allowCancel"; type: "bool" }
+ Parameter { name: "cancelText"; type: "string" }
+ }
Method {
name: "showBusy"
revision: 1
@@ -685,18 +715,18 @@ Module {
}
Method {
name: "registerObject"
- Parameter { name: "object"; type: "QObject"; isPointer: true }
+ Parameter { name: "service"; 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: "service"; type: "QObject"; isPointer: true }
Parameter { name: "scope"; type: "QtMvvm::QQmlServiceRegistry::DestructionScope" }
}
Method {
name: "registerObject"
- Parameter { name: "object"; type: "QObject"; isPointer: true }
+ Parameter { name: "service"; type: "QObject"; isPointer: true }
}
Method {
name: "registerObject"
diff --git a/src/imports/mvvmcore/qqmlcoreapp.h b/src/imports/mvvmcore/qqmlcoreapp.h
index c41525d..65a3bdd 100644
--- a/src/imports/mvvmcore/qqmlcoreapp.h
+++ b/src/imports/mvvmcore/qqmlcoreapp.h
@@ -5,22 +5,40 @@
#include
+#ifdef DOXYGEN_RUN
+namespace de::skycoder42::QtMvvm::Core {
+
+/*! @brief A QML singleton to access some QtMvvm::CoreApp functionality
+ *
+ * @extends QtQml.QtObject
+ * @since 1.1
+ *
+ * @sa QtMvvm::CoreApp
+ */
+class CoreApp
+#else
namespace QtMvvm {
class QQmlCoreApp : public QObject
+#endif
{
Q_OBJECT
public:
+ //! @private
explicit QQmlCoreApp(QObject *parent = nullptr);
+ //! @copydoc QtMvvm::CoreApp::showDialog
Q_INVOKABLE QtMvvm::MessageResult *showDialog(const QtMvvm::MessageConfig &config);
+ //! @copydoc QtMvvm::CoreApp::safeCastInputType
Q_INVOKABLE QVariant safeCastInputType(const QString &type, const QVariant &value);
public Q_SLOTS:
+ //! @copydoc QtMvvm::CoreApp::show(const char *, const QVariantHash &, QPointer);
void show(const QString &viewModelName, const QVariantHash ¶ms = {}, QtMvvm::ViewModel *parentViewModel = nullptr);
Q_SIGNALS:
+ //! @copydoc QtMvvm::CoreApp::appStarted
void appStarted();
};
diff --git a/src/imports/mvvmcore/qqmlmvvmmessage.cpp b/src/imports/mvvmcore/qqmlmvvmmessage.cpp
index 58fb2c5..1ae2e45 100644
--- a/src/imports/mvvmcore/qqmlmvvmmessage.cpp
+++ b/src/imports/mvvmcore/qqmlmvvmmessage.cpp
@@ -118,23 +118,23 @@ void QtMvvm::QQmlMvvmMessage::getColor(const QJSValue &onResult, const QString &
QtMvvm::getColor(title, color, argb);
}
-ProgressControl *QtMvvm::QQmlMvvmMessage::showProgress(const QString &title, const QString &label, int maximum, int minimum, bool allowCancel, int value)
+ProgressControl *QtMvvm::QQmlMvvmMessage::showProgress(const QString &title, const QString &label, int maximum, int minimum, bool allowCancel, int value, const QString &cancelText)
{
- auto control = QtMvvm::showProgress(title, label, maximum, minimum, allowCancel, value);
+ auto control = QtMvvm::showProgress(title, label, maximum, minimum, allowCancel, value, cancelText);
QQmlEngine::setObjectOwnership(control, QQmlEngine::JavaScriptOwnership);
return control;
}
-ProgressControl *QtMvvm::QQmlMvvmMessage::showIndeterminateProgress(const QString &title, const QString &label, bool allowCancel)
+ProgressControl *QtMvvm::QQmlMvvmMessage::showIndeterminateProgress(const QString &title, const QString &label, bool allowCancel, const QString &cancelText)
{
- auto control = QtMvvm::showIndeterminateProgress(title, label, allowCancel);
+ auto control = QtMvvm::showIndeterminateProgress(title, label, allowCancel, cancelText);
QQmlEngine::setObjectOwnership(control, QQmlEngine::JavaScriptOwnership);
return control;
}
-ProgressControl *QtMvvm::QQmlMvvmMessage::showBusy(const QString &title, const QString &label, bool allowCancel)
+ProgressControl *QtMvvm::QQmlMvvmMessage::showBusy(const QString &title, const QString &label, bool allowCancel, const QString &cancelText)
{
- auto control = QtMvvm::showBusy(title, label, allowCancel);
+ auto control = QtMvvm::showBusy(title, label, allowCancel, cancelText);
QQmlEngine::setObjectOwnership(control, QQmlEngine::JavaScriptOwnership);
return control;
}
diff --git a/src/imports/mvvmcore/qqmlmvvmmessage.h b/src/imports/mvvmcore/qqmlmvvmmessage.h
index c1bb28c..017a802 100644
--- a/src/imports/mvvmcore/qqmlmvvmmessage.h
+++ b/src/imports/mvvmcore/qqmlmvvmmessage.h
@@ -19,7 +19,7 @@ namespace de::skycoder42::QtMvvm::Core {
*
* @sa QtMvvm::MessageConfig, QtMvvm::CoreApp::showDialog
*/
-class Message : public QtObject
+class Message
#else
namespace QtMvvm {
@@ -110,23 +110,34 @@ public Q_SLOTS:
const QStringList &supportedMimeTypes = {},
const QUrl &dir = {});
+ //! @brief A QML version of the QtMvvm::getColor method
+ //! @copydoc QtMvvm::getColor(const std::function &, const QString &, const QColor &, bool)
QTMVVM_REVISION_1 static void getColor(const QJSValue &onResult = {},
const QString &title = {},
const QColor &color = {},
bool argb = false);
+ //! @brief A QML version of the QtMvvm::showProgress method
+ //! @copydoc QtMvvm::showProgress(const QString &, const QString &, int, int, bool, int, const QString &)
QTMVVM_REVISION_1 static QtMvvm::ProgressControl *showProgress(const QString &title = {},
const QString &label = {},
int maximum = 100,
int minimum = 0,
bool allowCancel = true,
- int value = 0);
+ int value = 0,
+ const QString &cancelText = {});
+ //! @brief A QML version of the QtMvvm::showIndeterminateProgress method
+ //! @copydoc QtMvvm::showIndeterminateProgress(const QString &, const QString &, bool, const QString &)
QTMVVM_REVISION_1 static QtMvvm::ProgressControl *showIndeterminateProgress(const QString &title = {},
const QString &label = {},
- bool allowCancel = true);
+ bool allowCancel = true,
+ const QString &cancelText = {});
+ //! @brief A QML version of the QtMvvm::showBusy method
+ //! @copydoc QtMvvm::showBusy(const QString &, const QString &, bool, const QString &)
QTMVVM_REVISION_1 static QtMvvm::ProgressControl *showBusy(const QString &title = {},
const QString &label = {},
- bool allowCancel = true);
+ bool allowCancel = true,
+ const QString &cancelText = {});
#ifndef DOXYGEN_RUN
#undef static
diff --git a/src/imports/mvvmcore/qqmlserviceregistry.h b/src/imports/mvvmcore/qqmlserviceregistry.h
index 66bb452..dd8090b 100644
--- a/src/imports/mvvmcore/qqmlserviceregistry.h
+++ b/src/imports/mvvmcore/qqmlserviceregistry.h
@@ -8,36 +8,84 @@
#include
#include
+#ifdef DOXYGEN_RUN
+namespace de::skycoder42::QtMvvm::Core {
+
+/*! @brief A QML singleton to access some QtMvvm::ServiceRegistry functionality
+ *
+ * @extends QtQml.QtObject
+ * @since 1.1
+ *
+ * @sa QtMvvm::ServiceRegistry
+ */
+class ServiceRegistry
+#else
namespace QtMvvm {
class QQmlServiceRegistry : public QObject
+#endif
{
Q_OBJECT
public:
+ //! @copybrief QtMvvm::ServiceRegistry
enum DestructionScope {
- DestroyOnAppQuit = ServiceRegistry::DestroyOnAppQuit,
- DestroyOnAppDestroy = ServiceRegistry::DestroyOnAppDestroy,
- DestroyOnRegistryDestroy = ServiceRegistry::DestroyOnRegistryDestroy,
-
- DestroyNever = ServiceRegistry::DestroyNever
+ DestroyOnAppQuit = ServiceRegistry::DestroyOnAppQuit, //!< @copybrief QtMvvm::ServiceRegistry::DestroyOnAppQuit
+ DestroyOnAppDestroy = ServiceRegistry::DestroyOnAppDestroy, //!< @copybrief QtMvvm::ServiceRegistry::DestroyOnAppDestroy
+ DestroyOnRegistryDestroy = ServiceRegistry::DestroyOnRegistryDestroy, //!< @copybrief QtMvvm::ServiceRegistry::DestroyOnRegistryDestroy
+ DestroyNever = ServiceRegistry::DestroyNever //!< @copybrief QtMvvm::ServiceRegistry::DestroyNever
};
Q_ENUM(DestructionScope)
+ //! @private
explicit QQmlServiceRegistry(QQmlEngine *parent = nullptr);
+ //! @copydoc QtMvvm::ServiceRegistry::isRegistered() const
Q_INVOKABLE bool isRegistered(const QString &iid) const;
- Q_INVOKABLE void registerObject(QObject *object, QtMvvm::QQmlServiceRegistry::DestructionScope scope = DestroyOnAppQuit, bool weak = false);
+ //! @copydoc QtMvvm::ServiceRegistry::registerObject(TService *, DestructionScope, bool)
+ Q_INVOKABLE void registerObject(QObject *service, QtMvvm::QQmlServiceRegistry::DestructionScope scope = DestroyOnAppQuit, bool weak = false);
+ /*!
+ * @brief Register a service via a constructor function
+ *
+ * @param iid The interface id of the type to register the service for
+ * @param function The function to be called to construct the service
+ * @param weak Specifies if the registration should be a weak one or a normal one
+ *
+ * If the function returns successfully, from now on a service of the given type can be accessed
+ * via the registry for the interface. The service is lazy initialized an will be created as soon
+ * as it is requested for the first time. It is created by calling the given `function`.
+ *
+ * If the service is registered as weak, registering another service for the same iid will not
+ * throw an exception but instead discard (and delete) this one.
+ */
Q_INVOKABLE void registerObject(const QString &iid, const QJSValue &function, bool weak = false);
+ /*!
+ * @brief Register a qml component as service object
+ *
+ * @param componentUrl The URL of the component to be created
+ * @param weak Specifies if the registration should be a weak one or a normal one
+ *
+ * This method works similar to the other register methods, but is special in that it
+ * allows you to register a qml component. On construction, that component is loaded
+ * synchronously and then insanciated to create an instance of the contained object.
+ *
+ * Unlike the other methods, the destruction scope for those is always
+ * ServiceRegistry::DestroyOnAppDestroy, as the object will depend on the QML engine
+ *
+ * If the service is registered as weak, registering another service for the same iid will not
+ * throw an exception but instead discard (and delete) this one.
+ */
Q_INVOKABLE void registerObject(const QUrl &componentUrl, bool weak = false);
+ //! @copydoc QtMvvm::ServiceRegistry::registerService(QByteArray, QString, QString, DestructionScope, bool)
Q_INVOKABLE void registerPlugin(const QString &iid,
QString pluginType = {},
QString pluginKey = {},
DestructionScope scope = DestroyOnAppDestroy,
bool weak = false);
+ //! @copydoc QtMvvm::ServiceRegistry::serviceObj(const QByteArray &)
Q_INVOKABLE QObject *service(const QString &iid);
private:
diff --git a/src/mvvmcore/serviceregistry.h b/src/mvvmcore/serviceregistry.h
index 9af7392..24a8f97 100644
--- a/src/mvvmcore/serviceregistry.h
+++ b/src/mvvmcore/serviceregistry.h
@@ -36,7 +36,7 @@ public:
//! Checks if a given interface or service is already registered
template
bool isRegistered() const;
- //! @copybrief ServiceRegistry::isRegistered()
+ //! @copybrief ServiceRegistry::isRegistered() const
bool isRegistered(const QByteArray &iid) const;
//! Register a service for its interface via the type