diff options
| author | Peter Penz <[email protected]> | 2011-09-23 19:09:01 +0200 |
|---|---|---|
| committer | Peter Penz <[email protected]> | 2011-09-23 19:11:05 +0200 |
| commit | 56852cff392f33ee731129fd9a755544d817e590 (patch) | |
| tree | 235588444cec355da4093fc405cc8072715a3e15 /src/kitemviews/kitemlistview.cpp | |
| parent | ccd92b76e74a00aef0f5186af7d797a63c6b80c6 (diff) | |
Allow resizing of columns by the user
Still open:
- Column content is not clipped correctly
- First column is not automatically increased to the available
width like in Dolphin 1.7
Diffstat (limited to 'src/kitemviews/kitemlistview.cpp')
| -rw-r--r-- | src/kitemviews/kitemlistview.cpp | 49 |
1 files changed, 42 insertions, 7 deletions
diff --git a/src/kitemviews/kitemlistview.cpp b/src/kitemviews/kitemlistview.cpp index dd2915b8e..ef429e544 100644 --- a/src/kitemviews/kitemlistview.cpp +++ b/src/kitemviews/kitemlistview.cpp @@ -76,7 +76,8 @@ KItemListView::KItemListView(QGraphicsWidget* parent) : m_mousePos(), m_autoScrollIncrement(0), m_autoScrollTimer(0), - m_header(0) + m_header(0), + m_useHeaderWidths(false) { setAcceptHoverEvents(true); @@ -239,11 +240,18 @@ void KItemListView::setHeaderShown(bool show) m_header->setVisibleRoles(m_visibleRoles); m_header->setVisibleRolesWidths(headerRolesWidths()); m_header->setZValue(1); + + m_useHeaderWidths = false; updateHeaderWidth(); + + connect(m_header, SIGNAL(visibleRoleWidthChanged(QByteArray,qreal,qreal)), + this, SLOT(slotVisibleRoleWidthChanged(QByteArray,qreal,qreal))); + m_layouter->setHeaderHeight(m_header->size().height()); } else if (!show && m_header) { delete m_header; m_header = 0; + m_useHeaderWidths = false; m_layouter->setHeaderHeight(0); } } @@ -572,7 +580,9 @@ void KItemListView::resizeEvent(QGraphicsSceneResizeEvent* event) void KItemListView::slotItemsInserted(const KItemRangeList& itemRanges) { - markVisibleRolesSizesAsDirty(); + if (!m_useHeaderWidths) { + markVisibleRolesSizesAsDirty(); + } const bool hasMultipleRanges = (itemRanges.count() > 1); if (hasMultipleRanges) { @@ -645,7 +655,9 @@ void KItemListView::slotItemsInserted(const KItemRangeList& itemRanges) void KItemListView::slotItemsRemoved(const KItemRangeList& itemRanges) { - markVisibleRolesSizesAsDirty(); + if (!m_useHeaderWidths) { + markVisibleRolesSizesAsDirty(); + } const bool hasMultipleRanges = (itemRanges.count() > 1); if (hasMultipleRanges) { @@ -867,6 +879,25 @@ void KItemListView::slotRubberBandActivationChanged(bool active) update(); } +void KItemListView::slotVisibleRoleWidthChanged(const QByteArray& role, + qreal currentWidth, + qreal previousWidth) +{ + Q_UNUSED(previousWidth); + Q_ASSERT(m_header); + + m_useHeaderWidths = true; + + if (m_visibleRolesSizes.contains(role)) { + QSizeF roleSize = m_visibleRolesSizes.value(role); + roleSize.setWidth(currentWidth); + m_visibleRolesSizes.insert(role, roleSize); + } + + m_layouter->setItemSize(QSizeF()); // Forces an update in applyDynamicItemSize() + updateLayout(); +} + void KItemListView::triggerAutoScrolling() { if (!m_autoScrollTimer) { @@ -1267,6 +1298,7 @@ bool KItemListView::markVisibleRolesSizesAsDirty() if (dirty) { m_visibleRolesSizes.clear(); m_layouter->setItemSize(QSizeF()); + m_useHeaderWidths = false; } return dirty; } @@ -1279,16 +1311,14 @@ void KItemListView::applyDynamicItemSize() if (m_visibleRolesSizes.isEmpty()) { m_visibleRolesSizes = visibleRoleSizes(); - foreach (KItemListWidget* widget, visibleItemListWidgets()) { - widget->setVisibleRolesSizes(m_visibleRolesSizes); - } - if (m_header) { m_header->setVisibleRolesWidths(headerRolesWidths()); } } if (m_layouter->itemSize().isEmpty()) { + // Calculate the maximum size of an item by considering the + // visible role sizes and apply them to the layouter. qreal requiredWidth = 0; qreal requiredHeight = 0; @@ -1309,6 +1339,11 @@ void KItemListView::applyDynamicItemSize() } m_layouter->setItemSize(dynamicItemSize); + + // Update the role sizes for all visible widgets + foreach (KItemListWidget* widget, visibleItemListWidgets()) { + widget->setVisibleRolesSizes(m_visibleRolesSizes); + } } } |
