diff options
| -rw-r--r-- | Swift/QtUI/Roster/QtTreeWidgetItem.cpp | 5 | ||||
| -rw-r--r-- | Swift/QtUI/Roster/QtTreeWidgetItem.h | 4 | ||||
| -rw-r--r-- | Swift/QtUI/Roster/RosterDelegate.cpp | 15 | ||||
| -rw-r--r-- | Swift/QtUI/Roster/RosterDelegate.h | 1 | 
4 files changed, 20 insertions, 5 deletions
diff --git a/Swift/QtUI/Roster/QtTreeWidgetItem.cpp b/Swift/QtUI/Roster/QtTreeWidgetItem.cpp index 7b4d83a..e49c87f 100644 --- a/Swift/QtUI/Roster/QtTreeWidgetItem.cpp +++ b/Swift/QtUI/Roster/QtTreeWidgetItem.cpp @@ -139,10 +139,15 @@ QVariant QtTreeWidgetItem::data(int role) {  		case Qt::BackgroundColorRole: return backgroundColor_;  	 	case StatusTextRole: return statusText_;  		case AvatarRole: return avatar_; +		case PresenceIconRole: return getPresenceIcon();  	 	default: return QVariant();  	}  } +QIcon QtTreeWidgetItem::getPresenceIcon() { +	return QIcon(":/icons/online.png"); +} +  bool QtTreeWidgetItem::isContact() {  	return children_.size() == 0;  } diff --git a/Swift/QtUI/Roster/QtTreeWidgetItem.h b/Swift/QtUI/Roster/QtTreeWidgetItem.h index 1b898b0..9c3b0ad 100644 --- a/Swift/QtUI/Roster/QtTreeWidgetItem.h +++ b/Swift/QtUI/Roster/QtTreeWidgetItem.h @@ -17,7 +17,8 @@  namespace Swift {  	enum RosterRoles {  		StatusTextRole = Qt::UserRole, -		AvatarRole = Qt::UserRole + 1 +		AvatarRole = Qt::UserRole + 1, +		PresenceIconRole = Qt::UserRole + 2  	};  class QtTreeWidget; @@ -33,6 +34,7 @@ class QtTreeWidgetItem : public QObject, public TreeWidgetItem {  			int row();  			QtTreeWidgetItem* getItem(int row);  			QVariant data(int role); +			QIcon getPresenceIcon();   			QtTreeWidgetItem(QtTreeWidgetItem* parentItem);  			void setText(const String& text);  			void setAvatarPath(const String& path); diff --git a/Swift/QtUI/Roster/RosterDelegate.cpp b/Swift/QtUI/Roster/RosterDelegate.cpp index b05bbb1..f3f07ee 100644 --- a/Swift/QtUI/Roster/RosterDelegate.cpp +++ b/Swift/QtUI/Roster/RosterDelegate.cpp @@ -35,17 +35,24 @@ void RosterDelegate::paint(QPainter* painter, const QStyleOptionViewItem& option  		painter->fillRect(fullRegion, option.palette.highlight());  		painter->setPen(option.palette.highlightedText().color());  	}  -	QRect avatarRegion(QPoint(margin_, fullRegion.top() + margin_), QSize(avatarSize_, avatarSize_)); -	QIcon icon = index.data(AvatarRole).isValid() && !index.data(AvatarRole).value<QIcon>().isNull() +	 +	QRect presenceIconRegion(QPoint(margin_, fullRegion.top()), QSize(presenceIconSize_, fullRegion.height())); +	QIcon presenceIcon = index.data(PresenceIconRole).isValid() && !index.data(PresenceIconRole).value<QIcon>().isNull() +		? index.data(PresenceIconRole).value<QIcon>() +		: QIcon(":/icons/offline.png"); +	presenceIcon.paint(painter, presenceIconRegion, Qt::AlignVCenter | Qt::AlignHCenter); +	 +	QRect avatarRegion(QPoint(presenceIconRegion.right() + margin_, fullRegion.top()), QSize(avatarSize_, fullRegion.height())); +	QIcon avatar = index.data(AvatarRole).isValid() && !index.data(AvatarRole).value<QIcon>().isNull()  		? index.data(AvatarRole).value<QIcon>()  		: QIcon(":/icons/avatar.png"); -	icon.paint(painter, avatarRegion, Qt::AlignVCenter | Qt::AlignHCenter); +	avatar.paint(painter, avatarRegion, Qt::AlignVCenter | Qt::AlignHCenter);  	QFont nameFont = painter->font();  	QFont statusFont = painter->font();  	painter->setFont(nameFont); -	QRect textRegion(fullRegion.adjusted(avatarSize_ + margin_ * 2, 0, 0, 0)); +	QRect textRegion(fullRegion.adjusted(avatarRegion.right() + margin_ * 2, 0, 0, 0));  	QFontMetrics nameMetrics(nameFont);  	int nameHeight = nameMetrics.height() + margin_; diff --git a/Swift/QtUI/Roster/RosterDelegate.h b/Swift/QtUI/Roster/RosterDelegate.h index 9ec800f..0d923ac 100644 --- a/Swift/QtUI/Roster/RosterDelegate.h +++ b/Swift/QtUI/Roster/RosterDelegate.h @@ -9,6 +9,7 @@ namespace Swift {  		void paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const;  	private:  		static const int avatarSize_ = 28; +		static const int presenceIconSize_ = 16;  		static const int margin_ = 4;  	};  }  | 
 Swift