-/***************************************************************************
- * Copyright (C) 2011 by Peter Penz <peter.penz19@gmail.com> *
- * *
- * 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 *
- ***************************************************************************/
+/*
+ * SPDX-FileCopyrightText: 2011 Peter Penz <peter.penz19@gmail.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ */
#include "dolphinitemlistview.h"
+#include "dolphin_compactmodesettings.h"
+#include "dolphin_contentdisplaysettings.h"
+#include "dolphin_detailsmodesettings.h"
#include "dolphin_generalsettings.h"
#include "dolphin_iconsmodesettings.h"
-#include "dolphin_detailsmodesettings.h"
-#include "dolphin_compactmodesettings.h"
#include "dolphinfileitemlistwidget.h"
-
-#include <kitemviews/kfileitemlistview.h>
-#include <kitemviews/kfileitemmodel.h>
-#include <kitemviews/kitemlistcontroller.h>
-#include <kitemviews/kitemliststyleoption.h>
-
-#include <KGlobalSettings>
-#include <KGlobal>
-
-#include <views/viewmodecontroller.h>
-
+#include "settings/viewmodes/viewmodesettings.h"
#include "zoomlevelinfo.h"
+#include <KIO/PreviewJob>
+#include <QtMath>
-DolphinItemListView::DolphinItemListView(QGraphicsWidget* parent) :
- KFileItemListView(parent),
- m_zoomLevel(0)
+DolphinItemListView::DolphinItemListView(QGraphicsWidget *parent)
+ : KFileItemListView(parent)
+ , m_zoomLevel(0)
{
- updateFont();
+ DolphinItemListView::updateFont();
updateGridSize();
}
m_zoomLevel = level;
- ViewModeSettings settings(viewMode());
+ ViewModeSettings settings(itemLayout());
if (previewsShown()) {
const int previewSize = ZoomLevelInfo::iconSizeForZoomLevel(level);
settings.setPreviewSize(previewSize);
return m_zoomLevel;
}
+void DolphinItemListView::setEnabledSelectionToggles(DolphinItemListView::SelectionTogglesEnabled selectionTogglesEnabled)
+{
+ m_selectionTogglesEnabled = selectionTogglesEnabled;
+ switch (m_selectionTogglesEnabled) {
+ case True:
+ return setEnabledSelectionToggles(true);
+ case False:
+ return setEnabledSelectionToggles(false);
+ case FollowSetting:
+ return setEnabledSelectionToggles(GeneralSettings::showSelectionToggle());
+ }
+}
+
void DolphinItemListView::readSettings()
{
- ViewModeSettings settings(viewMode());
- settings.readConfig();
+ // We load the settings for all view modes now because we don't load them when the view mode changes.
+ IconsModeSettings::self()->load();
+ CompactModeSettings::self()->load();
+ DetailsModeSettings::self()->load();
+
+ ContentDisplaySettings::self()->load();
beginTransaction();
- setEnabledSelectionToggles(GeneralSettings::showSelectionToggle());
+ setEnabledSelectionToggles(m_selectionTogglesEnabled);
+ setHighlightEntireRow(itemLayoutHighlightEntireRow(itemLayout()));
setSupportsItemExpanding(itemLayoutSupportsItemExpanding(itemLayout()));
updateFont();
updateGridSize();
- const KConfigGroup globalConfig(KGlobal::config(), "PreviewSettings");
- const QStringList plugins = globalConfig.readEntry("Plugins", QStringList()
- << "directorythumbnail"
- << "imagethumbnail"
- << "jpegthumbnail");
- setEnabledPlugins(plugins);
-
+ const KConfigGroup globalConfig(KSharedConfig::openConfig(), QStringLiteral("PreviewSettings"));
+ setEnabledPlugins(globalConfig.readEntry("Plugins", KIO::PreviewJob::defaultPlugins()));
+ setLocalFileSizePreviewLimit(globalConfig.readEntry("MaximumSize", 0));
endTransaction();
}
void DolphinItemListView::writeSettings()
{
- IconsModeSettings::self()->writeConfig();
- CompactModeSettings::self()->writeConfig();
- DetailsModeSettings::self()->writeConfig();
+ IconsModeSettings::self()->save();
+ CompactModeSettings::self()->save();
+ DetailsModeSettings::self()->save();
}
-KItemListWidgetCreatorBase* DolphinItemListView::defaultWidgetCreator() const
+KItemListWidgetCreatorBase *DolphinItemListView::defaultWidgetCreator() const
{
return new KItemListWidgetCreator<DolphinFileItemListWidget>();
}
+bool DolphinItemListView::itemLayoutHighlightEntireRow(ItemLayout layout) const
+{
+ return layout == DetailsLayout && DetailsModeSettings::highlightEntireRow();
+}
+
bool DolphinItemListView::itemLayoutSupportsItemExpanding(ItemLayout layout) const
{
return layout == DetailsLayout && DetailsModeSettings::expandableFolders();
void DolphinItemListView::onPreviewsShownChanged(bool shown)
{
- Q_UNUSED(shown);
+ Q_UNUSED(shown)
updateGridSize();
}
-void DolphinItemListView::onVisibleRolesChanged(const QList<QByteArray>& current,
- const QList<QByteArray>& previous)
+void DolphinItemListView::onVisibleRolesChanged(const QList<QByteArray> ¤t, const QList<QByteArray> &previous)
{
KFileItemListView::onVisibleRolesChanged(current, previous);
updateGridSize();
void DolphinItemListView::updateFont()
{
- const ViewModeSettings settings(viewMode());
+ const ViewModeSettings settings(itemLayout());
if (settings.useSystemFont()) {
KItemListView::updateFont();
} else {
- QFont font(settings.fontFamily(), qRound(settings.fontSize()));
- font.setItalic(settings.italicFont());
- font.setWeight(settings.fontWeight());
- font.setPointSizeF(settings.fontSize());
+ QFont font(settings.viewFont());
KItemListStyleOption option = styleOption();
option.font = font;
void DolphinItemListView::updateGridSize()
{
- const ViewModeSettings settings(viewMode());
+ const ViewModeSettings settings(itemLayout());
// Calculate the size of the icon
const int iconSize = previewsShown() ? settings.previewSize() : settings.iconSize();
switch (itemLayout()) {
case KFileItemListView::IconsLayout: {
- const int minItemWidth = 48;
- itemWidth = minItemWidth + IconsModeSettings::textWidthIndex() * 64;
-
- if (previewsShown()) {
- // Optimize the width for previews with a 3:2 aspect ratio instead
- // of a 1:1 ratio to avoid wasting too much vertical space when
- // showing photos.
- const int minWidth = iconSize * 3 / 2;
- itemWidth = qMax(itemWidth, minWidth);
- }
-
- if (itemWidth < iconSize + padding * 2) {
- itemWidth = iconSize + padding * 2;
+ // an exponential factor based on zoom, 0 -> 1, 4 -> 1.36 8 -> ~1.85, 16 -> 3.4
+ auto zoomFactor = qExp(m_zoomLevel / 13.0);
+ // 9 is the average char width for 10pt Noto Sans, making fontFactor =1
+ // by each pixel the font gets larger the factor increases by 1/9
+ auto fontFactor = option.fontMetrics.averageCharWidth() / 9.0;
+ itemWidth = 48 + IconsModeSettings::textWidthIndex() * 64 * fontFactor * zoomFactor;
+
+ if (itemWidth < iconSize + padding * 2 * zoomFactor) {
+ itemWidth = iconSize + padding * 2 * zoomFactor;
}
itemHeight = padding * 3 + iconSize + option.fontMetrics.lineSpacing();
- horizontalMargin = 4;
- verticalMargin = 8;
+ const auto margin = style()->pixelMetric(QStyle::PM_SizeGripSize);
+ horizontalMargin = margin;
+ verticalMargin = margin;
maxTextLines = IconsModeSettings::maximumTextLines();
break;
}
endTransaction();
}
-ViewModeSettings::ViewMode DolphinItemListView::viewMode() const
-{
- ViewModeSettings::ViewMode mode;
-
- switch (itemLayout()) {
- case KFileItemListView::IconsLayout: mode = ViewModeSettings::IconsMode; break;
- case KFileItemListView::CompactLayout: mode = ViewModeSettings::CompactMode; break;
- case KFileItemListView::DetailsLayout: mode = ViewModeSettings::DetailsMode; break;
- default: mode = ViewModeSettings::IconsMode;
- Q_ASSERT(false);
- break;
- }
-
- return mode;
-}
-
-#include "dolphinitemlistview.moc"
+#include "moc_dolphinitemlistview.cpp"