diff options
| author | Peter Penz <[email protected]> | 2011-12-10 21:28:01 +0100 |
|---|---|---|
| committer | Peter Penz <[email protected]> | 2011-12-10 21:30:07 +0100 |
| commit | cf704d2db699887a6f262cd51313e6ae02e4a8bd (patch) | |
| tree | 661b23c6083389db9ed3dde816f0f9b5c58f8612 /src/kitemviews/kfileitemmodel.cpp | |
| parent | 780e42533a6ae37dbc09df52a76c9eb59e59571e (diff) | |
Support wildcards for the filter
Thanks to Janardhan Reddy for the patch!
BUG: 155986
FIXED-IN: 4.8.0
Diffstat (limited to 'src/kitemviews/kfileitemmodel.cpp')
| -rw-r--r-- | src/kitemviews/kfileitemmodel.cpp | 27 |
1 files changed, 8 insertions, 19 deletions
diff --git a/src/kitemviews/kfileitemmodel.cpp b/src/kitemviews/kfileitemmodel.cpp index df0270673..e77c42f71 100644 --- a/src/kitemviews/kfileitemmodel.cpp +++ b/src/kitemviews/kfileitemmodel.cpp @@ -40,7 +40,7 @@ KFileItemModel::KFileItemModel(KDirLister* dirLister, QObject* parent) : m_caseSensitivity(Qt::CaseInsensitive), m_itemData(), m_items(), - m_nameFilter(), + m_filter(), m_filteredItems(), m_requestRole(), m_minimumUpdateIntervalTimer(0), @@ -501,17 +501,17 @@ void KFileItemModel::setExpanded(const QSet<KUrl>& urls) void KFileItemModel::setNameFilter(const QString& nameFilter) { - if (m_nameFilter != nameFilter) { + if (m_filter.pattern() != nameFilter) { dispatchPendingItemsToInsert(); - m_nameFilter = nameFilter; + m_filter.setPattern(nameFilter); // Check which shown items from m_itemData must get // hidden and hence moved to m_filteredItems. KFileItemList newFilteredItems; foreach (ItemData* itemData, m_itemData) { - if (!matchesNameFilter(itemData->item)) { + if (!m_filter.matches(itemData->item)) { newFilteredItems.append(itemData->item); m_filteredItems.insert(itemData->item); } @@ -526,7 +526,7 @@ void KFileItemModel::setNameFilter(const QString& nameFilter) QMutableSetIterator<KFileItem> it(m_filteredItems); while (it.hasNext()) { const KFileItem item = it.next(); - if (matchesNameFilter(item)) { + if (m_filter.matches(item)) { newVisibleItems.append(item); m_filteredItems.remove(item); } @@ -538,7 +538,7 @@ void KFileItemModel::setNameFilter(const QString& nameFilter) QString KFileItemModel::nameFilter() const { - return m_nameFilter; + return m_filter.pattern(); } void KFileItemModel::onGroupedSortingChanged(bool current) @@ -686,7 +686,7 @@ void KFileItemModel::slotNewItems(const KFileItemList& items) } } - if (m_nameFilter.isEmpty()) { + if (m_filter.pattern().isEmpty()) { m_pendingItemsToInsert.append(items); } else { // The name-filter is active. Hide filtered items @@ -694,7 +694,7 @@ void KFileItemModel::slotNewItems(const KFileItemList& items) // the filtered items in m_filteredItems. KFileItemList filteredItems; foreach (const KFileItem& item, items) { - if (matchesNameFilter(item)) { + if (m_filter.matches(item)) { filteredItems.append(item); } else { m_filteredItems.insert(item); @@ -1769,15 +1769,4 @@ QList<QPair<int, QVariant> > KFileItemModel::genericStringRoleGroups(const QByte return groups; } -bool KFileItemModel::matchesNameFilter(const KFileItem& item) const -{ - // TODO #1: A performance improvement would be possible by caching m_nameFilter.toLower(). - // Before adding yet-another-member it should be checked whether it brings a noticable - // improvement at all. - - // TODO #2: If the user entered a '*' use a regular expression - const QString itemText = item.text().toLower(); - return itemText.contains(m_nameFilter.toLower()); -} - #include "kfileitemmodel.moc" |
