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 "dolphinitemlistcontainer.h"
22 #include "dolphin_generalsettings.h"
23 #include "dolphin_iconsmodesettings.h"
24 #include "dolphin_detailsmodesettings.h"
25 #include "dolphin_compactmodesettings.h"
27 #include "dolphinfileitemlistwidget.h"
29 #include <kitemviews/kfileitemlistview.h>
30 #include <kitemviews/kfileitemmodel.h>
31 #include <kitemviews/kitemlistcontroller.h>
32 #include <kitemviews/kitemliststyleoption.h>
34 #include <KGlobalSettings>
36 #include <views/viewmodecontroller.h>
38 #include "zoomlevelinfo.h"
41 DolphinItemListContainer::DolphinItemListContainer(QWidget
* parent
) :
42 KItemListContainer(parent
),
46 controller()->setModel(new KFileItemModel(this));
48 m_fileItemListView
= new KFileItemListView();
49 controller()->setView(m_fileItemListView
);
51 m_fileItemListView
->setWidgetCreator(new KItemListWidgetCreator
<DolphinFileItemListWidget
>());
52 m_fileItemListView
->setEnabledSelectionToggles(GeneralSettings::showSelectionToggle());
53 m_fileItemListView
->setEnlargeSmallPreviews(GeneralSettings::enlargeSmallPreviews());
55 updateAutoActivationDelay();
60 DolphinItemListContainer::~DolphinItemListContainer()
64 controller()->setView(0);
65 delete m_fileItemListView
;
66 m_fileItemListView
= 0;
69 void DolphinItemListContainer::setPreviewsShown(bool show
)
72 m_fileItemListView
->setPreviewsShown(show
);
77 bool DolphinItemListContainer::previewsShown() const
79 return m_fileItemListView
->previewsShown();
82 void DolphinItemListContainer::setVisibleRoles(const QList
<QByteArray
>& roles
)
84 m_fileItemListView
->setVisibleRoles(roles
);
88 QList
<QByteArray
> DolphinItemListContainer::visibleRoles() const
90 return m_fileItemListView
->visibleRoles();
93 void DolphinItemListContainer::setZoomLevel(int level
)
95 if (level
< ZoomLevelInfo::minimumLevel()) {
96 level
= ZoomLevelInfo::minimumLevel();
97 } else if (level
> ZoomLevelInfo::maximumLevel()) {
98 level
= ZoomLevelInfo::maximumLevel();
101 if (level
== m_zoomLevel
) {
107 ViewModeSettings
settings(viewMode());
108 if (previewsShown()) {
109 const int previewSize
= ZoomLevelInfo::iconSizeForZoomLevel(level
);
110 settings
.setPreviewSize(previewSize
);
112 const int iconSize
= ZoomLevelInfo::iconSizeForZoomLevel(level
);
113 settings
.setIconSize(iconSize
);
119 int DolphinItemListContainer::zoomLevel() const
124 void DolphinItemListContainer::setItemLayout(KFileItemListView::Layout layout
)
126 if (layout
== itemLayout()) {
131 m_fileItemListView
->setItemLayout(layout
);
134 case KFileItemListView::IconsLayout
:
135 m_fileItemListView
->setScrollOrientation(Qt::Vertical
);
136 m_fileItemListView
->setHeaderVisible(false);
137 m_fileItemListView
->setSupportsItemExpanding(false);
139 case KFileItemListView::DetailsLayout
:
140 m_fileItemListView
->setScrollOrientation(Qt::Vertical
);
141 m_fileItemListView
->setHeaderVisible(true);
142 m_fileItemListView
->setSupportsItemExpanding(DetailsModeSettings::expandableFolders());
145 case KFileItemListView::CompactLayout
:
146 m_fileItemListView
->setScrollOrientation(Qt::Horizontal
);
147 m_fileItemListView
->setHeaderVisible(false);
148 m_fileItemListView
->setSupportsItemExpanding(false);
160 KFileItemListView::Layout
DolphinItemListContainer::itemLayout() const
162 return m_fileItemListView
->itemLayout();
165 void DolphinItemListContainer::beginTransaction()
167 m_fileItemListView
->beginTransaction();
170 void DolphinItemListContainer::endTransaction()
172 m_fileItemListView
->endTransaction();
175 void DolphinItemListContainer::readSettings()
177 ViewModeSettings
settings(viewMode());
178 settings
.readConfig();
182 m_fileItemListView
->setEnabledSelectionToggles(GeneralSettings::showSelectionToggle());
184 const bool expandableFolders
= (itemLayout() && KFileItemListView::DetailsLayout
) &&
185 DetailsModeSettings::expandableFolders();
186 m_fileItemListView
->setSupportsItemExpanding(expandableFolders
);
188 updateAutoActivationDelay();
192 const KConfigGroup
globalConfig(KGlobal::config(), "PreviewSettings");
193 const QStringList plugins
= globalConfig
.readEntry("Plugins", QStringList()
194 << "directorythumbnail"
197 m_fileItemListView
->setEnabledPlugins(plugins
);
202 void DolphinItemListContainer::writeSettings()
204 IconsModeSettings::self()->writeConfig();
205 CompactModeSettings::self()->writeConfig();
206 DetailsModeSettings::self()->writeConfig();
209 void DolphinItemListContainer::updateGridSize()
211 const ViewModeSettings
settings(viewMode());
213 // Calculate the size of the icon
214 const int iconSize
= previewsShown() ? settings
.previewSize() : settings
.iconSize();
215 m_zoomLevel
= ZoomLevelInfo::zoomLevelForIconSize(QSize(iconSize
, iconSize
));
216 KItemListStyleOption styleOption
= m_fileItemListView
->styleOption();
218 const int padding
= 2;
219 int horizontalMargin
= 0;
220 int verticalMargin
= 0;
222 // Calculate the item-width and item-height
225 switch (itemLayout()) {
226 case KFileItemListView::IconsLayout
: {
227 const int minItemWidth
= 48;
228 itemWidth
= minItemWidth
+ IconsModeSettings::textWidthIndex() * 64;
230 if (previewsShown()) {
231 // Optimize the width for previews with a 3:2 aspect ratio instead
232 // of a 1:1 ratio to avoid wasting too much vertical space when
234 const int minWidth
= iconSize
* 3 / 2;
235 itemWidth
= qMax(itemWidth
, minWidth
);
238 if (itemWidth
< iconSize
+ padding
* 2) {
239 itemWidth
= iconSize
+ padding
* 2;
241 itemHeight
= padding
* 3 + iconSize
+ styleOption
.fontMetrics
.height();
243 horizontalMargin
= 4;
247 case KFileItemListView::CompactLayout
: {
248 itemWidth
= padding
* 4 + iconSize
+ styleOption
.fontMetrics
.height() * 5;
249 const int textLinesCount
= m_fileItemListView
->visibleRoles().count();
250 itemHeight
= padding
* 2 + qMax(iconSize
, textLinesCount
* styleOption
.fontMetrics
.height());
252 horizontalMargin
= 8;
255 case KFileItemListView::DetailsLayout
: {
257 itemHeight
= padding
* 2 + qMax(iconSize
, styleOption
.fontMetrics
.height());
267 // Apply the calculated values
268 styleOption
.padding
= padding
;
269 styleOption
.horizontalMargin
= horizontalMargin
;
270 styleOption
.verticalMargin
= verticalMargin
;
271 styleOption
.iconSize
= iconSize
;
272 m_fileItemListView
->beginTransaction();
273 m_fileItemListView
->setStyleOption(styleOption
);
274 m_fileItemListView
->setItemSize(QSizeF(itemWidth
, itemHeight
));
275 m_fileItemListView
->endTransaction();
278 void DolphinItemListContainer::updateFont()
280 KItemListStyleOption styleOption
= m_fileItemListView
->styleOption();
282 const ViewModeSettings
settings(viewMode());
284 QFont
font(settings
.fontFamily(), qRound(settings
.fontSize()));
285 font
.setItalic(settings
.italicFont());
286 font
.setWeight(settings
.fontWeight());
287 font
.setPointSizeF(settings
.fontSize());
289 styleOption
.font
= font
;
290 styleOption
.fontMetrics
= QFontMetrics(font
);
292 m_fileItemListView
->setStyleOption(styleOption
);
295 void DolphinItemListContainer::updateAutoActivationDelay()
297 const int delay
= GeneralSettings::autoExpandFolders() ? 750 : -1;
298 controller()->setAutoActivationDelay(delay
);
301 ViewModeSettings::ViewMode
DolphinItemListContainer::viewMode() const
303 ViewModeSettings::ViewMode mode
;
305 switch (itemLayout()) {
306 case KFileItemListView::IconsLayout
: mode
= ViewModeSettings::IconsMode
; break;
307 case KFileItemListView::CompactLayout
: mode
= ViewModeSettings::CompactMode
; break;
308 case KFileItemListView::DetailsLayout
: mode
= ViewModeSettings::DetailsMode
; break;
309 default: mode
= ViewModeSettings::IconsMode
;
317 #include "dolphinitemlistcontainer.moc"