Browse Source

Hide empty folders after filtering. Closes #74.

adaptive-webui-19844
sledgehammer999 11 years ago
parent
commit
68cc35e3fd
  1. 26
      src/torrentcontentfiltermodel.cpp
  2. 1
      src/torrentcontentfiltermodel.h

26
src/torrentcontentfiltermodel.cpp

@ -75,8 +75,8 @@ QModelIndex TorrentContentFilterModel::parent(const QModelIndex& child) const
bool TorrentContentFilterModel::filterAcceptsRow(int source_row, const QModelIndex& source_parent) 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) { if (m_model->itemType(m_model->index(source_row, 0, source_parent)) == TorrentContentModelItem::FolderType) {
// always accept folders, since we want to filter their children // accept folders if they have at least one filtered item
return true; return hasFiltered(m_model->index(source_row, 0, source_parent));
} }
return QSortFilterProxyModel::filterAcceptsRow(source_row, source_parent); return QSortFilterProxyModel::filterAcceptsRow(source_row, source_parent);
} }
@ -114,3 +114,25 @@ void TorrentContentFilterModel::selectNone()
} }
emit dataChanged(index(0,0), index(rowCount(), columnCount())); 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;
}

1
src/torrentcontentfiltermodel.h

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

Loading…
Cancel
Save