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:
parent
b909dd41c5
commit
68cc35e3fd
@ -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;
|
||||
}
|
||||
|
@ -62,6 +62,7 @@ public slots:
|
||||
|
||||
private:
|
||||
TorrentContentModel* m_model;
|
||||
bool hasFiltered(const QModelIndex& folder) const;
|
||||
};
|
||||
|
||||
#endif // TORRENTCONTENTFILTERMODEL_H
|
||||
|
Loading…
x
Reference in New Issue
Block a user