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>
35 #include <KGlobalSettings>
37 #include <views/viewmodecontroller.h>
39 #include "zoomlevelinfo.h"
42 DolphinItemListContainer::DolphinItemListContainer(KDirLister
* dirLister
,
44 KItemListContainer(parent
),
48 controller()->setModel(new KFileItemModel(dirLister
, this));
50 m_fileItemListView
= new KFileItemListView();
51 m_fileItemListView
->setWidgetCreator(new KItemListWidgetCreator
<DolphinFileItemListWidget
>());
52 m_fileItemListView
->setEnabledSelectionToggles(GeneralSettings::showSelectionToggle());
53 controller()->setView(m_fileItemListView
);
58 DolphinItemListContainer::~DolphinItemListContainer()
60 IconsModeSettings::self()->writeConfig();
61 CompactModeSettings::self()->writeConfig();
62 DetailsModeSettings::self()->writeConfig();
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 if (previewsShown()) {
108 const int previewSize
= ZoomLevelInfo::iconSizeForZoomLevel(level
);
110 switch (itemLayout()) {
111 case KFileItemListView::IconsLayout
: IconsModeSettings::setPreviewSize(previewSize
); break;
112 case KFileItemListView::CompactLayout
: CompactModeSettings::setPreviewSize(previewSize
); break;
113 case KFileItemListView::DetailsLayout
: DetailsModeSettings::setPreviewSize(previewSize
); break;
114 default: Q_ASSERT(false); break;
117 const int iconSize
= ZoomLevelInfo::iconSizeForZoomLevel(level
);
118 switch (itemLayout()) {
119 case KFileItemListView::IconsLayout
: IconsModeSettings::setIconSize(iconSize
); break;
120 case KFileItemListView::CompactLayout
: CompactModeSettings::setIconSize(iconSize
); break;
121 case KFileItemListView::DetailsLayout
: DetailsModeSettings::setIconSize(iconSize
); break;
122 default: Q_ASSERT(false); break;
129 int DolphinItemListContainer::zoomLevel() const
134 void DolphinItemListContainer::setItemLayout(KFileItemListView::Layout layout
)
136 if (layout
== itemLayout()) {
141 m_fileItemListView
->setItemLayout(layout
);
144 case KFileItemListView::IconsLayout
:
145 m_fileItemListView
->setScrollOrientation(Qt::Vertical
);
146 m_fileItemListView
->setHeaderShown(false);
148 case KFileItemListView::DetailsLayout
:
149 m_fileItemListView
->setScrollOrientation(Qt::Vertical
);
150 m_fileItemListView
->setHeaderShown(true);
152 case KFileItemListView::CompactLayout
:
153 m_fileItemListView
->setScrollOrientation(Qt::Horizontal
);
154 m_fileItemListView
->setHeaderShown(false);
165 KFileItemListView::Layout
DolphinItemListContainer::itemLayout() const
167 return m_fileItemListView
->itemLayout();
170 void DolphinItemListContainer::beginTransaction()
172 m_fileItemListView
->beginTransaction();
175 void DolphinItemListContainer::endTransaction()
177 m_fileItemListView
->endTransaction();
180 void DolphinItemListContainer::updateGridSize()
182 // Calculate the size of the icon
184 if (previewsShown()) {
185 switch (itemLayout()) {
186 case KFileItemListView::IconsLayout
: iconSize
= IconsModeSettings::previewSize(); break;
187 case KFileItemListView::CompactLayout
: iconSize
= CompactModeSettings::previewSize(); break;
188 case KFileItemListView::DetailsLayout
: iconSize
= DetailsModeSettings::previewSize(); break;
189 default: Q_ASSERT(false); break;
192 switch (itemLayout()) {
193 case KFileItemListView::IconsLayout
: iconSize
= IconsModeSettings::iconSize(); break;
194 case KFileItemListView::CompactLayout
: iconSize
= CompactModeSettings::iconSize(); break;
195 case KFileItemListView::DetailsLayout
: iconSize
= DetailsModeSettings::iconSize(); break;
196 default: Q_ASSERT(false); break;
200 m_zoomLevel
= ZoomLevelInfo::zoomLevelForIconSize(QSize(iconSize
, iconSize
));
201 KItemListStyleOption styleOption
= m_fileItemListView
->styleOption();
203 const int innerMargin
= (iconSize
>= KIconLoader::SizeSmallMedium
) ? 4 : 2;
205 // Calculate the item-width and item-height
208 switch (itemLayout()) {
209 case KFileItemListView::IconsLayout
: {
210 const int minItemWidth
= 64;
211 itemWidth
= minItemWidth
+ IconsModeSettings::textWidthIndex() * 64; // TODO:
212 if (itemWidth
< iconSize
+ innerMargin
* 2) {
213 itemWidth
= iconSize
+ innerMargin
* 2;
215 itemHeight
= innerMargin
* 2 + iconSize
+ styleOption
.fontMetrics
.height();
218 case KFileItemListView::CompactLayout
: {
219 itemWidth
= innerMargin
* 2;
220 const int textLinesCount
= m_fileItemListView
->visibleRoles().count();
221 itemHeight
= innerMargin
* 2 + qMax(iconSize
, textLinesCount
* styleOption
.fontMetrics
.height());
224 case KFileItemListView::DetailsLayout
: {
226 itemHeight
= innerMargin
* 2 + qMax(iconSize
, styleOption
.fontMetrics
.height());
229 default: Q_ASSERT(false); break;
232 // Apply the calculated values
233 styleOption
.margin
= innerMargin
;
234 styleOption
.iconSize
= iconSize
;
235 m_fileItemListView
->setStyleOption(styleOption
);
236 m_fileItemListView
->setItemSize(QSizeF(itemWidth
, itemHeight
));
239 #include "dolphinitemlistcontainer.moc"