From eba1be2f198709d25b9d2e1e48023dfadecd60db Mon Sep 17 00:00:00 2001 From: Marcus Eggenberger Date: Mon, 17 Nov 2008 02:27:07 +0100 Subject: [PATCH] Query state (offline / online / away) is now properly indicated with an icon. Yeahi for Oxygen! \o/ --- src/uisupport/bufferviewfilter.cpp | 37 +++++++++++++++++++++--------- src/uisupport/bufferviewfilter.h | 7 ++++++ 2 files changed, 33 insertions(+), 11 deletions(-) diff --git a/src/uisupport/bufferviewfilter.cpp b/src/uisupport/bufferviewfilter.cpp index 687cd801..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); @@ -287,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(); @@ -313,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; diff --git a/src/uisupport/bufferviewfilter.h b/src/uisupport/bufferviewfilter.h index e9c3fc85..22fc2fd5 100644 --- a/src/uisupport/bufferviewfilter.h +++ b/src/uisupport/bufferviewfilter.h @@ -24,6 +24,7 @@ #include #include #include +#include #include #include #include @@ -56,6 +57,7 @@ public: virtual bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent); QVariant data(const QModelIndex &index, int role) const; + QVariant icon(const QModelIndex &index) const; QVariant foreground(const QModelIndex &index) const; void setConfig(BufferViewConfig *config); @@ -91,6 +93,11 @@ private: QColor _FgColorHighlightActivity; QColor _FgColorNewMessageActivity; QColor _FgColorOtherActivity; + + QPixmap _userOfflineIcon; + QPixmap _userAwayIcon; + QPixmap _userOnlineIcon; + void loadColors(); bool filterAcceptBuffer(const QModelIndex &) const; -- 2.20.1