From: Peter Penz Date: Mon, 19 Sep 2011 18:34:17 +0000 (+0200) Subject: Draw styled header for the details-view X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/commitdiff_plain/06f057d385f3924235697942ebc73aa1956515c2 Draw styled header for the details-view --- diff --git a/src/kitemviews/kitemlistcontainer.cpp b/src/kitemviews/kitemlistcontainer.cpp index c68af6d94..65ddcb545 100644 --- a/src/kitemviews/kitemlistcontainer.cpp +++ b/src/kitemviews/kitemlistcontainer.cpp @@ -329,15 +329,13 @@ void KItemListContainer::updateGeometries() { QRect rect = geometry(); - int widthDec = frameWidth() * 2; - if (verticalScrollBar()->isVisible()) { - widthDec += style()->pixelMetric(QStyle::PM_ScrollBarExtent); - } + const int widthDec = verticalScrollBar()->isVisible() + ? frameWidth() + style()->pixelMetric(QStyle::PM_ScrollBarExtent) + : frameWidth() * 2; - int heightDec = frameWidth() * 2; - if (horizontalScrollBar()->isVisible()) { - heightDec += style()->pixelMetric(QStyle::PM_ScrollBarExtent); - } + const int heightDec = horizontalScrollBar()->isVisible() + ? frameWidth() + style()->pixelMetric(QStyle::PM_ScrollBarExtent) + : frameWidth() * 2; rect.adjust(0, 0, -widthDec, -heightDec); diff --git a/src/kitemviews/kitemlistheader.cpp b/src/kitemviews/kitemlistheader.cpp index 89b28bcce..d1730a090 100644 --- a/src/kitemviews/kitemlistheader.cpp +++ b/src/kitemviews/kitemlistheader.cpp @@ -19,24 +19,75 @@ #include "kitemlistheader_p.h" +#include "kitemmodelbase.h" + +#include #include +#include KItemListHeader::KItemListHeader(QGraphicsWidget* parent) : - QGraphicsWidget(parent) + QGraphicsWidget(parent), + m_model(0) { - resize(0, 20); // TODO... + QStyleOptionHeader opt; + const QSize headerSize = style()->sizeFromContents(QStyle::CT_HeaderSection, &opt, QSize()); + resize(0, headerSize.height()); } KItemListHeader::~KItemListHeader() { } +void KItemListHeader::setModel(KItemModelBase* model) +{ + if (m_model == model) { + return; + } + + if (m_model) { + disconnect(m_model, SIGNAL(sortRoleChanged(QByteArray,QByteArray)), + this, SLOT(slotSortRoleChanged(QByteArray,QByteArray))); + disconnect(m_model, SIGNAL(sortOrderChanged(Qt::SortOrder,Qt::SortOrder)), + this, SLOT(slotSortOrderChanged(Qt::SortOrder,Qt::SortOrder))); + } + + m_model = model; + + if (m_model) { + connect(m_model, SIGNAL(sortRoleChanged(QByteArray,QByteArray)), + this, SLOT(slotSortRoleChanged(QByteArray,QByteArray))); + connect(m_model, SIGNAL(sortOrderChanged(Qt::SortOrder,Qt::SortOrder)), + this, SLOT(slotSortOrderChanged(Qt::SortOrder,Qt::SortOrder))); + } +} + +KItemModelBase* KItemListHeader::model() const +{ + return m_model; +} + void KItemListHeader::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) { Q_UNUSED(option); Q_UNUSED(widget); - painter->setPen(Qt::red); - painter->drawRect(rect()); + + QStyleOption opt; + opt.init(widget); + opt.rect = rect().toRect(); + opt.state |= QStyle::State_Horizontal; + style()->drawControl(QStyle::CE_HeaderEmptyArea, &opt, painter); +} + +void KItemListHeader::slotSortRoleChanged(const QByteArray& current, const QByteArray& previous) +{ + Q_UNUSED(current); + Q_UNUSED(previous); +} + +void KItemListHeader::slotSortOrderChanged(Qt::SortOrder current, Qt::SortOrder previous) +{ + Q_UNUSED(current); + Q_UNUSED(previous); } #include "kitemlistheader_p.moc" diff --git a/src/kitemviews/kitemlistheader_p.h b/src/kitemviews/kitemlistheader_p.h index 6f04ac94b..d99cbe636 100644 --- a/src/kitemviews/kitemlistheader_p.h +++ b/src/kitemviews/kitemlistheader_p.h @@ -23,6 +23,8 @@ #include #include +class KItemModelBase; + /** * @brief Header for KItemListView that shows the currently used roles. */ @@ -34,7 +36,17 @@ public: KItemListHeader(QGraphicsWidget* parent = 0); virtual ~KItemListHeader(); + void setModel(KItemModelBase* model); + KItemModelBase* model() const; + virtual void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget = 0); + +private slots: + void slotSortRoleChanged(const QByteArray& current, const QByteArray& previous); + void slotSortOrderChanged(Qt::SortOrder current, Qt::SortOrder previous); + +private: + KItemModelBase* m_model; }; #endif diff --git a/src/kitemviews/kitemlistview.cpp b/src/kitemviews/kitemlistview.cpp index 1dc05e38f..991551485 100644 --- a/src/kitemviews/kitemlistview.cpp +++ b/src/kitemviews/kitemlistview.cpp @@ -229,6 +229,9 @@ void KItemListView::setHeaderShown(bool show) { if (show && !m_header) { m_header = new KItemListHeader(this); + m_header->setPos(0, 0); + m_header->setModel(m_model); + m_header->setZValue(1); updateHeaderWidth(); m_layouter->setHeaderHeight(m_header->size().height()); } else if (!show && m_header) { diff --git a/src/kitemviews/kitemlistviewlayouter.cpp b/src/kitemviews/kitemlistviewlayouter.cpp index 78688c941..eaf175a51 100644 --- a/src/kitemviews/kitemlistviewlayouter.cpp +++ b/src/kitemviews/kitemlistviewlayouter.cpp @@ -362,7 +362,8 @@ void KItemListViewLayouter::updateVisibleIndexes() prevRowIndex -= m_columnCount; } - while (prevRowIndex >= 0 && m_itemBoundingRects[prevRowIndex].bottom() >= m_offset) { + const qreal top = m_offset + m_headerHeight; + while (prevRowIndex >= 0 && m_itemBoundingRects[prevRowIndex].bottom() >= top) { m_firstVisibleIndex = prevRowIndex; prevRowIndex -= m_columnCount; }