diff options
| author | Peter Penz <[email protected]> | 2011-09-20 18:00:39 +0200 |
|---|---|---|
| committer | Peter Penz <[email protected]> | 2011-09-20 18:01:34 +0200 |
| commit | 51cd727066efaf548a68585ec0bb66fa1a766c4d (patch) | |
| tree | 5d11ae8cf06ef53f316fb3c20c2c76d4129d8ff7 /src/kitemviews/kitemlistheader.cpp | |
| parent | 63e1e3bc14b5538027471ee76b6e92d6425ecf0b (diff) | |
Show the role-description in the header of the details view
Diffstat (limited to 'src/kitemviews/kitemlistheader.cpp')
| -rw-r--r-- | src/kitemviews/kitemlistheader.cpp | 50 |
1 files changed, 49 insertions, 1 deletions
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<QByteArray>& roles) +{ + m_visibleRoles = roles; + update(); +} + +QList<QByteArray> KItemListHeader::visibleRoles() const +{ + return m_visibleRoles; +} + +void KItemListHeader::setVisibleRolesWidths(const QHash<QByteArray, qreal> rolesWidths) +{ + m_visibleRolesWidths = rolesWidths; + update(); +} + +QHash<QByteArray, qreal> 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) |
