diff options
| -rw-r--r-- | Swift/QtUI/Roster/RosterDelegate.cpp | 42 | 
1 files changed, 41 insertions, 1 deletions
diff --git a/Swift/QtUI/Roster/RosterDelegate.cpp b/Swift/QtUI/Roster/RosterDelegate.cpp index f17e585..22df0d1 100644 --- a/Swift/QtUI/Roster/RosterDelegate.cpp +++ b/Swift/QtUI/Roster/RosterDelegate.cpp @@ -6,6 +6,7 @@  #include <QBrush>  #include <QFontMetrics>  #include <QPainterPath> +#include <QPolygon>  #include <qdebug.h>  #include "QtTreeWidgetItem.h" @@ -29,11 +30,15 @@ QSize RosterDelegate::sizeHint(const QStyleOptionViewItem& option, const QModelI  }  QSize RosterDelegate::groupSizeHint(const QStyleOptionViewItem& option, const QModelIndex& index ) const { +	Q_UNUSED(option); +	Q_UNUSED(index);  	QFontMetrics groupMetrics(groupFont_);  	return QSize(150, groupMetrics.height() + 4);  }  QSize RosterDelegate::contactSizeHint(const QStyleOptionViewItem& option, const QModelIndex& index ) const { +	Q_UNUSED(option); +	Q_UNUSED(index);  	int heightByAvatar = avatarSize_ + verticalMargin_ * 2;  	QFontMetrics nameMetrics(nameFont_);  	QFontMetrics statusMetrics(statusFont_); @@ -72,7 +77,42 @@ void RosterDelegate::paintGroup(QPainter* painter, const QStyleOptionViewItem& o  	linePath.addRoundedRect(region, groupCornerRadius_, groupCornerRadius_);  	painter->fillPath(fillPath, backgroundBrush);  	painter->drawPath(linePath); -	int textLeftOffset = 2 * horizontalMargin_ + 1; +	 +	QBrush triangleBrush(QColor(110, 110, 110)); +	QBrush triangleShadowBrush(QColor(47, 47, 47)); +	double triangleWidth = 9; +	double triangleHeight = 5; +	QtTreeWidgetItem* item = index.isValid() ? static_cast<QtTreeWidgetItem*>(index.internalPointer()) : NULL; +	if (item) { +		QPainterPath trianglePath; +		QPainterPath triangleShadowPath; +		QPolygonF triangle; +		QPolygonF triangleShadow; +		QPointF triangleTopLeft(region.left() + horizontalMargin_ + 1, region.top() + region.height() / 2 - triangleHeight / 2); +		QPointF shadowOffset(0,-1); +		QPointF trianglePoint2; +		QPointF trianglePoint3; +		 +		if (item->isExpanded()) { +			triangleTopLeft += QPoint(0, 1); +			trianglePoint2 = triangleTopLeft + QPointF(triangleWidth, 0); +			trianglePoint3 = trianglePoint2 + QPointF(-1 * (triangleWidth / 2), triangleHeight); +			qDebug() << "Plotting expanded" << triangleTopLeft << ", " << trianglePoint2 << ", " << trianglePoint3; +		} else { +			trianglePoint2 = triangleTopLeft + QPointF(0, triangleWidth); +			trianglePoint3 = trianglePoint2 + QPointF(triangleHeight, -1 * (triangleWidth / 2)); +			qDebug() << "Plotting collapsed" << triangleTopLeft << ", " << trianglePoint2 << ", " << trianglePoint3; +		} +		triangle << triangleTopLeft << trianglePoint2 << trianglePoint3 << triangleTopLeft; +		triangleShadow << triangleTopLeft + shadowOffset << trianglePoint2 + shadowOffset << trianglePoint3 + shadowOffset << triangleTopLeft + shadowOffset; +		 +		trianglePath.addPolygon(triangle); +		triangleShadowPath.addPolygon(triangleShadow); +		painter->fillPath(triangleShadowPath, triangleShadowBrush); +		painter->fillPath(trianglePath, triangleBrush); +	} +	 +	int textLeftOffset = 2 * horizontalMargin_ + 1 + triangleWidth;  	QFontMetrics fontMetrics(groupFont_);  	int textTopOffset = (option.rect.height() - fontMetrics.height()) / 2;  	QRect textRect = region.adjusted(textLeftOffset, textTopOffset, -1 * textLeftOffset, -1 * textTopOffset);  | 
 Swift