DesignSystem: Remove respective files on collection deletion

Task-number: QDS-14670
Change-Id: I9cc6b120b11b85bed43527a8c1ed35d118445d17
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
Reviewed-by: Henning Gründl <henning.gruendl@qt.io>
This commit is contained in:
Vikas Pachdha
2025-03-25 23:37:11 +01:00
committed by Thomas Hartmann
parent 6a2073f5f2
commit d22d2ece60
2 changed files with 30 additions and 5 deletions

View File

@@ -31,6 +31,16 @@ std::optional<Utils::FilePath> dsModuleDir(QmlDesigner::ExternalDependenciesInte
return {}; 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) static QByteArray reformatQml(const QString &content)
{ {
auto document = QmlJS::Document::create({}, QmlJS::Dialect::QmlQtQuick2); auto document = QmlJS::Document::create({}, QmlJS::Dialect::QmlQtQuick2);
@@ -75,7 +85,7 @@ std::optional<QString> modelSerializeHelper(
view.executeInTransaction("DSStore::modelSerializeHelper", [&] { callback(model.get()); }); 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())); saver.write(reformatQml(modifier.text()));
if (!saver.finalize()) if (!saver.finalize())
return saver.errorString(); return saver.errorString();
@@ -230,6 +240,7 @@ bool DSStore::removeCollection(const QString &name)
breakBindings(&currentCollection, name); breakBindings(&currentCollection, name);
} }
save(); save();
removeCollectionFiles(name);
return m_collections.erase(name); return m_collections.erase(name);
} }
return false; return false;
@@ -254,6 +265,7 @@ bool DSStore::renameCollection(const QString &oldName, const QString &newName)
refactorBindings(oldName, uniqueTypeName); refactorBindings(oldName, uniqueTypeName);
save(); save();
removeCollectionFiles(oldName);
return true; return true;
} }
@@ -446,19 +458,19 @@ std::optional<QString> DSStore::writeQml(const DSThemeManager &mgr,
if (mgr.themeCount() == 0) if (mgr.themeCount() == 0)
return {}; return {};
const QString themeInterfaceType = mcuCompatible ? QString("%1Theme").arg(typeName) : "QtObject"; const QString interfaceType = mcuCompatible ? themeInterfaceType(typeName) : "QtObject";
if (mcuCompatible) { if (mcuCompatible) {
auto decorateInterface = [&mgr](Model *interfaceModel) { auto decorateInterface = [&mgr](Model *interfaceModel) {
mgr.decorateThemeInterface(interfaceModel->rootModelNode()); mgr.decorateThemeInterface(interfaceModel->rootModelNode());
}; };
if (auto error = modelSerializeHelper( if (auto error = modelSerializeHelper(
m_projectStorageDependencies, m_ed, decorateInterface, targetDir, themeInterfaceType)) m_projectStorageDependencies, m_ed, decorateInterface, targetDir, interfaceType))
return tr("Can not write theme interface %1.\n%2").arg(themeInterfaceType, *error); return tr("Can not write theme interface %1.\n%2").arg(interfaceType, *error);
} }
auto decorateCollection = [&](Model *collectionModel) { auto decorateCollection = [&](Model *collectionModel) {
mgr.decorate(collectionModel->rootModelNode(), themeInterfaceType.toUtf8(), mcuCompatible); mgr.decorate(collectionModel->rootModelNode(), interfaceType.toUtf8(), mcuCompatible);
}; };
if (auto error = modelSerializeHelper( if (auto error = modelSerializeHelper(
@@ -467,4 +479,15 @@ std::optional<QString> DSStore::writeQml(const DSThemeManager &mgr,
return {}; 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 } // namespace QmlDesigner

View File

@@ -57,6 +57,8 @@ private:
const Utils::FilePath &targetDir, const Utils::FilePath &targetDir,
bool mcuCompatible); bool mcuCompatible);
void removeCollectionFiles(const QString &typeName) const;
private: private:
ExternalDependenciesInterface &m_ed; ExternalDependenciesInterface &m_ed;
ProjectStorageDependencies m_projectStorageDependencies; ProjectStorageDependencies m_projectStorageDependencies;