From 502016c1a7dc02b9e7b066b58222d3a204dd92aa Mon Sep 17 00:00:00 2001 From: Frank Reininghaus Date: Tue, 11 Feb 2014 18:28:22 +0100 Subject: [PATCH] Ensure that KItemListViewLayouter always has a size hint resolver KItemListViewLayouter uses a KItemListSizeHintResolver to find out how much space the items will need in the view. Before this commit, the size hint resolver object could be changed at runtime, and it could also be null. However, we never made use of these possibilities, so all the code that checks if m_sizeHintResolver is null is actually not needed at all. --- src/kitemviews/kitemlistview.cpp | 3 +- .../private/kitemlistviewlayouter.cpp | 42 ++++--------------- .../private/kitemlistviewlayouter.h | 5 +-- 3 files changed, 11 insertions(+), 39 deletions(-) diff --git a/src/kitemviews/kitemlistview.cpp b/src/kitemviews/kitemlistview.cpp index 38ce63af0..82f8a2053 100644 --- a/src/kitemviews/kitemlistview.cpp +++ b/src/kitemviews/kitemlistview.cpp @@ -111,8 +111,7 @@ KItemListView::KItemListView(QGraphicsWidget* parent) : m_sizeHintResolver = new KItemListSizeHintResolver(this); - m_layouter = new KItemListViewLayouter(this); - m_layouter->setSizeHintResolver(m_sizeHintResolver); + m_layouter = new KItemListViewLayouter(m_sizeHintResolver, this); m_animation = new KItemListViewAnimation(this); connect(m_animation, SIGNAL(finished(QGraphicsWidget*,KItemListViewAnimation::AnimationType)), diff --git a/src/kitemviews/private/kitemlistviewlayouter.cpp b/src/kitemviews/private/kitemlistviewlayouter.cpp index 73f3d6182..9da5384d4 100644 --- a/src/kitemviews/private/kitemlistviewlayouter.cpp +++ b/src/kitemviews/private/kitemlistviewlayouter.cpp @@ -26,7 +26,7 @@ // #define KITEMLISTVIEWLAYOUTER_DEBUG -KItemListViewLayouter::KItemListViewLayouter(QObject* parent) : +KItemListViewLayouter::KItemListViewLayouter(KItemListSizeHintResolver* sizeHintResolver, QObject* parent) : QObject(parent), m_dirty(true), m_visibleIndexesDirty(true), @@ -36,7 +36,7 @@ KItemListViewLayouter::KItemListViewLayouter(QObject* parent) : m_itemMargin(), m_headerHeight(0), m_model(0), - m_sizeHintResolver(0), + m_sizeHintResolver(sizeHintResolver), m_scrollOffset(0), m_maximumScrollOffset(0), m_itemOffset(0), @@ -53,6 +53,7 @@ KItemListViewLayouter::KItemListViewLayouter(QObject* parent) : m_groupHeaderMargin(0), m_itemInfos() { + Q_ASSERT(m_sizeHintResolver); } KItemListViewLayouter::~KItemListViewLayouter() @@ -209,19 +210,6 @@ const KItemModelBase* KItemListViewLayouter::model() const return m_model; } -void KItemListViewLayouter::setSizeHintResolver(KItemListSizeHintResolver* sizeHintResolver) -{ - if (m_sizeHintResolver != sizeHintResolver) { - m_sizeHintResolver = sizeHintResolver; - m_dirty = true; - } -} - -const KItemListSizeHintResolver* KItemListViewLayouter::sizeHintResolver() const -{ - return m_sizeHintResolver; -} - int KItemListViewLayouter::firstVisibleIndex() const { const_cast(this)->doLayout(); @@ -241,12 +229,7 @@ QRectF KItemListViewLayouter::itemRect(int index) const return QRectF(); } - QSizeF sizeHint; - if (m_sizeHintResolver) { - sizeHint = m_sizeHintResolver->sizeHint(index); - } else { - sizeHint = m_itemSize; - } + QSizeF sizeHint = m_sizeHintResolver->sizeHint(index); const qreal x = m_columnOffsets.at(m_itemInfos.at(index).column); const qreal y = m_rowOffsets.at(m_itemInfos.at(index).row); @@ -299,12 +282,7 @@ QRectF KItemListViewLayouter::groupHeaderRect(int index) const break; } - qreal itemWidth; - if (m_sizeHintResolver) { - itemWidth = m_sizeHintResolver->sizeHint(index).width(); - } else { - itemWidth = m_itemSize.width(); - } + const qreal itemWidth = m_sizeHintResolver->sizeHint(index).width(); if (itemWidth > headerWidth) { headerWidth = itemWidth; @@ -482,12 +460,10 @@ void KItemListViewLayouter::doLayout() int column = 0; while (index < itemCount && column < m_columnCount) { qreal requiredItemHeight = itemSize.height(); - if (m_sizeHintResolver) { - const QSizeF sizeHint = m_sizeHintResolver->sizeHint(index); - const qreal sizeHintHeight = horizontalScrolling ? sizeHint.width() : sizeHint.height(); - if (sizeHintHeight > requiredItemHeight) { - requiredItemHeight = sizeHintHeight; - } + const QSizeF sizeHint = m_sizeHintResolver->sizeHint(index); + const qreal sizeHintHeight = horizontalScrolling ? sizeHint.width() : sizeHint.height(); + if (sizeHintHeight > requiredItemHeight) { + requiredItemHeight = sizeHintHeight; } ItemInfo& itemInfo = m_itemInfos[index]; diff --git a/src/kitemviews/private/kitemlistviewlayouter.h b/src/kitemviews/private/kitemlistviewlayouter.h index 5ae472411..0efcab12b 100644 --- a/src/kitemviews/private/kitemlistviewlayouter.h +++ b/src/kitemviews/private/kitemlistviewlayouter.h @@ -50,7 +50,7 @@ class LIBDOLPHINPRIVATE_EXPORT KItemListViewLayouter : public QObject Q_OBJECT public: - KItemListViewLayouter(QObject* parent = 0); + KItemListViewLayouter(KItemListSizeHintResolver* sizeHintResolver, QObject* parent = 0); virtual ~KItemListViewLayouter(); void setScrollOrientation(Qt::Orientation orientation); @@ -103,9 +103,6 @@ public: void setModel(const KItemModelBase* model); const KItemModelBase* model() const; - void setSizeHintResolver(KItemListSizeHintResolver* sizeHintResolver); - const KItemListSizeHintResolver* sizeHintResolver() const; - /** * @return The first (at least partly) visible index. -1 is returned * if the item count is 0. -- 2.47.3