From 826525f89fb04e26e4f31b0c364af65c069ced72 Mon Sep 17 00:00:00 2001 From: Marco Bubke Date: Mon, 23 Jun 2014 17:48:15 +0200 Subject: [PATCH] QmlDesigner: Add item library section visibility Search is working again Change-Id: Ie6d52f476e2b9b5c3256bc289bcdd5dcadafea93 Reviewed-by: Tim Jenssen --- .../itemLibraryQmlSources/ItemsView.qml | 1 + .../itemlibrary/itemlibrarymodel.cpp | 26 ++++++++++++------- .../components/itemlibrary/itemlibrarymodel.h | 1 + .../itemlibrary/itemlibrarysection.cpp | 6 ++--- .../itemlibrary/itemlibrarysectionmodel.cpp | 2 ++ 5 files changed, 23 insertions(+), 13 deletions(-) diff --git a/share/qtcreator/qmldesigner/itemLibraryQmlSources/ItemsView.qml b/share/qtcreator/qmldesigner/itemLibraryQmlSources/ItemsView.qml index cfafd0dbc21..b0b8c97ee8e 100644 --- a/share/qtcreator/qmldesigner/itemLibraryQmlSources/ItemsView.qml +++ b/share/qtcreator/qmldesigner/itemLibraryQmlSources/ItemsView.qml @@ -103,6 +103,7 @@ ScrollView { delegate: Section { width: itemsView.viewport.width caption: sectionName // to be set by model + visible: sectionVisible Grid { id: itemGrid diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.cpp b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.cpp index e9bf2382dbd..3d9e0538995 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.cpp +++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.cpp @@ -76,17 +76,17 @@ ItemLibraryModel::~ItemLibraryModel() int ItemLibraryModel::rowCount(const QModelIndex & /*parent*/) const { - return visibleSectionCount(); + return m_sectionModels.count(); } QVariant ItemLibraryModel::data(const QModelIndex &index, int role) const { - if (!index.isValid() || index.row() +1 > visibleSectionCount()) + if (!index.isValid() || index.row() +1 > m_sectionModels.count()) return QVariant(); if (m_roleNames.contains(role)) { - QVariant value = visibleSections().at(index.row())->property(m_roleNames.value(role)); + QVariant value = m_sectionModels.at(index.row())->property(m_roleNames.value(role)); ItemLibrarySectionModel* model = qobject_cast(value.value()); if (model) @@ -170,6 +170,7 @@ void ItemLibraryModel::update(ItemLibraryInfo *itemLibraryInfo, Model *model) } } + resetModel(); updateVisibility(); } @@ -250,14 +251,15 @@ void ItemLibraryModel::updateVisibility() if (itemLibrarySection->sectionName().toLower().contains(m_searchText)) sectionSearchText.clear(); - bool sectionChanged = false, - sectionVisibility = itemLibrarySection->updateSectionVisibility(sectionSearchText, - §ionChanged); - if (sectionChanged) - changed = true; - + bool sectionChanged = false; + bool sectionVisibility = itemLibrarySection->updateSectionVisibility(sectionSearchText, + §ionChanged); + changed |= sectionChanged; changed |= itemLibrarySection->setVisible(sectionVisibility); } + + if (changed) + resetModel(); } void ItemLibraryModel::addRoleNames() @@ -272,6 +274,12 @@ void ItemLibraryModel::addRoleNames() setRoleNames(m_roleNames); } +void ItemLibraryModel::resetModel() +{ + beginResetModel(); + endResetModel(); +} + int ItemLibraryModel::getWidth(const ItemLibraryEntry &itemLibraryEntry) { foreach (const ItemLibraryEntry::Property &property, itemLibraryEntry.properties()) diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.h b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.h index 93da9ff0a68..009c3bd9974 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.h +++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.h @@ -85,6 +85,7 @@ signals: private: // functions void updateVisibility(); void addRoleNames(); + void resetModel(); int getWidth(const ItemLibraryEntry &entry); int getHeight(const ItemLibraryEntry &entry); diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarysection.cpp b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarysection.cpp index bf070f38722..a3170258384 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarysection.cpp +++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarysection.cpp @@ -83,19 +83,17 @@ bool ItemLibrarySection::updateSectionVisibility(const QString &searchText, bool foreach(ItemLibraryItem *itemLibraryItem, m_sectionEntries.items()) { bool itemVisible = itemLibraryItem->itemName().toLower().contains(searchText); - bool itemChanged = false; - itemChanged = itemLibraryItem->setVisible(itemVisible); + bool itemChanged = itemLibraryItem->setVisible(itemVisible); *changed |= itemChanged; if (itemVisible) haveVisibleItems = true; } + if (changed) m_sectionEntries.resetModel(); - emit sectionEntriesChanged(); - return haveVisibleItems; } diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarysectionmodel.cpp b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarysectionmodel.cpp index 3ef357ece41..27cc4584241 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarysectionmodel.cpp +++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarysectionmodel.cpp @@ -90,6 +90,8 @@ const QList &ItemLibrarySectionModel::items() const void ItemLibrarySectionModel::resetModel() { + beginResetModel(); + endResetModel(); emit dataChanged(QModelIndex(), QModelIndex()); }