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_compactmodesettings.h"
23 #include "dolphin_detailsmodesettings.h"
24 #include "dolphin_generalsettings.h"
25 #include "dolphin_iconsmodesettings.h"
26 #include "dolphinfileitemlistwidget.h"
27 #include "kitemviews/kfileitemmodel.h"
28 #include "kitemviews/kitemlistcontroller.h"
29 #include "views/viewmodecontroller.h"
30 #include "zoomlevelinfo.h"
32 #include <KIO/PreviewJob>
35 DolphinItemListView::DolphinItemListView(QGraphicsWidget
* parent
) :
36 KFileItemListView(parent
),
43 DolphinItemListView::~DolphinItemListView()
48 void DolphinItemListView::setZoomLevel(int level
)
50 if (level
< ZoomLevelInfo::minimumLevel()) {
51 level
= ZoomLevelInfo::minimumLevel();
52 } else if (level
> ZoomLevelInfo::maximumLevel()) {
53 level
= ZoomLevelInfo::maximumLevel();
56 if (level
== m_zoomLevel
) {
62 ViewModeSettings
settings(viewMode());
63 if (previewsShown()) {
64 const int previewSize
= ZoomLevelInfo::iconSizeForZoomLevel(level
);
65 settings
.setPreviewSize(previewSize
);
67 const int iconSize
= ZoomLevelInfo::iconSizeForZoomLevel(level
);
68 settings
.setIconSize(iconSize
);
74 int DolphinItemListView::zoomLevel() const
79 void DolphinItemListView::readSettings()
81 ViewModeSettings
settings(viewMode());
82 settings
.readConfig();
86 setEnabledSelectionToggles(GeneralSettings::showSelectionToggle());
87 setSupportsItemExpanding(itemLayoutSupportsItemExpanding(itemLayout()));
92 const KConfigGroup
globalConfig(KSharedConfig::openConfig(), "PreviewSettings");
93 setEnabledPlugins(globalConfig
.readEntry("Plugins", KIO::PreviewJob::defaultPlugins()));
94 setLocalFileSizePreviewLimit(globalConfig
.readEntry("MaximumSize", 0));
98 void DolphinItemListView::writeSettings()
100 IconsModeSettings::self()->save();
101 CompactModeSettings::self()->save();
102 DetailsModeSettings::self()->save();
105 KItemListWidgetCreatorBase
* DolphinItemListView::defaultWidgetCreator() const
107 return new KItemListWidgetCreator
<DolphinFileItemListWidget
>();
110 bool DolphinItemListView::itemLayoutSupportsItemExpanding(ItemLayout layout
) const
112 return layout
== DetailsLayout
&& DetailsModeSettings::expandableFolders();
115 void DolphinItemListView::onItemLayoutChanged(ItemLayout current
, ItemLayout previous
)
117 setHeaderVisible(current
== DetailsLayout
);
122 KFileItemListView::onItemLayoutChanged(current
, previous
);
125 void DolphinItemListView::onPreviewsShownChanged(bool shown
)
131 void DolphinItemListView::onVisibleRolesChanged(const QList
<QByteArray
>& current
,
132 const QList
<QByteArray
>& previous
)
134 KFileItemListView::onVisibleRolesChanged(current
, previous
);
138 void DolphinItemListView::updateFont()
140 const ViewModeSettings
settings(viewMode());
142 if (settings
.useSystemFont()) {
143 KItemListView::updateFont();
145 QFont
font(settings
.fontFamily(), qRound(settings
.fontSize()));
146 font
.setItalic(settings
.italicFont());
147 font
.setWeight(settings
.fontWeight());
148 font
.setPointSizeF(settings
.fontSize());
150 KItemListStyleOption option
= styleOption();
152 option
.fontMetrics
= QFontMetrics(font
);
154 setStyleOption(option
);
158 void DolphinItemListView::updateGridSize()
160 const ViewModeSettings
settings(viewMode());
162 // Calculate the size of the icon
163 const int iconSize
= previewsShown() ? settings
.previewSize() : settings
.iconSize();
164 m_zoomLevel
= ZoomLevelInfo::zoomLevelForIconSize(QSize(iconSize
, iconSize
));
165 KItemListStyleOption option
= styleOption();
167 const int padding
= 2;
168 int horizontalMargin
= 0;
169 int verticalMargin
= 0;
171 // Calculate the item-width and item-height
174 int maxTextLines
= 0;
175 int maxTextWidth
= 0;
177 switch (itemLayout()) {
178 case KFileItemListView::IconsLayout
: {
179 const int minItemWidth
= 48;
180 itemWidth
= minItemWidth
+ IconsModeSettings::textWidthIndex() * 64;
182 if (itemWidth
< iconSize
+ padding
* 2) {
183 itemWidth
= iconSize
+ padding
* 2;
186 itemHeight
= padding
* 3 + iconSize
+ option
.fontMetrics
.lineSpacing();
188 horizontalMargin
= 4;
190 maxTextLines
= IconsModeSettings::maximumTextLines();
193 case KFileItemListView::CompactLayout
: {
194 itemWidth
= padding
* 4 + iconSize
+ option
.fontMetrics
.height() * 5;
195 const int textLinesCount
= visibleRoles().count();
196 itemHeight
= padding
* 2 + qMax(iconSize
, textLinesCount
* option
.fontMetrics
.lineSpacing());
198 if (CompactModeSettings::maximumTextWidthIndex() > 0) {
199 // A restriction is given for the maximum width of the text (0 means
200 // having no restriction)
201 maxTextWidth
= option
.fontMetrics
.height() * 10 * CompactModeSettings::maximumTextWidthIndex();
204 horizontalMargin
= 8;
207 case KFileItemListView::DetailsLayout
: {
209 itemHeight
= padding
* 2 + qMax(iconSize
, option
.fontMetrics
.lineSpacing());
219 // Apply the calculated values
220 option
.padding
= padding
;
221 option
.horizontalMargin
= horizontalMargin
;
222 option
.verticalMargin
= verticalMargin
;
223 option
.iconSize
= iconSize
;
224 option
.maxTextLines
= maxTextLines
;
225 option
.maxTextWidth
= maxTextWidth
;
227 setStyleOption(option
);
228 setItemSize(QSizeF(itemWidth
, itemHeight
));
232 ViewModeSettings::ViewMode
DolphinItemListView::viewMode() const
234 ViewModeSettings::ViewMode mode
;
236 switch (itemLayout()) {
237 case KFileItemListView::IconsLayout
: mode
= ViewModeSettings::IconsMode
; break;
238 case KFileItemListView::CompactLayout
: mode
= ViewModeSettings::CompactMode
; break;
239 case KFileItemListView::DetailsLayout
: mode
= ViewModeSettings::DetailsMode
; break;
240 default: mode
= ViewModeSettings::IconsMode
;