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_iconsmodesettings.h"
23 #include "dolphin_detailsmodesettings.h"
24 #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>
34 #include <KGlobalSettings>
36 #include <views/viewmodecontroller.h>
38 #include "zoomlevelinfo.h"
41 DolphinItemListContainer::DolphinItemListContainer(KDirLister
* dirLister
,
43 KItemListContainer(parent
),
47 controller()->setModel(new KFileItemModel(dirLister
, this));
49 m_fileItemListView
= new KFileItemListView();
50 m_fileItemListView
->setWidgetCreator(new KItemListWidgetCreator
<DolphinFileItemListWidget
>());
51 controller()->setView(m_fileItemListView
);
53 KItemListStyleOption option
;
56 option
.font
= parent
->font();
57 option
.fontMetrics
= QFontMetrics(parent
->font());
61 connect(this, SIGNAL(clicked(QModelIndex)),
62 dolphinViewController, SLOT(requestTab(QModelIndex)));*/
64 connect(this, SIGNAL(entered(QModelIndex)),
65 dolphinViewController, SLOT(emitItemEntered(QModelIndex)));
66 connect(this, SIGNAL(viewportEntered()),
67 dolphinViewController, SLOT(emitViewportEntered()));*/
69 // apply the icons mode settings to the widget
70 //const IconsModeSettings* settings = DolphinSettings::instance().iconsModeSettings();
73 /*if (settings->useSystemFont()) {
74 m_font = KGlobalSettings::generalFont();
76 m_font = QFont(settings->fontFamily(),
77 qRound(settings->fontSize()),
78 settings->fontWeight(),
79 settings->italicFont());
80 m_font.setPointSizeF(settings->fontSize());
83 setWordWrap(settings->numberOfTextlines() > 1);
85 if (settings->arrangement() == QListView::TopToBottom) {
86 setFlow(QListView::LeftToRight);
87 m_decorationPosition = QStyleOptionViewItem::Top;
88 m_displayAlignment = Qt::AlignHCenter;
90 setFlow(QListView::TopToBottom);
91 m_decorationPosition = QStyleOptionViewItem::Left;
92 m_displayAlignment = Qt::AlignLeft | Qt::AlignVCenter;
95 connect(m_categoryDrawer, SIGNAL(actionRequested(int,QModelIndex)), this, SLOT(categoryDrawerActionRequested(int,QModelIndex)));
96 setCategoryDrawer(m_categoryDrawer);
98 connect(KGlobalSettings::self(), SIGNAL(settingsChanged(int)),
99 this, SLOT(slotGlobalSettingsChanged(int)));*/
101 //updateGridSize(dolphinView->showPreview(), 0);
102 /*m_extensionsFactory = new ViewExtensionsFactory(this, dolphinViewController, viewModeController);*/
105 DolphinItemListContainer::~DolphinItemListContainer()
107 IconsModeSettings::self()->writeConfig();
108 CompactModeSettings::self()->writeConfig();
109 DetailsModeSettings::self()->writeConfig();
111 KItemListView
* view
= controller()->view();
112 controller()->setView(0);
116 void DolphinItemListContainer::setPreviewsShown(bool show
)
119 m_fileItemListView
->setPreviewsShown(show
);
124 bool DolphinItemListContainer::previewsShown() const
126 return m_fileItemListView
->previewsShown();
129 void DolphinItemListContainer::setVisibleRoles(const QList
<QByteArray
>& roles
)
131 m_fileItemListView
->setVisibleRoles(roles
);
135 QList
<QByteArray
> DolphinItemListContainer::visibleRoles() const
137 return m_fileItemListView
->visibleRoles();
140 void DolphinItemListContainer::setZoomLevel(int level
)
142 if (level
< ZoomLevelInfo::minimumLevel()) {
143 level
= ZoomLevelInfo::minimumLevel();
144 } else if (level
> ZoomLevelInfo::maximumLevel()) {
145 level
= ZoomLevelInfo::maximumLevel();
148 if (level
== m_zoomLevel
) {
154 if (previewsShown()) {
155 const int previewSize
= ZoomLevelInfo::iconSizeForZoomLevel(level
);
157 switch (itemLayout()) {
158 case KFileItemListView::IconsLayout
: IconsModeSettings::setPreviewSize(previewSize
); break;
159 case KFileItemListView::CompactLayout
: CompactModeSettings::setPreviewSize(previewSize
); break;
160 case KFileItemListView::DetailsLayout
: DetailsModeSettings::setPreviewSize(previewSize
); break;
161 default: Q_ASSERT(false); break;
164 const int iconSize
= ZoomLevelInfo::iconSizeForZoomLevel(level
);
165 switch (itemLayout()) {
166 case KFileItemListView::IconsLayout
: IconsModeSettings::setIconSize(iconSize
); break;
167 case KFileItemListView::CompactLayout
: CompactModeSettings::setIconSize(iconSize
); break;
168 case KFileItemListView::DetailsLayout
: DetailsModeSettings::setIconSize(iconSize
); break;
169 default: Q_ASSERT(false); break;
176 int DolphinItemListContainer::zoomLevel() const
181 void DolphinItemListContainer::setItemLayout(KFileItemListView::Layout layout
)
183 if (layout
== itemLayout()) {
188 m_fileItemListView
->setItemLayout(layout
);
191 case KFileItemListView::IconsLayout
:
192 m_fileItemListView
->setScrollOrientation(Qt::Vertical
);
193 m_fileItemListView
->setHeaderShown(false);
195 case KFileItemListView::CompactLayout
:
196 m_fileItemListView
->setScrollOrientation(Qt::Horizontal
);
197 m_fileItemListView
->setHeaderShown(false);
199 case KFileItemListView::DetailsLayout
:
200 m_fileItemListView
->setScrollOrientation(Qt::Vertical
);
201 m_fileItemListView
->setHeaderShown(true);
212 KFileItemListView::Layout
DolphinItemListContainer::itemLayout() const
214 return m_fileItemListView
->itemLayout();
217 void DolphinItemListContainer::beginTransaction()
219 m_fileItemListView
->beginTransaction();
222 void DolphinItemListContainer::endTransaction()
224 m_fileItemListView
->endTransaction();
227 void DolphinItemListContainer::updateGridSize()
229 // Calculate the size of the icon
231 if (previewsShown()) {
232 switch (itemLayout()) {
233 case KFileItemListView::IconsLayout
: iconSize
= IconsModeSettings::previewSize(); break;
234 case KFileItemListView::CompactLayout
: iconSize
= CompactModeSettings::previewSize(); break;
235 case KFileItemListView::DetailsLayout
: iconSize
= DetailsModeSettings::previewSize(); break;
236 default: Q_ASSERT(false); break;
239 switch (itemLayout()) {
240 case KFileItemListView::IconsLayout
: iconSize
= IconsModeSettings::iconSize(); break;
241 case KFileItemListView::CompactLayout
: iconSize
= CompactModeSettings::iconSize(); break;
242 case KFileItemListView::DetailsLayout
: iconSize
= DetailsModeSettings::iconSize(); break;
243 default: Q_ASSERT(false); break;
247 m_zoomLevel
= ZoomLevelInfo::zoomLevelForIconSize(QSize(iconSize
, iconSize
));
248 KItemListStyleOption styleOption
= m_fileItemListView
->styleOption();
250 const int innerMargin
= (iconSize
>= KIconLoader::SizeSmallMedium
) ? 4 : 2;
252 // Calculate the item-width and item-height
255 switch (itemLayout()) {
256 case KFileItemListView::IconsLayout
: {
257 const int minItemWidth
= 64;
258 itemWidth
= minItemWidth
+ IconsModeSettings::textWidthIndex() * 64; // TODO:
259 if (itemWidth
< iconSize
+ innerMargin
* 2) {
260 itemWidth
= iconSize
+ innerMargin
* 2;
262 itemHeight
= innerMargin
* 2 + iconSize
+ styleOption
.fontMetrics
.height();
265 case KFileItemListView::CompactLayout
: {
266 itemWidth
= innerMargin
* 2;
267 const int textLinesCount
= m_fileItemListView
->visibleRoles().count();
268 itemHeight
= innerMargin
* 2 + qMax(iconSize
, textLinesCount
* styleOption
.fontMetrics
.height());
271 case KFileItemListView::DetailsLayout
: {
273 itemHeight
= innerMargin
* 2 + qMax(iconSize
, styleOption
.fontMetrics
.height());
276 default: Q_ASSERT(false); break;
279 // Apply the calculated values
280 styleOption
.margin
= innerMargin
;
281 styleOption
.iconSize
= iconSize
;
282 m_fileItemListView
->setStyleOption(styleOption
);
283 m_fileItemListView
->setItemSize(QSizeF(itemWidth
, itemHeight
));
286 #include "dolphinitemlistcontainer.moc"