1 /***************************************************************************
2 * Copyright (C) 2011 by Peter Penz <peter.penz19@gmail.com> *
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. *
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. *
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 ***************************************************************************/
20 #include "dolphinitemlistview.h"
22 #include "dolphin_generalsettings.h"
23 #include "dolphin_iconsmodesettings.h"
24 #include "dolphin_detailsmodesettings.h"
25 #include "dolphin_compactmodesettings.h"
26 #include "dolphinfileitemlistwidget.h"
28 #include <kitemviews/kfileitemlistview.h>
29 #include <kitemviews/kfileitemmodel.h>
30 #include <kitemviews/kitemlistcontroller.h>
31 #include <kitemviews/kitemliststyleoption.h>
33 #include <KGlobalSettings>
35 #include <views/viewmodecontroller.h>
37 #include "zoomlevelinfo.h"
40 DolphinItemListView::DolphinItemListView(QGraphicsWidget
* parent
) :
41 KFileItemListView(parent
),
48 DolphinItemListView::~DolphinItemListView()
53 void DolphinItemListView::setZoomLevel(int level
)
55 if (level
< ZoomLevelInfo::minimumLevel()) {
56 level
= ZoomLevelInfo::minimumLevel();
57 } else if (level
> ZoomLevelInfo::maximumLevel()) {
58 level
= ZoomLevelInfo::maximumLevel();
61 if (level
== m_zoomLevel
) {
67 ViewModeSettings
settings(viewMode());
68 if (previewsShown()) {
69 const int previewSize
= ZoomLevelInfo::iconSizeForZoomLevel(level
);
70 settings
.setPreviewSize(previewSize
);
72 const int iconSize
= ZoomLevelInfo::iconSizeForZoomLevel(level
);
73 settings
.setIconSize(iconSize
);
79 int DolphinItemListView::zoomLevel() const
84 void DolphinItemListView::readSettings()
86 ViewModeSettings
settings(viewMode());
87 settings
.readConfig();
91 setEnabledSelectionToggles(GeneralSettings::showSelectionToggle());
93 const bool expandableFolders
= (itemLayout() && KFileItemListView::DetailsLayout
) &&
94 DetailsModeSettings::expandableFolders();
95 setSupportsItemExpanding(expandableFolders
);
100 const KConfigGroup
globalConfig(KGlobal::config(), "PreviewSettings");
101 const QStringList plugins
= globalConfig
.readEntry("Plugins", QStringList()
102 << "directorythumbnail"
105 setEnabledPlugins(plugins
);
110 void DolphinItemListView::writeSettings()
112 IconsModeSettings::self()->writeConfig();
113 CompactModeSettings::self()->writeConfig();
114 DetailsModeSettings::self()->writeConfig();
117 KItemListWidgetCreatorBase
* DolphinItemListView::defaultWidgetCreator() const
119 return new KItemListWidgetCreator
<DolphinFileItemListWidget
>();
122 void DolphinItemListView::onItemLayoutChanged(ItemLayout current
, ItemLayout previous
)
126 if (current
== DetailsLayout
) {
127 setSupportsItemExpanding(DetailsModeSettings::expandableFolders());
128 setHeaderVisible(true);
130 setHeaderVisible(false);
137 void DolphinItemListView::onPreviewsShownChanged(bool shown
)
143 void DolphinItemListView::onVisibleRolesChanged(const QList
<QByteArray
>& current
,
144 const QList
<QByteArray
>& previous
)
146 KFileItemListView::onVisibleRolesChanged(current
, previous
);
150 void DolphinItemListView::updateGridSize()
152 const ViewModeSettings
settings(viewMode());
154 // Calculate the size of the icon
155 const int iconSize
= previewsShown() ? settings
.previewSize() : settings
.iconSize();
156 m_zoomLevel
= ZoomLevelInfo::zoomLevelForIconSize(QSize(iconSize
, iconSize
));
157 KItemListStyleOption option
= styleOption();
159 const int padding
= 2;
160 int horizontalMargin
= 0;
161 int verticalMargin
= 0;
163 // Calculate the item-width and item-height
168 switch (itemLayout()) {
169 case KFileItemListView::IconsLayout
: {
170 const int minItemWidth
= 48;
171 itemWidth
= minItemWidth
+ IconsModeSettings::textWidthIndex() * 64;
173 if (previewsShown()) {
174 // Optimize the width for previews with a 3:2 aspect ratio instead
175 // of a 1:1 ratio to avoid wasting too much vertical space when
177 const int minWidth
= iconSize
* 3 / 2;
178 itemWidth
= qMax(itemWidth
, minWidth
);
181 if (itemWidth
< iconSize
+ padding
* 2) {
182 itemWidth
= iconSize
+ padding
* 2;
185 itemHeight
= padding
* 3 + iconSize
+ option
.fontMetrics
.lineSpacing();
186 if (IconsModeSettings::maximumTextLines() > 0) {
187 // A restriction is given for the maximum number of textlines (0 means
188 // having no restriction)
189 const int additionalInfoCount
= visibleRoles().count() - 1;
190 const int maxAdditionalLines
= additionalInfoCount
+ IconsModeSettings::maximumTextLines();
191 maxTextSize
.rheight() = option
.fontMetrics
.lineSpacing() * maxAdditionalLines
;
194 horizontalMargin
= 4;
198 case KFileItemListView::CompactLayout
: {
199 itemWidth
= padding
* 4 + iconSize
+ option
.fontMetrics
.height() * 5;
200 const int textLinesCount
= visibleRoles().count();
201 itemHeight
= padding
* 2 + qMax(iconSize
, textLinesCount
* option
.fontMetrics
.lineSpacing());
203 if (CompactModeSettings::maximumTextWidthIndex() > 0) {
204 // A restriction is given for the maximum width of the text (0 means
205 // having no restriction)
206 maxTextSize
.rwidth() = option
.fontMetrics
.height() * 10 *
207 CompactModeSettings::maximumTextWidthIndex();
210 horizontalMargin
= 8;
213 case KFileItemListView::DetailsLayout
: {
215 itemHeight
= padding
* 2 + qMax(iconSize
, option
.fontMetrics
.lineSpacing());
225 // Apply the calculated values
226 option
.padding
= padding
;
227 option
.horizontalMargin
= horizontalMargin
;
228 option
.verticalMargin
= verticalMargin
;
229 option
.iconSize
= iconSize
;
230 option
.maxTextSize
= maxTextSize
;
232 setStyleOption(option
);
233 setItemSize(QSizeF(itemWidth
, itemHeight
));
237 void DolphinItemListView::updateFont()
239 KItemListStyleOption option
= styleOption();
241 const ViewModeSettings
settings(viewMode());
243 QFont
font(settings
.fontFamily(), qRound(settings
.fontSize()));
244 font
.setItalic(settings
.italicFont());
245 font
.setWeight(settings
.fontWeight());
246 font
.setPointSizeF(settings
.fontSize());
249 option
.fontMetrics
= QFontMetrics(font
);
251 setStyleOption(option
);
254 ViewModeSettings::ViewMode
DolphinItemListView::viewMode() const
256 ViewModeSettings::ViewMode mode
;
258 switch (itemLayout()) {
259 case KFileItemListView::IconsLayout
: mode
= ViewModeSettings::IconsMode
; break;
260 case KFileItemListView::CompactLayout
: mode
= ViewModeSettings::CompactMode
; break;
261 case KFileItemListView::DetailsLayout
: mode
= ViewModeSettings::DetailsMode
; break;
262 default: mode
= ViewModeSettings::IconsMode
;
270 #include "dolphinitemlistview.moc"