]> cloud.milkyroute.net Git - dolphin.git/blob - src/settings/viewmodes/detailsviewsettingspage.cpp
Improve autoscrolling
[dolphin.git] / src / settings / viewmodes / detailsviewsettingspage.cpp
1 /***************************************************************************
2 * Copyright (C) 2006 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 "detailsviewsettingspage.h"
21
22 #include "iconsizegroupbox.h"
23 #include "dolphinfontrequester.h"
24 #include "dolphin_detailsmodesettings.h"
25
26 #include <KDialog>
27 #include <KLocale>
28
29 #include <QButtonGroup>
30 #include <QCheckBox>
31 #include <QComboBox>
32 #include <QGroupBox>
33 #include <QGridLayout>
34 #include <QLabel>
35 #include <QRadioButton>
36 #include <QSpinBox>
37
38 #include <views/zoomlevelinfo.h>
39
40 DetailsViewSettingsPage::DetailsViewSettingsPage(QWidget* parent) :
41 ViewSettingsPageBase(parent),
42 m_iconSizeGroupBox(0),
43 m_fontRequester(0)
44 {
45 const int spacing = KDialog::spacingHint();
46 const int margin = KDialog::marginHint();
47 const QSizePolicy sizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed);
48
49 setSpacing(spacing);
50 setMargin(margin);
51
52 // Create "Icon" properties
53 m_iconSizeGroupBox = new IconSizeGroupBox(this);
54 m_iconSizeGroupBox->setSizePolicy(sizePolicy);
55
56 const int min = ZoomLevelInfo::minimumLevel();
57 const int max = ZoomLevelInfo::maximumLevel();
58 m_iconSizeGroupBox->setDefaultSizeRange(min, max);
59 m_iconSizeGroupBox->setPreviewSizeRange(min, max);
60
61 // create "Text" properties
62 QWidget* textGroup = new QGroupBox(i18nc("@title:group", "Text"), this);
63 textGroup->setSizePolicy(sizePolicy);
64
65 QLabel* fontLabel = new QLabel(i18nc("@label:listbox", "Font:"), textGroup);
66 m_fontRequester = new DolphinFontRequester(textGroup);
67
68 QHBoxLayout* textLayout = new QHBoxLayout(textGroup);
69 textLayout->addWidget(fontLabel, 0, Qt::AlignRight);
70 textLayout->addWidget(m_fontRequester);
71
72 // Add a dummy widget with no restriction regarding
73 // a vertical resizing. This assures that the dialog layout
74 // is not stretched vertically.
75 new QWidget(this);
76
77 loadSettings();
78
79 connect(m_iconSizeGroupBox, SIGNAL(defaultSizeChanged(int)), this, SIGNAL(changed()));
80 connect(m_iconSizeGroupBox, SIGNAL(previewSizeChanged(int)), this, SIGNAL(changed()));
81 connect(m_fontRequester, SIGNAL(changed()), this, SIGNAL(changed()));
82 }
83
84 DetailsViewSettingsPage::~DetailsViewSettingsPage()
85 {
86 }
87
88 void DetailsViewSettingsPage::applySettings()
89 {
90 const int iconSize = ZoomLevelInfo::iconSizeForZoomLevel(m_iconSizeGroupBox->defaultSizeValue());
91 const int previewSize = ZoomLevelInfo::iconSizeForZoomLevel(m_iconSizeGroupBox->previewSizeValue());
92 DetailsModeSettings::setIconSize(iconSize);
93 DetailsModeSettings::setPreviewSize(previewSize);
94
95 const QFont font = m_fontRequester->font();
96 DetailsModeSettings::setUseSystemFont(m_fontRequester->mode() == DolphinFontRequester::SystemFont);
97 DetailsModeSettings::setFontFamily(font.family());
98 DetailsModeSettings::setFontSize(font.pointSizeF());
99 DetailsModeSettings::setItalicFont(font.italic());
100 DetailsModeSettings::setFontWeight(font.weight());
101
102 DetailsModeSettings::self()->writeConfig();
103 }
104
105 void DetailsViewSettingsPage::restoreDefaults()
106 {
107 DetailsModeSettings::self()->useDefaults(true);
108 loadSettings();
109 DetailsModeSettings::self()->useDefaults(false);
110 }
111
112 void DetailsViewSettingsPage::loadSettings()
113 {
114 const QSize iconSize(DetailsModeSettings::iconSize(), DetailsModeSettings::iconSize());
115 const int iconSizeValue = ZoomLevelInfo::zoomLevelForIconSize(iconSize);
116 m_iconSizeGroupBox->setDefaultSizeValue(iconSizeValue);
117
118 const QSize previewSize(DetailsModeSettings::previewSize(), DetailsModeSettings::previewSize());
119 const int previewSizeValue = ZoomLevelInfo::zoomLevelForIconSize(previewSize);
120 m_iconSizeGroupBox->setPreviewSizeValue(previewSizeValue);
121
122 if (DetailsModeSettings::useSystemFont()) {
123 m_fontRequester->setMode(DolphinFontRequester::SystemFont);
124 } else {
125 QFont font(DetailsModeSettings::fontFamily(),
126 qRound(DetailsModeSettings::fontSize()));
127 font.setItalic(DetailsModeSettings::italicFont());
128 font.setWeight(DetailsModeSettings::fontWeight());
129 font.setPointSizeF(DetailsModeSettings::fontSize());
130 m_fontRequester->setMode(DolphinFontRequester::CustomFont);
131 m_fontRequester->setCustomFont(font);
132 }
133 }
134
135 #include "detailsviewsettingspage.moc"