void setHeaderHeight(qreal height);
qreal headerHeight() const;
+ /**
+ * Sets the height of the group header that is used
+ * to indicate a new item group.
+ */
+ void setGroupHeaderHeight(qreal height);
+ qreal groupHeaderHeight() const;
+
// TODO: add note that offset can be < 0 or > maximumOffset!
- void setOffset(qreal offset);
- qreal offset() const;
+ void setScrollOffset(qreal scrollOffset);
+ qreal scrollOffset() const;
+
+ qreal maximumScrollOffset() const;
+
+ void setItemOffset(qreal scrollOffset);
+ qreal itemOffset() const;
+
+ qreal maximumItemOffset() const;
void setModel(const KItemModelBase* model);
const KItemModelBase* model() const;
void setSizeHintResolver(const KItemListSizeHintResolver* sizeHintResolver);
const KItemListSizeHintResolver* sizeHintResolver() const;
- qreal maximumOffset() const;
-
- // TODO: mention that return value is -1 if count == 0
+ /**
+ * @return The first (at least partly) visible index. -1 is returned
+ * if the item count is 0.
+ */
int firstVisibleIndex() const;
- // TODO: mention that return value is -1 if count == 0
+ /**
+ * @return The last (at least partly) visible index. -1 is returned
+ * if the item count is 0.
+ */
int lastVisibleIndex() const;
- QRectF itemBoundingRect(int index) const;
+ /**
+ * @return Rectangle of the item with the index \a index.
+ * The top/left of the bounding rectangle is related to
+ * the top/left of the KItemListView. An empty rectangle
+ * is returned if an invalid index is given.
+ */
+ QRectF itemRect(int index) const;
- int maximumVisibleItems() const;
+ QRectF groupHeaderRect(int index) const;
- int itemsPerOffset() const;
+ /**
+ * @return Maximum number of (at least partly) visible items for
+ * the given size.
+ */
+ int maximumVisibleItems() const;
/**
* @return True if the item with the index \p itemIndex
private:
void doLayout();
-
void updateVisibleIndexes();
- void updateGroupedVisibleIndexes();
- void createGroupHeaders();
+ bool createGroupHeaders();
+
+ /**
+ * @return Minimum width of group headers when grouping is enabled in the horizontal
+ * alignment mode. The header alignment is done like this:
+ * Header-1 Header-2 Header-3
+ * Item 1 Item 4 Item 7
+ * Item 2 Item 5 Item 8
+ * Item 3 Item 6 Item 9
+ */
+ qreal minimumGroupHeaderWidth() const;
private:
bool m_dirty;
bool m_visibleIndexesDirty;
- bool m_grouped;
Qt::Orientation m_scrollOrientation;
QSizeF m_size;
const KItemModelBase* m_model;
const KItemListSizeHintResolver* m_sizeHintResolver;
- qreal m_offset;
- qreal m_maximumOffset;
+ qreal m_scrollOffset;
+ qreal m_maximumScrollOffset;
+
+ qreal m_itemOffset;
+ qreal m_maximumItemOffset;
int m_firstVisibleIndex;
int m_lastVisibleIndex;
- int m_firstVisibleGroupIndex;
-
qreal m_columnWidth;
qreal m_xPosInc;
int m_columnCount;
- struct ItemGroup {
- int firstItemIndex;
- qreal y;
- };
- QList<ItemGroup> m_groups;
-
// Stores all item indexes that are the first item of a group.
// Assures fast access for KItemListViewLayouter::isFirstGroupItem().
- QSet<int> m_groupIndexes;
+ QSet<int> m_groupItemIndexes;
+ qreal m_groupHeaderHeight;
+
+ QList<QRectF> m_itemRects;
- QList<QRectF> m_itemBoundingRects;
+ friend class KItemListControllerTest;
};
#endif