Use more human-readable sort order descriptions

Summary:
Anecdotal evidence shows that ascending/descending regularly takes people longer to process than necessary. This patch implements more human-friendly sort order descriptions, in particular:

A-Z/Z-A for text
Newest first/oldest-first for time
Lowest first/highest first for rating
smallest first/largest first for sizes

If there is no string for a particular role defined it will fall back to Ascending/Descending.

I'm aware that not every language uses A-Z. In this case the translator can pick any string that represents the concept of text sorting

Test Plan: Sort view in various ways

Reviewers: #dolphin, #vdg, ngraham

Reviewed By: #dolphin, #vdg, ngraham

Subscribers: ngraham, kfm-devel

Tags: #dolphin

Differential Revision: https://phabricator.kde.org/D22006
This commit is contained in:
Nicolas Fella 2019-06-22 17:52:35 +02:00
parent cd2078cef4
commit 95270333dc
2 changed files with 44 additions and 16 deletions

View file

@ -203,10 +203,6 @@ void DolphinViewActionHandler::createActions()
showPreview->setIcon(QIcon::fromTheme(QStringLiteral("view-preview")));
connect(showPreview, &KToggleAction::triggered, this, &DolphinViewActionHandler::togglePreview);
KToggleAction* sortDescending = m_actionCollection->add<KToggleAction>(QStringLiteral("descending"));
sortDescending->setText(i18nc("@action:inmenu Sort", "Descending"));
connect(sortDescending, &KToggleAction::triggered, this, &DolphinViewActionHandler::toggleSortOrder);
KToggleAction* sortFoldersFirst = m_actionCollection->add<KToggleAction>(QStringLiteral("folders_first"));
sortFoldersFirst->setText(i18nc("@action:inmenu Sort", "Folders First"));
connect(sortFoldersFirst, &KToggleAction::triggered, this, &DolphinViewActionHandler::toggleSortFoldersFirst);
@ -222,8 +218,27 @@ void DolphinViewActionHandler::createActions()
foreach (QAction* action, sortByActionGroup->actions()) {
sortByActionMenu->addAction(action);
}
sortByActionMenu->addSeparator();
QActionGroup* group = new QActionGroup(sortByActionMenu);
group->setExclusive(true);
KToggleAction* ascendingAction = m_actionCollection->add<KToggleAction>(QStringLiteral("ascending"));
ascendingAction->setActionGroup(group);
connect(ascendingAction, &QAction::triggered, this, [this] {
m_currentView->setSortOrder(Qt::AscendingOrder);
});
KToggleAction* descendingAction = m_actionCollection->add<KToggleAction>(QStringLiteral("descending"));
descendingAction->setActionGroup(group);
connect(descendingAction, &QAction::triggered, this, [this] {
m_currentView->setSortOrder(Qt::DescendingOrder);
});
sortByActionMenu->addAction(ascendingAction);
sortByActionMenu->addAction(descendingAction);
sortByActionMenu->addSeparator();
sortByActionMenu->addAction(sortDescending);
sortByActionMenu->addAction(sortFoldersFirst);
// View -> Additional Information
@ -439,14 +454,6 @@ void DolphinViewActionHandler::zoomOut()
updateViewActions();
}
void DolphinViewActionHandler::toggleSortOrder()
{
const Qt::SortOrder order = (m_currentView->sortOrder() == Qt::AscendingOrder) ?
Qt::DescendingOrder :
Qt::AscendingOrder;
m_currentView->setSortOrder(order);
}
void DolphinViewActionHandler::toggleSortFoldersFirst()
{
const bool sortFirst = m_currentView->sortFoldersFirst();
@ -456,8 +463,10 @@ void DolphinViewActionHandler::toggleSortFoldersFirst()
void DolphinViewActionHandler::slotSortOrderChanged(Qt::SortOrder order)
{
QAction* descending = m_actionCollection->action(QStringLiteral("descending"));
QAction* ascending = m_actionCollection->action(QStringLiteral("ascending"));
const bool sortDescending = (order == Qt::DescendingOrder);
descending->setChecked(sortDescending);
ascending->setChecked(!sortDescending);
}
void DolphinViewActionHandler::slotSortFoldersFirstChanged(bool foldersFirst)
@ -583,6 +592,28 @@ void DolphinViewActionHandler::slotSortRoleChanged(const QByteArray& role)
sortByMenu->setIcon(action->icon());
}
}
QAction* descending = m_actionCollection->action(QStringLiteral("descending"));
QAction* ascending = m_actionCollection->action(QStringLiteral("ascending"));
if (role == "text" || role == "type" || role == "tags" || role == "comment") {
descending->setText(i18nc("Sort descending", "Z-A"));
ascending->setText(i18nc("Sort ascending", "A-Z"));
} else if (role == "size") {
descending->setText(i18nc("Sort descending", "Largest first"));
ascending->setText(i18nc("Sort ascending", "Smallest first"));
} else if (role == "modificationtime" || role == "creationtime" || role == "accesstime") {
descending->setText(i18nc("Sort descending", "Newest first"));
ascending->setText(i18nc("Sort ascending", "Oldest first"));
} else if (role == "rating") {
descending->setText(i18nc("Sort descending", "Highest first"));
ascending->setText(i18nc("Sort ascending", "Lowest first"));
} else {
descending->setText(i18nc("Sort descending", "Descending"));
ascending->setText(i18nc("Sort ascending", "Ascending"));
}
slotSortOrderChanged(m_currentView->sortOrder());
}
void DolphinViewActionHandler::slotZoomLevelChanged(int current, int previous)

View file

@ -132,9 +132,6 @@ private Q_SLOTS:
/** Decreases the size of the current set view mode. */
void zoomOut();
/** Switches between an ascending and descending sorting order. */
void toggleSortOrder();
/** Switches between a separate sorting and a mixed sorting of files and folders. */
void toggleSortFoldersFirst();