forked from qt-creator/qt-creator
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:
committed by
Thomas Hartmann
parent
6a2073f5f2
commit
d22d2ece60
@@ -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(¤tCollection, name);
|
breakBindings(¤tCollection, 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
|
||||||
|
@@ -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;
|
||||||
|
Reference in New Issue
Block a user