X-Git-Url: https://git.quassel-irc.org/?a=blobdiff_plain;f=src%2Fuisupport%2Fbufferviewfilter.cpp;h=4f095283d4f141eb44740f65d94653d48363a670;hb=9cad7696cf0ef2f58c231c7b1eaaae0c16d0273d;hp=d3a1b52160f6384a36e275a8b0227b3116a6f320;hpb=2a92703a6941fb7aa85f5876c51b360878475f01;p=quassel.git diff --git a/src/uisupport/bufferviewfilter.cpp b/src/uisupport/bufferviewfilter.cpp index d3a1b521..4f095283 100644 --- a/src/uisupport/bufferviewfilter.cpp +++ b/src/uisupport/bufferviewfilter.cpp @@ -24,8 +24,11 @@ #include #include +#include "bufferinfo.h" #include "buffermodel.h" +#include "buffersettings.h" #include "client.h" +#include "iconloader.h" #include "networkmodel.h" #include "uisettings.h" @@ -42,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); @@ -53,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() { @@ -64,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; @@ -202,7 +217,7 @@ bool BufferViewFilter::filterAcceptBuffer(const QModelIndex &source_bufferIndex) // add the buffer if... if(config()->isInitialized() && !config()->removedBuffers().contains(bufferId) // it hasn't been manually removed and either && ((config()->addNewBuffersAutomatically() && !config()->temporarilyRemovedBuffers().contains(bufferId)) // is totally unknown to us (a new buffer)... - || (config()->temporarilyRemovedBuffers().contains(bufferId) && activityLevel > Buffer::OtherActivity))) { // or was just temporarily hidden and has a new message waiting for us. + || (config()->temporarilyRemovedBuffers().contains(bufferId) && activityLevel > BufferInfo::OtherActivity))) { // or was just temporarily hidden and has a new message waiting for us. addBuffer(bufferId); } // note: adding the buffer to the valid list does not temper with the following filters ("show only channels" and stuff) @@ -215,13 +230,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; } @@ -284,35 +301,49 @@ 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(!_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 _FgColorInactiveActivity; + return _userOfflineIcon; + + if(index.data(NetworkModel::UserAwayRole).toBool()) + return _userAwayIcon; + else + return _userOnlineIcon; - Buffer::ActivityLevel activity = (Buffer::ActivityLevel)index.data(NetworkModel::BufferActivityRole).toInt(); + return QVariant(); +} + +QVariant BufferViewFilter::foreground(const QModelIndex &index) const { + BufferInfo::ActivityLevel activity = (BufferInfo::ActivityLevel)index.data(NetworkModel::BufferActivityRole).toInt(); - if(activity & Buffer::Highlight) + if(activity & BufferInfo::Highlight) return _FgColorHighlightActivity; - if(activity & Buffer::NewMessage) + if(activity & BufferInfo::NewMessage) return _FgColorNewMessageActivity; - if(activity & Buffer::OtherActivity) + if(activity & BufferInfo::OtherActivity) return _FgColorOtherActivity; + if(!index.data(NetworkModel::ItemActiveRole).toBool() || index.data(NetworkModel::UserAwayRole).toBool()) + return _FgColorInactiveActivity; + return _FgColorNoActivity; }