QmlDesigner: Fix hiding categories with similar names

Fixes: QDS-4144
Change-Id: I045a7457f0d5c949f4e3a445d7679108dd0b8495
Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io>
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
This commit is contained in:
Miina Puuronen
2021-04-20 15:38:58 +03:00
parent 59f3927cb1
commit 8c5ba8b987
6 changed files with 20 additions and 10 deletions

View File

@@ -85,8 +85,9 @@ bool ItemLibraryCategoriesModel::setData(const QModelIndex &index, const QVarian
ItemLibraryModel::saveExpandedState(value.toBool(), ItemLibraryModel::saveExpandedState(value.toBool(),
m_categoryList[index.row()]->categoryName()); m_categoryList[index.row()]->categoryName());
} else if (m_roleNames.value(role) == "categoryVisible") { } else if (m_roleNames.value(role) == "categoryVisible") {
ItemLibraryModel::saveCategoryVisibleState(value.toBool(), const ItemLibraryCategory *category = m_categoryList[index.row()];
m_categoryList[index.row()]->categoryName()); ItemLibraryModel::saveCategoryVisibleState(value.toBool(), category->categoryName(),
category->ownerImport()->importName());
} }
emit dataChanged(index, index, {role}); emit dataChanged(index, index, {role});
return true; return true;
@@ -148,7 +149,8 @@ void ItemLibraryCategoriesModel::showAllCategories(bool show)
for (const auto &category : std::as_const(m_categoryList)) { for (const auto &category : std::as_const(m_categoryList)) {
if (category->isCategoryVisible() != show) { if (category->isCategoryVisible() != show) {
category->setCategoryVisible(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")}); emit dataChanged(index(0), index(m_categoryList.size() - 1), {m_roleNames.key("categoryVisible")});

View File

@@ -31,6 +31,7 @@ namespace QmlDesigner {
ItemLibraryCategory::ItemLibraryCategory(const QString &groupName, QObject *parent) ItemLibraryCategory::ItemLibraryCategory(const QString &groupName, QObject *parent)
: QObject(parent), : QObject(parent),
m_ownerImport(qobject_cast<ItemLibraryImport *>(parent)),
m_name(groupName) m_name(groupName)
{ {
} }

View File

@@ -26,6 +26,7 @@
#pragma once #pragma once
#include "itemlibraryitemsmodel.h" #include "itemlibraryitemsmodel.h"
#include "itemlibraryimport.h"
namespace QmlDesigner { namespace QmlDesigner {
@@ -60,6 +61,8 @@ public:
void setExpanded(bool expanded); void setExpanded(bool expanded);
ItemLibraryImport *ownerImport() const { return m_ownerImport; }
signals: signals:
void itemModelChanged(); void itemModelChanged();
void visibilityChanged(); void visibilityChanged();
@@ -68,6 +71,7 @@ signals:
private: private:
ItemLibraryItemsModel m_itemModel; ItemLibraryItemsModel m_itemModel;
QPointer<ItemLibraryImport> m_ownerImport = nullptr;
QString m_name; QString m_name;
bool m_categoryExpanded = true; bool m_categoryExpanded = true;
bool m_isVisible = true; bool m_isVisible = true;

View File

@@ -126,7 +126,8 @@ bool ItemLibraryImport::updateCategoryVisibility(const QString &searchText, bool
hasVisibleCategories = true; hasVisibleCategories = true;
if (searchText.isEmpty()) if (searchText.isEmpty())
category->setCategoryVisible(ItemLibraryModel::loadCategoryVisibleState(category->categoryName())); category->setCategoryVisible(ItemLibraryModel::loadCategoryVisibleState(category->categoryName(),
importName()));
} }
return hasVisibleCategories; return hasVisibleCategories;

View File

@@ -59,14 +59,15 @@ bool ItemLibraryModel::loadExpandedState(const QString &sectionName)
return expandedStateHash.value(sectionName, true); 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() void ItemLibraryModel::showHiddenCategories()

View File

@@ -69,8 +69,9 @@ public:
static void registerQmlTypes(); static void registerQmlTypes();
static void saveExpandedState(bool expanded, const QString &sectionName); static void saveExpandedState(bool expanded, const QString &sectionName);
static bool loadExpandedState(const QString &sectionName); static bool loadExpandedState(const QString &sectionName);
static void saveCategoryVisibleState(bool isVisible, const QString &categoryName); static void saveCategoryVisibleState(bool isVisible, const QString &categoryName, const QString
static bool loadCategoryVisibleState(const QString &categoryName); &importName);
static bool loadCategoryVisibleState(const QString &categoryName, const QString &importName);
Q_INVOKABLE void expandAll(); Q_INVOKABLE void expandAll();
Q_INVOKABLE void collapseAll(); Q_INVOKABLE void collapseAll();