2 * SPDX-FileCopyrightText: 2023 Méven Car <meven@kde.org>
4 * SPDX-License-Identifier: GPL-2.0-or-later
7 #include "contentdisplaytab.h"
8 #include "dolphin_contentdisplaysettings.h"
9 #include "dolphin_generalsettings.h"
12 #include <KLocalizedString>
14 #include <QButtonGroup>
15 #include <QFormLayout>
16 #include <QHBoxLayout>
17 #include <QRadioButton>
20 ContentDisplayTab::ContentDisplayTab(QWidget
*parent
)
21 : SettingsPageBase(parent
)
22 , m_naturalSorting(nullptr)
23 , m_caseSensitiveSorting(nullptr)
24 , m_caseInsensitiveSorting(nullptr)
25 , m_numberOfItems(nullptr)
26 , m_sizeOfContents(nullptr)
27 , m_recursiveDirectorySizeLimit(nullptr)
28 , m_useRelatetiveDates(nullptr)
29 , m_useShortDates(nullptr)
30 , m_useSymbolicPermissions(nullptr)
31 , m_useNumericPermissions(nullptr)
32 , m_useCombinedPermissions(nullptr)
34 QFormLayout
*topLayout
= new QFormLayout(this);
37 m_naturalSorting
= new QRadioButton(i18nc("option:radio", "Natural"));
38 m_caseInsensitiveSorting
= new QRadioButton(i18nc("option:radio", "Alphabetical, case insensitive"));
39 m_caseSensitiveSorting
= new QRadioButton(i18nc("option:radio", "Alphabetical, case sensitive"));
41 QButtonGroup
*sortingOrderGroup
= new QButtonGroup(this);
42 sortingOrderGroup
->addButton(m_naturalSorting
);
43 sortingOrderGroup
->addButton(m_caseInsensitiveSorting
);
44 sortingOrderGroup
->addButton(m_caseSensitiveSorting
);
45 topLayout
->addRow(i18nc("@title:group", "Sorting mode: "), m_naturalSorting
);
46 topLayout
->addRow(QString(), m_caseInsensitiveSorting
);
47 topLayout
->addRow(QString(), m_caseSensitiveSorting
);
51 m_numberOfItems
= new QRadioButton(i18nc("option:radio", "Number of items"));
52 m_sizeOfContents
= new QRadioButton(i18nc("option:radio", "Size of contents, up to "));
54 QButtonGroup
*sortingModeGroup
= new QButtonGroup(this);
55 sortingModeGroup
->addButton(m_numberOfItems
);
56 sortingModeGroup
->addButton(m_sizeOfContents
);
58 m_recursiveDirectorySizeLimit
= new QSpinBox();
59 connect(m_recursiveDirectorySizeLimit
, &QSpinBox::valueChanged
, this, [this](int value
) {
60 m_recursiveDirectorySizeLimit
->setSuffix(i18np(" level deep", " levels deep", value
));
62 m_recursiveDirectorySizeLimit
->setRange(1, 20);
63 m_recursiveDirectorySizeLimit
->setSingleStep(1);
65 QHBoxLayout
*contentsSizeLayout
= new QHBoxLayout();
66 contentsSizeLayout
->addWidget(m_sizeOfContents
);
67 contentsSizeLayout
->addWidget(m_recursiveDirectorySizeLimit
);
69 topLayout
->addRow(i18nc("@title:group", "Folder size displays:"), m_numberOfItems
);
70 topLayout
->addRow(QString(), contentsSizeLayout
);
73 QDateTime thirtyMinutesAgo
= QDateTime::currentDateTime().addSecs(-30 * 60);
75 KFormat
formatter(local
);
77 m_useRelatetiveDates
= new QRadioButton(
78 i18nc("option:radio as in relative date", "Relative (e.g. '%1')", formatter
.formatRelativeDateTime(thirtyMinutesAgo
, QLocale::ShortFormat
)));
80 new QRadioButton(i18nc("option:radio as in absolute date", "Absolute (e.g. '%1')", local
.toString(thirtyMinutesAgo
, QLocale::ShortFormat
)));
82 QButtonGroup
*dateFormatGroup
= new QButtonGroup(this);
83 dateFormatGroup
->addButton(m_useRelatetiveDates
);
84 dateFormatGroup
->addButton(m_useShortDates
);
86 topLayout
->addRow(i18nc("@title:group", "Date style:"), m_useRelatetiveDates
);
87 topLayout
->addRow(QString(), m_useShortDates
);
89 m_useSymbolicPermissions
= new QRadioButton(i18nc("option:radio as symbolic style ", "Symbolic (e.g. 'drwxr-xr-x')"));
90 m_useNumericPermissions
= new QRadioButton(i18nc("option:radio as numeric style", "Numeric (Octal) (e.g. '755')"));
91 m_useCombinedPermissions
= new QRadioButton(i18nc("option:radio as combined style", "Combined (e.g. 'drwxr-xr-x (755)')"));
93 topLayout
->addRow(i18nc("@title:group", "Permissions style:"), m_useSymbolicPermissions
);
94 topLayout
->addRow(QString(), m_useNumericPermissions
);
95 topLayout
->addRow(QString(), m_useCombinedPermissions
);
97 QButtonGroup
*permissionsFormatGroup
= new QButtonGroup(this);
98 permissionsFormatGroup
->addButton(m_useSymbolicPermissions
);
99 permissionsFormatGroup
->addButton(m_useNumericPermissions
);
100 permissionsFormatGroup
->addButton(m_useCombinedPermissions
);
103 connect(m_recursiveDirectorySizeLimit
, &QSpinBox::valueChanged
, this, &SettingsPageBase::changed
);
104 connect(m_numberOfItems
, &QRadioButton::toggled
, this, &SettingsPageBase::changed
);
105 connect(m_sizeOfContents
, &QRadioButton::toggled
, this, [=]() {
106 m_recursiveDirectorySizeLimit
->setEnabled(m_sizeOfContents
->isChecked());
110 connect(m_useRelatetiveDates
, &QRadioButton::toggled
, this, &SettingsPageBase::changed
);
111 connect(m_useShortDates
, &QRadioButton::toggled
, this, &SettingsPageBase::changed
);
112 connect(m_useSymbolicPermissions
, &QRadioButton::toggled
, this, &SettingsPageBase::changed
);
113 connect(m_useNumericPermissions
, &QRadioButton::toggled
, this, &SettingsPageBase::changed
);
114 connect(m_useCombinedPermissions
, &QRadioButton::toggled
, this, &SettingsPageBase::changed
);
115 connect(m_naturalSorting
, &QRadioButton::toggled
, this, &SettingsPageBase::changed
);
116 connect(m_caseInsensitiveSorting
, &QRadioButton::toggled
, this, &SettingsPageBase::changed
);
117 connect(m_caseSensitiveSorting
, &QRadioButton::toggled
, this, &SettingsPageBase::changed
);
122 void ContentDisplayTab::applySettings()
124 auto settings
= ContentDisplaySettings::self();
126 settings
->setDirectorySizeCount(m_numberOfItems
->isChecked());
127 settings
->setRecursiveDirectorySizeLimit(m_recursiveDirectorySizeLimit
->value());
129 setSortingChoiceValue();
130 settings
->setUseShortRelativeDates(m_useRelatetiveDates
->isChecked());
132 if (m_useSymbolicPermissions
->isChecked()) {
133 settings
->setUsePermissionsFormat(ContentDisplaySettings::EnumUsePermissionsFormat::SymbolicFormat
);
134 } else if (m_useNumericPermissions
->isChecked()) {
135 settings
->setUsePermissionsFormat(ContentDisplaySettings::EnumUsePermissionsFormat::NumericFormat
);
136 } else if (m_useCombinedPermissions
->isChecked()) {
137 settings
->setUsePermissionsFormat(ContentDisplaySettings::EnumUsePermissionsFormat::CombinedFormat
);
142 void ContentDisplayTab::loadSettings()
144 auto settings
= ContentDisplaySettings::self();
146 if (settings
->directorySizeCount()) {
147 m_numberOfItems
->setChecked(true);
148 m_recursiveDirectorySizeLimit
->setEnabled(false);
150 m_sizeOfContents
->setChecked(true);
151 m_recursiveDirectorySizeLimit
->setEnabled(true);
153 m_recursiveDirectorySizeLimit
->setValue(settings
->recursiveDirectorySizeLimit());
155 m_useRelatetiveDates
->setChecked(settings
->useShortRelativeDates());
156 m_useShortDates
->setChecked(!settings
->useShortRelativeDates());
157 m_useSymbolicPermissions
->setChecked(settings
->usePermissionsFormat() == ContentDisplaySettings::EnumUsePermissionsFormat::SymbolicFormat
);
158 m_useNumericPermissions
->setChecked(settings
->usePermissionsFormat() == ContentDisplaySettings::EnumUsePermissionsFormat::NumericFormat
);
159 m_useCombinedPermissions
->setChecked(settings
->usePermissionsFormat() == ContentDisplaySettings::EnumUsePermissionsFormat::CombinedFormat
);
160 loadSortingChoiceSettings();
163 void ContentDisplayTab::setSortingChoiceValue()
165 auto settings
= GeneralSettings::self();
166 using Choice
= GeneralSettings::EnumSortingChoice
;
167 if (m_naturalSorting
->isChecked()) {
168 settings
->setSortingChoice(Choice::NaturalSorting
);
169 } else if (m_caseInsensitiveSorting
->isChecked()) {
170 settings
->setSortingChoice(Choice::CaseInsensitiveSorting
);
171 } else if (m_caseSensitiveSorting
->isChecked()) {
172 settings
->setSortingChoice(Choice::CaseSensitiveSorting
);
176 void ContentDisplayTab::loadSortingChoiceSettings()
178 using Choice
= GeneralSettings::EnumSortingChoice
;
179 switch (GeneralSettings::sortingChoice()) {
180 case Choice::NaturalSorting
:
181 m_naturalSorting
->setChecked(true);
183 case Choice::CaseInsensitiveSorting
:
184 m_caseInsensitiveSorting
->setChecked(true);
186 case Choice::CaseSensitiveSorting
:
187 m_caseSensitiveSorting
->setChecked(true);
194 void ContentDisplayTab::restoreDefaults()
196 auto settings
= ContentDisplaySettings::self();
197 settings
->useDefaults(true);
199 settings
->useDefaults(false);
202 #include "moc_contentdisplaytab.cpp"