diff options
Diffstat (limited to 'Swift/QtUI')
| -rw-r--r-- | Swift/QtUI/ChatList/ChatListDelegate.cpp | 5 | ||||
| -rw-r--r-- | Swift/QtUI/ChatList/ChatListRecentItem.h | 3 | ||||
| -rw-r--r-- | Swift/QtUI/Roster/DelegateCommons.cpp | 9 | ||||
| -rw-r--r-- | Swift/QtUI/Roster/DelegateCommons.h | 5 | ||||
| -rw-r--r-- | Swift/QtUI/Roster/RosterDelegate.cpp | 3 | ||||
| -rw-r--r-- | Swift/QtUI/Roster/RosterModel.cpp | 11 | ||||
| -rw-r--r-- | Swift/QtUI/Roster/RosterModel.h | 2 | ||||
| -rw-r--r-- | Swift/QtUI/Swift.qrc | 1 | 
8 files changed, 30 insertions, 9 deletions
diff --git a/Swift/QtUI/ChatList/ChatListDelegate.cpp b/Swift/QtUI/ChatList/ChatListDelegate.cpp index 5b879df..5b03ac5 100644 --- a/Swift/QtUI/ChatList/ChatListDelegate.cpp +++ b/Swift/QtUI/ChatList/ChatListDelegate.cpp @@ -120,7 +120,7 @@ void ChatListDelegate::paintRecent(QPainter* painter, const QStyleOptionViewItem  	QString name = item->data(Qt::DisplayRole).toString();  	//qDebug() << "Avatar for " << name << " = " << avatarPath;  	QString statusText = item->data(ChatListRecentItem::DetailTextRole).toString(); -	common_.paintContact(painter, option, nameColor, avatarPath, presenceIcon, name, statusText, item->getChat().unreadCount, compact_); +	common_.paintContact(painter, option, nameColor, avatarPath, presenceIcon, name, statusText, false, item->getChat().unreadCount, compact_);  }  void ChatListDelegate::paintWhiteboard(QPainter* painter, const QStyleOptionViewItem& option, ChatListWhiteboardItem* item) const { @@ -135,7 +135,8 @@ void ChatListDelegate::paintWhiteboard(QPainter* painter, const QStyleOptionView  	QString name = item->data(Qt::DisplayRole).toString();  	//qDebug() << "Avatar for " << name << " = " << avatarPath;  	QString statusText = item->data(ChatListWhiteboardItem::DetailTextRole).toString(); -	common_.paintContact(painter, option, nameColor, avatarPath, presenceIcon, name, statusText, item->getChat().unreadCount, compact_); +	common_.paintContact(painter, option, nameColor, avatarPath, presenceIcon, name, statusText, false, item->getChat().unreadCount, compact_); +  }  } diff --git a/Swift/QtUI/ChatList/ChatListRecentItem.h b/Swift/QtUI/ChatList/ChatListRecentItem.h index 4e7bc3e..3f27a68 100644 --- a/Swift/QtUI/ChatList/ChatListRecentItem.h +++ b/Swift/QtUI/ChatList/ChatListRecentItem.h @@ -23,7 +23,8 @@ namespace Swift {  				DetailTextRole = Qt::UserRole,  				AvatarRole = Qt::UserRole + 1,  				PresenceIconRole = Qt::UserRole + 2/*, -				StatusShowTypeRole = Qt::UserRole + 3*/ +				StatusShowTypeRole = Qt::UserRole + 3, +				IdleRole = Qt::UserRole + 4*/  			};  			ChatListRecentItem(const ChatListWindow::Chat& chat, ChatListGroupItem* parent);  			const ChatListWindow::Chat& getChat() const; diff --git a/Swift/QtUI/Roster/DelegateCommons.cpp b/Swift/QtUI/Roster/DelegateCommons.cpp index a575cb0..e7342f3 100644 --- a/Swift/QtUI/Roster/DelegateCommons.cpp +++ b/Swift/QtUI/Roster/DelegateCommons.cpp @@ -17,8 +17,8 @@ void DelegateCommons::drawElidedText(QPainter* painter, const QRect& region, con  	painter->drawText(region, flags, adjustedText.simplified());  } -void DelegateCommons::paintContact(QPainter* painter, const QStyleOptionViewItem& option, const QColor& nameColor, const QString& avatarPath, const QIcon& presenceIcon, const QString& name, const QString& statusText, int unreadCount, bool compact) const { -	painter->save(); +void DelegateCommons::paintContact(QPainter* painter, const QStyleOptionViewItem& option, const QColor& nameColor, const QString& avatarPath, const QIcon& presenceIcon, const QString& name, const QString& statusText, bool isIdle, int unreadCount, bool compact) const { +		painter->save();  	QRect fullRegion(option.rect);  	if ( option.state & QStyle::State_Selected ) {  		painter->fillRect(fullRegion, option.palette.highlight()); @@ -29,6 +29,7 @@ void DelegateCommons::paintContact(QPainter* painter, const QStyleOptionViewItem  	QRect presenceIconRegion(QPoint(farLeftMargin, fullRegion.top()), QSize(presenceIconWidth, fullRegion.height() - verticalMargin)); +	QRect idleIconRegion(QPoint(farLeftMargin, fullRegion.top()), QSize(presenceIconWidth*2, fullRegion.height() - verticalMargin));  	int calculatedAvatarSize = presenceIconRegion.height();  	//This overlaps the presenceIcon, so must be painted first  	QRect avatarRegion(QPoint(presenceIconRegion.right() - presenceIconWidth / 2, presenceIconRegion.top()), QSize(calculatedAvatarSize, calculatedAvatarSize)); @@ -51,6 +52,10 @@ void DelegateCommons::paintContact(QPainter* painter, const QStyleOptionViewItem  	//Paint the presence icon over the top of the avatar  	presenceIcon.paint(painter, presenceIconRegion, Qt::AlignBottom | Qt::AlignHCenter); +	if (isIdle) { +		idleIcon.paint(painter, idleIconRegion, Qt::AlignBottom | Qt::AlignHCenter); +	} +  	QFontMetrics nameMetrics(nameFont);  	painter->setFont(nameFont);  	int extraFontWidth = nameMetrics.width("H"); diff --git a/Swift/QtUI/Roster/DelegateCommons.h b/Swift/QtUI/Roster/DelegateCommons.h index 8732598..0684410 100644 --- a/Swift/QtUI/Roster/DelegateCommons.h +++ b/Swift/QtUI/Roster/DelegateCommons.h @@ -17,7 +17,7 @@  namespace Swift {  	class DelegateCommons {  		public: -			DelegateCommons() : nameFont(QApplication::font()), detailFont(QApplication::font()) { +			DelegateCommons() : nameFont(QApplication::font()), detailFont(QApplication::font()), idleIcon(QIcon(":/icons/zzz.png")) {  				detailFontSizeDrop = nameFont.pointSize() >= 10 ? 2 : 0;  				detailFont.setStyle(QFont::StyleItalic);  				detailFont.setPointSize(nameFont.pointSize() - detailFontSizeDrop); @@ -26,7 +26,7 @@ namespace Swift {  			static void drawElidedText(QPainter* painter, const QRect& region, const QString& text, int flags = Qt::AlignTop);  			QSize contactSizeHint(const QStyleOptionViewItem& option, const QModelIndex& index, bool compact) const; -			void paintContact(QPainter* painter, const QStyleOptionViewItem& option, const QColor& nameColor, const QString& avatarPath, const QIcon& presenceIcon, const QString& name, const QString& statusText, int unreadCount, bool compact) const; +			void paintContact(QPainter* painter, const QStyleOptionViewItem& option, const QColor& nameColor, const QString& avatarPath, const QIcon& presenceIcon, const QString& name, const QString& statusText, bool isIdle, int unreadCount, bool compact) const;  			int detailFontSizeDrop;  			QFont nameFont; @@ -38,5 +38,6 @@ namespace Swift {  			static const int presenceIconHeight;  			static const int presenceIconWidth;  			static const int unreadCountSize; +			QIcon idleIcon;  	};  } diff --git a/Swift/QtUI/Roster/RosterDelegate.cpp b/Swift/QtUI/Roster/RosterDelegate.cpp index 5c964ca..aef588c 100644 --- a/Swift/QtUI/Roster/RosterDelegate.cpp +++ b/Swift/QtUI/Roster/RosterDelegate.cpp @@ -74,9 +74,10 @@ void RosterDelegate::paintContact(QPainter* painter, const QStyleOptionViewItem&  	QIcon presenceIcon = index.data(PresenceIconRole).isValid() && !index.data(PresenceIconRole).value<QIcon>().isNull()  			? index.data(PresenceIconRole).value<QIcon>()  			: QIcon(":/icons/offline.png"); +	bool isIdle = index.data(IdleRole).isValid() ? index.data(IdleRole).toBool() : false;  	QString name = index.data(Qt::DisplayRole).toString();  	QString statusText = index.data(StatusTextRole).toString(); -	common_.paintContact(painter, option, nameColor, avatarPath, presenceIcon, name, statusText, 0, compact_); +	common_.paintContact(painter, option, nameColor, avatarPath, presenceIcon, name, statusText, isIdle, 0, compact_);  }  } diff --git a/Swift/QtUI/Roster/RosterModel.cpp b/Swift/QtUI/Roster/RosterModel.cpp index 1fc20dd..885d04c 100644 --- a/Swift/QtUI/Roster/RosterModel.cpp +++ b/Swift/QtUI/Roster/RosterModel.cpp @@ -84,7 +84,8 @@ QVariant RosterModel::data(const QModelIndex& index, int role) const {  		case AvatarRole: return getAvatar(item);  		case PresenceIconRole: return getPresenceIcon(item);  		case ChildCountRole: return getChildCount(item); -	 	default: return QVariant(); +		case IdleRole: return getIsIdle(item); +		default: return QVariant();  	}  } @@ -93,6 +94,11 @@ int RosterModel::getChildCount(RosterItem* item) const {  	return group ? group->getDisplayedChildren().size() : 0;   } +bool RosterModel::getIsIdle(RosterItem* item) const { +	ContactRosterItem* contact = dynamic_cast<ContactRosterItem*>(item); +	return contact ? !contact->getIdleText().empty() : false; +} +  QColor RosterModel::intToColor(int color) const {  	return QColor(  		((color & 0xFF0000)>>16), @@ -131,6 +137,9 @@ QString RosterModel::getToolTip(RosterItem* item) const {  		if (!getStatusText(item).isEmpty()) {  			tip += ": " + getStatusText(item);  		} +		if (!contact->getIdleText().empty()) { +			tip += "\n " + tr("Idle since ") + P2QSTRING(contact->getIdleText()); +		}  	}  	return tip;  } diff --git a/Swift/QtUI/Roster/RosterModel.h b/Swift/QtUI/Roster/RosterModel.h index bd34e9c..23d54f8 100644 --- a/Swift/QtUI/Roster/RosterModel.h +++ b/Swift/QtUI/Roster/RosterModel.h @@ -18,6 +18,7 @@ namespace Swift {  		PresenceIconRole = Qt::UserRole + 2,  		StatusShowTypeRole = Qt::UserRole + 3,  		ChildCountRole = Qt::UserRole + 4, +		IdleRole = Qt::UserRole + 5  	};  	class QtTreeWidget; @@ -48,6 +49,7 @@ namespace Swift {  			QString getStatusText(RosterItem* item) const;  			QIcon getPresenceIcon(RosterItem* item) const;  			int getChildCount(RosterItem* item) const; +			bool getIsIdle(RosterItem* item) const;  			void reLayout();  			Roster* roster_;  			QtTreeWidget* view_; diff --git a/Swift/QtUI/Swift.qrc b/Swift/QtUI/Swift.qrc index 934bd80..f1b3140 100644 --- a/Swift/QtUI/Swift.qrc +++ b/Swift/QtUI/Swift.qrc @@ -40,5 +40,6 @@  		<file alias="emoticons/wink.png">../resources/emoticons/wink.png</file>  		<file alias="icons/star-checked.png">../resources/icons/star-checked2.png</file>  		<file alias="icons/star-unchecked.png">../resources/icons/star-unchecked2.png</file> +		<file alias="icons/zzz.png">../resources/icons/zzz.png</file>  	</qresource>  </RCC>  | 
 Swift