diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/kitemviews/kitemlistheader.cpp | 5 | ||||
| -rw-r--r-- | src/kitemviews/kitemlistheaderwidget.cpp | 9 | ||||
| -rw-r--r-- | src/kitemviews/kitemlistview.cpp | 58 | ||||
| -rw-r--r-- | src/kitemviews/kitemlistview.h | 4 | ||||
| -rw-r--r-- | src/views/dolphinview.cpp | 10 |
5 files changed, 50 insertions, 36 deletions
diff --git a/src/kitemviews/kitemlistheader.cpp b/src/kitemviews/kitemlistheader.cpp index 9c617840a..be7a09c8f 100644 --- a/src/kitemviews/kitemlistheader.cpp +++ b/src/kitemviews/kitemlistheader.cpp @@ -30,7 +30,8 @@ void KItemListHeader::setAutomaticColumnResizing(bool automatic) if (m_headerWidget->automaticColumnResizing() != automatic) { m_headerWidget->setAutomaticColumnResizing(automatic); if (automatic) { - m_view->resizeColumnWidths(); + m_view->applyAutomaticColumnWidths(); + m_view->doLayout(KItemListView::NoAnimation); } } } @@ -45,6 +46,7 @@ void KItemListHeader::setColumnWidth(const QByteArray& role, qreal width) if (!m_headerWidget->automaticColumnResizing()) { m_headerWidget->setColumnWidth(role, width); m_view->applyColumnWidthsFromHeader(); + m_view->doLayout(KItemListView::NoAnimation); } } @@ -62,6 +64,7 @@ void KItemListHeader::setColumnWidths(const QHash<QByteArray, qreal>& columnWidt } m_view->applyColumnWidthsFromHeader(); + m_view->doLayout(KItemListView::NoAnimation); } } diff --git a/src/kitemviews/kitemlistheaderwidget.cpp b/src/kitemviews/kitemlistheaderwidget.cpp index 18b37c246..d3a8f001b 100644 --- a/src/kitemviews/kitemlistheaderwidget.cpp +++ b/src/kitemviews/kitemlistheaderwidget.cpp @@ -98,9 +98,14 @@ bool KItemListHeaderWidget::automaticColumnResizing() const void KItemListHeaderWidget::setColumns(const QList<QByteArray>& roles) { + foreach (const QByteArray& role, roles) { + if (!m_columnWidths.contains(role)) { + m_columnWidths.remove(role); + m_preferredColumnWidths.remove(role); + } + } + m_columns = roles; - m_columnWidths.clear(); - m_preferredColumnWidths.clear(); update(); } diff --git a/src/kitemviews/kitemlistview.cpp b/src/kitemviews/kitemlistview.cpp index d8dd3e16f..e68c1143e 100644 --- a/src/kitemviews/kitemlistview.cpp +++ b/src/kitemviews/kitemlistview.cpp @@ -260,6 +260,27 @@ void KItemListView::setVisibleRoles(const QList<QByteArray>& roles) { const QList<QByteArray> previousRoles = m_visibleRoles; m_visibleRoles = roles; + onVisibleRolesChanged(roles, previousRoles); + + m_sizeHintResolver->clearCache(); + m_layouter->markAsDirty(); + + if (m_itemSize.isEmpty()) { + m_headerWidget->setColumns(roles); + updatePreferredColumnWidths(); + if (!m_headerWidget->automaticColumnResizing()) { + // The column-width of new roles are still 0. Apply the preferred + // column-width as default with. + foreach (const QByteArray& role, m_visibleRoles) { + if (m_headerWidget->columnWidth(role) == 0) { + const qreal width = m_headerWidget->preferredColumnWidth(role); + m_headerWidget->setColumnWidth(role, width); + } + } + + applyColumnWidthsFromHeader(); + } + } const bool alternateBackgroundsChanged = m_itemSize.isEmpty() && ((roles.count() > 1 && previousRoles.count() <= 1) || @@ -270,29 +291,12 @@ void KItemListView::setVisibleRoles(const QList<QByteArray>& roles) it.next(); KItemListWidget* widget = it.value(); widget->setVisibleRoles(roles); - updateWidgetColumnWidths(widget); if (alternateBackgroundsChanged) { updateAlternateBackgroundForWidget(widget); } } - m_sizeHintResolver->clearCache(); - m_layouter->markAsDirty(); - - if (m_headerWidget->isVisible()) { - m_headerWidget->setColumns(roles); - } - - if (m_itemSize.isEmpty()) { - updatePreferredColumnWidths(); - if (!m_headerWidget->automaticColumnResizing()) { - applyColumnWidthsFromHeader(); - } - } - doLayout(NoAnimation); - - onVisibleRolesChanged(roles, previousRoles); } QList<QByteArray> KItemListView::visibleRoles() const @@ -415,7 +419,7 @@ void KItemListView::setGeometry(const QRectF& rect) const QSizeF newSize = rect.size(); if (m_itemSize.isEmpty()) { if (m_headerWidget->automaticColumnResizing()) { - resizeColumnWidths(); + applyAutomaticColumnWidths(); } else { const qreal requiredWidth = columnWidthsSum(); const QSizeF dynamicItemSize(qMax(newSize.width(), requiredWidth), @@ -910,6 +914,8 @@ void KItemListView::slotItemsInserted(const KItemRangeList& itemRanges) void KItemListView::slotItemsRemoved(const KItemRangeList& itemRanges) { if (m_itemSize.isEmpty()) { + // Don't pass the item-range: The preferred column-widths of + // all items must be adjusted when removing items. updatePreferredColumnWidths(); } @@ -1225,6 +1231,7 @@ void KItemListView::slotHeaderColumnWidthChanged(const QByteArray& role, m_headerWidget->setAutomaticColumnResizing(false); applyColumnWidthsFromHeader(); + doLayout(NoAnimation); } void KItemListView::slotHeaderColumnMoved(const QByteArray& role, @@ -1918,7 +1925,6 @@ void KItemListView::updateWidgetColumnWidths(KItemListWidget* widget) void KItemListView::updatePreferredColumnWidths(const KItemRangeList& itemRanges) { Q_ASSERT(m_itemSize.isEmpty()); - const int itemCount = m_model->count(); int rangesItemCount = 0; foreach (const KItemRange& range, itemRanges) { @@ -1935,7 +1941,7 @@ void KItemListView::updatePreferredColumnWidths(const KItemRangeList& itemRanges // The chances are good that the widths of the sub ranges // already fit into the available widths and hence no // expensive update might be required. - bool updateRequired = false; + bool changed = false; const QHash<QByteArray, qreal> updatedWidths = preferredColumnWidths(itemRanges); QHashIterator<QByteArray, qreal> it(updatedWidths); @@ -1946,19 +1952,19 @@ void KItemListView::updatePreferredColumnWidths(const KItemRangeList& itemRanges const qreal currentWidth = m_headerWidget->preferredColumnWidth(role); if (updatedWidth > currentWidth) { m_headerWidget->setPreferredColumnWidth(role, updatedWidth); - updateRequired = true; + changed = true; } } - if (!updateRequired) { + if (!changed) { // All the updated sizes are smaller than the current sizes and no change // of the stretched roles-widths is required return; } } - if (m_header->automaticColumnResizing()) { - resizeColumnWidths(); + if (m_headerWidget->automaticColumnResizing()) { + applyAutomaticColumnWidths(); } } @@ -1974,7 +1980,7 @@ void KItemListView::updatePreferredColumnWidths() } } -void KItemListView::resizeColumnWidths() +void KItemListView::applyAutomaticColumnWidths() { Q_ASSERT(m_itemSize.isEmpty()); Q_ASSERT(m_headerWidget->automaticColumnResizing()); @@ -2007,7 +2013,7 @@ void KItemListView::resizeColumnWidths() // TODO: A proper calculation of the minimum width depends on the implementation // of KItemListWidget. Probably a kind of minimum size-hint should be introduced // later. - const qreal minWidth = m_styleOption.iconSize * 2 + 200; + const qreal minWidth = qMin(firstColumnWidth, qreal(m_styleOption.iconSize * 2 + 200)); if (shrinkedFirstColumnWidth < minWidth) { shrinkedFirstColumnWidth = minWidth; } diff --git a/src/kitemviews/kitemlistview.h b/src/kitemviews/kitemlistview.h index e1433f684..a3c2059d1 100644 --- a/src/kitemviews/kitemlistview.h +++ b/src/kitemviews/kitemlistview.h @@ -543,7 +543,7 @@ private: /** * Convenience method for - * updateColumnWidthsCache(KItemRangeList() << KItemRange(0, m_model->count()). + * updatePreferredColumnWidths(KItemRangeList() << KItemRange(0, m_model->count()). */ void updatePreferredColumnWidths(); @@ -551,7 +551,7 @@ private: * Resizes the column-widths of m_headerWidget based on the preferred widths * and the vailable view-size. */ - void resizeColumnWidths(); + void applyAutomaticColumnWidths(); /** * @return Sum of the widths of all columns. diff --git a/src/views/dolphinview.cpp b/src/views/dolphinview.cpp index 8672b531b..c9af2248a 100644 --- a/src/views/dolphinview.cpp +++ b/src/views/dolphinview.cpp @@ -844,7 +844,6 @@ void DolphinView::slotHeaderContextMenuRequested(const QPointF& pos) foreach (const QByteArray& role, view->visibleRoles()) { columnWidths.append(header->columnWidth(role)); } - props.setHeaderColumnWidths(columnWidths); header->setAutomaticColumnResizing(false); } else { @@ -861,10 +860,11 @@ void DolphinView::slotHeaderContextMenuRequested(const QPointF& pos) view->setVisibleRoles(visibleRoles); props.setVisibleRoles(visibleRoles); - // Reset the stored column-widths, so that automatic resizing is - // used again. - props.setHeaderColumnWidths(QList<int>()); - header->setAutomaticColumnResizing(true); + QList<int> columnWidths; + foreach (const QByteArray& role, view->visibleRoles()) { + columnWidths.append(header->columnWidth(role)); + } + props.setHeaderColumnWidths(columnWidths); } } |
