┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/kitemviews/kitemlistheader.cpp5
-rw-r--r--src/kitemviews/kitemlistheaderwidget.cpp9
-rw-r--r--src/kitemviews/kitemlistview.cpp58
-rw-r--r--src/kitemviews/kitemlistview.h4
-rw-r--r--src/views/dolphinview.cpp10
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);
}
}