From 51cd727066efaf548a68585ec0bb66fa1a766c4d Mon Sep 17 00:00:00 2001 From: Peter Penz Date: Tue, 20 Sep 2011 18:00:39 +0200 Subject: Show the role-description in the header of the details view --- src/kitemviews/kitemlistheader.cpp | 50 +++++++++++++++++++++++++++++++++++++- 1 file changed, 49 insertions(+), 1 deletion(-) (limited to 'src/kitemviews/kitemlistheader.cpp') diff --git a/src/kitemviews/kitemlistheader.cpp b/src/kitemviews/kitemlistheader.cpp index d1730a090..e5cb43a57 100644 --- a/src/kitemviews/kitemlistheader.cpp +++ b/src/kitemviews/kitemlistheader.cpp @@ -27,7 +27,9 @@ KItemListHeader::KItemListHeader(QGraphicsWidget* parent) : QGraphicsWidget(parent), - m_model(0) + m_model(0), + m_visibleRoles(), + m_visibleRolesWidths() { QStyleOptionHeader opt; const QSize headerSize = style()->sizeFromContents(QStyle::CT_HeaderSection, &opt, QSize()); @@ -66,16 +68,62 @@ KItemModelBase* KItemListHeader::model() const return m_model; } +void KItemListHeader::setVisibleRoles(const QList& roles) +{ + m_visibleRoles = roles; + update(); +} + +QList KItemListHeader::visibleRoles() const +{ + return m_visibleRoles; +} + +void KItemListHeader::setVisibleRolesWidths(const QHash rolesWidths) +{ + m_visibleRolesWidths = rolesWidths; + update(); +} + +QHash KItemListHeader::visibleRolesWidths() const +{ + return m_visibleRolesWidths; +} + void KItemListHeader::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) { Q_UNUSED(option); Q_UNUSED(widget); + // Draw background QStyleOption opt; opt.init(widget); opt.rect = rect().toRect(); opt.state |= QStyle::State_Horizontal; style()->drawControl(QStyle::CE_HeaderEmptyArea, &opt, painter); + + if (!m_model) { + return; + } + + // Draw roles + // TODO: This is a rough draft only + QFontMetricsF fontMetrics(font()); + QTextOption textOption(Qt::AlignLeft | Qt::AlignVCenter); + + painter->setFont(font()); + painter->setPen(palette().text().color()); + + const qreal margin = style()->pixelMetric(QStyle::PM_HeaderMargin); + qreal x = margin; + foreach (const QByteArray& role, m_visibleRoles) { + const QString roleDescription = m_model->roleDescription(role); + const qreal textWidth = fontMetrics.width(roleDescription); + QRectF rect(x, 0, textWidth, size().height()); + painter->drawText(rect, roleDescription, textOption); + + x += m_visibleRolesWidths.value(role) + margin; + } } void KItemListHeader::slotSortRoleChanged(const QByteArray& current, const QByteArray& previous) -- cgit v1.3