From 01e673b540fd0cf2e6442b490616340ee08f0e34 Mon Sep 17 00:00:00 2001 From: Marcus Eggenberger Date: Sun, 1 Feb 2009 17:34:18 +0100 Subject: [PATCH] BufferView colors are now determined by it's delegate and no longer by ForegroundRole Also making more use of QPalette --- src/uisupport/bufferview.cpp | 104 +++++++++++++++++++---------- src/uisupport/bufferview.h | 14 +++- src/uisupport/bufferviewfilter.cpp | 34 ---------- src/uisupport/bufferviewfilter.h | 11 +-- 4 files changed, 81 insertions(+), 82 deletions(-) diff --git a/src/uisupport/bufferview.cpp b/src/uisupport/bufferview.cpp index addea42b..51d5ddf5 100644 --- a/src/uisupport/bufferview.cpp +++ b/src/uisupport/bufferview.cpp @@ -42,40 +42,6 @@ #include "quasselui.h" #include "uisettings.h" -bool TristateDelegate::editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &index) { - if(event->type() != QEvent::MouseButtonRelease) - return QStyledItemDelegate::editorEvent(event, model, option, index); - - if(!(model->flags(index) & Qt::ItemIsUserCheckable)) - return QStyledItemDelegate::editorEvent(event, model, option, index); - - QVariant value = index.data(Qt::CheckStateRole); - if(!value.isValid()) - return QStyledItemDelegate::editorEvent(event, model, option, index); - - QStyleOptionViewItemV4 viewOpt(option); - initStyleOption(&viewOpt, index); - - QRect checkRect = viewOpt.widget->style()->subElementRect(QStyle::SE_ItemViewItemCheckIndicator, &viewOpt, viewOpt.widget); - QMouseEvent *me = static_cast(event); - - if(me->button() != Qt::LeftButton || !checkRect.contains(me->pos())) - return QStyledItemDelegate::editorEvent(event, model, option, index); - - Qt::CheckState state = static_cast(value.toInt()); - if(state == Qt::Unchecked) - state = Qt::PartiallyChecked; - else if(state == Qt::PartiallyChecked) - state = Qt::Checked; - else - state = Qt::Unchecked; - model->setData(index, state, Qt::CheckStateRole); - return true; -} - - - - /***************************************** * The TreeView showing the Buffers *****************************************/ @@ -90,7 +56,7 @@ BufferView::BufferView(QWidget *parent) setSelectionMode(QAbstractItemView::ExtendedSelection); QAbstractItemDelegate *oldDelegate = itemDelegate(); - TristateDelegate *tristateDelegate = new TristateDelegate(this); + BufferViewDelegate *tristateDelegate = new BufferViewDelegate(this); setItemDelegate(tristateDelegate); delete oldDelegate; } @@ -494,6 +460,74 @@ QSize BufferView::sizeHint() const { return QSize(columnSize, 50); } + +// **************************************** +// BufferViewDelgate +// **************************************** +BufferViewDelegate::BufferViewDelegate(QObject *parent) + : QStyledItemDelegate(parent) +{ + UiSettings s("QtUiStyle/Colors"); + _FgColorHighlightActivity = s.value("highlightActivityFG", QVariant(QColor(Qt::magenta))).value(); + _FgColorNewMessageActivity = s.value("newMessageActivityFG", QVariant(QColor(Qt::green))).value(); + _FgColorOtherActivity = s.value("otherActivityFG", QVariant(QColor(Qt::darkGreen))).value(); +} + +bool BufferViewDelegate::editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &index) { + if(event->type() != QEvent::MouseButtonRelease) + return QStyledItemDelegate::editorEvent(event, model, option, index); + + if(!(model->flags(index) & Qt::ItemIsUserCheckable)) + return QStyledItemDelegate::editorEvent(event, model, option, index); + + QVariant value = index.data(Qt::CheckStateRole); + if(!value.isValid()) + return QStyledItemDelegate::editorEvent(event, model, option, index); + + QStyleOptionViewItemV4 viewOpt(option); + initStyleOption(&viewOpt, index); + + QRect checkRect = viewOpt.widget->style()->subElementRect(QStyle::SE_ItemViewItemCheckIndicator, &viewOpt, viewOpt.widget); + QMouseEvent *me = static_cast(event); + + if(me->button() != Qt::LeftButton || !checkRect.contains(me->pos())) + return QStyledItemDelegate::editorEvent(event, model, option, index); + + Qt::CheckState state = static_cast(value.toInt()); + if(state == Qt::Unchecked) + state = Qt::PartiallyChecked; + else if(state == Qt::PartiallyChecked) + state = Qt::Checked; + else + state = Qt::Unchecked; + model->setData(index, state, Qt::CheckStateRole); + return true; +} + +void BufferViewDelegate::initStyleOption(QStyleOptionViewItem *option, const QModelIndex &index) const { + QStyledItemDelegate::initStyleOption(option, index); + + BufferInfo::ActivityLevel activity = (BufferInfo::ActivityLevel)index.data(NetworkModel::BufferActivityRole).toInt(); + + if(activity & BufferInfo::Highlight) { + option->palette.setColor(QPalette::Text, _FgColorHighlightActivity); + return; + } + if(activity & BufferInfo::NewMessage) { + option->palette.setColor(QPalette::Text, _FgColorNewMessageActivity); + return; + } + if(activity & BufferInfo::OtherActivity) { + option->palette.setColor(QPalette::Text, _FgColorOtherActivity); + return; + } + + if(!index.data(NetworkModel::ItemActiveRole).toBool() || index.data(NetworkModel::UserAwayRole).toBool()) { + option->palette.setColor(QPalette::Text, QPalette().color(QPalette::Dark)); + } +} + + // ============================== // BufferView Dock // ============================== diff --git a/src/uisupport/bufferview.h b/src/uisupport/bufferview.h index 0732f54b..c9af5b77 100644 --- a/src/uisupport/bufferview.h +++ b/src/uisupport/bufferview.h @@ -93,16 +93,24 @@ private: }; // ****************************** -// TristateDelgate +// BufferViewDelgate // ****************************** #include -class TristateDelegate : public QStyledItemDelegate { +class BufferViewDelegate : public QStyledItemDelegate { Q_OBJECT public: - TristateDelegate(QObject *parent = 0) : QStyledItemDelegate(parent) {} + BufferViewDelegate(QObject *parent = 0); bool editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &index); + +protected: + virtual void initStyleOption(QStyleOptionViewItem *option, const QModelIndex &index) const; + +private: + QColor _FgColorHighlightActivity; + QColor _FgColorNewMessageActivity; + QColor _FgColorOtherActivity; }; diff --git a/src/uisupport/bufferviewfilter.cpp b/src/uisupport/bufferviewfilter.cpp index 54387ecc..1778490c 100644 --- a/src/uisupport/bufferviewfilter.cpp +++ b/src/uisupport/bufferviewfilter.cpp @@ -31,8 +31,6 @@ #include "iconloader.h" #include "networkmodel.h" -#include "uisettings.h" - class CheckRemovalEvent : public QEvent { public: CheckRemovalEvent(const QModelIndex &source_index) : QEvent(QEvent::User), index(source_index) {}; @@ -57,8 +55,6 @@ BufferViewFilter::BufferViewFilter(QAbstractItemModel *model, BufferViewConfig * setDynamicSortFilter(true); - loadColors(); - connect(this, SIGNAL(_dataChanged(const QModelIndex &, const QModelIndex &)), this, SLOT(_q_sourceDataChanged(QModelIndex,QModelIndex))); @@ -71,15 +67,6 @@ BufferViewFilter::BufferViewFilter(QAbstractItemModel *model, BufferViewConfig * bufferSettings.notify("ShowUserStateIcons", this, SLOT(showUserStateIconsChanged())); } -void BufferViewFilter::loadColors() { - UiSettings s("QtUiStyle/Colors"); - _FgColorInactiveActivity = s.value("inactiveActivityFG", QVariant(QColor(Qt::gray))).value(); - _FgColorNoActivity = s.value("noActivityFG", QVariant(QColor(Qt::black))).value(); - _FgColorHighlightActivity = s.value("highlightActivityFG", QVariant(QColor(Qt::magenta))).value(); - _FgColorNewMessageActivity = s.value("newMessageActivityFG", QVariant(QColor(Qt::green))).value(); - _FgColorOtherActivity = s.value("otherActivityFG", QVariant(QColor(Qt::darkGreen))).value(); -} - void BufferViewFilter::showUserStateIconsChanged() { BufferSettings bufferSettings; _showUserStateIcons = bufferSettings.showUserStateIcons(); @@ -371,8 +358,6 @@ 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::CheckStateRole: return checkedState(index); default: @@ -401,25 +386,6 @@ QVariant BufferViewFilter::icon(const QModelIndex &index) const { return QVariant(); } -QVariant BufferViewFilter::foreground(const QModelIndex &index) const { - if(config() && config()->disableDecoration()) - return _FgColorNoActivity; - - BufferInfo::ActivityLevel activity = (BufferInfo::ActivityLevel)index.data(NetworkModel::BufferActivityRole).toInt(); - - if(activity & BufferInfo::Highlight) - return _FgColorHighlightActivity; - if(activity & BufferInfo::NewMessage) - return _FgColorNewMessageActivity; - if(activity & BufferInfo::OtherActivity) - return _FgColorOtherActivity; - - if(!index.data(NetworkModel::ItemActiveRole).toBool() || index.data(NetworkModel::UserAwayRole).toBool()) - return _FgColorInactiveActivity; - - return _FgColorNoActivity; -} - QVariant BufferViewFilter::checkedState(const QModelIndex &index) const { if(!_editMode || !config()) return QVariant(); diff --git a/src/uisupport/bufferviewfilter.h b/src/uisupport/bufferviewfilter.h index 06503fdc..50165210 100644 --- a/src/uisupport/bufferviewfilter.h +++ b/src/uisupport/bufferviewfilter.h @@ -22,7 +22,6 @@ #define BUFFERVIEWFILTER_H_ #include -#include #include #include #include @@ -59,7 +58,7 @@ public: QVariant data(const QModelIndex &index, int role) const; QVariant icon(const QModelIndex &index) const; - QVariant foreground(const QModelIndex &index) const; +// QVariant foreground(const QModelIndex &index) const; QVariant checkedState(const QModelIndex &index) const; bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole); @@ -97,12 +96,6 @@ private: QPointer _config; Qt::SortOrder _sortOrder; - QColor _FgColorInactiveActivity; - QColor _FgColorNoActivity; - QColor _FgColorHighlightActivity; - QColor _FgColorNewMessageActivity; - QColor _FgColorOtherActivity; - QPixmap _userOfflineIcon; QPixmap _userAwayIcon; QPixmap _userOnlineIcon; @@ -114,8 +107,6 @@ private: QSet _toTempRemove; QSet _toRemove; - void loadColors(); - bool filterAcceptBuffer(const QModelIndex &) const; bool filterAcceptNetwork(const QModelIndex &) const; void addBuffer(const BufferId &) const; -- 2.20.1