]>
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 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA *
19 ***************************************************************************/
21 #include "iconsviewsettingspage.h"
22 #include "dolphin_iconsmodesettings.h"
23 #include "dolphinsettings.h"
24 #include "pixmapviewer.h"
30 #include <q3buttongroup.h>
31 #include <qradiobutton.h>
33 #include <qfontcombobox.h>
35 #include <kiconloader.h>
37 #include <kglobalsettings.h>
41 #define GRID_SPACING_BASE 8
42 #define GRID_SPACING_INC 12
44 IconsViewSettingsPage::IconsViewSettingsPage(DolphinMainWindow
* mainWindow
,
47 m_mainWindow(mainWindow
),
49 m_previewSizeSlider(0),
53 m_textlinesCountBox(0),
58 const int spacing
= KDialog::spacingHint();
59 const int margin
= KDialog::marginHint();
60 const QSizePolicy
sizePolicy(QSizePolicy::Preferred
, QSizePolicy::Fixed
);
65 IconsModeSettings
* settings
= DolphinSettings::instance().iconsModeSettings();
66 assert(settings
!= 0);
68 KHBox
* sizesLayout
= new KHBox(this);
69 sizesLayout
->setSpacing(spacing
);
70 sizesLayout
->setSizePolicy(sizePolicy
);
72 // create 'Icon Size' group including slider and preview
73 Q3GroupBox
* iconSizeGroup
= new Q3GroupBox(2, Qt::Vertical
, i18n("Icon Size"), sizesLayout
);
74 iconSizeGroup
->setSizePolicy(sizePolicy
);
75 iconSizeGroup
->setMargin(margin
);
77 const QColor
iconBackgroundColor(KGlobalSettings::baseColor());
79 KHBox
* iconSizeVBox
= new KHBox(iconSizeGroup
);
80 iconSizeVBox
->setSpacing(spacing
);
81 new QLabel(i18n("Small"), iconSizeVBox
);
82 m_iconSizeSlider
= new QSlider(0, 5, 1, 0, Qt::Horizontal
, iconSizeVBox
);
83 m_iconSizeSlider
->setValue(sliderValue(settings
->iconSize()));
84 m_iconSizeSlider
->setTickmarks(QSlider::TicksBelow
);
85 connect(m_iconSizeSlider
, SIGNAL(valueChanged(int)),
86 this, SLOT(slotIconSizeChanged(int)));
87 new QLabel(i18n("Large"), iconSizeVBox
);
89 m_iconSizeViewer
= new PixmapViewer(iconSizeGroup
);
90 m_iconSizeViewer
->setMinimumWidth(K3Icon::SizeEnormous
);
91 m_iconSizeViewer
->setFixedHeight(K3Icon::SizeEnormous
);
92 m_iconSizeViewer
->setEraseColor(iconBackgroundColor
);
93 slotIconSizeChanged(m_iconSizeSlider
->value());
95 // create 'Preview Size' group including slider and preview
96 Q3GroupBox
* previewSizeGroup
= new Q3GroupBox(2, Qt::Vertical
, i18n("Preview Size"), sizesLayout
);
97 previewSizeGroup
->setSizePolicy(sizePolicy
);
98 previewSizeGroup
->setMargin(margin
);
100 KHBox
* previewSizeVBox
= new KHBox(previewSizeGroup
);
101 previewSizeVBox
->setSpacing(spacing
);
102 new QLabel(i18n("Small"), previewSizeVBox
);
103 m_previewSizeSlider
= new QSlider(0, 5, 1, 0, Qt::Horizontal
, previewSizeVBox
);
104 m_previewSizeSlider
->setValue(sliderValue(settings
->previewSize()));
105 m_previewSizeSlider
->setTickmarks(QSlider::TicksBelow
);
106 connect(m_previewSizeSlider
, SIGNAL(valueChanged(int)),
107 this, SLOT(slotPreviewSizeChanged(int)));
108 new QLabel(i18n("Large"), previewSizeVBox
);
110 m_previewSizeViewer
= new PixmapViewer(previewSizeGroup
);
111 m_previewSizeViewer
->setMinimumWidth(K3Icon::SizeEnormous
);
112 m_previewSizeViewer
->setFixedHeight(K3Icon::SizeEnormous
);
113 m_previewSizeViewer
->setEraseColor(iconBackgroundColor
);
115 slotPreviewSizeChanged(m_previewSizeSlider
->value());
117 Q3GroupBox
* textGroup
= new Q3GroupBox(2, Qt::Horizontal
, i18n("Text"), this);
118 textGroup
->setSizePolicy(sizePolicy
);
119 textGroup
->setMargin(margin
);
121 new QLabel(i18n("Font family:"), textGroup
);
122 m_fontFamilyBox
= new QFontComboBox(textGroup
);
123 m_fontFamilyBox
->setCurrentFont(settings
->fontFamily());
125 new QLabel(i18n("Font size:"), textGroup
);
126 m_fontSizeBox
= new QSpinBox(6, 99, 1, textGroup
);
127 m_fontSizeBox
->setValue(settings
->fontSize());
129 new QLabel(i18n("Number of lines:"), textGroup
);
130 m_textlinesCountBox
= new QSpinBox(1, 5, 1, textGroup
);
131 m_textlinesCountBox
->setValue(settings
->numberOfTexlines());
133 new QLabel(i18n("Text width:"), textGroup
);
134 m_textWidthBox
= new QComboBox(textGroup
);
135 m_textWidthBox
->addItem(i18n("Small"));
136 m_textWidthBox
->addItem(i18n("Medium"));
137 m_textWidthBox
->addItem(i18n("Large"));
139 new QLabel(i18n("Additional information:"), textGroup
);
140 m_additionalInfo
= new QComboBox(textGroup
);
141 m_additionalInfo
->addItem(i18n("No Information"));
142 m_additionalInfo
->addItem(i18n("MIME Type"));
143 m_additionalInfo
->addItem(i18n("Size"));
144 m_additionalInfo
->addItem(i18n("Date"));
145 m_additionalInfo
->setCurrentIndex(settings
->additionalInfo());
147 Q3GroupBox
* gridGroup
= new Q3GroupBox(2, Qt::Horizontal
, i18n("Grid"), this);
148 gridGroup
->setSizePolicy(sizePolicy
);
149 gridGroup
->setMargin(margin
);
151 const bool leftToRightArrangement
= (settings
->arrangement() == "LeftToRight");
152 new QLabel(i18n("Arrangement:"), gridGroup
);
153 m_arrangementBox
= new QComboBox(gridGroup
);
154 m_arrangementBox
->addItem(i18n("Left to right"));
155 m_arrangementBox
->addItem(i18n("Top to bottom"));
156 m_arrangementBox
->setCurrentIndex(leftToRightArrangement
? 0 : 1);
158 new QLabel(i18n("Grid spacing:"), gridGroup
);
159 m_gridSpacingBox
= new QComboBox(gridGroup
);
160 m_gridSpacingBox
->addItem(i18n("Small"));
161 m_gridSpacingBox
->addItem(i18n("Medium"));
162 m_gridSpacingBox
->addItem(i18n("Large"));
163 m_gridSpacingBox
->setCurrentIndex((settings
->gridSpacing() - GRID_SPACING_BASE
) / GRID_SPACING_INC
);
165 // Add a dummy widget with no restriction regarding
166 // a vertical resizing. This assures that the dialog layout
167 // is not stretched vertically.
170 adjustTextWidthSelection();
173 IconsViewSettingsPage::~IconsViewSettingsPage()
177 void IconsViewSettingsPage::applySettings()
179 IconsModeSettings
* settings
= DolphinSettings::instance().iconsModeSettings();
180 assert(settings
!= 0);
182 const int defaultSize
= iconSize(m_iconSizeSlider
->value());
183 settings
->setIconSize(defaultSize
);
185 int previewSize
= //(m_mode == DolphinIconsView::Previews) ?
186 //iconSize(m_previewSizeSlider->value()) :
188 if (previewSize
< defaultSize
) {
189 // assure that the preview size is never smaller than the icon size
190 previewSize
= defaultSize
;
192 settings
->setPreviewSize(previewSize
);
194 const int fontSize
= m_fontSizeBox
->value();
196 QString arrangement
= (m_arrangementBox
->currentIndex() == 0) ?
199 settings
->setArrangement(arrangement
);
200 //DolphinSettings::instance().calculateGridSize(m_textWidthBox->currentIndex());
202 settings
->setFontFamily(m_fontFamilyBox
->currentFont().family());
203 settings
->setFontSize(fontSize
);
204 settings
->setNumberOfTexlines(m_textlinesCountBox
->value());
206 settings
->setGridSpacing(GRID_SPACING_BASE
+
207 m_gridSpacingBox
->currentIndex() * GRID_SPACING_INC
);
210 void IconsViewSettingsPage::slotIconSizeChanged(int value
)
212 KIconLoader iconLoader
;
213 m_iconSizeViewer
->setPixmap(iconLoader
.loadIcon("folder", K3Icon::Desktop
, iconSize(value
)));
215 if (m_previewSizeSlider
!= 0) {
216 int previewSizeValue
= m_previewSizeSlider
->value();
217 if (previewSizeValue
< value
) {
218 // assure that the preview size is never smaller than the icon size
219 previewSizeValue
= value
;
221 slotPreviewSizeChanged(previewSizeValue
);
225 void IconsViewSettingsPage::slotPreviewSizeChanged(int value
)
227 KIconLoader iconLoader
;
228 const int iconSizeValue
= m_iconSizeSlider
->value();
229 if (value
< iconSizeValue
) {
230 // assure that the preview size is never smaller than the icon size
231 value
= iconSizeValue
;
233 m_previewSizeViewer
->setPixmap(iconLoader
.loadIcon("preview", K3Icon::Desktop
, iconSize(value
)));
236 int IconsViewSettingsPage::iconSize(int sliderValue
) const
238 int size
= K3Icon::SizeMedium
;
239 switch (sliderValue
) {
240 case 0: size
= K3Icon::SizeSmall
; break;
241 case 1: size
= K3Icon::SizeSmallMedium
; break;
242 case 2: size
= K3Icon::SizeMedium
; break;
243 case 3: size
= K3Icon::SizeLarge
; break;
244 case 4: size
= K3Icon::SizeHuge
; break;
245 case 5: size
= K3Icon::SizeEnormous
; break;
250 int IconsViewSettingsPage::sliderValue(int iconSize
) const
254 case K3Icon::SizeSmall
: value
= 0; break;
255 case K3Icon::SizeSmallMedium
: value
= 1; break;
256 case K3Icon::SizeMedium
: value
= 2; break;
257 case K3Icon::SizeLarge
: value
= 3; break;
258 case K3Icon::SizeHuge
: value
= 4; break;
259 case K3Icon::SizeEnormous
: value
= 5; break;
265 void IconsViewSettingsPage::adjustTextWidthSelection()
267 IconsModeSettings
* settings
= DolphinSettings::instance().iconsModeSettings();
268 assert(settings
!= 0);
269 //m_textWidthBox->setCurrentIndex(DolphinSettings::instance().textWidthHint());
272 #include "iconsviewsettingspage.moc"