Style NickView via UiStyle
authorManuel Nickschas <sputnick@quassel-irc.org>
Mon, 3 Aug 2009 17:41:29 +0000 (19:41 +0200)
committerManuel Nickschas <sputnick@quassel-irc.org>
Thu, 6 Aug 2009 18:25:58 +0000 (20:25 +0200)
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
src/uisupport/nickview.h
src/uisupport/nickviewfilter.cpp
src/uisupport/nickviewfilter.h

index bbb36a7..e365474 100644 (file)
@@ -44,11 +44,6 @@ public:
 NickView::NickView(QWidget *parent)
   : QTreeView(parent)
 {
 NickView::NickView(QWidget *parent)
   : QTreeView(parent)
 {
-  QAbstractItemDelegate *oldDelegate = itemDelegate();
-  NickViewDelegate *newDelegate = new NickViewDelegate(this);
-  setItemDelegate(newDelegate);
-  delete oldDelegate;
-
   setIndentation(10);
   setAnimated(true);
   header()->hide();
   setIndentation(10);
   setAnimated(true);
   header()->hide();
@@ -175,28 +170,3 @@ void NickView::customEvent(QEvent *event) {
   }
   event->accept();
 }
   }
   event->accept();
 }
-
-
-// ****************************************
-//  NickViewDelgate
-// ****************************************
-NickViewDelegate::NickViewDelegate(QObject *parent)
-  : QStyledItemDelegate(parent)
-{
-  UiSettings s("QtUiStyle/Colors");
-  _FgOnlineStatus = s.value("onlineStatusFG", QVariant(QColor(Qt::black))).value<QColor>();
-  _FgAwayStatus = s.value("awayStatusFG", QVariant(QColor(Qt::gray))).value<QColor>();
-}
-
-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);
-}
index 5fd4eed..c67a310 100644 (file)
@@ -55,23 +55,4 @@ private:
   friend class NickListWidget;  // needs selectedIndexes()
 };
 
   friend class NickListWidget;  // needs selectedIndexes()
 };
 
-// ******************************
-//  NickViewDelgate
-// ******************************
-#include <QStyledItemDelegate>
-
-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
 #endif
index 959ae9c..ea33660 100644 (file)
 #include "nickviewfilter.h"
 
 #include "buffersettings.h"
 #include "nickviewfilter.h"
 
 #include "buffersettings.h"
+#include "graphicalui.h"
 #include "iconloader.h"
 #include "networkmodel.h"
 #include "iconloader.h"
 #include "networkmodel.h"
+#include "uistyle.h"
 
 /******************************************************************************************
  * NickViewFilter
  ******************************************************************************************/
 NickViewFilter::NickViewFilter(const BufferId &bufferId, NetworkModel *parent)
   : QSortFilterProxyModel(parent),
 
 /******************************************************************************************
  * 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);
 {
   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 {
 }
 
 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) {
 
 QVariant NickViewFilter::data(const QModelIndex &index, int role) const {
   switch(role) {
+  case Qt::FontRole:
+  case Qt::ForegroundRole:
+  case Qt::BackgroundRole:
   case Qt::DecorationRole:
   case Qt::DecorationRole:
-    return icon(index);
+    return GraphicalUi::uiStyle()->nickViewItemData(mapToSource(index), role);
   default:
     return QSortFilterProxyModel::data(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();
-}
index 7bf9b6b..3820813 100644 (file)
@@ -23,8 +23,6 @@
 
 #include <QSortFilterProxyModel>
 
 
 #include <QSortFilterProxyModel>
 
-#include <QPixmap>
-
 #include "types.h"
 
 class NetworkModel;
 #include "types.h"
 
 class NetworkModel;
@@ -41,23 +39,10 @@ public:
 
 protected:
   virtual bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const;
 
 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;
 
 private:
   BufferId _bufferId;
-
-  QHash<int, QPixmap> _categoryIconHash;
-  QPixmap _userOnlineIcon;
-  QPixmap _userAwayIcon;
-  QPixmap _categoryOpIcon;
-  QPixmap _categoryVoiceIcon;
-  int _opIconLimit;
-  int _voiceIconLimit;
-  bool _showUserStateIcons;
-
-  void loadColors();
 };
 
 #endif
 };
 
 #endif