From 8c5ba8b9875323afb997a2c83b928c045d8a1e56 Mon Sep 17 00:00:00 2001 From: Miina Puuronen Date: Tue, 20 Apr 2021 15:38:58 +0300 Subject: [PATCH] QmlDesigner: Fix hiding categories with similar names Fixes: QDS-4144 Change-Id: I045a7457f0d5c949f4e3a445d7679108dd0b8495 Reviewed-by: Mahmoud Badri Reviewed-by: Thomas Hartmann --- .../itemlibrary/itemlibrarycategoriesmodel.cpp | 8 +++++--- .../components/itemlibrary/itemlibrarycategory.cpp | 1 + .../components/itemlibrary/itemlibrarycategory.h | 4 ++++ .../components/itemlibrary/itemlibraryimport.cpp | 3 ++- .../components/itemlibrary/itemlibrarymodel.cpp | 9 +++++---- .../components/itemlibrary/itemlibrarymodel.h | 5 +++-- 6 files changed, 20 insertions(+), 10 deletions(-) diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarycategoriesmodel.cpp b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarycategoriesmodel.cpp index a9a772c9533..2677eb94ae9 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarycategoriesmodel.cpp +++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarycategoriesmodel.cpp @@ -85,8 +85,9 @@ bool ItemLibraryCategoriesModel::setData(const QModelIndex &index, const QVarian ItemLibraryModel::saveExpandedState(value.toBool(), m_categoryList[index.row()]->categoryName()); } else if (m_roleNames.value(role) == "categoryVisible") { - ItemLibraryModel::saveCategoryVisibleState(value.toBool(), - m_categoryList[index.row()]->categoryName()); + const ItemLibraryCategory *category = m_categoryList[index.row()]; + ItemLibraryModel::saveCategoryVisibleState(value.toBool(), category->categoryName(), + category->ownerImport()->importName()); } emit dataChanged(index, index, {role}); return true; @@ -148,7 +149,8 @@ void ItemLibraryCategoriesModel::showAllCategories(bool show) for (const auto &category : std::as_const(m_categoryList)) { if (category->isCategoryVisible() != show) { category->setCategoryVisible(show); - ItemLibraryModel::saveCategoryVisibleState(show, category->categoryName()); + ItemLibraryModel::saveCategoryVisibleState(show, category->categoryName(), + category->ownerImport()->importName()); } } emit dataChanged(index(0), index(m_categoryList.size() - 1), {m_roleNames.key("categoryVisible")}); diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarycategory.cpp b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarycategory.cpp index 5f46d1e1ce2..9050a30418b 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarycategory.cpp +++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarycategory.cpp @@ -31,6 +31,7 @@ namespace QmlDesigner { ItemLibraryCategory::ItemLibraryCategory(const QString &groupName, QObject *parent) : QObject(parent), + m_ownerImport(qobject_cast(parent)), m_name(groupName) { } diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarycategory.h b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarycategory.h index 1018402019f..6e5da446108 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarycategory.h +++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarycategory.h @@ -26,6 +26,7 @@ #pragma once #include "itemlibraryitemsmodel.h" +#include "itemlibraryimport.h" namespace QmlDesigner { @@ -60,6 +61,8 @@ public: void setExpanded(bool expanded); + ItemLibraryImport *ownerImport() const { return m_ownerImport; } + signals: void itemModelChanged(); void visibilityChanged(); @@ -68,6 +71,7 @@ signals: private: ItemLibraryItemsModel m_itemModel; + QPointer m_ownerImport = nullptr; QString m_name; bool m_categoryExpanded = true; bool m_isVisible = true; diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibraryimport.cpp b/src/plugins/qmldesigner/components/itemlibrary/itemlibraryimport.cpp index 6305855c89a..76138ed0745 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/itemlibraryimport.cpp +++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibraryimport.cpp @@ -126,7 +126,8 @@ bool ItemLibraryImport::updateCategoryVisibility(const QString &searchText, bool hasVisibleCategories = true; if (searchText.isEmpty()) - category->setCategoryVisible(ItemLibraryModel::loadCategoryVisibleState(category->categoryName())); + category->setCategoryVisible(ItemLibraryModel::loadCategoryVisibleState(category->categoryName(), + importName())); } return hasVisibleCategories; diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.cpp b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.cpp index ae7fc0bc496..7b75e022177 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.cpp +++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.cpp @@ -59,14 +59,15 @@ bool ItemLibraryModel::loadExpandedState(const QString §ionName) return expandedStateHash.value(sectionName, true); } -void ItemLibraryModel::saveCategoryVisibleState(bool isVisible, const QString &categoryName) +void ItemLibraryModel::saveCategoryVisibleState(bool isVisible, const QString &categoryName, const + QString &importName) { - categoryVisibleStateHash.insert(categoryName, isVisible); + categoryVisibleStateHash.insert(categoryName + '_' + importName, isVisible); } -bool ItemLibraryModel::loadCategoryVisibleState(const QString &categoryName) +bool ItemLibraryModel::loadCategoryVisibleState(const QString &categoryName, const QString &importName) { - return categoryVisibleStateHash.value(categoryName, true); + return categoryVisibleStateHash.value(categoryName + '_' + importName, true); } void ItemLibraryModel::showHiddenCategories() diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.h b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.h index 1bb9447bd73..87c8cc7ff25 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.h +++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.h @@ -69,8 +69,9 @@ public: static void registerQmlTypes(); static void saveExpandedState(bool expanded, const QString §ionName); static bool loadExpandedState(const QString §ionName); - static void saveCategoryVisibleState(bool isVisible, const QString &categoryName); - static bool loadCategoryVisibleState(const QString &categoryName); + static void saveCategoryVisibleState(bool isVisible, const QString &categoryName, const QString + &importName); + static bool loadCategoryVisibleState(const QString &categoryName, const QString &importName); Q_INVOKABLE void expandAll(); Q_INVOKABLE void collapseAll();