diff options
| author | Peter Penz <[email protected]> | 2011-09-23 23:37:42 +0200 |
|---|---|---|
| committer | Peter Penz <[email protected]> | 2011-09-23 23:38:51 +0200 |
| commit | 9ea4d3c70c3765c1ef417642a392465caa31997c (patch) | |
| tree | 501200dfc615f61858fc96e7066b040db28123c1 /src/kitemviews/kitemlistview.cpp | |
| parent | 56852cff392f33ee731129fd9a755544d817e590 (diff) | |
Increase the width of the first column automatically
Additionally it is assured that on role-changes the size-hints
get updated if necessary.
Diffstat (limited to 'src/kitemviews/kitemlistview.cpp')
| -rw-r--r-- | src/kitemviews/kitemlistview.cpp | 50 |
1 files changed, 31 insertions, 19 deletions
diff --git a/src/kitemviews/kitemlistview.cpp b/src/kitemviews/kitemlistview.cpp index ef429e544..f15d1ed9d 100644 --- a/src/kitemviews/kitemlistview.cpp +++ b/src/kitemviews/kitemlistview.cpp @@ -204,6 +204,7 @@ void KItemListView::setVisibleRoles(const QList<QByteArray>& roles) if (m_header) { m_header->setVisibleRoles(roles); m_header->setVisibleRolesWidths(headerRolesWidths()); + m_useHeaderWidths = false; } } @@ -463,6 +464,12 @@ void KItemListView::initializeItemListWidget(KItemListWidget* item) Q_UNUSED(item); } +bool KItemListView::itemSizeHintUpdateRequired(const QSet<QByteArray>& changedRoles) const +{ + Q_UNUSED(changedRoles); + return true; +} + void KItemListView::onControllerChanged(KItemListController* current, KItemListController* previous) { Q_UNUSED(current); @@ -578,11 +585,19 @@ void KItemListView::resizeEvent(QGraphicsSceneResizeEvent* event) updateHeaderWidth(); } -void KItemListView::slotItemsInserted(const KItemRangeList& itemRanges) +bool KItemListView::markVisibleRolesSizesAsDirty() { - if (!m_useHeaderWidths) { - markVisibleRolesSizesAsDirty(); + const bool dirty = m_itemSize.isEmpty(); + if (dirty && !m_useHeaderWidths) { + m_visibleRolesSizes.clear(); + m_layouter->setItemSize(QSizeF()); } + return dirty; +} + +void KItemListView::slotItemsInserted(const KItemRangeList& itemRanges) +{ + markVisibleRolesSizesAsDirty(); const bool hasMultipleRanges = (itemRanges.count() > 1); if (hasMultipleRanges) { @@ -655,9 +670,7 @@ void KItemListView::slotItemsInserted(const KItemRangeList& itemRanges) void KItemListView::slotItemsRemoved(const KItemRangeList& itemRanges) { - if (!m_useHeaderWidths) { - markVisibleRolesSizesAsDirty(); - } + markVisibleRolesSizesAsDirty(); const bool hasMultipleRanges = (itemRanges.count() > 1); if (hasMultipleRanges) { @@ -739,12 +752,22 @@ void KItemListView::slotItemsRemoved(const KItemRangeList& itemRanges) void KItemListView::slotItemsChanged(const KItemRangeList& itemRanges, const QSet<QByteArray>& roles) { + const bool updateSizeHints = itemSizeHintUpdateRequired(roles); + if (updateSizeHints) { + markVisibleRolesSizesAsDirty(); + } + foreach (const KItemRange& itemRange, itemRanges) { const int index = itemRange.index; const int count = itemRange.count; - m_sizeHintResolver->itemsChanged(index, count, roles); + if (updateSizeHints) { + m_sizeHintResolver->itemsChanged(index, count, roles); + m_layouter->markAsDirty(); + updateLayout(); + } + // Apply the changed roles to the visible item-widgets const int lastIndex = index + count - 1; for (int i = index; i <= lastIndex; ++i) { KItemListWidget* widget = m_visibleItems.value(i); @@ -752,6 +775,7 @@ void KItemListView::slotItemsChanged(const KItemRangeList& itemRanges, widget->setData(m_model->data(i), roles); } } + } } @@ -884,7 +908,6 @@ void KItemListView::slotVisibleRoleWidthChanged(const QByteArray& role, qreal previousWidth) { Q_UNUSED(previousWidth); - Q_ASSERT(m_header); m_useHeaderWidths = true; @@ -1292,17 +1315,6 @@ void KItemListView::setLayouterSize(const QSizeF& size, SizeType sizeType) } } -bool KItemListView::markVisibleRolesSizesAsDirty() -{ - const bool dirty = m_itemSize.isEmpty(); - if (dirty) { - m_visibleRolesSizes.clear(); - m_layouter->setItemSize(QSizeF()); - m_useHeaderWidths = false; - } - return dirty; -} - void KItemListView::applyDynamicItemSize() { if (!m_itemSize.isEmpty()) { |
