]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/views/dolphinviewactionhandler.cpp
"Group by - Type" now respects "Folders first" setting. Minor code cleanup
[dolphin.git] / src / views / dolphinviewactionhandler.cpp
index 7a3c758a57890e8f6a433f38134829163f1ffc07..ccf4ca11942506df1fcf17d20f956a3a64c3b7d3 100644 (file)
@@ -278,17 +278,17 @@ void DolphinViewActionHandler::createActions(SelectionMode::ActionTextHelper *ac
 
     sortByActionMenu->addSeparator();
 
-    QActionGroup *group = new QActionGroup(sortByActionMenu);
-    group->setExclusive(true);
+    QActionGroup *groupForSort = new QActionGroup(sortByActionMenu);
+    groupForSort->setExclusive(true);
 
     KToggleAction *sortAscendingAction = m_actionCollection->add<KToggleAction>(QStringLiteral("sort_ascending"));
-    sortAscendingAction->setActionGroup(group);
+    sortAscendingAction->setActionGroup(groupForSort);
     connect(sortAscendingAction, &QAction::triggered, this, [this] {
         m_currentView->setSortOrder(Qt::AscendingOrder);
     });
 
     KToggleAction *sortDescendingAction = m_actionCollection->add<KToggleAction>(QStringLiteral("sort_descending"));
-    sortDescendingAction->setActionGroup(group);
+    sortDescendingAction->setActionGroup(groupForSort);
     connect(sortDescendingAction, &QAction::triggered, this, [this] {
         m_currentView->setSortOrder(Qt::DescendingOrder);
     });
@@ -302,6 +302,18 @@ void DolphinViewActionHandler::createActions(SelectionMode::ActionTextHelper *ac
     // View -> Group By
     QActionGroup *groupByActionGroup = createFileItemRolesActionGroup(QStringLiteral("group_by_"));
 
+    KToggleAction *groupAsNone = m_actionCollection->add<KToggleAction>(QStringLiteral("group_none"));
+    groupAsNone->setData("none");
+    groupAsNone->setActionGroup(groupByActionGroup);
+    groupAsNone->setText(i18nc("@label", "No grouping"));
+    m_groupByActions.insert("none", groupAsNone);
+
+    KToggleAction *groupAsFollowSort = m_actionCollection->add<KToggleAction>(QStringLiteral("group_followSort"));
+    groupAsFollowSort->setData("followSort");
+    groupAsFollowSort->setActionGroup(groupByActionGroup);
+    groupAsFollowSort->setText(i18nc("@label", "Follow sorting"));
+    m_groupByActions.insert("followSort", groupAsFollowSort);
+
     KActionMenu *groupByActionMenu = m_actionCollection->add<KActionMenu>(QStringLiteral("group"));
     groupByActionMenu->setIcon(QIcon::fromTheme(QStringLiteral("view-group")));
     groupByActionMenu->setText(i18nc("@action:inmenu View", "Group By"));
@@ -314,14 +326,17 @@ void DolphinViewActionHandler::createActions(SelectionMode::ActionTextHelper *ac
 
     groupByActionMenu->addSeparator();
 
+    QActionGroup *groupForGroup = new QActionGroup(groupByActionMenu);
+    groupForGroup->setExclusive(true);
+
     KToggleAction *groupAscendingAction = m_actionCollection->add<KToggleAction>(QStringLiteral("group_ascending"));
-    groupAscendingAction->setActionGroup(group);
+    groupAscendingAction->setActionGroup(groupForGroup);
     connect(groupAscendingAction, &QAction::triggered, this, [this] {
         m_currentView->setGroupOrder(Qt::AscendingOrder);
     });
 
     KToggleAction *groupDescendingAction = m_actionCollection->add<KToggleAction>(QStringLiteral("group_descending"));
-    groupDescendingAction->setActionGroup(group);
+    groupDescendingAction->setActionGroup(groupForGroup);
     connect(groupDescendingAction, &QAction::triggered, this, [this] {
         m_currentView->setGroupOrder(Qt::DescendingOrder);
     });
@@ -401,9 +416,6 @@ QActionGroup *DolphinViewActionHandler::createFileItemRolesActionGroup(const QSt
 #endif
 
     QList<KFileItemModel::RoleInfo> rolesInfo = KFileItemModel::rolesInformation();
-    // Unlike sorting, grouping is optional. If creating for group_by_, include a None role.
-    if (isGroupGroup)
-        rolesInfo.append(KFileItemModel::roleInformation(nullptr));
 
     for (const KFileItemModel::RoleInfo &info : rolesInfo) {
         if (!isSortGroup && !isGroupGroup && info.role == "text") {
@@ -605,9 +617,9 @@ void DolphinViewActionHandler::slotGroupOrderChanged(Qt::SortOrder order)
 {
     QAction *descending = m_actionCollection->action(QStringLiteral("group_descending"));
     QAction *ascending = m_actionCollection->action(QStringLiteral("group_ascending"));
-    const bool sortDescending = (order == Qt::DescendingOrder);
-    descending->setChecked(sortDescending);
-    ascending->setChecked(!sortDescending);
+    const bool groupDescending = (order == Qt::DescendingOrder);
+    descending->setChecked(groupDescending);
+    ascending->setChecked(!groupDescending);
 }
 
 void DolphinViewActionHandler::slotSortFoldersFirstChanged(bool foldersFirst)
@@ -784,6 +796,15 @@ void DolphinViewActionHandler::slotGroupRoleChanged(const QByteArray &role)
         ascending->setText(i18nc("Group ascending", "Ascending"));
     }
 
+    // Disable group order selector if grouping behavior does not support it
+    if (role == "none" || role == "followSort") {
+        descending->setEnabled(false);
+        ascending->setEnabled(false);
+    } else {
+        descending->setEnabled(true);
+        ascending->setEnabled(true);
+    }
+
     slotGroupOrderChanged(m_currentView->groupOrder());
 }
 
@@ -836,7 +857,7 @@ void DolphinViewActionHandler::slotGroupTriggered(QAction *action)
     // actions and the sub-menu-actions. If an action gets checked, it must
     // be assured that all other actions get unchecked, except the ascending/
     // descending actions
-    for (QAction *groupAction : std::as_const(m_sortByActions)) {
+    for (QAction *groupAction : std::as_const(m_groupByActions)) {
         KActionMenu *actionMenu = qobject_cast<KActionMenu *>(groupAction);
         if (actionMenu) {
             const auto actions = actionMenu->menu()->actions();