#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<QMouseEvent*>(event);
-
- if(me->button() != Qt::LeftButton || !checkRect.contains(me->pos()))
- return QStyledItemDelegate::editorEvent(event, model, option, index);
-
- Qt::CheckState state = static_cast<Qt::CheckState>(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
*****************************************/
setSelectionMode(QAbstractItemView::ExtendedSelection);
QAbstractItemDelegate *oldDelegate = itemDelegate();
- TristateDelegate *tristateDelegate = new TristateDelegate(this);
+ BufferViewDelegate *tristateDelegate = new BufferViewDelegate(this);
setItemDelegate(tristateDelegate);
delete oldDelegate;
}
return QSize(columnSize, 50);
}
+
+// ****************************************
+// BufferViewDelgate
+// ****************************************
+BufferViewDelegate::BufferViewDelegate(QObject *parent)
+ : QStyledItemDelegate(parent)
+{
+ UiSettings s("QtUiStyle/Colors");
+ _FgColorHighlightActivity = s.value("highlightActivityFG", QVariant(QColor(Qt::magenta))).value<QColor>();
+ _FgColorNewMessageActivity = s.value("newMessageActivityFG", QVariant(QColor(Qt::green))).value<QColor>();
+ _FgColorOtherActivity = s.value("otherActivityFG", QVariant(QColor(Qt::darkGreen))).value<QColor>();
+}
+
+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<QMouseEvent*>(event);
+
+ if(me->button() != Qt::LeftButton || !checkRect.contains(me->pos()))
+ return QStyledItemDelegate::editorEvent(event, model, option, index);
+
+ Qt::CheckState state = static_cast<Qt::CheckState>(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
// ==============================
#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) {};
setDynamicSortFilter(true);
- loadColors();
-
connect(this, SIGNAL(_dataChanged(const QModelIndex &, const QModelIndex &)),
this, SLOT(_q_sourceDataChanged(QModelIndex,QModelIndex)));
bufferSettings.notify("ShowUserStateIcons", this, SLOT(showUserStateIconsChanged()));
}
-void BufferViewFilter::loadColors() {
- UiSettings s("QtUiStyle/Colors");
- _FgColorInactiveActivity = s.value("inactiveActivityFG", QVariant(QColor(Qt::gray))).value<QColor>();
- _FgColorNoActivity = s.value("noActivityFG", QVariant(QColor(Qt::black))).value<QColor>();
- _FgColorHighlightActivity = s.value("highlightActivityFG", QVariant(QColor(Qt::magenta))).value<QColor>();
- _FgColorNewMessageActivity = s.value("newMessageActivityFG", QVariant(QColor(Qt::green))).value<QColor>();
- _FgColorOtherActivity = s.value("otherActivityFG", QVariant(QColor(Qt::darkGreen))).value<QColor>();
-}
-
void BufferViewFilter::showUserStateIconsChanged() {
BufferSettings bufferSettings;
_showUserStateIcons = bufferSettings.showUserStateIcons();
switch(role) {
case Qt::DecorationRole:
return icon(index);
- case Qt::ForegroundRole:
- return foreground(index);
case Qt::CheckStateRole:
return checkedState(index);
default:
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();
#define BUFFERVIEWFILTER_H_
#include <QAction>
-#include <QColor>
#include <QDropEvent>
#include <QFlags>
#include <QPixmap>
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);
QPointer<BufferViewConfig> _config;
Qt::SortOrder _sortOrder;
- QColor _FgColorInactiveActivity;
- QColor _FgColorNoActivity;
- QColor _FgColorHighlightActivity;
- QColor _FgColorNewMessageActivity;
- QColor _FgColorOtherActivity;
-
QPixmap _userOfflineIcon;
QPixmap _userAwayIcon;
QPixmap _userOnlineIcon;
QSet<BufferId> _toTempRemove;
QSet<BufferId> _toRemove;
- void loadColors();
-
bool filterAcceptBuffer(const QModelIndex &) const;
bool filterAcceptNetwork(const QModelIndex &) const;
void addBuffer(const BufferId &) const;