From d27f243e92c66bba5bb6f8d01b63f6dad5b1ace9 Mon Sep 17 00:00:00 2001 From: Manuel Nickschas Date: Mon, 3 Aug 2009 19:41:29 +0200 Subject: [PATCH] Style NickView via UiStyle NickView now asks UiStyle for appropriate Qt::ItemDataRoles for styling its items, including the item icons. This replaces the need for custom delegates altogether. --- src/uisupport/nickview.cpp | 30 ------------------ src/uisupport/nickview.h | 19 ----------- src/uisupport/nickviewfilter.cpp | 54 +++++--------------------------- src/uisupport/nickviewfilter.h | 17 +--------- 4 files changed, 8 insertions(+), 112 deletions(-) diff --git a/src/uisupport/nickview.cpp b/src/uisupport/nickview.cpp index bbb36a75..e3654741 100644 --- a/src/uisupport/nickview.cpp +++ b/src/uisupport/nickview.cpp @@ -44,11 +44,6 @@ public: NickView::NickView(QWidget *parent) : QTreeView(parent) { - QAbstractItemDelegate *oldDelegate = itemDelegate(); - NickViewDelegate *newDelegate = new NickViewDelegate(this); - setItemDelegate(newDelegate); - delete oldDelegate; - setIndentation(10); setAnimated(true); header()->hide(); @@ -175,28 +170,3 @@ void NickView::customEvent(QEvent *event) { } event->accept(); } - - -// **************************************** -// NickViewDelgate -// **************************************** -NickViewDelegate::NickViewDelegate(QObject *parent) - : QStyledItemDelegate(parent) -{ - UiSettings s("QtUiStyle/Colors"); - _FgOnlineStatus = s.value("onlineStatusFG", QVariant(QColor(Qt::black))).value(); - _FgAwayStatus = s.value("awayStatusFG", QVariant(QColor(Qt::gray))).value(); -} - -void NickViewDelegate::initStyleOption(QStyleOptionViewItem *option, const QModelIndex &index) const { - QStyledItemDelegate::initStyleOption(option, index); - - if(!index.isValid()) - return; - - QColor fgColor = _FgOnlineStatus; - if(!index.data(NetworkModel::ItemActiveRole).toBool()) - fgColor = _FgAwayStatus; - - option->palette.setColor(QPalette::Text, fgColor); -} diff --git a/src/uisupport/nickview.h b/src/uisupport/nickview.h index 5fd4eede..c67a3104 100644 --- a/src/uisupport/nickview.h +++ b/src/uisupport/nickview.h @@ -55,23 +55,4 @@ private: friend class NickListWidget; // needs selectedIndexes() }; -// ****************************** -// NickViewDelgate -// ****************************** -#include - -class NickViewDelegate : public QStyledItemDelegate { - Q_OBJECT - -public: - NickViewDelegate(QObject *parent = 0); - -protected: - virtual void initStyleOption(QStyleOptionViewItem *option, const QModelIndex &index) const; - -private: - QColor _FgOnlineStatus; - QColor _FgAwayStatus; -}; - #endif diff --git a/src/uisupport/nickviewfilter.cpp b/src/uisupport/nickviewfilter.cpp index 959ae9c6..ea336605 100644 --- a/src/uisupport/nickviewfilter.cpp +++ b/src/uisupport/nickviewfilter.cpp @@ -21,30 +21,22 @@ #include "nickviewfilter.h" #include "buffersettings.h" +#include "graphicalui.h" #include "iconloader.h" #include "networkmodel.h" +#include "uistyle.h" /****************************************************************************************** * NickViewFilter ******************************************************************************************/ NickViewFilter::NickViewFilter(const BufferId &bufferId, NetworkModel *parent) : QSortFilterProxyModel(parent), - _bufferId(bufferId), - _userOnlineIcon(SmallIcon("im-user")), - _userAwayIcon(SmallIcon("im-user-away")), - _categoryOpIcon(SmallIcon("irc-operator")), - _categoryVoiceIcon(SmallIcon("irc-voice")), - _opIconLimit(UserCategoryItem::categoryFromModes("o")), - _voiceIconLimit(UserCategoryItem::categoryFromModes("v")) + _bufferId(bufferId) { setSourceModel(parent); setDynamicSortFilter(true); setSortCaseSensitivity(Qt::CaseInsensitive); setSortRole(TreeModel::SortRole); - - BufferSettings bufferSettings; - _showUserStateIcons = bufferSettings.showUserStateIcons(); - bufferSettings.notify("ShowUserStateIcons", this, SLOT(showUserStateIconsChanged())); } bool NickViewFilter::filterAcceptsRow(int source_row, const QModelIndex &source_parent) const { @@ -58,44 +50,12 @@ bool NickViewFilter::filterAcceptsRow(int source_row, const QModelIndex &source_ QVariant NickViewFilter::data(const QModelIndex &index, int role) const { switch(role) { + case Qt::FontRole: + case Qt::ForegroundRole: + case Qt::BackgroundRole: case Qt::DecorationRole: - return icon(index); + return GraphicalUi::uiStyle()->nickViewItemData(mapToSource(index), role); default: return QSortFilterProxyModel::data(index, role); } } - -QVariant NickViewFilter::icon(const QModelIndex &index) const { - if(!_showUserStateIcons) - return QVariant(); - - if(index.column() != 0) - return QVariant(); - - QModelIndex source_index = mapToSource(index); - NetworkModel::ItemType itemType = (NetworkModel::ItemType)sourceModel()->data(source_index, NetworkModel::ItemTypeRole).toInt(); - switch(itemType) { - case NetworkModel::UserCategoryItemType: - { - int categoryId = sourceModel()->data(source_index, TreeModel::SortRole).toInt(); - if(categoryId <= _opIconLimit) - return _categoryOpIcon; - if(categoryId <= _voiceIconLimit) - return _categoryVoiceIcon; - return _userOnlineIcon; - } - case NetworkModel::IrcUserItemType: - if(sourceModel()->data(source_index, NetworkModel::ItemActiveRole).toBool()) - return _userOnlineIcon; - else - return _userAwayIcon; - break; - default: - return QVariant(); - }; -} - -void NickViewFilter::showUserStateIconsChanged() { - BufferSettings bufferSettings; - _showUserStateIcons = bufferSettings.showUserStateIcons(); -} diff --git a/src/uisupport/nickviewfilter.h b/src/uisupport/nickviewfilter.h index 7bf9b6bc..38208139 100644 --- a/src/uisupport/nickviewfilter.h +++ b/src/uisupport/nickviewfilter.h @@ -23,8 +23,6 @@ #include -#include - #include "types.h" class NetworkModel; @@ -41,23 +39,10 @@ public: protected: virtual bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const; - -private slots: - void showUserStateIconsChanged(); + QVariant styleData(const QModelIndex &index, int role) const; private: BufferId _bufferId; - - QHash _categoryIconHash; - QPixmap _userOnlineIcon; - QPixmap _userAwayIcon; - QPixmap _categoryOpIcon; - QPixmap _categoryVoiceIcon; - int _opIconLimit; - int _voiceIconLimit; - bool _showUserStateIcons; - - void loadColors(); }; #endif -- 2.20.1