diff options
Diffstat (limited to 'src/views/dolphinview.cpp')
| -rw-r--r-- | src/views/dolphinview.cpp | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/src/views/dolphinview.cpp b/src/views/dolphinview.cpp index 6bd2ad0c1..d147a87f6 100644 --- a/src/views/dolphinview.cpp +++ b/src/views/dolphinview.cpp @@ -487,6 +487,13 @@ void DolphinView::setSortRole(const QByteArray &role) ViewProperties props(viewPropertiesUrl()); props.setSortRole(role); + const Qt::SortOrder preferredOrder = preferredSortOrder(role); + if (sortOrder() != preferredOrder) { + props.setSortOrder(preferredOrder); + KItemModelBase *model = m_container->controller()->model(); + model->setSortOrder(preferredOrder); + } + KItemModelBase *model = m_container->controller()->model(); model->setSortRole(role); @@ -1734,6 +1741,31 @@ QUrl DolphinView::openItemAsFolderUrl(const KFileItem &item, const bool browseTh return QUrl(); } +Qt::SortOrder DolphinView::defaultSortOrderForRole(const QByteArray &role) +{ + static const QSet<QByteArray> descendingRoles = {// Time-based roles + "modificationtime", + "creationtime", + "accesstime", + "deletiontime", + "imageDateTime", + "releaseYear", + // Size/dimension roles + "size", + "width", + "height", + "pageCount", + "wordCount", + "lineCount", + // Quality/Quantity roles + "rating", + "duration", + "bitrate", + "frameRate"}; + + return descendingRoles.contains(role) ? Qt::DescendingOrder : Qt::AscendingOrder; +} + void DolphinView::resetZoomLevel() { ViewModeSettings settings{m_mode}; @@ -1984,6 +2016,9 @@ void DolphinView::slotSortOrderChangedByHeader(Qt::SortOrder current, Qt::SortOr Q_UNUSED(previous) Q_ASSERT(m_model->sortOrder() == current); + const QByteArray currentRole = m_model->sortRole(); + m_rolesSortOrder[currentRole] = current; + ViewProperties props(viewPropertiesUrl()); props.setSortOrder(current); @@ -1998,6 +2033,13 @@ void DolphinView::slotSortRoleChangedByHeader(const QByteArray ¤t, const Q ViewProperties props(viewPropertiesUrl()); props.setSortRole(current); + const Qt::SortOrder preferredOrder = preferredSortOrder(current); + if (m_model->sortOrder() != preferredOrder) { + props.setSortOrder(preferredOrder); + m_model->setSortOrder(preferredOrder); + Q_EMIT sortOrderChanged(preferredOrder); + } + Q_EMIT sortRoleChanged(current); } @@ -2561,4 +2603,18 @@ bool DolphinView::tryShowNameToolTip(QHelpEvent *event) return false; } +Qt::SortOrder DolphinView::preferredSortOrder(const QByteArray &role) const +{ + if (m_rolesSortOrder.contains(role)) { + return m_rolesSortOrder.value(role); + } else { + return defaultSortOrderForRole(role); + } +} + +void DolphinView::setPreferredSortOrder(const QByteArray &role, Qt::SortOrder order) +{ + m_rolesSortOrder[role] = order; +} + #include "moc_dolphinview.cpp" |
