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_noDirectorySize(nullptr)
28 , m_recursiveDirectorySizeLimit(nullptr)
29 , m_useRelatetiveDates(nullptr)
30 , m_useShortDates(nullptr)
31 , m_useSymbolicPermissions(nullptr)
32 , m_useNumericPermissions(nullptr)
33 , m_useCombinedPermissions(nullptr)
34 , m_elideMiddle(nullptr)
35 , m_elideEnding(nullptr)
37 QFormLayout
*topLayout
= new QFormLayout(this);
40 m_naturalSorting
= new QRadioButton(i18nc("option:radio", "Natural"));
41 m_caseInsensitiveSorting
= new QRadioButton(i18nc("option:radio", "Alphabetical, case insensitive"));
42 m_caseSensitiveSorting
= new QRadioButton(i18nc("option:radio", "Alphabetical, case sensitive"));
44 QButtonGroup
*sortingOrderGroup
= new QButtonGroup(this);
45 sortingOrderGroup
->addButton(m_naturalSorting
);
46 sortingOrderGroup
->addButton(m_caseInsensitiveSorting
);
47 sortingOrderGroup
->addButton(m_caseSensitiveSorting
);
48 topLayout
->addRow(i18nc("@title:group", "Sorting mode: "), m_naturalSorting
);
49 topLayout
->addRow(QString(), m_caseInsensitiveSorting
);
50 topLayout
->addRow(QString(), m_caseSensitiveSorting
);
54 m_numberOfItems
= new QRadioButton(i18nc("option:radio", "Show number of items"));
55 m_sizeOfContents
= new QRadioButton(i18nc("option:radio", "Show size of contents, up to "));
56 m_noDirectorySize
= new QRadioButton(i18nc("option:radio", "Show no size"));
58 QButtonGroup
*sortingModeGroup
= new QButtonGroup(this);
59 sortingModeGroup
->addButton(m_numberOfItems
);
60 sortingModeGroup
->addButton(m_sizeOfContents
);
61 sortingModeGroup
->addButton(m_noDirectorySize
);
63 m_recursiveDirectorySizeLimit
= new QSpinBox();
64 connect(m_recursiveDirectorySizeLimit
, &QSpinBox::valueChanged
, this, [this](int value
) {
65 m_recursiveDirectorySizeLimit
->setSuffix(i18np(" level deep", " levels deep", value
));
67 m_recursiveDirectorySizeLimit
->setRange(1, 20);
68 m_recursiveDirectorySizeLimit
->setSingleStep(1);
70 QHBoxLayout
*contentsSizeLayout
= new QHBoxLayout();
71 contentsSizeLayout
->addWidget(m_sizeOfContents
);
72 contentsSizeLayout
->addWidget(m_recursiveDirectorySizeLimit
);
74 topLayout
->addRow(i18nc("@title:group", "Folder size:"), m_numberOfItems
);
75 topLayout
->addRow(QString(), contentsSizeLayout
);
76 topLayout
->addRow(QString(), m_noDirectorySize
);
79 QDateTime thirtyMinutesAgo
= QDateTime::currentDateTime().addSecs(-30 * 60);
81 KFormat
formatter(local
);
83 m_useRelatetiveDates
= new QRadioButton(
84 i18nc("option:radio as in relative date", "Relative (e.g. '%1')", formatter
.formatRelativeDateTime(thirtyMinutesAgo
, QLocale::ShortFormat
)));
86 new QRadioButton(i18nc("option:radio as in absolute date", "Absolute (e.g. '%1')", local
.toString(thirtyMinutesAgo
, QLocale::ShortFormat
)));
88 QButtonGroup
*dateFormatGroup
= new QButtonGroup(this);
89 dateFormatGroup
->addButton(m_useRelatetiveDates
);
90 dateFormatGroup
->addButton(m_useShortDates
);
92 topLayout
->addRow(i18nc("@title:group", "Date style:"), m_useRelatetiveDates
);
93 topLayout
->addRow(QString(), m_useShortDates
);
95 m_useSymbolicPermissions
= new QRadioButton(i18nc("option:radio as symbolic style ", "Symbolic (e.g. 'drwxr-xr-x')"));
96 m_useNumericPermissions
= new QRadioButton(i18nc("option:radio as numeric style", "Numeric (Octal) (e.g. '755')"));
97 m_useCombinedPermissions
= new QRadioButton(i18nc("option:radio as combined style", "Combined (e.g. 'drwxr-xr-x (755)')"));
99 topLayout
->addRow(i18nc("@title:group", "Permissions style:"), m_useSymbolicPermissions
);
100 topLayout
->addRow(QString(), m_useNumericPermissions
);
101 topLayout
->addRow(QString(), m_useCombinedPermissions
);
103 QButtonGroup
*permissionsFormatGroup
= new QButtonGroup(this);
104 permissionsFormatGroup
->addButton(m_useSymbolicPermissions
);
105 permissionsFormatGroup
->addButton(m_useNumericPermissions
);
106 permissionsFormatGroup
->addButton(m_useCombinedPermissions
);
108 m_elideMiddle
= new QRadioButton(i18nc("@option:radio Long file names", "Elide in the middle (e.g. ’Some very… name.txt')"));
109 m_elideEnding
= new QRadioButton(i18nc("@option:radio Long file names", "Elide at the end (e.g. ’Some very long….txt')"));
111 topLayout
->addRow(i18nc("@title:group", "Long file names:"), m_elideMiddle
);
112 topLayout
->addRow(QString(), m_elideEnding
);
114 QButtonGroup
*elidingModeGroup
= new QButtonGroup(this);
115 elidingModeGroup
->addButton(m_elideMiddle
);
116 elidingModeGroup
->addButton(m_elideEnding
);
119 connect(m_recursiveDirectorySizeLimit
, &QSpinBox::valueChanged
, this, &SettingsPageBase::changed
);
120 connect(m_numberOfItems
, &QRadioButton::toggled
, this, &SettingsPageBase::changed
);
121 connect(m_sizeOfContents
, &QRadioButton::toggled
, this, [=, this]() {
122 m_recursiveDirectorySizeLimit
->setEnabled(m_sizeOfContents
->isChecked());
124 connect(m_noDirectorySize
, &QRadioButton::toggled
, this, &SettingsPageBase::changed
);
127 connect(m_useRelatetiveDates
, &QRadioButton::toggled
, this, &SettingsPageBase::changed
);
128 connect(m_useShortDates
, &QRadioButton::toggled
, this, &SettingsPageBase::changed
);
129 connect(m_useSymbolicPermissions
, &QRadioButton::toggled
, this, &SettingsPageBase::changed
);
130 connect(m_useNumericPermissions
, &QRadioButton::toggled
, this, &SettingsPageBase::changed
);
131 connect(m_useCombinedPermissions
, &QRadioButton::toggled
, this, &SettingsPageBase::changed
);
132 connect(m_naturalSorting
, &QRadioButton::toggled
, this, &SettingsPageBase::changed
);
133 connect(m_caseInsensitiveSorting
, &QRadioButton::toggled
, this, &SettingsPageBase::changed
);
134 connect(m_caseSensitiveSorting
, &QRadioButton::toggled
, this, &SettingsPageBase::changed
);
135 connect(m_elideMiddle
, &QRadioButton::toggled
, this, &SettingsPageBase::changed
);
136 connect(m_elideEnding
, &QRadioButton::toggled
, this, &SettingsPageBase::changed
);
141 void ContentDisplayTab::applySettings()
143 auto settings
= ContentDisplaySettings::self();
145 if (m_numberOfItems
->isChecked()) {
146 settings
->setDirectorySizeMode(ContentDisplaySettings::EnumDirectorySizeMode::ContentCount
);
147 } else if (m_sizeOfContents
->isChecked()) {
148 settings
->setDirectorySizeMode(ContentDisplaySettings::EnumDirectorySizeMode::ContentSize
);
149 } else if (m_noDirectorySize
->isChecked()) {
150 settings
->setDirectorySizeMode(ContentDisplaySettings::EnumDirectorySizeMode::None
);
153 settings
->setRecursiveDirectorySizeLimit(m_recursiveDirectorySizeLimit
->value());
155 setSortingChoiceValue();
156 settings
->setUseShortRelativeDates(m_useRelatetiveDates
->isChecked());
158 if (m_useSymbolicPermissions
->isChecked()) {
159 settings
->setUsePermissionsFormat(ContentDisplaySettings::EnumUsePermissionsFormat::SymbolicFormat
);
160 } else if (m_useNumericPermissions
->isChecked()) {
161 settings
->setUsePermissionsFormat(ContentDisplaySettings::EnumUsePermissionsFormat::NumericFormat
);
162 } else if (m_useCombinedPermissions
->isChecked()) {
163 settings
->setUsePermissionsFormat(ContentDisplaySettings::EnumUsePermissionsFormat::CombinedFormat
);
165 if (m_elideMiddle
->isChecked()) {
166 settings
->setElidingMode(ContentDisplaySettings::ElidingMode::Middle
);
167 } else if (m_elideEnding
->isChecked()) {
168 settings
->setElidingMode(ContentDisplaySettings::ElidingMode::Right
);
173 void ContentDisplayTab::loadSettings()
175 auto settings
= ContentDisplaySettings::self();
177 m_numberOfItems
->setChecked(settings
->directorySizeMode() == ContentDisplaySettings::EnumDirectorySizeMode::ContentCount
);
178 m_sizeOfContents
->setChecked(settings
->directorySizeMode() == ContentDisplaySettings::EnumDirectorySizeMode::ContentSize
);
179 m_noDirectorySize
->setChecked(settings
->directorySizeMode() == ContentDisplaySettings::EnumDirectorySizeMode::None
);
180 m_recursiveDirectorySizeLimit
->setValue(settings
->recursiveDirectorySizeLimit());
182 m_useRelatetiveDates
->setChecked(settings
->useShortRelativeDates());
183 m_useShortDates
->setChecked(!settings
->useShortRelativeDates());
184 m_useSymbolicPermissions
->setChecked(settings
->usePermissionsFormat() == ContentDisplaySettings::EnumUsePermissionsFormat::SymbolicFormat
);
185 m_useNumericPermissions
->setChecked(settings
->usePermissionsFormat() == ContentDisplaySettings::EnumUsePermissionsFormat::NumericFormat
);
186 m_useCombinedPermissions
->setChecked(settings
->usePermissionsFormat() == ContentDisplaySettings::EnumUsePermissionsFormat::CombinedFormat
);
187 loadSortingChoiceSettings();
188 m_elideMiddle
->setChecked(settings
->elidingMode() == ContentDisplaySettings::ElidingMode::Middle
);
189 m_elideEnding
->setChecked(settings
->elidingMode() == ContentDisplaySettings::ElidingMode::Right
);
192 void ContentDisplayTab::setSortingChoiceValue()
194 auto settings
= GeneralSettings::self();
195 using Choice
= GeneralSettings::EnumSortingChoice
;
196 if (m_naturalSorting
->isChecked()) {
197 settings
->setSortingChoice(Choice::NaturalSorting
);
198 } else if (m_caseInsensitiveSorting
->isChecked()) {
199 settings
->setSortingChoice(Choice::CaseInsensitiveSorting
);
200 } else if (m_caseSensitiveSorting
->isChecked()) {
201 settings
->setSortingChoice(Choice::CaseSensitiveSorting
);
205 void ContentDisplayTab::loadSortingChoiceSettings()
207 using Choice
= GeneralSettings::EnumSortingChoice
;
208 switch (GeneralSettings::sortingChoice()) {
209 case Choice::NaturalSorting
:
210 m_naturalSorting
->setChecked(true);
212 case Choice::CaseInsensitiveSorting
:
213 m_caseInsensitiveSorting
->setChecked(true);
215 case Choice::CaseSensitiveSorting
:
216 m_caseSensitiveSorting
->setChecked(true);
223 void ContentDisplayTab::restoreDefaults()
225 auto settings
= ContentDisplaySettings::self();
226 settings
->useDefaults(true);
228 settings
->useDefaults(false);
231 #include "moc_contentdisplaytab.cpp"