X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fuisupport%2Fbufferviewfilter.cpp;h=2de916b066da9c2e8f1b290ffc55808d1a4f4135;hp=58998530b0207a8db40f11e578444c2894f4fa1d;hb=eba1be2f198709d25b9d2e1e48023dfadecd60db;hpb=332069a1830ed3a055ac6f2d7661bae1cc83e40c diff --git a/src/uisupport/bufferviewfilter.cpp b/src/uisupport/bufferviewfilter.cpp index 58998530..2de916b0 100644 --- a/src/uisupport/bufferviewfilter.cpp +++ b/src/uisupport/bufferviewfilter.cpp @@ -27,6 +27,7 @@ #include "bufferinfo.h" #include "buffermodel.h" #include "client.h" +#include "iconloader.h" #include "networkmodel.h" #include "uisettings.h" @@ -43,7 +44,10 @@ public: BufferViewFilter::BufferViewFilter(QAbstractItemModel *model, BufferViewConfig *config) : QSortFilterProxyModel(model), _config(0), - _sortOrder(Qt::AscendingOrder) + _sortOrder(Qt::AscendingOrder), + _userOfflineIcon(SmallIcon("user-offline")), + _userAwayIcon(SmallIcon("user-away")), + _userOnlineIcon(SmallIcon("user-online")) { setConfig(config); setSourceModel(model); @@ -216,13 +220,15 @@ bool BufferViewFilter::filterAcceptBuffer(const QModelIndex &source_bufferIndex) if(!(config()->allowedBufferTypes() & (BufferInfo::Type)source_bufferIndex.data(NetworkModel::BufferTypeRole).toInt())) return false; - if(config()->hideInactiveBuffers() && !source_bufferIndex.data(NetworkModel::ItemActiveRole).toBool()) + // the following dynamic filters may not trigger if the buffer is currently selected. + if(bufferId == Client::bufferModel()->standardSelectionModel()->currentIndex().data(NetworkModel::BufferIdRole).value()) + return true; + + if(config()->hideInactiveBuffers() && !source_bufferIndex.data(NetworkModel::ItemActiveRole).toBool() && activityLevel <= BufferInfo::OtherActivity) return false; - if(config()->minimumActivity() > activityLevel) { - if(bufferId != Client::bufferModel()->standardSelectionModel()->currentIndex().data(NetworkModel::BufferIdRole).value()) - return false; - } + if(config()->minimumActivity() > activityLevel) + return false; return true; } @@ -285,26 +291,34 @@ bool BufferViewFilter::networkLessThan(const QModelIndex &source_left, const QMo QVariant BufferViewFilter::data(const QModelIndex &index, int role) const { switch(role) { + case Qt::DecorationRole: + return icon(index); case Qt::ForegroundRole: return foreground(index); - case Qt::BackgroundRole: - if(index.data(NetworkModel::UserAwayRole).toBool()) { - QLinearGradient gradient(0, 0, 0, 18); - gradient.setColorAt(0.4, QApplication::palette().color(QPalette::Normal, QPalette::Base)); - gradient.setColorAt(0.5, QApplication::palette().color(QPalette::Disabled, QPalette::Base)); - gradient.setColorAt(0.6, QApplication::palette().color(QPalette::Normal, QPalette::Base)); - return QBrush(gradient); - } - // else: fallthrough to default default: return QSortFilterProxyModel::data(index, role); } } -QVariant BufferViewFilter::foreground(const QModelIndex &index) const { +QVariant BufferViewFilter::icon(const QModelIndex &index) const { + if(index.column() != 0) + return QVariant(); + + if(index.data(NetworkModel::BufferTypeRole).toInt() != BufferInfo::QueryBuffer) + return QVariant(); + if(!index.data(NetworkModel::ItemActiveRole).toBool()) - return _FgColorInactiveActivity; + return _userOfflineIcon; + + if(index.data(NetworkModel::UserAwayRole).toBool()) + return _userAwayIcon; + else + return _userOnlineIcon; + + return QVariant(); +} +QVariant BufferViewFilter::foreground(const QModelIndex &index) const { BufferInfo::ActivityLevel activity = (BufferInfo::ActivityLevel)index.data(NetworkModel::BufferActivityRole).toInt(); if(activity & BufferInfo::Highlight) @@ -314,6 +328,9 @@ QVariant BufferViewFilter::foreground(const QModelIndex &index) const { if(activity & BufferInfo::OtherActivity) return _FgColorOtherActivity; + if(!index.data(NetworkModel::ItemActiveRole).toBool() || index.data(NetworkModel::UserAwayRole).toBool()) + return _FgColorInactiveActivity; + return _FgColorNoActivity; }