X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fuisupport%2Fbufferhotlistfilter.cpp;fp=src%2Fuisupport%2Fbufferhotlistfilter.cpp;h=1c262271d5ac0eeda86162fab41df006856c47e7;hp=0000000000000000000000000000000000000000;hb=754a784dda6fe5235c59a7ce3829599ccf62eeda;hpb=6b31f4c8abb36ebe658c2e5ce2a8e9ba2a50f443 diff --git a/src/uisupport/bufferhotlistfilter.cpp b/src/uisupport/bufferhotlistfilter.cpp new file mode 100644 index 00000000..1c262271 --- /dev/null +++ b/src/uisupport/bufferhotlistfilter.cpp @@ -0,0 +1,71 @@ +/*************************************************************************** + * Copyright (C) 2005-08 by the Quassel Project * + * devel@quassel-irc.org * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) version 3. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ + +#include "bufferhotlistfilter.h" + +#include "networkmodel.h" + +BufferHotListFilter::BufferHotListFilter(QAbstractItemModel *source, QObject *parent) + : QSortFilterProxyModel(parent) +{ + setSourceModel(source); + setDynamicSortFilter(true); + sort(0, Qt::DescendingOrder); // enable sorting... this is "usually" triggered by a enabling setSortingEnabled(true) on a view; +} + +bool BufferHotListFilter::filterAcceptsRow(int source_row, const QModelIndex &source_parent) const { + Q_ASSERT(sourceModel()); + QModelIndex source_index = sourceModel()->index(source_row, 0, source_parent); + + MsgId firstUnreadMsgId = sourceModel()->data(source_index, NetworkModel::BufferFirstUnreadMsgIdRole).value(); + if(!firstUnreadMsgId.isValid()) + return false; + + // filter out statusbuffers (it's accessable as networkitem) + BufferInfo::Type bufferType = (BufferInfo::Type)sourceModel()->data(source_index, NetworkModel::BufferTypeRole).toInt(); + if(bufferType == BufferInfo::StatusBuffer) { + NetworkModel::ItemType itemType = (NetworkModel::ItemType)sourceModel()->data(source_index, NetworkModel::ItemTypeRole).toInt(); + return itemType == NetworkModel::NetworkItemType; + } + + return true; +} + +bool BufferHotListFilter::lessThan(const QModelIndex &source_left, const QModelIndex &source_right) const { + int leftActivity = sourceModel()->data(source_left, NetworkModel::BufferActivityRole).toInt(); + int rightActivity = sourceModel()->data(source_right, NetworkModel::BufferActivityRole).toInt(); + if(leftActivity != rightActivity) + return leftActivity < rightActivity; + + MsgId leftUnreadMsgId = sourceModel()->data(source_left, NetworkModel::BufferFirstUnreadMsgIdRole).value(); + MsgId rightUnreadMsgId = sourceModel()->data(source_right, NetworkModel::BufferFirstUnreadMsgIdRole).value(); + return leftUnreadMsgId > rightUnreadMsgId; // newer messages are treated to be "less" +} + +// QVariant BufferHotListFilter::data(const QModelIndex &index, int role) const { +// QVariant d = QSortFilterProxyModel::data(index, role); + +// if(role == Qt::DisplayRole) { +// int activity = QSortFilterProxyModel::data(index, NetworkModel::BufferActivityRole).toInt(); +// MsgId unreadMsgId = QSortFilterProxyModel::data(index, NetworkModel::BufferFirstUnreadMsgIdRole).value(); +// return QString("%1 %2 %3").arg(d.toString()).arg(activity).arg(unreadMsgId.toInt()); +// } +// return d; +// }