mirror of
https://invent.kde.org/system/dolphin
synced 2024-10-02 14:45:04 +00:00
Implemented grouping-related slots to match sorting in some obscure places.
This commit is contained in:
parent
f631747a0c
commit
f1da070fd5
|
@ -946,6 +946,15 @@ QList<KFileItemModel::RoleInfo> KFileItemModel::rolesInformation()
|
||||||
return rolesInfo;
|
return rolesInfo;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QList<KFileItemModel::RoleInfo> KFileItemModel::extraGroupingInformation()
|
||||||
|
{
|
||||||
|
static QList<RoleInfo> rolesInfo{
|
||||||
|
{QByteArray("none"), kli18nc("@label", "No grouping").toString(), nullptr, nullptr, false, false},
|
||||||
|
{QByteArray("followSort"), kli18nc("@label", "Follow sorting").toString(), nullptr, nullptr, false, false}
|
||||||
|
};
|
||||||
|
return rolesInfo;
|
||||||
|
}
|
||||||
|
|
||||||
void KFileItemModel::onGroupedSortingChanged(bool current)
|
void KFileItemModel::onGroupedSortingChanged(bool current)
|
||||||
{
|
{
|
||||||
Q_UNUSED(current)
|
Q_UNUSED(current)
|
||||||
|
|
|
@ -211,6 +211,13 @@ public:
|
||||||
*/
|
*/
|
||||||
static QList<RoleInfo> rolesInformation();
|
static QList<RoleInfo> rolesInformation();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return Provides static information for all available grouping
|
||||||
|
* behaviors supported by KFileItemModel but not directly
|
||||||
|
* mapped to roles of KFileItemModel.
|
||||||
|
*/
|
||||||
|
static QList<RoleInfo> extraGroupingInformation();
|
||||||
|
|
||||||
/** set to true to hide application/x-trash files */
|
/** set to true to hide application/x-trash files */
|
||||||
void setShowTrashMime(bool show);
|
void setShowTrashMime(bool show);
|
||||||
|
|
||||||
|
|
|
@ -1481,6 +1481,26 @@ void KItemListView::slotSortRoleChanged(const QByteArray ¤t, const QByteAr
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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)
|
void KItemListView::slotCurrentChanged(int current, int previous)
|
||||||
{
|
{
|
||||||
Q_UNUSED(previous)
|
Q_UNUSED(previous)
|
||||||
|
@ -1743,6 +1763,8 @@ void KItemListView::setModel(KItemModelBase *model)
|
||||||
disconnect(m_model, &KItemModelBase::groupedSortingChanged, this, &KItemListView::slotGroupedSortingChanged);
|
disconnect(m_model, &KItemModelBase::groupedSortingChanged, this, &KItemListView::slotGroupedSortingChanged);
|
||||||
disconnect(m_model, &KItemModelBase::sortOrderChanged, this, &KItemListView::slotSortOrderChanged);
|
disconnect(m_model, &KItemModelBase::sortOrderChanged, this, &KItemListView::slotSortOrderChanged);
|
||||||
disconnect(m_model, &KItemModelBase::sortRoleChanged, this, &KItemListView::slotSortRoleChanged);
|
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()));
|
m_sizeHintResolver->itemsRemoved(KItemRangeList() << KItemRange(0, m_model->count()));
|
||||||
}
|
}
|
||||||
|
|
|
@ -430,6 +430,8 @@ protected Q_SLOTS:
|
||||||
virtual void slotGroupedSortingChanged(bool current);
|
virtual void slotGroupedSortingChanged(bool current);
|
||||||
virtual void slotSortOrderChanged(Qt::SortOrder current, Qt::SortOrder previous);
|
virtual void slotSortOrderChanged(Qt::SortOrder current, Qt::SortOrder previous);
|
||||||
virtual void slotSortRoleChanged(const QByteArray ¤t, const QByteArray &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 slotCurrentChanged(int current, int previous);
|
||||||
virtual void slotSelectionChanged(const KItemSet ¤t, const KItemSet &previous);
|
virtual void slotSelectionChanged(const KItemSet ¤t, const KItemSet &previous);
|
||||||
|
|
||||||
|
@ -552,8 +554,9 @@ private:
|
||||||
void recycleGroupHeaderForWidget(KItemListWidget *widget);
|
void recycleGroupHeaderForWidget(KItemListWidget *widget);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Helper method for slotGroupedSortingChanged(), slotSortOrderChanged()
|
* Helper method for slotGroupedSortingChanged(), slotSortOrderChanged(),
|
||||||
* and slotSortRoleChanged(): Iterates through all visible items and updates
|
* slotSortRoleChanged(), slotGroupOrderChanged() and slotGroupRoleChanged():
|
||||||
|
* Iterates through all visible items and updates
|
||||||
* the group-header widgets.
|
* the group-header widgets.
|
||||||
*/
|
*/
|
||||||
void updateVisibleGroupHeaders();
|
void updateVisibleGroupHeaders();
|
||||||
|
|
|
@ -44,6 +44,8 @@ ViewPropertiesDialog::ViewPropertiesDialog(DolphinView *dolphinView)
|
||||||
, m_viewMode(nullptr)
|
, m_viewMode(nullptr)
|
||||||
, m_sortOrder(nullptr)
|
, m_sortOrder(nullptr)
|
||||||
, m_sorting(nullptr)
|
, m_sorting(nullptr)
|
||||||
|
, m_groupOrder(nullptr)
|
||||||
|
, m_grouping(nullptr)
|
||||||
, m_sortFoldersFirst(nullptr)
|
, m_sortFoldersFirst(nullptr)
|
||||||
, m_sortHiddenLast(nullptr)
|
, m_sortHiddenLast(nullptr)
|
||||||
, m_previewsShown(nullptr)
|
, m_previewsShown(nullptr)
|
||||||
|
@ -67,7 +69,7 @@ ViewPropertiesDialog::ViewPropertiesDialog(DolphinView *dolphinView)
|
||||||
// Otherwise the dialog won't resize when we collapse the KCollapsibleGroupBox.
|
// Otherwise the dialog won't resize when we collapse the KCollapsibleGroupBox.
|
||||||
layout->setSizeConstraint(QLayout::SetFixedSize);
|
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 = 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-icons")), i18nc("@item:inlistbox", "Icons"), DolphinView::IconsView);
|
||||||
m_viewMode->addItem(QIcon::fromTheme(QStringLiteral("view-list-details")), i18nc("@item:inlistbox", "Compact"), DolphinView::CompactView);
|
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_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_sortFoldersFirst = new QCheckBox(i18nc("@option:check", "Show folders first"));
|
||||||
m_sortHiddenLast = new QCheckBox(i18nc("@option:check", "Show hidden files last"));
|
m_sortHiddenLast = new QCheckBox(i18nc("@option:check", "Show hidden files last"));
|
||||||
m_previewsShown = new QCheckBox(i18nc("@option:check", "Show preview"));
|
m_previewsShown = new QCheckBox(i18nc("@option:check", "Show preview"));
|
||||||
|
@ -139,8 +151,14 @@ ViewPropertiesDialog::ViewPropertiesDialog(DolphinView *dolphinView)
|
||||||
sortingLayout->addWidget(m_sortOrder);
|
sortingLayout->addWidget(m_sortOrder);
|
||||||
sortingLayout->addWidget(m_sorting);
|
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", "View mode:"), m_viewMode);
|
||||||
layout->addRow(i18nc("@label:listbox", "Sorting:"), sortingLayout);
|
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));
|
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_viewMode, &QComboBox::currentIndexChanged, this, &ViewPropertiesDialog::slotViewModeChanged);
|
||||||
connect(m_sorting, &QComboBox::currentIndexChanged, this, &ViewPropertiesDialog::slotSortingChanged);
|
connect(m_sorting, &QComboBox::currentIndexChanged, this, &ViewPropertiesDialog::slotSortingChanged);
|
||||||
connect(m_sortOrder, &QComboBox::currentIndexChanged, this, &ViewPropertiesDialog::slotSortOrderChanged);
|
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_sortFoldersFirst, &QCheckBox::clicked, this, &ViewPropertiesDialog::slotSortFoldersFirstChanged);
|
||||||
connect(m_sortHiddenLast, &QCheckBox::clicked, this, &ViewPropertiesDialog::slotSortHiddenLastChanged);
|
connect(m_sortHiddenLast, &QCheckBox::clicked, this, &ViewPropertiesDialog::slotSortHiddenLastChanged);
|
||||||
connect(m_previewsShown, &QCheckBox::clicked, this, &ViewPropertiesDialog::slotShowPreviewChanged);
|
connect(m_previewsShown, &QCheckBox::clicked, this, &ViewPropertiesDialog::slotShowPreviewChanged);
|
||||||
|
@ -259,6 +279,20 @@ void ViewPropertiesDialog::slotSortOrderChanged(int index)
|
||||||
markAsDirty(true);
|
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()
|
void ViewPropertiesDialog::slotGroupedSortingChanged()
|
||||||
{
|
{
|
||||||
m_viewProps->setGroupedSorting(m_showInGroups->isChecked());
|
m_viewProps->setGroupedSorting(m_showInGroups->isChecked());
|
||||||
|
@ -377,6 +411,8 @@ void ViewPropertiesDialog::applyViewProperties()
|
||||||
m_dolphinView->setViewMode(m_viewProps->viewMode());
|
m_dolphinView->setViewMode(m_viewProps->viewMode());
|
||||||
m_dolphinView->setSortRole(m_viewProps->sortRole());
|
m_dolphinView->setSortRole(m_viewProps->sortRole());
|
||||||
m_dolphinView->setSortOrder(m_viewProps->sortOrder());
|
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->setSortFoldersFirst(m_viewProps->sortFoldersFirst());
|
||||||
m_dolphinView->setSortHiddenLast(m_viewProps->sortHiddenLast());
|
m_dolphinView->setSortHiddenLast(m_viewProps->sortHiddenLast());
|
||||||
m_dolphinView->setGroupedSorting(m_viewProps->groupedSorting());
|
m_dolphinView->setGroupedSorting(m_viewProps->groupedSorting());
|
||||||
|
@ -423,6 +459,20 @@ void ViewPropertiesDialog::loadSettings()
|
||||||
m_sortFoldersFirst->setChecked(m_viewProps->sortFoldersFirst());
|
m_sortFoldersFirst->setChecked(m_viewProps->sortFoldersFirst());
|
||||||
m_sortHiddenLast->setChecked(m_viewProps->sortHiddenLast());
|
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
|
// Load show preview, show in groups and show hidden files settings
|
||||||
m_previewsShown->setChecked(m_viewProps->previewsShown());
|
m_previewsShown->setChecked(m_viewProps->previewsShown());
|
||||||
m_showInGroups->setChecked(m_viewProps->groupedSorting());
|
m_showInGroups->setChecked(m_viewProps->groupedSorting());
|
||||||
|
|
|
@ -44,6 +44,8 @@ private Q_SLOTS:
|
||||||
void slotViewModeChanged(int index);
|
void slotViewModeChanged(int index);
|
||||||
void slotSortingChanged(int index);
|
void slotSortingChanged(int index);
|
||||||
void slotSortOrderChanged(int index);
|
void slotSortOrderChanged(int index);
|
||||||
|
void slotGroupingChanged(int index);
|
||||||
|
void slotGroupOrderChanged(int index);
|
||||||
void slotGroupedSortingChanged();
|
void slotGroupedSortingChanged();
|
||||||
void slotSortFoldersFirstChanged();
|
void slotSortFoldersFirstChanged();
|
||||||
void slotSortHiddenLastChanged();
|
void slotSortHiddenLastChanged();
|
||||||
|
@ -67,6 +69,8 @@ private:
|
||||||
QComboBox *m_viewMode;
|
QComboBox *m_viewMode;
|
||||||
QComboBox *m_sortOrder;
|
QComboBox *m_sortOrder;
|
||||||
QComboBox *m_sorting;
|
QComboBox *m_sorting;
|
||||||
|
QComboBox *m_groupOrder;
|
||||||
|
QComboBox *m_grouping;
|
||||||
QCheckBox *m_sortFoldersFirst;
|
QCheckBox *m_sortFoldersFirst;
|
||||||
QCheckBox *m_sortHiddenLast;
|
QCheckBox *m_sortHiddenLast;
|
||||||
QCheckBox *m_previewsShown;
|
QCheckBox *m_previewsShown;
|
||||||
|
|
|
@ -302,18 +302,6 @@ void DolphinViewActionHandler::createActions(SelectionMode::ActionTextHelper *ac
|
||||||
// View -> Group By
|
// View -> Group By
|
||||||
QActionGroup *groupByActionGroup = createFileItemRolesActionGroup(QStringLiteral("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"));
|
KActionMenu *groupByActionMenu = m_actionCollection->add<KActionMenu>(QStringLiteral("group"));
|
||||||
groupByActionMenu->setIcon(QIcon::fromTheme(QStringLiteral("view-group")));
|
groupByActionMenu->setIcon(QIcon::fromTheme(QStringLiteral("view-group")));
|
||||||
groupByActionMenu->setText(i18nc("@action:inmenu View", "Group By"));
|
groupByActionMenu->setText(i18nc("@action:inmenu View", "Group By"));
|
||||||
|
@ -416,6 +404,9 @@ QActionGroup *DolphinViewActionHandler::createFileItemRolesActionGroup(const QSt
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
QList<KFileItemModel::RoleInfo> rolesInfo = KFileItemModel::rolesInformation();
|
QList<KFileItemModel::RoleInfo> rolesInfo = KFileItemModel::rolesInformation();
|
||||||
|
if (isGroupGroup) {
|
||||||
|
rolesInfo += KFileItemModel::extraGroupingInformation();
|
||||||
|
}
|
||||||
|
|
||||||
for (const KFileItemModel::RoleInfo &info : rolesInfo) {
|
for (const KFileItemModel::RoleInfo &info : rolesInfo) {
|
||||||
if (!isSortGroup && !isGroupGroup && info.role == "text") {
|
if (!isSortGroup && !isGroupGroup && info.role == "text") {
|
||||||
|
|
Loading…
Reference in a new issue