X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fclient%2Fnickmodel.cpp;h=f755c0ed6be34fd517b27b9194ff83c6403f5d3d;hp=a1e8bcd36b8d89128387c76c296ab94ae4607fa3;hb=8a3c3f283e33a9ae87b4b3bed94e676f12dd5d2e;hpb=836534302ea576791dc5cc01918dd4c5abd61878 diff --git a/src/client/nickmodel.cpp b/src/client/nickmodel.cpp index a1e8bcd3..f755c0ed 100644 --- a/src/client/nickmodel.cpp +++ b/src/client/nickmodel.cpp @@ -194,14 +194,14 @@ int NickModel::categoryFromIndex(const QModelIndex &index) const { return index.internalId(); } -void NickModel::addUser(IrcUser *user) { //qDebug() << "adding" << user->nick(); +void NickModel::addUser(IrcUser *user) { int cat = userCategory(user); beginInsertRows(createIndex(cat-1, 0, 0), 0, 0); users[cat-1].prepend(user); endInsertRows(); } -void NickModel::removeUser(IrcUser *user) { //qDebug() << "removing" << user->nick(); +void NickModel::removeUser(IrcUser *user) { // we don't know for sure which category this user was in, so we have to search QModelIndex index = indexOfUser(user); removeUser(index); @@ -241,6 +241,16 @@ FilteredNickModel::FilteredNickModel(QObject *parent) : QSortFilterProxyModel(pa } +FilteredNickModel::~FilteredNickModel() { + +} + +void FilteredNickModel::setSourceModel(QAbstractItemModel *model) { + QSortFilterProxyModel::setSourceModel(model); + connect(model, SIGNAL(rowsInserted(const QModelIndex &, int, int)), this, SLOT(sourceRowsInserted(const QModelIndex &, int, int))); + connect(model, SIGNAL(rowsRemoved(const QModelIndex &, int, int)), this, SLOT(sourceRowsRemoved(const QModelIndex &, int, int))); +} + // Hide empty categories bool FilteredNickModel::filterAcceptsRow(int source_row, const QModelIndex &source_parent) const { if(!source_parent.isValid()) { @@ -250,3 +260,19 @@ bool FilteredNickModel::filterAcceptsRow(int source_row, const QModelIndex &sour return true; } +void FilteredNickModel::sourceRowsInserted(const QModelIndex &index, int start, int end) { + if(!index.isValid()) return; + if(sourceModel()->rowCount(index) <= end - start + 1) { + // category no longer empty + invalidateFilter(); + } +} + +void FilteredNickModel::sourceRowsRemoved(const QModelIndex &index, int, int) { + if(!index.isValid()) return; + if(sourceModel()->rowCount(index) == 0) { + // category is now empty! + invalidateFilter(); + } +} +