]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/settings/viewpropertiesdialog.cpp
Implemented grouping-related slots to match sorting in some obscure places.
[dolphin.git] / src / settings / viewpropertiesdialog.cpp
index 37c3d539b3bd305d6d980f76730a5f68ba6a4f22..a13b0b117bbee5b8f43f0d37e958b5f1ecc7d802 100644 (file)
@@ -44,6 +44,8 @@ ViewPropertiesDialog::ViewPropertiesDialog(DolphinView *dolphinView)
     , m_viewMode(nullptr)
     , m_sortOrder(nullptr)
     , m_sorting(nullptr)
+    , m_groupOrder(nullptr)
+    , m_grouping(nullptr)
     , m_sortFoldersFirst(nullptr)
     , m_sortHiddenLast(nullptr)
     , m_previewsShown(nullptr)
@@ -67,7 +69,7 @@ ViewPropertiesDialog::ViewPropertiesDialog(DolphinView *dolphinView)
     // Otherwise the dialog won't resize when we collapse the KCollapsibleGroupBox.
     layout->setSizeConstraint(QLayout::SetFixedSize);
 
-    // create 'Properties' group containing view mode, sorting, sort order and show hidden files
+    // create 'Properties' group containing view mode, sorting/grouping, sort/group order and show hidden files
     m_viewMode = new QComboBox();
     m_viewMode->addItem(QIcon::fromTheme(QStringLiteral("view-list-icons")), i18nc("@item:inlistbox", "Icons"), DolphinView::IconsView);
     m_viewMode->addItem(QIcon::fromTheme(QStringLiteral("view-list-details")), i18nc("@item:inlistbox", "Compact"), DolphinView::CompactView);
@@ -83,6 +85,16 @@ ViewPropertiesDialog::ViewPropertiesDialog(DolphinView *dolphinView)
         m_sorting->addItem(info.translation, info.role);
     }
 
+    m_groupOrder = new QComboBox();
+    m_groupOrder->addItem(i18nc("@item:inlistbox Group", "Ascending"));
+    m_groupOrder->addItem(i18nc("@item:inlistbox Group", "Descending"));
+
+    m_grouping = new QComboBox();
+    const QList<KFileItemModel::RoleInfo> combinedGroupingInfo = rolesInfo + KFileItemModel::extraGroupingInformation();
+    for (const KFileItemModel::RoleInfo &info : combinedGroupingInfo) {
+        m_grouping->addItem(info.translation, info.role);
+    }
+
     m_sortFoldersFirst = new QCheckBox(i18nc("@option:check", "Show folders first"));
     m_sortHiddenLast = new QCheckBox(i18nc("@option:check", "Show hidden files last"));
     m_previewsShown = new QCheckBox(i18nc("@option:check", "Show preview"));
@@ -139,8 +151,14 @@ ViewPropertiesDialog::ViewPropertiesDialog(DolphinView *dolphinView)
     sortingLayout->addWidget(m_sortOrder);
     sortingLayout->addWidget(m_sorting);
 
+    QHBoxLayout *groupingLayout = new QHBoxLayout();
+    groupingLayout->setContentsMargins(0, 0, 0, 0);
+    groupingLayout->addWidget(m_groupOrder);
+    groupingLayout->addWidget(m_grouping);
+
     layout->addRow(i18nc("@label:listbox", "View mode:"), m_viewMode);
     layout->addRow(i18nc("@label:listbox", "Sorting:"), sortingLayout);
+    layout->addRow(i18nc("@label:listbox", "Grouping:"), groupingLayout);
 
     layout->addItem(new QSpacerItem(0, Dolphin::VERTICAL_SPACER_HEIGHT, QSizePolicy::Fixed, QSizePolicy::Fixed));
 
