┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src/views/dolphinitemlistcontainer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/views/dolphinitemlistcontainer.cpp')
-rw-r--r--src/views/dolphinitemlistcontainer.cpp279
1 files changed, 279 insertions, 0 deletions
diff --git a/src/views/dolphinitemlistcontainer.cpp b/src/views/dolphinitemlistcontainer.cpp
new file mode 100644
index 000000000..9c9ad6de3
--- /dev/null
+++ b/src/views/dolphinitemlistcontainer.cpp
@@ -0,0 +1,279 @@
+/***************************************************************************
+ * Copyright (C) 2011 by Peter Penz <[email protected]> *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA *
+ ***************************************************************************/
+
+#include "dolphinitemlistcontainer.h"
+
+#include "dolphin_iconsmodesettings.h"
+#include "dolphin_detailsmodesettings.h"
+#include "dolphin_compactmodesettings.h"
+
+#include <kitemviews/kitemliststyleoption.h>
+#include <kitemviews/kfileitemlistview.h>
+#include <kitemviews/kfileitemmodel.h>
+#include <kitemviews/kitemlistcontroller.h>
+#include <kitemviews/kitemliststyleoption.h>
+
+#include <KDirLister>
+#include <KGlobalSettings>
+
+#include <views/viewmodecontroller.h>
+
+#include "zoomlevelinfo.h"
+
+
+DolphinItemListContainer::DolphinItemListContainer(KDirLister* dirLister,
+ QWidget* parent) :
+ KItemListContainer(parent),
+ m_zoomLevel(0),
+ m_fileItemListView(0)
+{
+ controller()->setModel(new KFileItemModel(dirLister, this));
+
+ m_fileItemListView = new KFileItemListView();
+ controller()->setView(m_fileItemListView);
+
+ KItemListStyleOption option;
+
+ // TODO:
+ option.font = parent->font();
+ option.fontMetrics = QFontMetrics(parent->font());
+
+ updateGridSize();
+/*
+ connect(this, SIGNAL(clicked(const QModelIndex&)),
+ dolphinViewController, SLOT(requestTab(const QModelIndex&)));*/
+/*
+ connect(this, SIGNAL(entered(const QModelIndex&)),
+ dolphinViewController, SLOT(emitItemEntered(const QModelIndex&)));
+ connect(this, SIGNAL(viewportEntered()),
+ dolphinViewController, SLOT(emitViewportEntered()));*/
+
+ // apply the icons mode settings to the widget
+ //const IconsModeSettings* settings = DolphinSettings::instance().iconsModeSettings();
+ //Q_ASSERT(settings);
+
+ /*if (settings->useSystemFont()) {
+ m_font = KGlobalSettings::generalFont();
+ } else {
+ m_font = QFont(settings->fontFamily(),
+ qRound(settings->fontSize()),
+ settings->fontWeight(),
+ settings->italicFont());
+ m_font.setPointSizeF(settings->fontSize());
+ }
+
+ setWordWrap(settings->numberOfTextlines() > 1);
+
+ if (settings->arrangement() == QListView::TopToBottom) {
+ setFlow(QListView::LeftToRight);
+ m_decorationPosition = QStyleOptionViewItem::Top;
+ m_displayAlignment = Qt::AlignHCenter;
+ } else {
+ setFlow(QListView::TopToBottom);
+ m_decorationPosition = QStyleOptionViewItem::Left;
+ m_displayAlignment = Qt::AlignLeft | Qt::AlignVCenter;
+ }
+
+ connect(m_categoryDrawer, SIGNAL(actionRequested(int,QModelIndex)), this, SLOT(categoryDrawerActionRequested(int,QModelIndex)));
+ setCategoryDrawer(m_categoryDrawer);
+
+ connect(KGlobalSettings::self(), SIGNAL(settingsChanged(int)),
+ this, SLOT(slotGlobalSettingsChanged(int)));*/
+
+ //updateGridSize(dolphinView->showPreview(), 0);
+ /*m_extensionsFactory = new ViewExtensionsFactory(this, dolphinViewController, viewModeController);*/
+}
+
+DolphinItemListContainer::~DolphinItemListContainer()
+{
+ IconsModeSettings::self()->writeConfig();
+ CompactModeSettings::self()->writeConfig();
+ DetailsModeSettings::self()->writeConfig();
+
+ KItemListView* view = controller()->view();
+ controller()->setView(0);
+ delete view;
+}
+
+void DolphinItemListContainer::setPreviewsShown(bool show)
+{
+ beginTransaction();
+ m_fileItemListView->setPreviewsShown(show);
+ updateGridSize();
+ endTransaction();
+}
+
+bool DolphinItemListContainer::previewsShown() const
+{
+ return m_fileItemListView->previewsShown();
+}
+
+void DolphinItemListContainer::setVisibleRoles(const QHash<QByteArray, int>& roles)
+{
+ m_fileItemListView->setVisibleRoles(roles);
+ updateGridSize();
+}
+
+QHash<QByteArray, int> DolphinItemListContainer::visibleRoles() const
+{
+ return m_fileItemListView->visibleRoles();
+}
+
+void DolphinItemListContainer::setZoomLevel(int level)
+{
+ if (level < ZoomLevelInfo::minimumLevel()) {
+ level = ZoomLevelInfo::minimumLevel();
+ } else if (level > ZoomLevelInfo::maximumLevel()) {
+ level = ZoomLevelInfo::maximumLevel();
+ }
+
+ if (level == m_zoomLevel) {
+ return;
+ }
+
+ m_zoomLevel = level;
+
+ if (previewsShown()) {
+ const int previewSize = ZoomLevelInfo::iconSizeForZoomLevel(level);
+
+ switch (itemLayout()) {
+ case KFileItemListView::IconsLayout: IconsModeSettings::setPreviewSize(previewSize); break;
+ case KFileItemListView::CompactLayout: CompactModeSettings::setPreviewSize(previewSize); break;
+ case KFileItemListView::DetailsLayout: DetailsModeSettings::setPreviewSize(previewSize); break;
+ default: Q_ASSERT(false); break;
+ }
+ } else {
+ const int iconSize = ZoomLevelInfo::iconSizeForZoomLevel(level);
+ switch (itemLayout()) {
+ case KFileItemListView::IconsLayout: IconsModeSettings::setIconSize(iconSize); break;
+ case KFileItemListView::CompactLayout: CompactModeSettings::setIconSize(iconSize); break;
+ case KFileItemListView::DetailsLayout: DetailsModeSettings::setIconSize(iconSize); break;
+ default: Q_ASSERT(false); break;
+ }
+ }
+
+ updateGridSize();
+}
+
+int DolphinItemListContainer::zoomLevel() const
+{
+ return m_zoomLevel;
+}
+
+void DolphinItemListContainer::setItemLayout(KFileItemListView::Layout layout)
+{
+ if (layout == itemLayout()) {
+ return;
+ }
+
+ beginTransaction();
+ m_fileItemListView->setItemLayout(layout);
+
+ switch (layout) {
+ case KFileItemListView::IconsLayout:
+ case KFileItemListView::DetailsLayout:
+ m_fileItemListView->setScrollOrientation(Qt::Vertical);
+ break;
+ case KFileItemListView::CompactLayout:
+ m_fileItemListView->setScrollOrientation(Qt::Horizontal);
+ break;
+ default:
+ Q_ASSERT(false);
+ break;
+ }
+
+ updateGridSize();
+ endTransaction();
+}
+
+KFileItemListView::Layout DolphinItemListContainer::itemLayout() const
+{
+ return m_fileItemListView->itemLayout();
+}
+
+void DolphinItemListContainer::beginTransaction()
+{
+ m_fileItemListView->beginTransaction();
+}
+
+void DolphinItemListContainer::endTransaction()
+{
+ m_fileItemListView->endTransaction();
+}
+
+void DolphinItemListContainer::updateGridSize()
+{
+ // Calculate the size of the icon
+ int iconSize;
+ if (previewsShown()) {
+ switch (itemLayout()) {
+ case KFileItemListView::IconsLayout: iconSize = IconsModeSettings::previewSize(); break;
+ case KFileItemListView::CompactLayout: iconSize = CompactModeSettings::previewSize(); break;
+ case KFileItemListView::DetailsLayout: iconSize = DetailsModeSettings::previewSize(); break;
+ default: Q_ASSERT(false); break;
+ }
+ } else {
+ switch (itemLayout()) {
+ case KFileItemListView::IconsLayout: iconSize = IconsModeSettings::iconSize(); break;
+ case KFileItemListView::CompactLayout: iconSize = CompactModeSettings::iconSize(); break;
+ case KFileItemListView::DetailsLayout: iconSize = DetailsModeSettings::iconSize(); break;
+ default: Q_ASSERT(false); break;
+ }
+ }
+
+ m_zoomLevel = ZoomLevelInfo::zoomLevelForIconSize(QSize(iconSize, iconSize));
+ KItemListStyleOption styleOption = m_fileItemListView->styleOption();
+
+ const int innerMargin = (iconSize >= KIconLoader::SizeSmallMedium) ? 4 : 2;
+
+ // Calculate the item-width and item-height
+ int itemWidth;
+ int itemHeight;
+ switch (itemLayout()) {
+ case KFileItemListView::IconsLayout: {
+ const int minItemWidth = 64;
+ itemWidth = minItemWidth + IconsModeSettings::textWidthIndex() * 64; // TODO:
+ if (itemWidth < iconSize + innerMargin * 2) {
+ itemWidth = iconSize + innerMargin * 2;
+ }
+ itemHeight = innerMargin * 2 + iconSize + styleOption.fontMetrics.height();
+ break;
+ }
+ case KFileItemListView::CompactLayout: {
+ itemWidth = innerMargin * 2;
+ const int textLinesCount = m_fileItemListView->visibleRoles().count();
+ itemHeight = innerMargin * 2 + qMax(iconSize, textLinesCount * styleOption.fontMetrics.height());
+ break;
+ }
+ case KFileItemListView::DetailsLayout: {
+ itemWidth = -1;
+ itemHeight = innerMargin * 2 + qMax(iconSize, styleOption.fontMetrics.height());
+ break;
+ }
+ default: Q_ASSERT(false); break;
+ }
+
+ // Apply the calculated values
+ styleOption.margin = innerMargin;
+ styleOption.iconSize = iconSize;
+ m_fileItemListView->setStyleOption(styleOption);
+ m_fileItemListView->setItemSize(QSizeF(itemWidth, itemHeight));
+}
+
+#include "dolphinitemlistcontainer.moc"