X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fclient%2Fnickmodel.cpp;h=a3e7692f9a6f44d049e57643fc06232fdc1b2003;hp=d7e4248c35869d0b7fb497c92c367c7a8ead9448;hb=fb1c465a71b110984d59722bbf0ed873674daf94;hpb=e671e9da1edaab37ec403f575979f9a92a766e9a diff --git a/src/client/nickmodel.cpp b/src/client/nickmodel.cpp index d7e4248c..a3e7692f 100644 --- a/src/client/nickmodel.cpp +++ b/src/client/nickmodel.cpp @@ -140,25 +140,32 @@ QVariant NickModel::data(const QModelIndex &index, int role) const { } int cat = index.internalId(); if(!cat) { // top-level item (category) - if(role == Qt::DisplayRole) { - QString title; - switch(index.row()) { - case 0: title = tr("%n Owner(s)", "", users[index.row()].count()); break; - case 1: title = tr("%n Admin(s)", "", users[index.row()].count()); break; - case 2: title = tr("%n Operator(s)", "", users[index.row()].count()); break; - case 3: title = tr("%n Half-Op(s)", "", users[index.row()].count()); break; - case 4: title = tr("%n Voiced", "", users[index.row()].count()); break; - case 5: title = tr("%n User(s)", "", users[index.row()].count()); break; - default: - qDebug() << "invalid model index"; return QVariant(); + switch(role) { + case Qt::DisplayRole: { + QString title; + switch(index.row()) { + case 0: title = tr("%n Owner(s)", "", users[index.row()].count()); break; + case 1: title = tr("%n Admin(s)", "", users[index.row()].count()); break; + case 2: title = tr("%n Operator(s)", "", users[index.row()].count()); break; + case 3: title = tr("%n Half-Op(s)", "", users[index.row()].count()); break; + case 4: title = tr("%n Voiced", "", users[index.row()].count()); break; + case 5: title = tr("%n User(s)", "", users[index.row()].count()); break; + default: qDebug() << "invalid model index"; return QVariant(); + } + return title; } - return title; - } else return QVariant(); + case SortKeyRole: return index.row(); + default: return QVariant(); + } } else { IrcUser *user = users[cat-1][index.row()]; switch(role) { case Qt::DisplayRole: return user->nick(); + case Qt::ToolTipRole: + return user->hostmask(); + case SortKeyRole: + return user->nick(); default: return QVariant(); } @@ -223,4 +230,23 @@ void NickModel::changeUserModes(IrcUser *user) { } } +/****************************************************************************************** + * FilteredNickModel + ******************************************************************************************/ + +FilteredNickModel::FilteredNickModel(QObject *parent) : QSortFilterProxyModel(parent) { + setDynamicSortFilter(true); + setSortCaseSensitivity(Qt::CaseInsensitive); + setSortRole(NickModel::SortKeyRole); + +} + +// Hide empty categories +bool FilteredNickModel::filterAcceptsRow(int source_row, const QModelIndex &source_parent) const { + if(!source_parent.isValid()) { + QModelIndex index = sourceModel()->index(source_row, 0); + return sourceModel()->rowCount(index); + } + return true; +}