From 5bf8845c423ecd0bcaceb20d097fbdb93c93a959 Mon Sep 17 00:00:00 2001 From: Mahmoud Badri Date: Tue, 14 May 2024 00:16:50 +0300 Subject: [PATCH] QmlDesigner: Add UniqueName::getpath() Also relevant tweaks in the same class Change-Id: I59ca0839a28478028b8aa36b9df500f29d831b90 Reviewed-by: Miikka Heikkinen --- .../assetslibrary/assetslibrarymodel.cpp | 11 +--- .../assetslibrary/assetslibrarywidget.cpp | 8 +-- src/plugins/qmldesigner/utils/uniquename.cpp | 57 +++++++++++++++---- src/plugins/qmldesigner/utils/uniquename.h | 1 + 4 files changed, 52 insertions(+), 25 deletions(-) diff --git a/src/plugins/qmldesigner/components/assetslibrary/assetslibrarymodel.cpp b/src/plugins/qmldesigner/components/assetslibrary/assetslibrarymodel.cpp index 09ec468905d..d3a701aa5f2 100644 --- a/src/plugins/qmldesigner/components/assetslibrary/assetslibrarymodel.cpp +++ b/src/plugins/qmldesigner/components/assetslibrary/assetslibrarymodel.cpp @@ -154,20 +154,15 @@ bool AssetsLibraryModel::renameFolder(const QString &folderPath, const QString & QString AssetsLibraryModel::addNewFolder(const QString &folderPath) { - Utils::FilePath dir = Utils::FilePath::fromString(folderPath); - Utils::FilePath parentDir = dir.parentDir(); + Utils::FilePath uniqueDirPath = Utils::FilePath::fromString(UniqueName::getPath(folderPath)); - QString uniqueFolderName = UniqueName::get(dir.fileName(), [&] (const QString &folderName) { - return !parentDir.pathAppended(folderName).exists(); - }); - - auto res = parentDir.pathAppended(uniqueFolderName).ensureWritableDir(); + auto res = uniqueDirPath.ensureWritableDir(); if (!res.has_value()) { qWarning() << __FUNCTION__ << res.error(); return {}; } - return uniqueFolderName; + return uniqueDirPath.path(); } bool AssetsLibraryModel::urlPathExistsInModel(const QUrl &url) const diff --git a/src/plugins/qmldesigner/components/assetslibrary/assetslibrarywidget.cpp b/src/plugins/qmldesigner/components/assetslibrary/assetslibrarywidget.cpp index 9c46ace22d0..0324abe32e0 100644 --- a/src/plugins/qmldesigner/components/assetslibrary/assetslibrarywidget.cpp +++ b/src/plugins/qmldesigner/components/assetslibrary/assetslibrarywidget.cpp @@ -176,13 +176,9 @@ void AssetsLibraryWidget::deleteSelectedAssets() QString AssetsLibraryWidget::getUniqueEffectPath(const QString &parentFolder, const QString &effectName) { QString effectsDir = ModelNodeOperations::getEffectsDefaultDirectory(parentFolder); - QString effectPathTemplate = effectsDir + QLatin1String("/%1.qep"); + QString effectPath = QLatin1String("%1/%2.qep").arg(effectsDir, effectName); - QString uniqueName = UniqueName::get(effectName, [&] (const QString &name) { - return !QFile::exists(effectPathTemplate.arg(name)); - }); - - return effectPathTemplate.arg(uniqueName); + return UniqueName::getPath(effectPath); } bool AssetsLibraryWidget::createNewEffect(const QString &effectPath, bool openInEffectComposer) diff --git a/src/plugins/qmldesigner/utils/uniquename.cpp b/src/plugins/qmldesigner/utils/uniquename.cpp index ef6d3d8e5e2..e77814c97cf 100644 --- a/src/plugins/qmldesigner/utils/uniquename.cpp +++ b/src/plugins/qmldesigner/utils/uniquename.cpp @@ -3,17 +3,22 @@ #include "uniquename.h" +#include #include namespace QmlDesigner { /** - * @brief Gets a unique name from a give name - * @param oldName input name - * @param predicate function to check if the name is unique. Retuns true if name is unique - * @return a unique name + * @brief Generates a unique name based on the provided name. + * + * This method iteratively generates a name by appending suffixes until a unique name is found. + * The uniqueness of the generated name is determined by the provided predicate function. + * + * @param oldName The original name to be made unique. + * @param predicate A function that checks if a name is unique. Returns true if the name is unique, + * false otherwise. + * @return A unique name derived from the provided name. */ -// static QString UniqueName::get(const QString &oldName, std::function predicate) { QString newName = oldName; @@ -23,29 +28,59 @@ QString UniqueName::get(const QString &oldName, std::function predicate); + static QString getPath(const QString &oldName); private: static QString nextName(const QString &oldName);