mirror of
https://invent.kde.org/system/dolphin
synced 2024-06-30 23:46:46 +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;
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
Q_UNUSED(current)
|
||||
|
|
|
@ -211,6 +211,13 @@ public:
|
|||
*/
|
||||
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 */
|
||||
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)
|
||||
{
|
||||
Q_UNUSED(previous)
|
||||
|
@ -1743,6 +1763,8 @@ void KItemListView::setModel(KItemModelBase *model)
|
|||
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()));
|
||||
}
|
||||
|
|
|
@ -430,6 +430,8 @@ protected Q_SLOTS:
|
|||
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);
|
||||
|
||||
|
@ -552,8 +554,9 @@ private:
|
|||
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();
|
||||
|
|
|
@ -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());
|
||||
|
|
|
@ -44,6 +44,8 @@ private Q_SLOTS:
|
|||
void slotViewModeChanged(int index);
|
||||
void slotSortingChanged(int index);
|
||||
void slotSortOrderChanged(int index);
|
||||
void slotGroupingChanged(int index);
|
||||
void slotGroupOrderChanged(int index);
|
||||
void slotGroupedSortingChanged();
|
||||
void slotSortFoldersFirstChanged();
|
||||
void slotSortHiddenLastChanged();
|
||||
|
@ -67,6 +69,8 @@ private:
|
|||
QComboBox *m_viewMode;
|
||||
QComboBox *m_sortOrder;
|
||||
QComboBox *m_sorting;
|
||||
QComboBox *m_groupOrder;
|
||||
QComboBox *m_grouping;
|
||||
QCheckBox *m_sortFoldersFirst;
|
||||
QCheckBox *m_sortHiddenLast;
|
||||
QCheckBox *m_previewsShown;
|
||||
|
|
|
@ -302,18 +302,6 @@ 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"));
|
||||
|
@ -416,6 +404,9 @@ QActionGroup *DolphinViewActionHandler::createFileItemRolesActionGroup(const QSt
|
|||
#endif
|
||||
|
||||
QList<KFileItemModel::RoleInfo> rolesInfo = KFileItemModel::rolesInformation();
|
||||
if (isGroupGroup) {
|
||||
rolesInfo += KFileItemModel::extraGroupingInformation();
|
||||
}
|
||||
|
||||
for (const KFileItemModel::RoleInfo &info : rolesInfo) {
|
||||
if (!isSortGroup && !isGroupGroup && info.role == "text") {
|
||||
|
|
Loading…
Reference in New Issue
Block a user