aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/qmldesigner/components/collectioneditor/collectionview.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/qmldesigner/components/collectioneditor/collectionview.cpp')
-rw-r--r--src/plugins/qmldesigner/components/collectioneditor/collectionview.cpp45
1 files changed, 39 insertions, 6 deletions
diff --git a/src/plugins/qmldesigner/components/collectioneditor/collectionview.cpp b/src/plugins/qmldesigner/components/collectioneditor/collectionview.cpp
index de82734b35..8a470c4915 100644
--- a/src/plugins/qmldesigner/components/collectioneditor/collectionview.cpp
+++ b/src/plugins/qmldesigner/components/collectioneditor/collectionview.cpp
@@ -8,12 +8,17 @@
#include "collectioneditorutils.h"
#include "collectionsourcemodel.h"
#include "collectionwidget.h"
+#include "datastoremodelnode.h"
#include "designmodecontext.h"
#include "nodeabstractproperty.h"
#include "nodemetainfo.h"
#include "qmldesignerplugin.h"
#include "variantproperty.h"
+#include <projectexplorer/project.h>
+#include <projectexplorer/projectexplorer.h>
+#include <projectexplorer/projectmanager.h>
+
#include <QJsonArray>
#include <QJsonDocument>
#include <QJsonObject>
@@ -37,7 +42,15 @@ namespace QmlDesigner {
CollectionView::CollectionView(ExternalDependenciesInterface &externalDependencies)
: AbstractView(externalDependencies)
-{}
+ , m_dataStore(std::make_unique<DataStoreModelNode>())
+
+{
+ connect(ProjectExplorer::ProjectManager::instance(),
+ &ProjectExplorer::ProjectManager::startupProjectChanged,
+ this,
+ &CollectionView::resetDataStoreNode);
+ resetDataStoreNode();
+}
bool CollectionView::hasWidget() const
{
@@ -59,6 +72,19 @@ QmlDesigner::WidgetInfo CollectionView::widgetInfo()
[this](const ModelNode &sourceNode, const QString &collection) {
m_widget->collectionDetailsModel()->loadCollection(sourceNode, collection);
});
+
+ connect(sourceModel, &CollectionSourceModel::isEmptyChanged, this, [this](bool isEmpty) {
+ if (isEmpty)
+ m_widget->collectionDetailsModel()->loadCollection({}, {});
+ });
+
+ connect(sourceModel,
+ &CollectionSourceModel::collectionNamesChanged,
+ this,
+ [this](const ModelNode &sourceNode, const QStringList &collectionNames) {
+ if (sourceNode == m_dataStore->modelNode())
+ m_dataStore->setCollectionNames(collectionNames);
+ });
}
return createWidgetInfo(m_widget.data(),
@@ -72,7 +98,7 @@ QmlDesigner::WidgetInfo CollectionView::widgetInfo()
void CollectionView::modelAttached(Model *model)
{
AbstractView::modelAttached(model);
- refreshModel();
+ resetDataStoreNode();
}
void CollectionView::nodeReparented(const ModelNode &node,
@@ -179,16 +205,23 @@ void CollectionView::registerDeclarativeType()
CollectionJsonSourceFilterModel::registerDeclarativeType();
}
+void CollectionView::resetDataStoreNode()
+{
+ m_dataStore->reloadModel();
+ refreshModel();
+}
+
void CollectionView::refreshModel()
{
if (!model())
return;
// Load Model Groups
- const ModelNodes collectionSourceNodes = rootModelNode().subModelNodesOfType(
- jsonCollectionMetaInfo())
- + rootModelNode().subModelNodesOfType(
- csvCollectionMetaInfo());
+ ModelNodes collectionSourceNodes;
+
+ if (ModelNode dataStore = m_dataStore->modelNode())
+ collectionSourceNodes << dataStore;
+
m_widget->sourceModel()->setSources(collectionSourceNodes);
}