]> cloud.milkyroute.net Git - dolphin.git/blob - src/settings/viewmodes/viewsettingstab.cpp
Remove unused #include
[dolphin.git] / src / settings / viewmodes / viewsettingstab.cpp
1 /***************************************************************************
2 * Copyright (C) 2008-2011 by Peter Penz <peter.penz19@gmail.com> *
3 * *
4 * This program is free software; you can redistribute it and/or modify *
5 * it under the terms of the GNU General Public License as published by *
6 * the Free Software Foundation; either version 2 of the License, or *
7 * (at your option) any later version. *
8 * *
9 * This program is distributed in the hope that it will be useful, *
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
12 * GNU General Public License for more details. *
13 * *
14 * You should have received a copy of the GNU General Public License *
15 * along with this program; if not, write to the *
16 * Free Software Foundation, Inc., *
17 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA *
18 ***************************************************************************/
19
20 #include "viewsettingstab.h"
21
22 #include "dolphinfontrequester.h"
23 #include "dolphin_compactmodesettings.h"
24 #include "dolphin_detailsmodesettings.h"
25 #include "dolphin_iconsmodesettings.h"
26
27 #include <KComboBox>
28 #include <KLocalizedString>
29
30 #include <QCheckBox>
31 #include <QGroupBox>
32 #include <QLabel>
33 #include <QVBoxLayout>
34 #include <QHelpEvent>
35 #include <QApplication>
36
37 #include <views/zoomlevelinfo.h>
38
39 ViewSettingsTab::ViewSettingsTab(Mode mode, QWidget* parent) :
40 QWidget(parent),
41 m_mode(mode),
42 m_defaultSizeSlider(nullptr),
43 m_previewSizeSlider(nullptr),
44 m_fontRequester(nullptr),
45 m_widthBox(nullptr),
46 m_maxLinesBox(nullptr),
47 m_expandableFolders(nullptr)
48 {
49 QVBoxLayout* topLayout = new QVBoxLayout(this);
50
51 // Create "Icon Size" group
52 QGroupBox* iconSizeGroup = new QGroupBox(this);
53 iconSizeGroup->setTitle(i18nc("@title:group", "Icon Size"));
54
55 const int minRange = ZoomLevelInfo::minimumLevel();
56 const int maxRange = ZoomLevelInfo::maximumLevel();
57
58 QLabel* defaultLabel = new QLabel(i18nc("@label:listbox", "Default:"), this);
59 m_defaultSizeSlider = new QSlider(Qt::Horizontal, this);
60 m_defaultSizeSlider->setPageStep(1);
61 m_defaultSizeSlider->setTickPosition(QSlider::TicksBelow);
62 m_defaultSizeSlider->setRange(minRange, maxRange);
63 connect(m_defaultSizeSlider, &QSlider::valueChanged,
64 this, &ViewSettingsTab::slotDefaultSliderMoved);
65
66 QLabel* previewLabel = new QLabel(i18nc("@label:listbox", "Preview:"), this);
67 m_previewSizeSlider = new QSlider(Qt::Horizontal, this);
68 m_previewSizeSlider->setPageStep(1);
69 m_previewSizeSlider->setTickPosition(QSlider::TicksBelow);
70 m_previewSizeSlider->setRange(minRange, maxRange);
71 connect(m_previewSizeSlider, &QSlider::valueChanged,
72 this, &ViewSettingsTab::slotPreviewSliderMoved);
73
74 QGridLayout* layout = new QGridLayout(iconSizeGroup);
75 layout->addWidget(defaultLabel, 0, 0, Qt::AlignRight);
76 layout->addWidget(m_defaultSizeSlider, 0, 1);
77 layout->addWidget(previewLabel, 1, 0, Qt::AlignRight);
78 layout->addWidget(m_previewSizeSlider, 1, 1);
79
80 // Create "Text" group
81 QGroupBox* textGroup = new QGroupBox(i18nc("@title:group", "Text"), this);
82
83 QLabel* fontLabel = new QLabel(i18nc("@label:listbox", "Font:"), textGroup);
84 m_fontRequester = new DolphinFontRequester(textGroup);
85
86 QGridLayout* textGroupLayout = new QGridLayout(textGroup);
87 textGroupLayout->addWidget(fontLabel, 0, 0, Qt::AlignRight);
88 textGroupLayout->addWidget(m_fontRequester, 0, 1);
89
90 switch (m_mode) {
91 case IconsMode: {
92 QLabel* widthLabel = new QLabel(i18nc("@label:listbox", "Width:"), textGroup);
93 m_widthBox = new KComboBox(textGroup);
94 m_widthBox->addItem(i18nc("@item:inlistbox Text width", "Small"));
95 m_widthBox->addItem(i18nc("@item:inlistbox Text width", "Medium"));
96 m_widthBox->addItem(i18nc("@item:inlistbox Text width", "Large"));
97 m_widthBox->addItem(i18nc("@item:inlistbox Text width", "Huge"));
98
99 QLabel* maxLinesLabel = new QLabel(i18nc("@label:listbox", "Maximum lines:"), textGroup);
100 m_maxLinesBox = new KComboBox(textGroup);
101 m_maxLinesBox->addItem(i18nc("@item:inlistbox Maximum lines", "Unlimited"));
102 m_maxLinesBox->addItem(i18nc("@item:inlistbox Maximum lines", "1"));
103 m_maxLinesBox->addItem(i18nc("@item:inlistbox Maximum lines", "2"));
104 m_maxLinesBox->addItem(i18nc("@item:inlistbox Maximum lines", "3"));
105 m_maxLinesBox->addItem(i18nc("@item:inlistbox Maximum lines", "4"));
106 m_maxLinesBox->addItem(i18nc("@item:inlistbox Maximum lines", "5"));
107
108 textGroupLayout->addWidget(widthLabel, 2, 0, Qt::AlignRight);
109 textGroupLayout->addWidget(m_widthBox, 2, 1);
110 textGroupLayout->addWidget(maxLinesLabel, 3, 0, Qt::AlignRight);
111 textGroupLayout->addWidget(m_maxLinesBox, 3, 1);
112 break;
113 }
114 case CompactMode: {
115 QLabel* maxWidthLabel = new QLabel(i18nc("@label:listbox", "Maximum width:"), textGroup);
116 m_widthBox = new KComboBox(textGroup);
117 m_widthBox->addItem(i18nc("@item:inlistbox Maximum width", "Unlimited"));
118 m_widthBox->addItem(i18nc("@item:inlistbox Maximum width", "Small"));
119 m_widthBox->addItem(i18nc("@item:inlistbox Maximum width", "Medium"));
120 m_widthBox->addItem(i18nc("@item:inlistbox Maximum width", "Large"));
121
122 textGroupLayout->addWidget(maxWidthLabel, 2, 0, Qt::AlignRight);
123 textGroupLayout->addWidget(m_widthBox, 2, 1);
124 break;
125 }
126 case DetailsMode:
127 m_expandableFolders = new QCheckBox(i18nc("@option:check", "Expandable folders"), this);
128 break;
129 default:
130 break;
131 }
132
133 topLayout->addWidget(iconSizeGroup);
134 topLayout->addWidget(textGroup);
135 if (m_expandableFolders) {
136 topLayout->addWidget(m_expandableFolders);
137 }
138 topLayout->addStretch(1);
139
140 loadSettings();
141
142 connect(m_defaultSizeSlider, &QSlider::valueChanged, this, &ViewSettingsTab::changed);
143 connect(m_previewSizeSlider, &QSlider::valueChanged, this, &ViewSettingsTab::changed);
144 connect(m_fontRequester, &DolphinFontRequester::changed, this, &ViewSettingsTab::changed);
145
146 switch (m_mode) {
147 case IconsMode:
148 connect(m_widthBox, static_cast<void(KComboBox::*)(int)>(&KComboBox::currentIndexChanged), this, &ViewSettingsTab::changed);
149 connect(m_maxLinesBox, static_cast<void(KComboBox::*)(int)>(&KComboBox::currentIndexChanged), this, &ViewSettingsTab::changed);
150 break;
151 case CompactMode:
152 connect(m_widthBox, static_cast<void(KComboBox::*)(int)>(&KComboBox::currentIndexChanged), this, &ViewSettingsTab::changed);
153 break;
154 case DetailsMode:
155 connect(m_expandableFolders, &QCheckBox::toggled, this, &ViewSettingsTab::changed);
156 break;
157 default:
158 break;
159 }
160 }
161
162 ViewSettingsTab::~ViewSettingsTab()
163 {
164 }
165
166 void ViewSettingsTab::applySettings()
167 {
168 const QFont font = m_fontRequester->currentFont();
169 const bool useSystemFont = (m_fontRequester->mode() == DolphinFontRequester::SystemFont);
170
171 switch (m_mode) {
172 case IconsMode:
173 IconsModeSettings::setTextWidthIndex(m_widthBox->currentIndex());
174 IconsModeSettings::setMaximumTextLines(m_maxLinesBox->currentIndex());
175 break;
176 case CompactMode:
177 CompactModeSettings::setMaximumTextWidthIndex(m_widthBox->currentIndex());
178 break;
179 case DetailsMode:
180 DetailsModeSettings::setExpandableFolders(m_expandableFolders->isChecked());
181 break;
182 default:
183 break;
184 }
185
186 ViewModeSettings settings(viewMode());
187
188 const int iconSize = ZoomLevelInfo::iconSizeForZoomLevel(m_defaultSizeSlider->value());
189 const int previewSize = ZoomLevelInfo::iconSizeForZoomLevel(m_previewSizeSlider->value());
190 settings.setIconSize(iconSize);
191 settings.setPreviewSize(previewSize);
192
193 settings.setUseSystemFont(useSystemFont);
194 settings.setFontFamily(font.family());
195 settings.setFontSize(font.pointSizeF());
196 settings.setItalicFont(font.italic());
197 settings.setFontWeight(font.weight());
198
199 settings.save();
200 }
201
202 void ViewSettingsTab::restoreDefaultSettings()
203 {
204 KConfigSkeleton* settings = nullptr;
205 switch (m_mode) {
206 case IconsMode: settings = IconsModeSettings::self(); break;
207 case CompactMode: settings = CompactModeSettings::self(); break;
208 case DetailsMode: settings = DetailsModeSettings::self(); break;
209 default: Q_ASSERT(false); break;
210 }
211
212 settings->useDefaults(true);
213 loadSettings();
214 settings->useDefaults(false);
215 }
216
217 void ViewSettingsTab::loadSettings()
218 {
219 switch (m_mode) {
220 case IconsMode:
221 m_widthBox->setCurrentIndex(IconsModeSettings::textWidthIndex());
222 m_maxLinesBox->setCurrentIndex(IconsModeSettings::maximumTextLines());
223 break;
224 case CompactMode:
225 m_widthBox->setCurrentIndex(CompactModeSettings::maximumTextWidthIndex());
226 break;
227 case DetailsMode:
228 m_expandableFolders->setChecked(DetailsModeSettings::expandableFolders());
229 break;
230 default:
231 break;
232 }
233
234 const ViewModeSettings settings(viewMode());
235
236 const QSize iconSize(settings.iconSize(), settings.iconSize());
237 m_defaultSizeSlider->setValue(ZoomLevelInfo::zoomLevelForIconSize(iconSize));
238
239 const QSize previewSize(settings.previewSize(), settings.previewSize());
240 m_previewSizeSlider->setValue(ZoomLevelInfo::zoomLevelForIconSize(previewSize));
241
242 m_fontRequester->setMode(settings.useSystemFont()
243 ? DolphinFontRequester::SystemFont
244 : DolphinFontRequester::CustomFont);
245
246 QFont font(settings.fontFamily(), qRound(settings.fontSize()));
247 font.setItalic(settings.italicFont());
248 font.setWeight(settings.fontWeight());
249 font.setPointSizeF(settings.fontSize());
250 m_fontRequester->setCustomFont(font);
251 }
252
253 ViewModeSettings::ViewMode ViewSettingsTab::viewMode() const
254 {
255 ViewModeSettings::ViewMode mode;
256
257 switch (m_mode) {
258 case ViewSettingsTab::IconsMode: mode = ViewModeSettings::IconsMode; break;
259 case ViewSettingsTab::CompactMode: mode = ViewModeSettings::CompactMode; break;
260 case ViewSettingsTab::DetailsMode: mode = ViewModeSettings::DetailsMode; break;
261 default: mode = ViewModeSettings::IconsMode;
262 Q_ASSERT(false);
263 break;
264 }
265
266 return mode;
267 }
268
269
270 void ViewSettingsTab::slotDefaultSliderMoved(int value)
271 {
272 showToolTip(m_defaultSizeSlider, value);
273 }
274
275 void ViewSettingsTab::slotPreviewSliderMoved(int value)
276 {
277 showToolTip(m_previewSizeSlider, value);
278 }
279
280 void ViewSettingsTab::showToolTip(QSlider* slider, int value)
281 {
282 const int size = ZoomLevelInfo::iconSizeForZoomLevel(value);
283 slider->setToolTip(i18ncp("@info:tooltip", "Size: 1 pixel", "Size: %1 pixels", size));
284 if (!slider->isVisible()) {
285 return;
286 }
287 QPoint global = slider->rect().topLeft();
288 global.ry() += slider->height() / 2;
289 QHelpEvent toolTipEvent(QEvent::ToolTip, QPoint(0, 0), slider->mapToGlobal(global));
290 QApplication::sendEvent(slider, &toolTipEvent);
291 }
292