diff options
Diffstat (limited to 'Swift/QtUI/EventViewer/TwoLineDelegate.cpp')
-rw-r--r-- | Swift/QtUI/EventViewer/TwoLineDelegate.cpp | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/Swift/QtUI/EventViewer/TwoLineDelegate.cpp b/Swift/QtUI/EventViewer/TwoLineDelegate.cpp new file mode 100644 index 0000000..2437a44 --- /dev/null +++ b/Swift/QtUI/EventViewer/TwoLineDelegate.cpp @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2010 Kevin Smith + * Licensed under the GNU General Public License v3. + * See Documentation/Licenses/GPLv3.txt for more information. + */ + +#include "TwoLineDelegate.h" + +#include <QPen> +#include <QPainter> +#include <QDebug> + +namespace Swift { +TwoLineDelegate::TwoLineDelegate(int firstRole, int secondRole, bool wrap) { + firstRole_ = firstRole; + secondRole_ = secondRole; + wrap_ = wrap; +} + +TwoLineDelegate::~TwoLineDelegate() { + +} + +QSize TwoLineDelegate::sizeHint(const QStyleOptionViewItem& /*option*/, QtEvent* /*event*/ ) const { + QFontMetrics nameMetrics(common_.nameFont); + QFontMetrics statusMetrics(common_.detailFont); + int sizeByText = 2 * common_.verticalMargin + nameMetrics.height() + statusMetrics.height(); + return QSize(150, sizeByText); +} + +void TwoLineDelegate::paint(QPainter* painter, const QStyleOptionViewItem& option, QtEvent* event) const { + painter->save(); + QRect fullRegion(option.rect); + if ( option.state & QStyle::State_Selected ) { + painter->fillRect(fullRegion, option.palette.highlight()); + painter->setPen(option.palette.highlightedText().color()); + } else { + QColor nameColor = event->data(Qt::TextColorRole).value<QColor>(); + painter->setPen(QPen(nameColor)); + } + + QFontMetrics nameMetrics(common_.nameFont); + painter->setFont(common_.nameFont); + int extraFontWidth = nameMetrics.width("H"); + int leftOffset = common_.horizontalMargin * 2 + extraFontWidth / 2; + QRect textRegion(fullRegion.adjusted(leftOffset, 0, 0, 0)); + + int nameHeight = nameMetrics.height() + common_.verticalMargin; + QRect nameRegion(textRegion.adjusted(0, common_.verticalMargin, 0, 0)); + + painter->drawText(nameRegion, Qt::AlignTop, event->data(firstRole_).toString()); + + painter->setFont(common_.detailFont); + painter->setPen(QPen(QColor(160,160,160))); + + QRect detailRegion(textRegion.adjusted(0, nameHeight, 0, 0)); + painter->drawText(detailRegion, Qt::AlignTop, event->data(secondRole_).toString()); + + painter->restore(); +} + +} |