X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fuisupport%2Fbufferviewfilter.cpp;h=2de916b066da9c2e8f1b290ffc55808d1a4f4135;hp=5727d348fbee58ccebc63652a083c9ffe9dc0c6f;hb=eba1be2f198709d25b9d2e1e48023dfadecd60db;hpb=da1ad61b4d3f7b21d34a3a22e8408eb593d2b0a8 diff --git a/src/uisupport/bufferviewfilter.cpp b/src/uisupport/bufferviewfilter.cpp index 5727d348..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; + // 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,22 +291,33 @@ 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::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 _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(); @@ -311,7 +328,7 @@ QVariant BufferViewFilter::foreground(const QModelIndex &index) const { if(activity & BufferInfo::OtherActivity) return _FgColorOtherActivity; - if(!index.data(NetworkModel::ItemActiveRole).toBool()) + if(!index.data(NetworkModel::ItemActiveRole).toBool() || index.data(NetworkModel::UserAwayRole).toBool()) return _FgColorInactiveActivity; return _FgColorNoActivity;