2 * SPDX-FileCopyrightText: 2011 Peter Penz <peter.penz19@gmail.com>
4 * SPDX-License-Identifier: GPL-2.0-or-later
7 #include "dolphinitemlistview.h"
9 #include "dolphin_compactmodesettings.h"
10 #include "dolphin_detailsmodesettings.h"
11 #include "dolphin_generalsettings.h"
12 #include "dolphin_iconsmodesettings.h"
13 #include "dolphinfileitemlistwidget.h"
14 #include "kitemviews/kfileitemmodel.h"
15 #include "kitemviews/kitemlistcontroller.h"
16 #include "views/viewmodecontroller.h"
17 #include "zoomlevelinfo.h"
19 #include <KIO/PreviewJob>
22 DolphinItemListView::DolphinItemListView(QGraphicsWidget
* parent
) :
23 KFileItemListView(parent
),
30 DolphinItemListView::~DolphinItemListView()
35 void DolphinItemListView::setZoomLevel(int level
)
37 if (level
< ZoomLevelInfo::minimumLevel()) {
38 level
= ZoomLevelInfo::minimumLevel();
39 } else if (level
> ZoomLevelInfo::maximumLevel()) {
40 level
= ZoomLevelInfo::maximumLevel();
43 if (level
== m_zoomLevel
) {
49 ViewModeSettings
settings(viewMode());
50 if (previewsShown()) {
51 const int previewSize
= ZoomLevelInfo::iconSizeForZoomLevel(level
);
52 settings
.setPreviewSize(previewSize
);
54 const int iconSize
= ZoomLevelInfo::iconSizeForZoomLevel(level
);
55 settings
.setIconSize(iconSize
);
61 int DolphinItemListView::zoomLevel() const
66 void DolphinItemListView::readSettings()
68 ViewModeSettings
settings(viewMode());
69 settings
.readConfig();
73 setEnabledSelectionToggles(GeneralSettings::showSelectionToggle());
74 setSupportsItemExpanding(itemLayoutSupportsItemExpanding(itemLayout()));
79 const KConfigGroup
globalConfig(KSharedConfig::openConfig(), "PreviewSettings");
80 setEnabledPlugins(globalConfig
.readEntry("Plugins", KIO::PreviewJob::defaultPlugins()));
81 setLocalFileSizePreviewLimit(globalConfig
.readEntry("MaximumSize", 0));
85 void DolphinItemListView::writeSettings()
87 IconsModeSettings::self()->save();
88 CompactModeSettings::self()->save();
89 DetailsModeSettings::self()->save();
92 KItemListWidgetCreatorBase
* DolphinItemListView::defaultWidgetCreator() const
94 return new KItemListWidgetCreator
<DolphinFileItemListWidget
>();
97 bool DolphinItemListView::itemLayoutSupportsItemExpanding(ItemLayout layout
) const
99 return layout
== DetailsLayout
&& DetailsModeSettings::expandableFolders();
102 void DolphinItemListView::onItemLayoutChanged(ItemLayout current
, ItemLayout previous
)
104 setHeaderVisible(current
== DetailsLayout
);
109 KFileItemListView::onItemLayoutChanged(current
, previous
);
112 void DolphinItemListView::onPreviewsShownChanged(bool shown
)
118 void DolphinItemListView::onVisibleRolesChanged(const QList
<QByteArray
>& current
,
119 const QList
<QByteArray
>& previous
)
121 KFileItemListView::onVisibleRolesChanged(current
, previous
);
125 void DolphinItemListView::updateFont()
127 const ViewModeSettings
settings(viewMode());
129 if (settings
.useSystemFont()) {
130 KItemListView::updateFont();
132 QFont
font(settings
.fontFamily(), qRound(settings
.fontSize()));
133 font
.setItalic(settings
.italicFont());
134 font
.setWeight(settings
.fontWeight());
135 font
.setPointSizeF(settings
.fontSize());
137 KItemListStyleOption option
= styleOption();
139 option
.fontMetrics
= QFontMetrics(font
);
141 setStyleOption(option
);
145 void DolphinItemListView::updateGridSize()
147 const ViewModeSettings
settings(viewMode());
149 // Calculate the size of the icon
150 const int iconSize
= previewsShown() ? settings
.previewSize() : settings
.iconSize();
151 m_zoomLevel
= ZoomLevelInfo::zoomLevelForIconSize(QSize(iconSize
, iconSize
));
152 KItemListStyleOption option
= styleOption();
154 const int padding
= 2;
155 int horizontalMargin
= 0;
156 int verticalMargin
= 0;
158 // Calculate the item-width and item-height
161 int maxTextLines
= 0;
162 int maxTextWidth
= 0;
164 switch (itemLayout()) {
165 case KFileItemListView::IconsLayout
: {
166 const int minItemWidth
= 48;
167 itemWidth
= minItemWidth
+ IconsModeSettings::textWidthIndex() * 64;
169 if (itemWidth
< iconSize
+ padding
* 2) {
170 itemWidth
= iconSize
+ padding
* 2;
173 itemHeight
= padding
* 3 + iconSize
+ option
.fontMetrics
.lineSpacing();
175 horizontalMargin
= 4;
177 maxTextLines
= IconsModeSettings::maximumTextLines();
180 case KFileItemListView::CompactLayout
: {
181 itemWidth
= padding
* 4 + iconSize
+ option
.fontMetrics
.height() * 5;
182 const int textLinesCount
= visibleRoles().count();
183 itemHeight
= padding
* 2 + qMax(iconSize
, textLinesCount
* option
.fontMetrics
.lineSpacing());
185 if (CompactModeSettings::maximumTextWidthIndex() > 0) {
186 // A restriction is given for the maximum width of the text (0 means
187 // having no restriction)
188 maxTextWidth
= option
.fontMetrics
.height() * 10 * CompactModeSettings::maximumTextWidthIndex();
191 horizontalMargin
= 8;
194 case KFileItemListView::DetailsLayout
: {
196 itemHeight
= padding
* 2 + qMax(iconSize
, option
.fontMetrics
.lineSpacing());
206 // Apply the calculated values
207 option
.padding
= padding
;
208 option
.horizontalMargin
= horizontalMargin
;
209 option
.verticalMargin
= verticalMargin
;
210 option
.iconSize
= iconSize
;
211 option
.maxTextLines
= maxTextLines
;
212 option
.maxTextWidth
= maxTextWidth
;
214 setStyleOption(option
);
215 setItemSize(QSizeF(itemWidth
, itemHeight
));
219 ViewModeSettings::ViewMode
DolphinItemListView::viewMode() const
221 ViewModeSettings::ViewMode mode
;
223 switch (itemLayout()) {
224 case KFileItemListView::IconsLayout
: mode
= ViewModeSettings::IconsMode
; break;
225 case KFileItemListView::CompactLayout
: mode
= ViewModeSettings::CompactMode
; break;
226 case KFileItemListView::DetailsLayout
: mode
= ViewModeSettings::DetailsMode
; break;
227 default: mode
= ViewModeSettings::IconsMode
;