Using join and part icons to indicate in the buffer view if a channel is joined.
authorMarcus Eggenberger <egs@quassel-irc.org>
Sat, 14 Feb 2009 11:56:50 +0000 (12:56 +0100)
committerMarcus Eggenberger <egs@quassel-irc.org>
Sat, 14 Feb 2009 11:56:50 +0000 (12:56 +0100)
This helps to determine that you're not in a channel when there are still unread
messages. Perhaps we can have a version of these icons without the '+' and 'x'...

src/uisupport/bufferviewfilter.cpp
src/uisupport/bufferviewfilter.h

index 3e0a59f..91d910c 100644 (file)
@@ -45,6 +45,8 @@ BufferViewFilter::BufferViewFilter(QAbstractItemModel *model, BufferViewConfig *
   : QSortFilterProxyModel(model),
     _config(0),
     _sortOrder(Qt::AscendingOrder),
+    _channelJoinedIcon(SmallIcon("irc-join-channel")),
+    _channelPartedIcon(SmallIcon("irc-close-channel")),
     _userOfflineIcon(SmallIcon("im-user-offline")),
     _userAwayIcon(SmallIcon("im-user-away")),
     _userOnlineIcon(SmallIcon("im-user")),
@@ -392,21 +394,29 @@ QVariant BufferViewFilter::icon(const QModelIndex &index) const {
     return QVariant();
 
   QModelIndex source_index = mapToSource(index);
-  if(sourceModel()->data(source_index, NetworkModel::ItemTypeRole).toInt() != NetworkModel::BufferItemType)
-    return QVariant();
+  NetworkModel::ItemType itemType = (NetworkModel::ItemType)sourceModel()->data(source_index, NetworkModel::ItemTypeRole).toInt();
+  BufferInfo::Type bufferType = (BufferInfo::Type)sourceModel()->data(source_index, NetworkModel::BufferTypeRole).toInt();
+  bool isActive = sourceModel()->data(source_index, NetworkModel::ItemActiveRole).toBool();
 
-  if(sourceModel()->data(source_index, NetworkModel::BufferTypeRole).toInt() != BufferInfo::QueryBuffer)
+  if(itemType != NetworkModel::BufferItemType)
     return QVariant();
 
-  if(!sourceModel()->data(source_index, NetworkModel::ItemActiveRole).toBool())
-    return _userOfflineIcon;
-
-  if(sourceModel()->data(source_index, NetworkModel::UserAwayRole).toBool())
-    return _userAwayIcon;
-  else
-    return _userOnlineIcon;
-
-  return QVariant();
+  switch(bufferType) {
+  case BufferInfo::ChannelBuffer:
+    if(isActive)
+      return _channelJoinedIcon;
+    else
+      return _channelPartedIcon;
+  case BufferInfo::QueryBuffer:
+    if(!isActive)
+      return _userOfflineIcon;
+    if(sourceModel()->data(source_index, NetworkModel::UserAwayRole).toBool())
+      return _userAwayIcon;
+    else
+      return _userOnlineIcon;
+  default:
+    return QVariant();
+  }
 }
 
 QVariant BufferViewFilter::checkedState(const QModelIndex &index) const {
index 5016521..5bacfaf 100644 (file)
@@ -96,6 +96,8 @@ private:
   QPointer<BufferViewConfig> _config;
   Qt::SortOrder _sortOrder;
 
+  QPixmap _channelJoinedIcon;
+  QPixmap _channelPartedIcon;
   QPixmap _userOfflineIcon;
   QPixmap _userAwayIcon;
   QPixmap _userOnlineIcon;