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"
11 #include <KLocalizedString>
13 #include <QButtonGroup>
14 #include <QFormLayout>
15 #include <QHBoxLayout>
16 #include <QRadioButton>
19 ContentDisplayTab::ContentDisplayTab(QWidget
*parent
)
20 : SettingsPageBase(parent
)
21 , m_numberOfItems(nullptr)
22 , m_sizeOfContents(nullptr)
23 , m_recursiveDirectorySizeLimit(nullptr)
24 , m_useRelatetiveDates(nullptr)
25 , m_useShortDates(nullptr)
26 , m_useSymbolicPermissions(nullptr)
27 , m_useNumericPermissions(nullptr)
28 , m_useCombinedPermissions(nullptr)
30 QFormLayout
*topLayout
= new QFormLayout(this);
34 m_numberOfItems
= new QRadioButton(i18nc("option:radio", "Number of items"));
35 m_sizeOfContents
= new QRadioButton(i18nc("option:radio", "Size of contents, up to "));
37 QButtonGroup
*sortingModeGroup
= new QButtonGroup(this);
38 sortingModeGroup
->addButton(m_numberOfItems
);
39 sortingModeGroup
->addButton(m_sizeOfContents
);
41 m_recursiveDirectorySizeLimit
= new QSpinBox();
42 connect(m_recursiveDirectorySizeLimit
, &QSpinBox::valueChanged
, this, [this](int value
) {
43 m_recursiveDirectorySizeLimit
->setSuffix(i18np(" level deep", " levels deep", value
));
45 m_recursiveDirectorySizeLimit
->setRange(1, 20);
46 m_recursiveDirectorySizeLimit
->setSingleStep(1);
48 QHBoxLayout
*contentsSizeLayout
= new QHBoxLayout();
49 contentsSizeLayout
->addWidget(m_sizeOfContents
);
50 contentsSizeLayout
->addWidget(m_recursiveDirectorySizeLimit
);
52 topLayout
->addRow(i18nc("@title:group", "Folder size displays:"), m_numberOfItems
);
53 topLayout
->addRow(QString(), contentsSizeLayout
);
56 QDateTime thirtyMinutesAgo
= QDateTime::currentDateTime().addSecs(-30 * 60);
58 KFormat
formatter(local
);
60 m_useRelatetiveDates
= new QRadioButton(
61 i18nc("option:radio as in relative date", "Relative (e.g. '%1')", formatter
.formatRelativeDateTime(thirtyMinutesAgo
, QLocale::ShortFormat
)));
63 new QRadioButton(i18nc("option:radio as in absolute date", "Absolute (e.g. '%1')", local
.toString(thirtyMinutesAgo
, QLocale::ShortFormat
)));
65 QButtonGroup
*dateFormatGroup
= new QButtonGroup(this);
66 dateFormatGroup
->addButton(m_useRelatetiveDates
);
67 dateFormatGroup
->addButton(m_useShortDates
);
69 topLayout
->addRow(i18nc("@title:group", "Date style:"), m_useRelatetiveDates
);
70 topLayout
->addRow(QString(), m_useShortDates
);
72 m_useSymbolicPermissions
= new QRadioButton(i18nc("option:radio as symbolic style ", "Symbolic (e.g. 'drwxr-xr-x')"));
73 m_useNumericPermissions
= new QRadioButton(i18nc("option:radio as numeric style", "Numeric (Octal) (e.g. '755')"));
74 m_useCombinedPermissions
= new QRadioButton(i18nc("option:radio as combined style", "Combined (e.g. 'drwxr-xr-x (755)')"));
76 topLayout
->addRow(i18nc("@title:group", "Permissions style:"), m_useSymbolicPermissions
);
77 topLayout
->addRow(QString(), m_useNumericPermissions
);
78 topLayout
->addRow(QString(), m_useCombinedPermissions
);
80 QButtonGroup
*permissionsFormatGroup
= new QButtonGroup(this);
81 permissionsFormatGroup
->addButton(m_useSymbolicPermissions
);
82 permissionsFormatGroup
->addButton(m_useNumericPermissions
);
83 permissionsFormatGroup
->addButton(m_useCombinedPermissions
);
86 connect(m_recursiveDirectorySizeLimit
, &QSpinBox::valueChanged
, this, &SettingsPageBase::changed
);
87 connect(m_numberOfItems
, &QRadioButton::toggled
, this, &SettingsPageBase::changed
);
88 connect(m_sizeOfContents
, &QRadioButton::toggled
, this, [=]() {
89 m_recursiveDirectorySizeLimit
->setEnabled(m_sizeOfContents
->isChecked());
93 connect(m_useRelatetiveDates
, &QRadioButton::toggled
, this, &SettingsPageBase::changed
);
94 connect(m_useShortDates
, &QRadioButton::toggled
, this, &SettingsPageBase::changed
);
95 connect(m_useSymbolicPermissions
, &QRadioButton::toggled
, this, &SettingsPageBase::changed
);
96 connect(m_useNumericPermissions
, &QRadioButton::toggled
, this, &SettingsPageBase::changed
);
97 connect(m_useCombinedPermissions
, &QRadioButton::toggled
, this, &SettingsPageBase::changed
);
102 void ContentDisplayTab::applySettings()
104 auto settings
= ContentDisplaySettings::self();
106 settings
->setDirectorySizeCount(m_numberOfItems
->isChecked());
107 settings
->setRecursiveDirectorySizeLimit(m_recursiveDirectorySizeLimit
->value());
110 settings
->setUseShortRelativeDates(m_useRelatetiveDates
->isChecked());
112 if (m_useSymbolicPermissions
->isChecked()) {
113 settings
->setUsePermissionsFormat(ContentDisplaySettings::EnumUsePermissionsFormat::SymbolicFormat
);
114 } else if (m_useNumericPermissions
->isChecked()) {
115 settings
->setUsePermissionsFormat(ContentDisplaySettings::EnumUsePermissionsFormat::NumericFormat
);
116 } else if (m_useCombinedPermissions
->isChecked()) {
117 settings
->setUsePermissionsFormat(ContentDisplaySettings::EnumUsePermissionsFormat::CombinedFormat
);
122 void ContentDisplayTab::loadSettings()
124 auto settings
= ContentDisplaySettings::self();
126 if (settings
->directorySizeCount()) {
127 m_numberOfItems
->setChecked(true);
128 m_recursiveDirectorySizeLimit
->setEnabled(false);
130 m_sizeOfContents
->setChecked(true);
131 m_recursiveDirectorySizeLimit
->setEnabled(true);
133 m_recursiveDirectorySizeLimit
->setValue(settings
->recursiveDirectorySizeLimit());
135 m_useRelatetiveDates
->setChecked(settings
->useShortRelativeDates());
136 m_useShortDates
->setChecked(!settings
->useShortRelativeDates());
137 m_useSymbolicPermissions
->setChecked(settings
->usePermissionsFormat() == ContentDisplaySettings::EnumUsePermissionsFormat::SymbolicFormat
);
138 m_useNumericPermissions
->setChecked(settings
->usePermissionsFormat() == ContentDisplaySettings::EnumUsePermissionsFormat::NumericFormat
);
139 m_useCombinedPermissions
->setChecked(settings
->usePermissionsFormat() == ContentDisplaySettings::EnumUsePermissionsFormat::CombinedFormat
);
142 void ContentDisplayTab::restoreDefaults()
144 auto settings
= ContentDisplaySettings::self();
145 settings
->useDefaults(true);
147 settings
->useDefaults(false);