1
0
mirror of https://github.com/d47081/qBittorrent.git synced 2025-01-23 13:04:23 +00:00

Hide empty folders after filtering. Closes #74.

This commit is contained in:
sledgehammer999 2013-11-10 03:30:04 +02:00
parent b909dd41c5
commit 68cc35e3fd
2 changed files with 25 additions and 2 deletions

View File

@ -75,8 +75,8 @@ QModelIndex TorrentContentFilterModel::parent(const QModelIndex& child) const
bool TorrentContentFilterModel::filterAcceptsRow(int source_row, const QModelIndex& source_parent) const
{
if (m_model->itemType(m_model->index(source_row, 0, source_parent)) == TorrentContentModelItem::FolderType) {
// always accept folders, since we want to filter their children
return true;
// accept folders if they have at least one filtered item
return hasFiltered(m_model->index(source_row, 0, source_parent));
}
return QSortFilterProxyModel::filterAcceptsRow(source_row, source_parent);
}
@ -114,3 +114,25 @@ void TorrentContentFilterModel::selectNone()
}
emit dataChanged(index(0,0), index(rowCount(), columnCount()));
}
bool TorrentContentFilterModel::hasFiltered(const QModelIndex& folder) const {
// this should be called only with folders
// check if the folder name itself matches the filter string
QString name = folder.data().toString();
if (name.contains(filterRegExp()))
return true;
for (int child = 0; child < m_model->rowCount(folder); child++) {
QModelIndex childIndex = m_model->index(child, 0, folder);
if (m_model->hasChildren(childIndex)) {
if (hasFiltered(childIndex))
return true;
else
continue;
}
name = childIndex.data().toString();
if (name.contains(filterRegExp()))
return true;
}
return false;
}

View File

@ -62,6 +62,7 @@ public slots:
private:
TorrentContentModel* m_model;
bool hasFiltered(const QModelIndex& folder) const;
};
#endif // TORRENTCONTENTFILTERMODEL_H