diff --git a/src/plugins/qmldesigner/libs/designsystem/dsstore.cpp b/src/plugins/qmldesigner/libs/designsystem/dsstore.cpp index a22536265c9..0f5a7df382f 100644 --- a/src/plugins/qmldesigner/libs/designsystem/dsstore.cpp +++ b/src/plugins/qmldesigner/libs/designsystem/dsstore.cpp @@ -31,6 +31,16 @@ std::optional dsModuleDir(QmlDesigner::ExternalDependenciesInte return {}; } +static Utils::FilePath dsFilePath(const Utils::FilePath &targetDir, const QString &typeName) +{ + return targetDir / (typeName + ".qml"); +} + +static QString themeInterfaceType(const QString &typeName) +{ + return QString("%1Theme").arg(typeName); +} + static QByteArray reformatQml(const QString &content) { auto document = QmlJS::Document::create({}, QmlJS::Dialect::QmlQtQuick2); @@ -75,7 +85,7 @@ std::optional modelSerializeHelper( view.executeInTransaction("DSStore::modelSerializeHelper", [&] { callback(model.get()); }); - Utils::FileSaver saver(targetDir / (typeName + ".qml"), QIODevice::Text); + Utils::FileSaver saver(dsFilePath(targetDir, typeName), QIODevice::Text); saver.write(reformatQml(modifier.text())); if (!saver.finalize()) return saver.errorString(); @@ -230,6 +240,7 @@ bool DSStore::removeCollection(const QString &name) breakBindings(¤tCollection, name); } save(); + removeCollectionFiles(name); return m_collections.erase(name); } return false; @@ -254,6 +265,7 @@ bool DSStore::renameCollection(const QString &oldName, const QString &newName) refactorBindings(oldName, uniqueTypeName); save(); + removeCollectionFiles(oldName); return true; } @@ -446,19 +458,19 @@ std::optional DSStore::writeQml(const DSThemeManager &mgr, if (mgr.themeCount() == 0) return {}; - const QString themeInterfaceType = mcuCompatible ? QString("%1Theme").arg(typeName) : "QtObject"; + const QString interfaceType = mcuCompatible ? themeInterfaceType(typeName) : "QtObject"; if (mcuCompatible) { auto decorateInterface = [&mgr](Model *interfaceModel) { mgr.decorateThemeInterface(interfaceModel->rootModelNode()); }; if (auto error = modelSerializeHelper( - m_projectStorageDependencies, m_ed, decorateInterface, targetDir, themeInterfaceType)) - return tr("Can not write theme interface %1.\n%2").arg(themeInterfaceType, *error); + m_projectStorageDependencies, m_ed, decorateInterface, targetDir, interfaceType)) + return tr("Can not write theme interface %1.\n%2").arg(interfaceType, *error); } auto decorateCollection = [&](Model *collectionModel) { - mgr.decorate(collectionModel->rootModelNode(), themeInterfaceType.toUtf8(), mcuCompatible); + mgr.decorate(collectionModel->rootModelNode(), interfaceType.toUtf8(), mcuCompatible); }; if (auto error = modelSerializeHelper( @@ -467,4 +479,15 @@ std::optional DSStore::writeQml(const DSThemeManager &mgr, return {}; } + +void DSStore::removeCollectionFiles(const QString &typeName) const +{ + if (auto moduleDir = dsModuleDir(m_ed)) { + const auto collectionFilePath = dsFilePath(*moduleDir, typeName); + collectionFilePath.removeFile(); + + const auto interfaceFile = dsFilePath(*moduleDir, themeInterfaceType(typeName)); + interfaceFile.removeFile(); + } +} } // namespace QmlDesigner diff --git a/src/plugins/qmldesigner/libs/designsystem/dsstore.h b/src/plugins/qmldesigner/libs/designsystem/dsstore.h index 60c66e467dc..261c34b407e 100644 --- a/src/plugins/qmldesigner/libs/designsystem/dsstore.h +++ b/src/plugins/qmldesigner/libs/designsystem/dsstore.h @@ -57,6 +57,8 @@ private: const Utils::FilePath &targetDir, bool mcuCompatible); + void removeCollectionFiles(const QString &typeName) const; + private: ExternalDependenciesInterface &m_ed; ProjectStorageDependencies m_projectStorageDependencies;