┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src/views/dolphinview.cpp
diff options
context:
space:
mode:
authorNathan Williams <[email protected]>2025-09-11 02:28:16 +0000
committerMéven Car <[email protected]>2025-09-11 02:28:16 +0000
commitad6ccf2b86b3e97138d13518bd6ea8fd670d3530 (patch)
tree037014cce040a7108bedf351e632dd6ad499daca /src/views/dolphinview.cpp
parent1aff5f40191b08f4b9361af74bb65bfcc43ad41f (diff)
dolphinview: add preferred sort order for roles
BUG: 425457 This commit ensures that both the menu and column headers in table view will have the same default sorting (ascending/descending) for each role. It also saves the user's preferences for each role throughout the session. Previously, sorting by "Modified" would always sort by "Oldest First." If the user then changed to "Newest First" and sorted again by "Name," files would be sorted in reverse alphabetical order (Z-A). Now, sorting by "Modified" defaults to "Newest First." If a user switches between multiple roles, the default for each role will be used unless the user changes to a non-default sort order. In that case, the user's preference will be applied. Defaults: **Descending Order:** 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 **Ascending order:** - Text based roles (A-Z) - All other roles
Diffstat (limited to 'src/views/dolphinview.cpp')
-rw-r--r--src/views/dolphinview.cpp56
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 &current, 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"