@@ -153,6 +171,8 @@ ViewPropertiesDialog::ViewPropertiesDialog(DolphinView *dolphinView)
     connect(m_viewMode, &QComboBox::currentIndexChanged, this, &ViewPropertiesDialog::slotViewModeChanged);
     connect(m_sorting, &QComboBox::currentIndexChanged, this, &ViewPropertiesDialog::slotSortingChanged);
     connect(m_sortOrder, &QComboBox::currentIndexChanged, this, &ViewPropertiesDialog::slotSortOrderChanged);
+    connect(m_grouping, &QComboBox::currentIndexChanged, this, &ViewPropertiesDialog::slotGroupingChanged);
+    connect(m_groupOrder, &QComboBox::currentIndexChanged, this, &ViewPropertiesDialog::slotGroupOrderChanged);
     connect(m_sortFoldersFirst, &QCheckBox::clicked, this, &ViewPropertiesDialog::slotSortFoldersFirstChanged);
     connect(m_sortHiddenLast, &QCheckBox::clicked, this, &ViewPropertiesDialog::slotSortHiddenLastChanged);
     connect(m_previewsShown, &QCheckBox::clicked, this, &ViewPropertiesDialog::slotShowPreviewChanged);
@@ -259,6 +279,20 @@ void ViewPropertiesDialog::slotSortOrderChanged(int index)
     markAsDirty(true);
 }
 
+void ViewPropertiesDialog::slotGroupingChanged(int index)
+{
+    const QByteArray role = m_grouping->itemData(index).toByteArray();
+    m_viewProps->setGroupRole(role);
+    markAsDirty(true);
+}
+
+void ViewPropertiesDialog::slotGroupOrderChanged(int index)
+{
+    const Qt::SortOrder groupOrder = (index == 0) ? Qt::AscendingOrder : Qt::DescendingOrder;
+    m_viewProps->setGroupOrder(groupOrder);
+    markAsDirty(true);
+}
+
 void ViewPropertiesDialog::slotGroupedSortingChanged()
 {
     m_viewProps->setGroupedSorting(m_showInGroups->isChecked());
@@ -377,6 +411,8 @@ void ViewPropertiesDialog::applyViewProperties()
     m_dolphinView->setViewMode(m_viewProps->viewMode());
     m_dolphinView->setSortRole(m_viewProps->sortRole());
     m_dolphinView->setSortOrder(m_viewProps->sortOrder());
+    m_dolphinView->setGroupRole(m_viewProps->groupRole());
+    m_dolphinView->setGroupOrder(m_viewProps->groupOrder());
     m_dolphinView->setSortFoldersFirst(m_viewProps->sortFoldersFirst());
     m_dolphinView->setSortHiddenLast(m_viewProps->sortHiddenLast());
     m_dolphinView->setGroupedSorting(m_viewProps->groupedSorting());
@@ -423,6 +459,20 @@ void ViewPropertiesDialog::loadSettings()
     m_sortFoldersFirst->setChecked(m_viewProps->sortFoldersFirst());
     m_sortHiddenLast->setChecked(m_viewProps->sortHiddenLast());
 
+    // Load group order and sorting
+    const int groupOrderIndex = (m_viewProps->groupOrder() == Qt::AscendingOrder) ? 0 : 1;
+    m_groupOrder->setCurrentIndex(groupOrderIndex);
+
+    const QList<KFileItemModel::RoleInfo> combinedGroupingInfo = rolesInfo + KFileItemModel::extraGroupingInformation();
+    int groupRoleIndex = 0;
+    for (int i = 0; i < combinedGroupingInfo.count(); ++i) {
+        if (combinedGroupingInfo[i].role == m_viewProps->groupRole()) {
+            groupRoleIndex = i;
+            break;
+        }
+    }
+    m_grouping->setCurrentIndex(groupRoleIndex);
+
     // Load show preview, show in groups and show hidden files settings
     m_previewsShown->setChecked(m_viewProps->previewsShown());
     m_showInGroups->setChecked(m_viewProps->groupedSorting());