_ircChannel = channel;
reset();
if(_ircChannel) {
+ connect(channel, SIGNAL(destroyed()), this, SLOT(setIrcChannel()));
connect(channel, SIGNAL(ircUserJoined(IrcUser *)), this, SLOT(addUser(IrcUser *)));
connect(channel, SIGNAL(ircUserParted(IrcUser *)), this, SLOT(removeUser(IrcUser *)));
connect(channel, SIGNAL(ircUserNickSet(IrcUser *, QString)), this, SLOT(renameUser(IrcUser *)));
addUser(ircuser);
}
}
-
}
QVariant NickModel::headerData(int section, Qt::Orientation orientation, 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();
}
return index.internalId();
}
-void NickModel::addUser(IrcUser *user) {
+void NickModel::addUser(IrcUser *user) { //qDebug() << "adding" << user->nick();
int cat = userCategory(user);
beginInsertRows(createIndex(cat-1, 0, 0), 0, 0);
users[cat-1].prepend(user);
endInsertRows();
}
-void NickModel::removeUser(IrcUser *user) {
+void NickModel::removeUser(IrcUser *user) { //qDebug() << "removing" << user->nick();
// we don't know for sure which category this user was in, so we have to search
QModelIndex index = indexOfUser(user);
removeUser(index);
endRemoveRows();
}
-void NickModel::renameUser(IrcUser *user) {
+void NickModel::renameUser(IrcUser *user) { //qDebug() << "renaming" << user->nick();
QModelIndex index = indexOfUser(user);
emit dataChanged(index, index);
}
}
}
+/******************************************************************************************
+ * 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;
+}