X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fuisupport%2Fbufferviewfilter.cpp;h=ac4bae5daa240c4d03203562cfcc34bce1b0e595;hp=4204ac0f4e01cf86712cfad44d17bf1e49c3223b;hb=770b7ef54b03f3ebd1e29a58b4757505e1809b2d;hpb=8699dd758516d0ded076811e8ea656adc95e69d0 diff --git a/src/uisupport/bufferviewfilter.cpp b/src/uisupport/bufferviewfilter.cpp index 4204ac0f..ac4bae5d 100644 --- a/src/uisupport/bufferviewfilter.cpp +++ b/src/uisupport/bufferviewfilter.cpp @@ -20,30 +20,20 @@ #include "bufferviewfilter.h" +#include + #include "networkmodel.h" /***************************************** * The Filter for the Tree View *****************************************/ -BufferViewFilter::BufferViewFilter(QAbstractItemModel *model, const Modes &filtermode, const QList &nets) +BufferViewFilter::BufferViewFilter(QAbstractItemModel *model, const Modes &filtermode, const QList &nets) : QSortFilterProxyModel(model), mode(filtermode), - networks(QSet::fromList(nets)) + networks(QSet::fromList(nets)) { setSourceModel(model); setSortCaseSensitivity(Qt::CaseInsensitive); - - // FIXME - // ok the following basically sucks. therfore it's commented out. Justice served. - // a better solution would use dataChanged() - - // I have this feeling that this resulted in a fuckup once... no clue though right now and invalidateFilter isn't a slot -.- - //connect(model, SIGNAL(invalidateFilter()), this, SLOT(invalidate())); - // connect(model, SIGNAL(invalidateFilter()), this, SLOT(invalidateFilter_())); -} - -void BufferViewFilter::invalidateFilter_() { - QSortFilterProxyModel::invalidateFilter(); } Qt::ItemFlags BufferViewFilter::flags(const QModelIndex &index) const { @@ -63,9 +53,10 @@ bool BufferViewFilter::dropMimeData(const QMimeData *data, Qt::DropAction action if(!NetworkModel::mimeContainsBufferList(data)) return false; - QList< QPair > bufferList = NetworkModel::mimeDataToBufferList(data); + QList< QPair > bufferList = NetworkModel::mimeDataToBufferList(data); - uint netId, bufferId; + NetworkId netId; + BufferId bufferId; for(int i = 0; i < bufferList.count(); i++) { netId = bufferList[i].first; bufferId = bufferList[i].second; @@ -77,7 +68,7 @@ bool BufferViewFilter::dropMimeData(const QMimeData *data, Qt::DropAction action return true; } -void BufferViewFilter::addBuffer(const uint &bufferuid) { +void BufferViewFilter::addBuffer(const BufferId &bufferuid) { if(!buffers.contains(bufferuid)) { buffers << bufferuid; invalidateFilter(); @@ -92,8 +83,8 @@ void BufferViewFilter::removeBuffer(const QModelIndex &index) { return; // only child elements can be deleted bool lastBuffer = (rowCount(index.parent()) == 1); - uint netId = index.data(NetworkModel::NetworkIdRole).toUInt(); - uint bufferuid = index.data(NetworkModel::BufferUidRole).toUInt(); + NetworkId netId = index.data(NetworkModel::NetworkIdRole).value(); + BufferId bufferuid = index.data(NetworkModel::BufferIdRole).value(); if(buffers.contains(bufferuid)) { buffers.remove(bufferuid); @@ -110,13 +101,13 @@ void BufferViewFilter::removeBuffer(const QModelIndex &index) { bool BufferViewFilter::filterAcceptBuffer(const QModelIndex &source_bufferIndex) const { - Buffer::Type bufferType = (Buffer::Type) source_bufferIndex.data(NetworkModel::BufferTypeRole).toInt(); + BufferItem::Type bufferType = (BufferItem::Type) source_bufferIndex.data(NetworkModel::BufferTypeRole).toInt(); - if((mode & NoChannels) && bufferType == Buffer::ChannelType) + if((mode & NoChannels) && bufferType == BufferItem::ChannelType) return false; - if((mode & NoQueries) && bufferType == Buffer::QueryType) + if((mode & NoQueries) && bufferType == BufferItem::QueryType) return false; - if((mode & NoServers) && bufferType == Buffer::StatusType) + if((mode & NoServers) && bufferType == BufferItem::StatusType) return false; // bool isActive = source_bufferIndex.data(NetworkModel::BufferActiveRole).toBool(); @@ -126,7 +117,7 @@ bool BufferViewFilter::filterAcceptBuffer(const QModelIndex &source_bufferIndex) // return false; if((mode & FullCustom)) { - uint bufferuid = source_bufferIndex.data(NetworkModel::BufferUidRole).toUInt(); + BufferId bufferuid = source_bufferIndex.data(NetworkModel::BufferIdRole).value(); return buffers.contains(bufferuid); } @@ -134,7 +125,7 @@ bool BufferViewFilter::filterAcceptBuffer(const QModelIndex &source_bufferIndex) } bool BufferViewFilter::filterAcceptNetwork(const QModelIndex &source_index) const { - uint net = source_index.data(NetworkModel::NetworkIdRole).toUInt(); + NetworkId net = source_index.data(NetworkModel::NetworkIdRole).value(); return !((mode & (SomeNets | FullCustom)) && !networks.contains(net)); } @@ -162,3 +153,28 @@ bool BufferViewFilter::lessThan(const QModelIndex &left, const QModelIndex &righ return QSortFilterProxyModel::lessThan(left, right); } +QVariant BufferViewFilter::data(const QModelIndex &index, int role) const { + if(role == Qt::ForegroundRole) + return foreground(index); + else + return QSortFilterProxyModel::data(index, role); +} + +QVariant BufferViewFilter::foreground(const QModelIndex &index) const { + if(!index.data(NetworkModel::ItemActiveRole).toBool()) + return QColor(Qt::gray); + + BufferItem::ActivityLevel activity = (BufferItem::ActivityLevel)index.data(NetworkModel::BufferActivityRole).toInt(); + + if(activity & BufferItem::Highlight) + return QColor(Qt::magenta); + if(activity & BufferItem::NewMessage) + return QColor(Qt::green); + if(activity & BufferItem::OtherActivity) + return QColor(Qt::darkGreen); + + return QColor(Qt::black); + + // FIXME:: make colors configurable; + +}