diff options
author | Kevin Smith <git@kismith.co.uk> | 2009-08-29 12:27:54 (GMT) |
---|---|---|
committer | Kevin Smith <git@kismith.co.uk> | 2009-08-29 12:27:54 (GMT) |
commit | 0a456d102e2f8bd7f39617c733eb33ac1d5c2e88 (patch) | |
tree | 227c7e4c1bdab9f9fd793b93c4a369f6280e0068 /Swift | |
parent | 9c79d93c3a98b9507f42c2f564916e0ef975c525 (diff) | |
download | swift-0a456d102e2f8bd7f39617c733eb33ac1d5c2e88.zip swift-0a456d102e2f8bd7f39617c733eb33ac1d5c2e88.tar.bz2 |
Show roster group expansion decorations.
Diffstat (limited to 'Swift')
-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); |