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 {};
}
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<QString> 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(&currentCollection, 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<QString> 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<QString> 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

View File

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