From d062256db2c0590b7628ad7dcb9e720a5ef4f4a9 Mon Sep 17 00:00:00 2001 From: Peter Penz Date: Sat, 29 Oct 2011 19:50:15 +0200 Subject: Fix grouping-issue with not visible sorting roles It must be assured that the data for a sorting role always is determined even it is not shown as "additional info" in the view. --- src/kitemviews/kfileitemlistview.cpp | 56 +++++++++++++++++++++++------------- 1 file changed, 36 insertions(+), 20 deletions(-) (limited to 'src/kitemviews/kfileitemlistview.cpp') diff --git a/src/kitemviews/kfileitemlistview.cpp b/src/kitemviews/kfileitemlistview.cpp index 783af5a26..528140deb 100644 --- a/src/kitemviews/kfileitemlistview.cpp +++ b/src/kitemviews/kfileitemlistview.cpp @@ -304,27 +304,9 @@ void KFileItemListView::onScrollOffsetChanged(qreal current, qreal previous) void KFileItemListView::onVisibleRolesChanged(const QList& current, const QList& previous) { + Q_UNUSED(current); Q_UNUSED(previous); - - Q_ASSERT(qobject_cast(model())); - KFileItemModel* fileItemModel = static_cast(model()); - - // KFileItemModel does not distinct between "visible" and "invisible" roles. - // Add all roles that are mandatory for having a working KFileItemListView: - QSet keys = current.toSet(); - QSet roles = keys; - roles.insert("iconPixmap"); - roles.insert("iconName"); - roles.insert("name"); // TODO: just don't allow to disable it - roles.insert("isDir"); - if (m_itemLayout == DetailsLayout) { - roles.insert("isExpanded"); - roles.insert("expansionLevel"); - } - - fileItemModel->setRoles(roles); - - m_modelRolesUpdater->setRoles(keys); + applyRolesToModel(); } void KFileItemListView::onStyleOptionChanged(const KItemListStyleOption& current, const KItemListStyleOption& previous) @@ -363,6 +345,16 @@ void KFileItemListView::slotItemsRemoved(const KItemRangeList& itemRanges) updateTimersInterval(); } +void KFileItemListView::slotSortRoleChanged(const QByteArray& current, const QByteArray& previous) +{ + const QByteArray sortRole = model()->sortRole(); + if (!visibleRoles().contains(sortRole)) { + applyRolesToModel(); + } + + KItemListView::slotSortRoleChanged(current, previous); +} + void KFileItemListView::triggerVisibleIndexRangeUpdate() { m_modelRolesUpdater->setPaused(true); @@ -481,4 +473,28 @@ void KFileItemListView::updateMinimumRolesWidths() m_minimumRolesWidths.insert("size", option.fontMetrics.width(sizeText)); } +void KFileItemListView::applyRolesToModel() +{ + Q_ASSERT(qobject_cast(model())); + KFileItemModel* fileItemModel = static_cast(model()); + + // KFileItemModel does not distinct between "visible" and "invisible" roles. + // Add all roles that are mandatory for having a working KFileItemListView: + QSet roles = visibleRoles().toSet(); + roles.insert("iconPixmap"); + roles.insert("iconName"); + roles.insert("name"); + roles.insert("isDir"); + if (m_itemLayout == DetailsLayout) { + roles.insert("isExpanded"); + roles.insert("expansionLevel"); + } + + // Assure that the role that is used for sorting will be determined + roles.insert(fileItemModel->sortRole()); + + fileItemModel->setRoles(roles); + m_modelRolesUpdater->setRoles(roles); +} + #include "kfileitemlistview.moc" -- cgit v1.3