From 0c881f0c1b77cf8876094e3647d1732210b954d1 Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Wed, 21 Mar 2018 17:34:05 +0100 Subject: An extension mechanism load qml files at generic extension points. and forward the email via an extension api. --- framework/src/extensionmodel.cpp | 24 ++++++++++++++++++++---- framework/src/extensionmodel.h | 5 +++++ 2 files changed, 25 insertions(+), 4 deletions(-) (limited to 'framework/src') diff --git a/framework/src/extensionmodel.cpp b/framework/src/extensionmodel.cpp index e3fab7d8..5f42aa7a 100644 --- a/framework/src/extensionmodel.cpp +++ b/framework/src/extensionmodel.cpp @@ -47,12 +47,17 @@ QHash ExtensionModel::roleNames() const void ExtensionModel::load() { - auto model = new QStandardItemModel(this); - + if (auto m = sourceModel()) { + setSourceModel(nullptr); + delete m; + } auto engine = qmlEngine(this); - Q_ASSERT(engine); + if (!engine) { + return; + } + auto model = new QStandardItemModel(this); for (const auto &path : engine->importPathList()) { - QDir dir{path + "/org/kube/views"}; + QDir dir{path + "/org/kube/" + mExtensionPoint}; for (const auto &pluginName : dir.entryList(QDir::Dirs | QDir::NoDotAndDotDot)) { const auto pluginPath = dir.path() + "/" + pluginName; mPaths.insert(pluginName, pluginPath); @@ -101,6 +106,17 @@ QVariantList ExtensionModel::sortOrder() const return {}; } +void ExtensionModel::setExtensionPoint(const QString &extensionPoint) +{ + mExtensionPoint = extensionPoint; + QTimer::singleShot(0, this, &ExtensionModel::load); +} + +QString ExtensionModel::extensionPoint() const +{ + return mExtensionPoint; +} + QVariant ExtensionModel::data(const QModelIndex &idx, int role) const { return QSortFilterProxyModel::data(idx, role); diff --git a/framework/src/extensionmodel.h b/framework/src/extensionmodel.h index 5360cc2f..07601e57 100644 --- a/framework/src/extensionmodel.h +++ b/framework/src/extensionmodel.h @@ -29,6 +29,7 @@ class ExtensionModel : public QSortFilterProxyModel Q_OBJECT Q_PROPERTY(QVariantList sortOrder WRITE setSortOrder READ sortOrder) + Q_PROPERTY(QString extensionPoint WRITE setExtensionPoint READ extensionPoint) public: ExtensionModel(QObject *parent = Q_NULLPTR); @@ -49,6 +50,9 @@ public: void setSortOrder(const QVariantList &order); QVariantList sortOrder() const; + void setExtensionPoint(const QString &order); + QString extensionPoint() const; + Q_INVOKABLE QString findSource(const QString &extensionName, const QString &sourceName); private slots: @@ -57,6 +61,7 @@ private slots: private: QStringList mSortOrder; QHash mPaths; + QString mExtensionPoint; }; } -- cgit v1.2.3