}
}
+void KItemListView::slotGroupOrderChanged(Qt::SortOrder current, Qt::SortOrder previous)
+{
+ Q_UNUSED(current)
+ Q_UNUSED(previous)
+ if (m_grouped) {
+ updateVisibleGroupHeaders();
+ doLayout(NoAnimation);
+ }
+}
+
+void KItemListView::slotGroupRoleChanged(const QByteArray ¤t, const QByteArray &previous)
+{
+ Q_UNUSED(current)
+ Q_UNUSED(previous)
+ if (m_grouped) {
+ updateVisibleGroupHeaders();
+ doLayout(NoAnimation);
+ }
+}
+
void KItemListView::slotCurrentChanged(int current, int previous)
{
Q_UNUSED(previous)
disconnect(m_model, &KItemModelBase::groupedSortingChanged, this, &KItemListView::slotGroupedSortingChanged);
disconnect(m_model, &KItemModelBase::sortOrderChanged, this, &KItemListView::slotSortOrderChanged);
disconnect(m_model, &KItemModelBase::sortRoleChanged, this, &KItemListView::slotSortRoleChanged);
+ disconnect(m_model, &KItemModelBase::groupOrderChanged, this, &KItemListView::slotGroupOrderChanged);
+ disconnect(m_model, &KItemModelBase::groupRoleChanged, this, &KItemListView::slotGroupRoleChanged);
m_sizeHintResolver->itemsRemoved(KItemRangeList() << KItemRange(0, m_model->count()));
}
virtual void slotGroupedSortingChanged(bool current);
virtual void slotSortOrderChanged(Qt::SortOrder current, Qt::SortOrder previous);
virtual void slotSortRoleChanged(const QByteArray ¤t, const QByteArray &previous);
+ virtual void slotGroupOrderChanged(Qt::SortOrder current, Qt::SortOrder previous);
+ virtual void slotGroupRoleChanged(const QByteArray ¤t, const QByteArray &previous);
virtual void slotCurrentChanged(int current, int previous);
virtual void slotSelectionChanged(const KItemSet ¤t, const KItemSet &previous);
void recycleGroupHeaderForWidget(KItemListWidget *widget);
/**
- * Helper method for slotGroupedSortingChanged(), slotSortOrderChanged()
- * and slotSortRoleChanged(): Iterates through all visible items and updates
+ * Helper method for slotGroupedSortingChanged(), slotSortOrderChanged(),
+ * slotSortRoleChanged(), slotGroupOrderChanged() and slotGroupRoleChanged():
+ * Iterates through all visible items and updates
* the group-header widgets.
*/
void updateVisibleGroupHeaders();
, m_viewMode(nullptr)
, m_sortOrder(nullptr)
, m_sorting(nullptr)
+ , m_groupOrder(nullptr)
+ , m_grouping(nullptr)
, m_sortFoldersFirst(nullptr)
, m_sortHiddenLast(nullptr)
, m_previewsShown(nullptr)
// 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);
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"));
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));
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);
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());
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());
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());
// 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"));
#endif
QList<KFileItemModel::RoleInfo> rolesInfo = KFileItemModel::rolesInformation();
+ if (isGroupGroup) {
+ rolesInfo += KFileItemModel::extraGroupingInformation();
+ }
for (const KFileItemModel::RoleInfo &info : rolesInfo) {
if (!isSortGroup && !isGroupGroup && info.role == "text") {