]>
cloud.milkyroute.net Git - dolphin.git/blob - src/iconsviewsettingspage.cpp
1 /***************************************************************************
2 * Copyright (C) 2006 by Peter Penz *
5 * This program is free software; you can redistribute it and/or modify *
6 * it under the terms of the GNU General Public License as published by *
7 * the Free Software Foundation; either version 2 of the License, or *
8 * (at your option) any later version. *
10 * This program is distributed in the hope that it will be useful, *
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
13 * GNU General Public License for more details. *
15 * You should have received a copy of the GNU General Public License *
16 * along with this program; if not, write to the *
17 * Free Software Foundation, Inc., *
18 * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
19 ***************************************************************************/
21 #include "iconsviewsettingspage.h"
25 #include <q3buttongroup.h>
26 #include <qradiobutton.h>
28 #include <kiconloader.h>
29 #include <kfontcombo.h>
34 #include "iconsmodesettings.h"
35 #include "dolphinsettings.h"
36 #include "pixmapviewer.h"
38 #define GRID_SPACING_BASE 8
39 #define GRID_SPACING_INC 12
41 IconsViewSettingsPage::IconsViewSettingsPage(DolphinIconsView::LayoutMode mode
,
46 m_previewSizeSlider(0),
51 m_textlinesCountBox(0),
54 const int spacing
= KDialog::spacingHint();
55 const int margin
= KDialog::marginHint();
56 const QSizePolicy
sizePolicy(QSizePolicy::Preferred
, QSizePolicy::Fixed
);
61 IconsModeSettings
* settings
= DolphinSettings::instance().iconsModeSettings();
62 assert(settings
!= 0);
64 Q3HBox
* sizesLayout
= new Q3HBox(this);
65 sizesLayout
->setSpacing(spacing
);
66 sizesLayout
->setSizePolicy(sizePolicy
);
68 // create 'Icon Size' group including slider and preview
69 Q3GroupBox
* iconSizeGroup
= new Q3GroupBox(2, Qt::Vertical
, i18n("Icon Size"), sizesLayout
);
70 iconSizeGroup
->setSizePolicy(sizePolicy
);
71 iconSizeGroup
->setMargin(margin
);
73 const QColor
iconBackgroundColor(KGlobalSettings::baseColor());
75 Q3HBox
* iconSizeVBox
= new Q3HBox(iconSizeGroup
);
76 iconSizeVBox
->setSpacing(spacing
);
77 new QLabel(i18n("Small"), iconSizeVBox
);
78 m_iconSizeSlider
= new QSlider(0, 5, 1, 0, Qt::Horizontal
, iconSizeVBox
);
79 m_iconSizeSlider
->setValue(sliderValue(settings
->iconSize()));
80 m_iconSizeSlider
->setTickmarks(QSlider::Below
);
81 connect(m_iconSizeSlider
, SIGNAL(valueChanged(int)),
82 this, SLOT(slotIconSizeChanged(int)));
83 new QLabel(i18n("Large"), iconSizeVBox
);
85 m_iconSizeViewer
= new PixmapViewer(iconSizeGroup
);
86 m_iconSizeViewer
->setMinimumWidth(KIcon::SizeEnormous
);
87 m_iconSizeViewer
->setFixedHeight(KIcon::SizeEnormous
);
88 m_iconSizeViewer
->setEraseColor(iconBackgroundColor
);
89 slotIconSizeChanged(m_iconSizeSlider
->value());
91 if (m_mode
== DolphinIconsView::Previews
) {
92 // create 'Preview Size' group including slider and preview
93 Q3GroupBox
* previewSizeGroup
= new Q3GroupBox(2, Qt::Vertical
, i18n("Preview Size"), sizesLayout
);
94 previewSizeGroup
->setSizePolicy(sizePolicy
);
95 previewSizeGroup
->setMargin(margin
);
97 Q3HBox
* previewSizeVBox
= new Q3HBox(previewSizeGroup
);
98 previewSizeVBox
->setSpacing(spacing
);
99 new QLabel(i18n("Small"), previewSizeVBox
);
100 m_previewSizeSlider
= new QSlider(0, 5, 1, 0, Qt::Horizontal
, previewSizeVBox
);
101 m_previewSizeSlider
->setValue(sliderValue(settings
->previewSize()));
102 m_previewSizeSlider
->setTickmarks(QSlider::Below
);
103 connect(m_previewSizeSlider
, SIGNAL(valueChanged(int)),
104 this, SLOT(slotPreviewSizeChanged(int)));
105 new QLabel(i18n("Large"), previewSizeVBox
);
107 m_previewSizeViewer
= new PixmapViewer(previewSizeGroup
);
108 m_previewSizeViewer
->setMinimumWidth(KIcon::SizeEnormous
);
109 m_previewSizeViewer
->setFixedHeight(KIcon::SizeEnormous
);
110 m_previewSizeViewer
->setEraseColor(iconBackgroundColor
);
112 slotPreviewSizeChanged(m_previewSizeSlider
->value());
115 Q3GroupBox
* textGroup
= new Q3GroupBox(2, Qt::Horizontal
, i18n("Text"), this);
116 textGroup
->setSizePolicy(sizePolicy
);
117 textGroup
->setMargin(margin
);
119 new QLabel(i18n("Font family:"), textGroup
);
120 m_fontFamilyBox
= new KFontCombo(textGroup
);
121 m_fontFamilyBox
->setCurrentFont(settings
->fontFamily());
123 new QLabel(i18n("Font size:"), textGroup
);
124 m_fontSizeBox
= new QSpinBox(6, 99, 1, textGroup
);
125 m_fontSizeBox
->setValue(settings
->fontSize());
127 new QLabel(i18n("Number of lines:"), textGroup
);
128 m_textlinesCountBox
= new QSpinBox(1, 5, 1, textGroup
);
129 m_textlinesCountBox
->setValue(settings
->numberOfTexlines());
131 new QLabel(i18n("Text width:"), textGroup
);
132 m_textWidthBox
= new QComboBox(textGroup
);
133 m_textWidthBox
->insertItem(i18n("Small"));
134 m_textWidthBox
->insertItem(i18n("Medium"));
135 m_textWidthBox
->insertItem(i18n("Large"));
137 Q3GroupBox
* gridGroup
= new Q3GroupBox(2, Qt::Horizontal
, i18n("Grid"), this);
138 gridGroup
->setSizePolicy(sizePolicy
);
139 gridGroup
->setMargin(margin
);
141 const bool leftToRightArrangement
= (settings
->arrangement() == Q3IconView::LeftToRight
);
142 new QLabel(i18n("Arrangement:"), gridGroup
);
143 m_arrangementBox
= new QComboBox(gridGroup
);
144 m_arrangementBox
->insertItem(i18n("Left to right"));
145 m_arrangementBox
->insertItem(i18n("Top to bottom"));
146 m_arrangementBox
->setCurrentItem(leftToRightArrangement
? 0 : 1);
148 new QLabel(i18n("Grid spacing:"), gridGroup
);
149 m_gridSpacingBox
= new QComboBox(gridGroup
);
150 m_gridSpacingBox
->insertItem(i18n("Small"));
151 m_gridSpacingBox
->insertItem(i18n("Medium"));
152 m_gridSpacingBox
->insertItem(i18n("Large"));
153 m_gridSpacingBox
->setCurrentItem((settings
->gridSpacing() - GRID_SPACING_BASE
) / GRID_SPACING_INC
);
155 // Add a dummy widget with no restriction regarding
156 // a vertical resizing. This assures that the dialog layout
157 // is not stretched vertically.
160 adjustTextWidthSelection();
163 IconsViewSettingsPage::~IconsViewSettingsPage()
167 void IconsViewSettingsPage::applySettings()
169 IconsModeSettings
* settings
= DolphinSettings::instance().iconsModeSettings();
170 assert(settings
!= 0);
172 const int defaultSize
= iconSize(m_iconSizeSlider
->value());
173 settings
->setIconSize(defaultSize
);
175 int previewSize
= (m_mode
== DolphinIconsView::Previews
) ?
176 iconSize(m_previewSizeSlider
->value()) :
178 if (previewSize
< defaultSize
) {
179 // assure that the preview size is never smaller than the icon size
180 previewSize
= defaultSize
;
182 settings
->setPreviewSize(previewSize
);
184 const int fontSize
= m_fontSizeBox
->value();
186 QString arrangement
= (m_arrangementBox
->currentItem() == 0) ?
189 settings
->setArrangement(arrangement
);
190 DolphinSettings::instance().calculateGridSize(m_textWidthBox
->currentItem());
192 settings
->setFontFamily(m_fontFamilyBox
->currentFont());
193 settings
->setFontSize(fontSize
);
194 settings
->setNumberOfTexlines(m_textlinesCountBox
->value());
196 settings
->setGridSpacing(GRID_SPACING_BASE
+
197 m_gridSpacingBox
->currentItem() * GRID_SPACING_INC
);
200 void IconsViewSettingsPage::slotIconSizeChanged(int value
)
202 KIconLoader iconLoader
;
203 m_iconSizeViewer
->setPixmap(iconLoader
.loadIcon("folder", KIcon::Desktop
, iconSize(value
)));
205 if (m_previewSizeSlider
!= 0) {
206 int previewSizeValue
= m_previewSizeSlider
->value();
207 if (previewSizeValue
< value
) {
208 // assure that the preview size is never smaller than the icon size
209 previewSizeValue
= value
;
211 slotPreviewSizeChanged(previewSizeValue
);
215 void IconsViewSettingsPage::slotPreviewSizeChanged(int value
)
217 KIconLoader iconLoader
;
218 const int iconSizeValue
= m_iconSizeSlider
->value();
219 if (value
< iconSizeValue
) {
220 // assure that the preview size is never smaller than the icon size
221 value
= iconSizeValue
;
223 m_previewSizeViewer
->setPixmap(iconLoader
.loadIcon("preview", KIcon::Desktop
, iconSize(value
)));
226 int IconsViewSettingsPage::iconSize(int sliderValue
) const
228 int size
= KIcon::SizeMedium
;
229 switch (sliderValue
) {
230 case 0: size
= KIcon::SizeSmall
; break;
231 case 1: size
= KIcon::SizeSmallMedium
; break;
232 case 2: size
= KIcon::SizeMedium
; break;
233 case 3: size
= KIcon::SizeLarge
; break;
234 case 4: size
= KIcon::SizeHuge
; break;
235 case 5: size
= KIcon::SizeEnormous
; break;
240 int IconsViewSettingsPage::sliderValue(int iconSize
) const
244 case KIcon::SizeSmall
: value
= 0; break;
245 case KIcon::SizeSmallMedium
: value
= 1; break;
246 case KIcon::SizeMedium
: value
= 2; break;
247 case KIcon::SizeLarge
: value
= 3; break;
248 case KIcon::SizeHuge
: value
= 4; break;
249 case KIcon::SizeEnormous
: value
= 5; break;
255 void IconsViewSettingsPage::adjustTextWidthSelection()
257 IconsModeSettings
* settings
= DolphinSettings::instance().iconsModeSettings();
258 assert(settings
!= 0);
259 m_textWidthBox
->setCurrentItem(DolphinSettings::instance().textWidthHint());
262 #include "iconsviewsettingspage.moc"