summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAli Kianian <ali.kianian@qt.io>2022-10-20 17:06:58 +0300
committerAli Kianian <ali.kianian@qt.io>2022-10-25 09:18:51 +0000
commitf2f6f6e6cc005d33e3a0e9367e2e3fac735fbef6 (patch)
tree0a0b77b2953d84368fccb5fac2f9583202d6063c
parent0e7bb804084e2c32a5d4074ccc2deceb0ad07f80 (diff)
downloadqt-creator-f2f6f6e6cc005d33e3a0e9367e2e3fac735fbef6.tar.gz
Reload material property groups when model changes
The property groups would be unloaded when a model is detached, and it would be loaded when the model is attached. The problem was that the unload function was missing for the MaterialBrowserModel. Task-number: QDS-7515 Change-Id: I89064a78552c10228c0b18e42c1e0df4a92fb4a6 Reviewed-by: Miikka Heikkinen <miikka.heikkinen@qt.io> Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io>
-rw-r--r--src/plugins/qmldesigner/components/materialbrowser/materialbrowsermodel.cpp38
-rw-r--r--src/plugins/qmldesigner/components/materialbrowser/materialbrowsermodel.h1
-rw-r--r--src/plugins/qmldesigner/components/materialbrowser/materialbrowserview.cpp5
3 files changed, 30 insertions, 14 deletions
diff --git a/src/plugins/qmldesigner/components/materialbrowser/materialbrowsermodel.cpp b/src/plugins/qmldesigner/components/materialbrowser/materialbrowsermodel.cpp
index 86f8f7d194..10d596abbd 100644
--- a/src/plugins/qmldesigner/components/materialbrowser/materialbrowsermodel.cpp
+++ b/src/plugins/qmldesigner/components/materialbrowser/materialbrowsermodel.cpp
@@ -105,22 +105,19 @@ bool MaterialBrowserModel::loadPropertyGroups(const QString &path)
{
bool ok = true;
- if (m_propertyGroupsObj.isEmpty()) {
- QFile matPropsFile(path);
+ QFile matPropsFile(path);
+ if (!matPropsFile.open(QIODevice::ReadOnly)) {
+ qWarning("Couldn't open propertyGroups.json");
+ ok = false;
+ }
- if (!matPropsFile.open(QIODevice::ReadOnly)) {
- qWarning("Couldn't open propertyGroups.json");
+ if (ok) {
+ QJsonDocument matPropsJsonDoc = QJsonDocument::fromJson(matPropsFile.readAll());
+ if (matPropsJsonDoc.isNull()) {
+ qWarning("Invalid propertyGroups.json file");
ok = false;
- }
-
- if (ok) {
- QJsonDocument matPropsJsonDoc = QJsonDocument::fromJson(matPropsFile.readAll());
- if (matPropsJsonDoc.isNull()) {
- qWarning("Invalid propertyGroups.json file");
- ok = false;
- } else {
- m_propertyGroupsObj = matPropsJsonDoc.object();
- }
+ } else {
+ m_propertyGroupsObj = matPropsJsonDoc.object();
}
}
@@ -134,12 +131,25 @@ bool MaterialBrowserModel::loadPropertyGroups(const QString &path)
QStringList customMatSections = m_propertyGroupsObj.value("CustomMaterial").toObject().keys();
if (customMatSections.size() > 1) // as of now custom material has only 1 section, so we don't add it
m_customMaterialSections.append(customMatSections);
+ } else {
+ m_propertyGroupsObj = {};
}
emit materialSectionsChanged();
return ok;
}
+void MaterialBrowserModel::unloadPropertyGroups()
+{
+ if (!m_propertyGroupsObj.isEmpty()) {
+ m_propertyGroupsObj = {};
+ m_defaultMaterialSections.clear();
+ m_principledMaterialSections.clear();
+ m_customMaterialSections.clear();
+ emit materialSectionsChanged();
+ }
+}
+
QHash<int, QByteArray> MaterialBrowserModel::roleNames() const
{
static const QHash<int, QByteArray> roles {
diff --git a/src/plugins/qmldesigner/components/materialbrowser/materialbrowsermodel.h b/src/plugins/qmldesigner/components/materialbrowser/materialbrowsermodel.h
index 3cd8b65a41..039d40921b 100644
--- a/src/plugins/qmldesigner/components/materialbrowser/materialbrowsermodel.h
+++ b/src/plugins/qmldesigner/components/materialbrowser/materialbrowsermodel.h
@@ -80,6 +80,7 @@ public:
int materialIndex(const ModelNode &material) const;
ModelNode materialAt(int idx) const;
bool loadPropertyGroups(const QString &path);
+ void unloadPropertyGroups();
void resetModel();
diff --git a/src/plugins/qmldesigner/components/materialbrowser/materialbrowserview.cpp b/src/plugins/qmldesigner/components/materialbrowser/materialbrowserview.cpp
index 979ae3a7ae..41055988fd 100644
--- a/src/plugins/qmldesigner/components/materialbrowser/materialbrowserview.cpp
+++ b/src/plugins/qmldesigner/components/materialbrowser/materialbrowserview.cpp
@@ -336,6 +336,11 @@ void MaterialBrowserView::modelAboutToBeDetached(Model *model)
{
m_widget->materialBrowserModel()->setMaterials({}, m_hasQuick3DImport);
+ if (m_propertyGroupsLoaded) {
+ m_propertyGroupsLoaded = false;
+ m_widget->materialBrowserModel()->unloadPropertyGroups();
+ }
+
AbstractView::modelAboutToBeDetached(model);
}