X-Git-Url: https://git.quassel-irc.org/?a=blobdiff_plain;f=src%2Fuisupport%2Fbufferview.cpp;h=0d7be090501fab4dcecdbd4631560f75f8be1ce6;hb=3282d98e3b3324f1b1fb573b03dca9e4e247417c;hp=addea42bce7876efb59c6bbf00efcd1e11bcb36d;hpb=19eb49e171a5a39e1ba8d6c92fd97256aeb949e1;p=quassel.git diff --git a/src/uisupport/bufferview.cpp b/src/uisupport/bufferview.cpp index addea42b..0d7be090 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,72 @@ QSize BufferView::sizeHint() const { return QSize(columnSize, 50); } + +// **************************************** +// BufferViewDelgate +// **************************************** +BufferViewDelegate::BufferViewDelegate(QObject *parent) + : QStyledItemDelegate(parent) +{ + 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(); +} + +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(); + + QColor fgColor = _FgColorNoActivity; + if(activity & BufferInfo::Highlight) { + fgColor = _FgColorHighlightActivity; + } else if(activity & BufferInfo::NewMessage) { + fgColor = _FgColorNewMessageActivity; + } else if(activity & BufferInfo::OtherActivity) { + fgColor = _FgColorOtherActivity; + } else if(!index.data(NetworkModel::ItemActiveRole).toBool() || index.data(NetworkModel::UserAwayRole).toBool()) { + fgColor = _FgColorInactiveActivity; + } + + option->palette.setColor(QPalette::Text, fgColor); +} + + // ============================== // BufferView Dock // ==============================