From 611ed2f251ddcfa301bbe4deeda2710a1e281234 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Tue, 22 May 2012 14:56:37 +0200 Subject: [PATCH] Rewrite the shortcut settings filtering. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Makes more sense now, is more generic (regarding nesting level), and even is shorter. Change-Id: I77ce34aa25655f6b2690964107f4cab018e1d66f Reviewed-by: Robert Löhning Reviewed-by: Eike Ziller --- .../actionmanager/commandmappings.cpp | 40 +++++++------------ .../actionmanager/commandmappings.h | 2 +- 2 files changed, 16 insertions(+), 26 deletions(-) diff --git a/src/plugins/coreplugin/actionmanager/commandmappings.cpp b/src/plugins/coreplugin/actionmanager/commandmappings.cpp index 9053ab5b267..30f8950ad7a 100644 --- a/src/plugins/coreplugin/actionmanager/commandmappings.cpp +++ b/src/plugins/coreplugin/actionmanager/commandmappings.cpp @@ -161,38 +161,28 @@ void CommandMappings::filterChanged(const QString &f) return; for (int i=0; icommandList->topLevelItemCount(); ++i) { QTreeWidgetItem *item = m_page->commandList->topLevelItem(i); - item->setHidden(filter(f, item)); + filter(f, item); } } -bool CommandMappings::filter(const QString &f, const QTreeWidgetItem *item) +bool CommandMappings::filter(const QString &filterString, QTreeWidgetItem *item) { - if (QTreeWidgetItem *parent = item->parent()) { - if (parent->text(0).contains(f, Qt::CaseInsensitive)) - return false; - } + bool visible = filterString.isEmpty(); + int columnCount = item->columnCount(); + for (int i = 0; !visible && i < columnCount; ++i) + visible |= (bool)item->text(i).contains(filterString, Qt::CaseInsensitive); - if (item->childCount() == 0) { - if (f.isEmpty()) - return false; - for (int i = 0; i < item->columnCount(); ++i) { - if (item->text(i).contains(f, Qt::CaseInsensitive)) - return false; - } - return true; - } - - bool found = false; - for (int i = 0; i < item->childCount(); ++i) { - QTreeWidgetItem *citem = item->child(i); - if (filter(f, citem)) { - citem->setHidden(true); - } else { - citem->setHidden(false); - found = true; + int childCount = item->childCount(); + if (childCount > 0) { + // force visibility if this item matches + QString leafFilterString = visible ? QString() : filterString; + for (int i = 0; i < childCount; ++i) { + QTreeWidgetItem *citem = item->child(i); + visible |= !filter(leafFilterString, citem); // parent visible if any child visible } } - return !found; + item->setHidden(!visible); + return !visible; } void CommandMappings::setModified(QTreeWidgetItem *item , bool modified) diff --git a/src/plugins/coreplugin/actionmanager/commandmappings.h b/src/plugins/coreplugin/actionmanager/commandmappings.h index e62ccfef266..255c45c1246 100644 --- a/src/plugins/coreplugin/actionmanager/commandmappings.h +++ b/src/plugins/coreplugin/actionmanager/commandmappings.h @@ -68,7 +68,7 @@ protected: virtual void finish(); virtual void initialize() = 0; - bool filter(const QString &f, const QTreeWidgetItem *item); + bool filter(const QString &filterString, QTreeWidgetItem *item); // access to m_page void setImportExportEnabled(bool enabled);