diff options
| author | Peter Penz <[email protected]> | 2011-10-29 19:50:15 +0200 |
|---|---|---|
| committer | Peter Penz <[email protected]> | 2011-10-29 19:52:05 +0200 |
| commit | d062256db2c0590b7628ad7dcb9e720a5ef4f4a9 (patch) | |
| tree | 1920189854157b987253179064739480a44e68ec /src/kitemviews/kfileitemlistview.cpp | |
| parent | 74bc3cac2530031c0ec78fc5039342ac0f077eb7 (diff) | |
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.
Diffstat (limited to 'src/kitemviews/kfileitemlistview.cpp')
| -rw-r--r-- | src/kitemviews/kfileitemlistview.cpp | 56 |
1 files changed, 36 insertions, 20 deletions
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<QByteArray>& current, const QList<QByteArray>& previous) { + Q_UNUSED(current); Q_UNUSED(previous); - - Q_ASSERT(qobject_cast<KFileItemModel*>(model())); - KFileItemModel* fileItemModel = static_cast<KFileItemModel*>(model()); - - // KFileItemModel does not distinct between "visible" and "invisible" roles. - // Add all roles that are mandatory for having a working KFileItemListView: - QSet<QByteArray> keys = current.toSet(); - QSet<QByteArray> 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<KFileItemModel*>(model())); + KFileItemModel* fileItemModel = static_cast<KFileItemModel*>(model()); + + // KFileItemModel does not distinct between "visible" and "invisible" roles. + // Add all roles that are mandatory for having a working KFileItemListView: + QSet<QByteArray> 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" |
