Changeset View
Changeset View
Standalone View
Standalone View
src/settings/viewmodes/viewsettingstab.cpp
Show All 27 Lines | |||||
28 | 28 | | |||
29 | #include <KLocalizedString> | 29 | #include <KLocalizedString> | ||
30 | 30 | | |||
31 | #include <QApplication> | 31 | #include <QApplication> | ||
32 | #include <QCheckBox> | 32 | #include <QCheckBox> | ||
33 | #include <QComboBox> | 33 | #include <QComboBox> | ||
34 | #include <QHelpEvent> | 34 | #include <QHelpEvent> | ||
35 | #include <QFormLayout> | 35 | #include <QFormLayout> | ||
36 | #include <QSpinBox> | ||||
37 | #include <QRadioButton> | ||||
38 | #include <QButtonGroup> | ||||
39 | #include <QLabel> | ||||
36 | 40 | | |||
37 | ViewSettingsTab::ViewSettingsTab(Mode mode, QWidget* parent) : | 41 | ViewSettingsTab::ViewSettingsTab(Mode mode, QWidget* parent) : | ||
38 | QWidget(parent), | 42 | QWidget(parent), | ||
39 | m_mode(mode), | 43 | m_mode(mode), | ||
40 | m_defaultSizeSlider(nullptr), | 44 | m_defaultSizeSlider(nullptr), | ||
41 | m_previewSizeSlider(nullptr), | 45 | m_previewSizeSlider(nullptr), | ||
42 | m_fontRequester(nullptr), | 46 | m_fontRequester(nullptr), | ||
43 | m_widthBox(nullptr), | 47 | m_widthBox(nullptr), | ||
44 | m_maxLinesBox(nullptr), | 48 | m_maxLinesBox(nullptr), | ||
45 | m_expandableFolders(nullptr) | 49 | m_expandableFolders(nullptr), | ||
50 | m_recursiveDirectorySizeLimit(nullptr) | ||||
46 | { | 51 | { | ||
47 | QFormLayout* topLayout = new QFormLayout(this); | 52 | QFormLayout* topLayout = new QFormLayout(this); | ||
48 | 53 | | |||
49 | | ||||
50 | // Create "Icon Size" section | 54 | // Create "Icon Size" section | ||
51 | const int minRange = ZoomLevelInfo::minimumLevel(); | 55 | const int minRange = ZoomLevelInfo::minimumLevel(); | ||
52 | const int maxRange = ZoomLevelInfo::maximumLevel(); | 56 | const int maxRange = ZoomLevelInfo::maximumLevel(); | ||
53 | 57 | | |||
54 | m_defaultSizeSlider = new QSlider(Qt::Horizontal); | 58 | m_defaultSizeSlider = new QSlider(Qt::Horizontal); | ||
55 | m_defaultSizeSlider->setPageStep(1); | 59 | m_defaultSizeSlider->setPageStep(1); | ||
56 | m_defaultSizeSlider->setTickPosition(QSlider::TicksBelow); | 60 | m_defaultSizeSlider->setTickPosition(QSlider::TicksBelow); | ||
57 | m_defaultSizeSlider->setRange(minRange, maxRange); | 61 | m_defaultSizeSlider->setRange(minRange, maxRange); | ||
Show All 12 Lines | |||||
70 | 74 | | |||
71 | topLayout->addItem(new QSpacerItem(0, Dolphin::VERTICAL_SPACER_HEIGHT, QSizePolicy::Fixed, QSizePolicy::Fixed)); | 75 | topLayout->addItem(new QSpacerItem(0, Dolphin::VERTICAL_SPACER_HEIGHT, QSizePolicy::Fixed, QSizePolicy::Fixed)); | ||
72 | 76 | | |||
73 | 77 | | |||
74 | // Create "Label" section | 78 | // Create "Label" section | ||
75 | m_fontRequester = new DolphinFontRequester(this); | 79 | m_fontRequester = new DolphinFontRequester(this); | ||
76 | topLayout->addRow(i18nc("@label:listbox", "Label font:"), m_fontRequester); | 80 | topLayout->addRow(i18nc("@label:listbox", "Label font:"), m_fontRequester); | ||
77 | 81 | | |||
78 | | ||||
79 | switch (m_mode) { | 82 | switch (m_mode) { | ||
80 | case IconsMode: { | 83 | case IconsMode: { | ||
81 | m_widthBox = new QComboBox(); | 84 | m_widthBox = new QComboBox(); | ||
82 | m_widthBox->addItem(i18nc("@item:inlistbox Label width", "Small")); | 85 | m_widthBox->addItem(i18nc("@item:inlistbox Label width", "Small")); | ||
83 | m_widthBox->addItem(i18nc("@item:inlistbox Label width", "Medium")); | 86 | m_widthBox->addItem(i18nc("@item:inlistbox Label width", "Medium")); | ||
84 | m_widthBox->addItem(i18nc("@item:inlistbox Label width", "Large")); | 87 | m_widthBox->addItem(i18nc("@item:inlistbox Label width", "Large")); | ||
85 | m_widthBox->addItem(i18nc("@item:inlistbox Label width", "Huge")); | 88 | m_widthBox->addItem(i18nc("@item:inlistbox Label width", "Huge")); | ||
86 | topLayout->addRow(i18nc("@label:listbox", "Label width:"), m_widthBox); | 89 | topLayout->addRow(i18nc("@label:listbox", "Label width:"), m_widthBox); | ||
Show All 15 Lines | 101 | case CompactMode: { | |||
102 | m_widthBox->addItem(i18nc("@item:inlistbox Maximum width", "Medium")); | 105 | m_widthBox->addItem(i18nc("@item:inlistbox Maximum width", "Medium")); | ||
103 | m_widthBox->addItem(i18nc("@item:inlistbox Maximum width", "Large")); | 106 | m_widthBox->addItem(i18nc("@item:inlistbox Maximum width", "Large")); | ||
104 | topLayout->addRow(i18nc("@label:listbox", "Maximum width:"), m_widthBox); | 107 | topLayout->addRow(i18nc("@label:listbox", "Maximum width:"), m_widthBox); | ||
105 | break; | 108 | break; | ||
106 | } | 109 | } | ||
107 | case DetailsMode: | 110 | case DetailsMode: | ||
108 | m_expandableFolders = new QCheckBox(i18nc("@option:check", "Expandable")); | 111 | m_expandableFolders = new QCheckBox(i18nc("@option:check", "Expandable")); | ||
109 | topLayout->addRow(i18nc("@label:checkbox", "Folders:"), m_expandableFolders); | 112 | topLayout->addRow(i18nc("@label:checkbox", "Folders:"), m_expandableFolders); | ||
110 | break; | 113 | | ||
111 | default: | 114 | #ifndef Q_OS_WIN | ||
115 | // Sorting properties | ||||
116 | m_numberOfItems = new QRadioButton(i18nc("option:radio", "Number of items")); | ||||
ngraham: "Deep" doesn't need to be capitalized | |||||
Maybe use a QSpinBox suffix for the latter part of the string, so it would be like this: Size of contents, up to [10 levels deep ^v] ngraham: Maybe use a QSpinBox suffix for the latter part of the string, so it would be like this:
`Size… | |||||
117 | m_sizeOfContents = new QRadioButton(i18nc("option:radio", "Size of contents, up to ")); | ||||
118 | | ||||
119 | QButtonGroup* sortingModeGroup = new QButtonGroup(this); | ||||
120 | sortingModeGroup->addButton(m_numberOfItems); | ||||
121 | sortingModeGroup->addButton(m_sizeOfContents); | ||||
122 | | ||||
123 | m_recursiveDirectorySizeLimit = new QSpinBox(); | ||||
Use i18ncp() to handle plurals: i18ncp("spinbox:suffix Directory level recursion depth", " level deep", " levels deep") ngraham: Use `i18ncp()` to handle plurals:
```
i18ncp("spinbox:suffix Directory level recursion depth"… | |||||
Hmm, it looks like because this string is just used as suffix and doesn't actually include the number, the singular version is always used. Localization folks, any ideas? ngraham: Hmm, it looks like because this string is just used as suffix and doesn't actually include the… | |||||
124 | connect(m_recursiveDirectorySizeLimit, QOverload<int>::of(&QSpinBox::valueChanged), this, [this](int value) { | ||||
125 | m_recursiveDirectorySizeLimit->setSuffix(i18np(" level deep", " levels deep", value)); | ||||
126 | }); | ||||
127 | m_recursiveDirectorySizeLimit->setRange(1, 20); | ||||
128 | m_recursiveDirectorySizeLimit->setSingleStep(1); | ||||
129 | | ||||
130 | QHBoxLayout *contentsSizeLayout = new QHBoxLayout(); | ||||
131 | contentsSizeLayout->addWidget(m_sizeOfContents); | ||||
132 | contentsSizeLayout->addWidget(m_recursiveDirectorySizeLimit); | ||||
133 | | ||||
134 | topLayout->addRow(i18nc("@title:group", "Folder size display:"), m_numberOfItems); | ||||
elvisangelaccio: Typo: "Folder size displays" | |||||
135 | topLayout->addRow(QString(), contentsSizeLayout); | ||||
136 | #endif | ||||
112 | break; | 137 | break; | ||
113 | } | 138 | } | ||
114 | 139 | | |||
115 | loadSettings(); | 140 | loadSettings(); | ||
116 | 141 | | |||
117 | connect(m_defaultSizeSlider, &QSlider::valueChanged, this, &ViewSettingsTab::changed); | 142 | connect(m_defaultSizeSlider, &QSlider::valueChanged, this, &ViewSettingsTab::changed); | ||
118 | connect(m_previewSizeSlider, &QSlider::valueChanged, this, &ViewSettingsTab::changed); | 143 | connect(m_previewSizeSlider, &QSlider::valueChanged, this, &ViewSettingsTab::changed); | ||
119 | connect(m_fontRequester, &DolphinFontRequester::changed, this, &ViewSettingsTab::changed); | 144 | connect(m_fontRequester, &DolphinFontRequester::changed, this, &ViewSettingsTab::changed); | ||
120 | 145 | | |||
121 | switch (m_mode) { | 146 | switch (m_mode) { | ||
122 | case IconsMode: | 147 | case IconsMode: | ||
123 | connect(m_widthBox, QOverload<int>::of(&QComboBox::currentIndexChanged), this, &ViewSettingsTab::changed); | 148 | connect(m_widthBox, QOverload<int>::of(&QComboBox::currentIndexChanged), this, &ViewSettingsTab::changed); | ||
124 | connect(m_maxLinesBox, QOverload<int>::of(&QComboBox::currentIndexChanged), this, &ViewSettingsTab::changed); | 149 | connect(m_maxLinesBox, QOverload<int>::of(&QComboBox::currentIndexChanged), this, &ViewSettingsTab::changed); | ||
125 | break; | 150 | break; | ||
126 | case CompactMode: | 151 | case CompactMode: | ||
127 | connect(m_widthBox, QOverload<int>::of(&QComboBox::currentIndexChanged), this, &ViewSettingsTab::changed); | 152 | connect(m_widthBox, QOverload<int>::of(&QComboBox::currentIndexChanged), this, &ViewSettingsTab::changed); | ||
128 | break; | 153 | break; | ||
129 | case DetailsMode: | 154 | case DetailsMode: | ||
130 | connect(m_expandableFolders, &QCheckBox::toggled, this, &ViewSettingsTab::changed); | 155 | connect(m_expandableFolders, &QCheckBox::toggled, this, &ViewSettingsTab::changed); | ||
156 | connect(m_recursiveDirectorySizeLimit, QOverload<int>::of(&QSpinBox::valueChanged), this, &ViewSettingsTab::changed); | ||||
157 | connect(m_numberOfItems, &QRadioButton::toggled, this, &ViewSettingsTab::changed); | ||||
158 | connect(m_sizeOfContents, &QRadioButton::toggled, this, [=]() { | ||||
159 | m_recursiveDirectorySizeLimit->setEnabled(m_sizeOfContents->isChecked()); | ||||
160 | }); | ||||
131 | break; | 161 | break; | ||
132 | default: | 162 | default: | ||
133 | break; | 163 | break; | ||
134 | } | 164 | } | ||
135 | } | 165 | } | ||
136 | 166 | | |||
137 | ViewSettingsTab::~ViewSettingsTab() | 167 | ViewSettingsTab::~ViewSettingsTab() | ||
138 | { | 168 | { | ||
Show All 9 Lines | 177 | case IconsMode: | |||
148 | IconsModeSettings::setTextWidthIndex(m_widthBox->currentIndex()); | 178 | IconsModeSettings::setTextWidthIndex(m_widthBox->currentIndex()); | ||
149 | IconsModeSettings::setMaximumTextLines(m_maxLinesBox->currentIndex()); | 179 | IconsModeSettings::setMaximumTextLines(m_maxLinesBox->currentIndex()); | ||
150 | break; | 180 | break; | ||
151 | case CompactMode: | 181 | case CompactMode: | ||
152 | CompactModeSettings::setMaximumTextWidthIndex(m_widthBox->currentIndex()); | 182 | CompactModeSettings::setMaximumTextWidthIndex(m_widthBox->currentIndex()); | ||
153 | break; | 183 | break; | ||
154 | case DetailsMode: | 184 | case DetailsMode: | ||
155 | DetailsModeSettings::setExpandableFolders(m_expandableFolders->isChecked()); | 185 | DetailsModeSettings::setExpandableFolders(m_expandableFolders->isChecked()); | ||
186 | if (m_numberOfItems->isChecked()) { | ||||
187 | DetailsModeSettings::setRecursiveDirectorySizeLimit(0); | ||||
This will crash on Windows since these member variables are never initialized on that platform. elvisangelaccio: This will crash on Windows since these member variables are never initialized on that platform. | |||||
188 | } else { | ||||
ngraham: whitespace | |||||
189 | DetailsModeSettings::setRecursiveDirectorySizeLimit(m_recursiveDirectorySizeLimit->value()); | ||||
190 | } | ||||
156 | break; | 191 | break; | ||
157 | default: | 192 | default: | ||
158 | break; | 193 | break; | ||
159 | } | 194 | } | ||
160 | 195 | | |||
161 | ViewModeSettings settings(viewMode()); | 196 | ViewModeSettings settings(viewMode()); | ||
162 | 197 | | |||
163 | const int iconSize = ZoomLevelInfo::iconSizeForZoomLevel(m_defaultSizeSlider->value()); | 198 | const int iconSize = ZoomLevelInfo::iconSizeForZoomLevel(m_defaultSizeSlider->value()); | ||
Show All 32 Lines | 230 | case IconsMode: | |||
196 | m_widthBox->setCurrentIndex(IconsModeSettings::textWidthIndex()); | 231 | m_widthBox->setCurrentIndex(IconsModeSettings::textWidthIndex()); | ||
197 | m_maxLinesBox->setCurrentIndex(IconsModeSettings::maximumTextLines()); | 232 | m_maxLinesBox->setCurrentIndex(IconsModeSettings::maximumTextLines()); | ||
198 | break; | 233 | break; | ||
199 | case CompactMode: | 234 | case CompactMode: | ||
200 | m_widthBox->setCurrentIndex(CompactModeSettings::maximumTextWidthIndex()); | 235 | m_widthBox->setCurrentIndex(CompactModeSettings::maximumTextWidthIndex()); | ||
201 | break; | 236 | break; | ||
202 | case DetailsMode: | 237 | case DetailsMode: | ||
203 | m_expandableFolders->setChecked(DetailsModeSettings::expandableFolders()); | 238 | m_expandableFolders->setChecked(DetailsModeSettings::expandableFolders()); | ||
239 | if (DetailsModeSettings::recursiveDirectorySizeLimit() == 0) { | ||||
240 | m_numberOfItems->setChecked(true); | ||||
241 | m_recursiveDirectorySizeLimit->setEnabled(false); | ||||
242 | } else { | ||||
243 | m_sizeOfContents->setChecked(true); | ||||
244 | m_recursiveDirectorySizeLimit->setValue(DetailsModeSettings::recursiveDirectorySizeLimit()); | ||||
anthonyfieroni: Don't allow more than 128 (even that can be higher) | |||||
245 | } | ||||
204 | break; | 246 | break; | ||
elvisangelaccio: Same for this. | |||||
205 | default: | 247 | default: | ||
206 | break; | 248 | break; | ||
207 | } | 249 | } | ||
208 | 250 | | |||
209 | const ViewModeSettings settings(viewMode()); | 251 | const ViewModeSettings settings(viewMode()); | ||
210 | 252 | | |||
211 | const QSize iconSize(settings.iconSize(), settings.iconSize()); | 253 | const QSize iconSize(settings.iconSize(), settings.iconSize()); | ||
212 | m_defaultSizeSlider->setValue(ZoomLevelInfo::zoomLevelForIconSize(iconSize)); | 254 | m_defaultSizeSlider->setValue(ZoomLevelInfo::zoomLevelForIconSize(iconSize)); | ||
▲ Show 20 Lines • Show All 55 Lines • Show Last 20 Lines |
"Deep" doesn't need to be capitalized