X-Git-Url: https://git.quassel-irc.org/?a=blobdiff_plain;f=src%2Fuisupport%2Fbufferviewfilter.cpp;h=4f095283d4f141eb44740f65d94653d48363a670;hb=9cad7696cf0ef2f58c231c7b1eaaae0c16d0273d;hp=687cd801a6b39fd9319de47486ed69310fa0e0f1;hpb=34a9a0d412b1acc4234ebc316fa4586e006b91bf;p=quassel.git diff --git a/src/uisupport/bufferviewfilter.cpp b/src/uisupport/bufferviewfilter.cpp index 687cd801..4f095283 100644 --- a/src/uisupport/bufferviewfilter.cpp +++ b/src/uisupport/bufferviewfilter.cpp @@ -26,7 +26,9 @@ #include "bufferinfo.h" #include "buffermodel.h" +#include "buffersettings.h" #include "client.h" +#include "iconloader.h" #include "networkmodel.h" #include "uisettings.h" @@ -43,7 +45,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); @@ -54,6 +59,10 @@ BufferViewFilter::BufferViewFilter(QAbstractItemModel *model, BufferViewConfig * connect(this, SIGNAL(_dataChanged(const QModelIndex &, const QModelIndex &)), this, SLOT(_q_sourceDataChanged(QModelIndex,QModelIndex))); + + BufferSettings bufferSettings; + _showUserStateIcons = bufferSettings.showUserStateIcons(); + bufferSettings.notify("ShowUserStateIcons", this, SLOT(showUserStateIconsChanged())); } void BufferViewFilter::loadColors() { @@ -65,6 +74,11 @@ void BufferViewFilter::loadColors() { _FgColorOtherActivity = s.value("otherActivityFG", QVariant(QColor(Qt::darkGreen))).value(); } +void BufferViewFilter::showUserStateIconsChanged() { + BufferSettings bufferSettings; + _showUserStateIcons = bufferSettings.showUserStateIcons(); +} + void BufferViewFilter::setConfig(BufferViewConfig *config) { if(_config == config) return; @@ -287,22 +301,36 @@ 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(!_showUserStateIcons) + return QVariant(); + + 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(); @@ -313,7 +341,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;