┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src/kitemviews
diff options
context:
space:
mode:
authorPeter Penz <[email protected]>2011-09-19 20:34:17 +0200
committerPeter Penz <[email protected]>2011-09-19 20:35:30 +0200
commit06f057d385f3924235697942ebc73aa1956515c2 (patch)
tree0e4f447fc9f7f5e2028b0172efa1c601fb23a3c5 /src/kitemviews
parentf9bcd0a47cbdf0806c35a82856efdbe06279fb82 (diff)
Draw styled header for the details-view
Diffstat (limited to 'src/kitemviews')
-rw-r--r--src/kitemviews/kitemlistcontainer.cpp14
-rw-r--r--src/kitemviews/kitemlistheader.cpp59
-rw-r--r--src/kitemviews/kitemlistheader_p.h12
-rw-r--r--src/kitemviews/kitemlistview.cpp3
-rw-r--r--src/kitemviews/kitemlistviewlayouter.cpp3
5 files changed, 78 insertions, 13 deletions
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 <QFontMetricsF>
#include <QPainter>
+#include <QStyleOptionHeader>
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 <libdolphin_export.h>
#include <QGraphicsWidget>
+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;
}