diff options
author | Ali Kianian <ali.kianian@qt.io> | 2022-10-20 17:06:58 +0300 |
---|---|---|
committer | Ali Kianian <ali.kianian@qt.io> | 2022-10-25 09:18:51 +0000 |
commit | f2f6f6e6cc005d33e3a0e9367e2e3fac735fbef6 (patch) | |
tree | 0a0b77b2953d84368fccb5fac2f9583202d6063c | |
parent | 0e7bb804084e2c32a5d4074ccc2deceb0ad07f80 (diff) | |
download | qt-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>
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); } |