#include "bufferinfo.h"
#include "buffermodel.h"
#include "client.h"
+#include "iconloader.h"
#include "networkmodel.h"
#include "uisettings.h"
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);
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();
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;
#include <QColor>
#include <QDropEvent>
#include <QFlags>
+#include <QPixmap>
#include <QPointer>
#include <QSet>
#include <QSortFilterProxyModel>
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);
QColor _FgColorHighlightActivity;
QColor _FgColorNewMessageActivity;
QColor _FgColorOtherActivity;
+
+ QPixmap _userOfflineIcon;
+ QPixmap _userAwayIcon;
+ QPixmap _userOnlineIcon;
+
void loadColors();
bool filterAcceptBuffer(const QModelIndex &) const;