X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/3991e9d24eb2aba2ea7228f925cfa0a60e55463f..c1e71289082ec7416ac19c822393ea70f63d1b75:/src/views/dolphinitemlistview.cpp diff --git a/src/views/dolphinitemlistview.cpp b/src/views/dolphinitemlistview.cpp index 4799d7679..8529f23a7 100644 --- a/src/views/dolphinitemlistview.cpp +++ b/src/views/dolphinitemlistview.cpp @@ -1,47 +1,28 @@ -/*************************************************************************** - * Copyright (C) 2011 by Peter Penz * - * * - * 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 + * + * 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 -#include -#include -#include - -#include - -#include - +#include "settings/viewmodes/viewmodesettings.h" #include "zoomlevelinfo.h" +#include +#include -DolphinItemListView::DolphinItemListView(QGraphicsWidget* parent) : - KFileItemListView(parent), - m_zoomLevel(0) +DolphinItemListView::DolphinItemListView(QGraphicsWidget *parent) + : KFileItemListView(parent) + , m_zoomLevel(0) { - updateFont(); + DolphinItemListView::updateFont(); updateGridSize(); } @@ -64,7 +45,7 @@ void DolphinItemListView::setZoomLevel(int level) m_zoomLevel = level; - ViewModeSettings settings(viewMode()); + ViewModeSettings settings(itemLayout()); if (previewsShown()) { const int previewSize = ZoomLevelInfo::iconSizeForZoomLevel(level); settings.setPreviewSize(previewSize); @@ -81,41 +62,60 @@ int DolphinItemListView::zoomLevel() const 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(); } +bool DolphinItemListView::itemLayoutHighlightEntireRow(ItemLayout layout) const +{ + return layout == DetailsLayout && DetailsModeSettings::highlightEntireRow(); +} + bool DolphinItemListView::itemLayoutSupportsItemExpanding(ItemLayout layout) const { return layout == DetailsLayout && DetailsModeSettings::expandableFolders(); @@ -133,20 +133,36 @@ void DolphinItemListView::onItemLayoutChanged(ItemLayout current, ItemLayout pre void DolphinItemListView::onPreviewsShownChanged(bool shown) { - Q_UNUSED(shown); + Q_UNUSED(shown) updateGridSize(); } -void DolphinItemListView::onVisibleRolesChanged(const QList& current, - const QList& previous) +void DolphinItemListView::onVisibleRolesChanged(const QList ¤t, const QList &previous) { KFileItemListView::onVisibleRolesChanged(current, previous); updateGridSize(); } +void DolphinItemListView::updateFont() +{ + const ViewModeSettings settings(itemLayout()); + + if (settings.useSystemFont()) { + KItemListView::updateFont(); + } else { + QFont font(settings.viewFont()); + + KItemListStyleOption option = styleOption(); + option.font = font; + option.fontMetrics = QFontMetrics(font); + + setStyleOption(option); + } +} + 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(); @@ -160,36 +176,28 @@ void DolphinItemListView::updateGridSize() // Calculate the item-width and item-height int itemWidth; int itemHeight; - QSize maxTextSize; + int maxTextLines = 0; + int maxTextWidth = 0; 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(); - if (IconsModeSettings::maximumTextLines() > 0) { - // A restriction is given for the maximum number of textlines (0 means - // having no restriction) - const int additionalInfoCount = visibleRoles().count() - 1; - const int maxAdditionalLines = additionalInfoCount + IconsModeSettings::maximumTextLines(); - maxTextSize.rheight() = option.fontMetrics.lineSpacing() * maxAdditionalLines; - } - horizontalMargin = 4; - verticalMargin = 8; + const auto margin = style()->pixelMetric(QStyle::PM_SizeGripSize); + horizontalMargin = margin; + verticalMargin = margin; + maxTextLines = IconsModeSettings::maximumTextLines(); break; } case KFileItemListView::CompactLayout: { @@ -200,8 +208,7 @@ void DolphinItemListView::updateGridSize() if (CompactModeSettings::maximumTextWidthIndex() > 0) { // A restriction is given for the maximum width of the text (0 means // having no restriction) - maxTextSize.rwidth() = option.fontMetrics.height() * 10 * - CompactModeSettings::maximumTextWidthIndex(); + maxTextWidth = option.fontMetrics.height() * 10 * CompactModeSettings::maximumTextWidthIndex(); } horizontalMargin = 8; @@ -224,44 +231,12 @@ void DolphinItemListView::updateGridSize() option.horizontalMargin = horizontalMargin; option.verticalMargin = verticalMargin; option.iconSize = iconSize; - option.maxTextSize = maxTextSize; + option.maxTextLines = maxTextLines; + option.maxTextWidth = maxTextWidth; beginTransaction(); setStyleOption(option); setItemSize(QSizeF(itemWidth, itemHeight)); endTransaction(); } -void DolphinItemListView::updateFont() -{ - KItemListStyleOption option = styleOption(); - - const ViewModeSettings settings(viewMode()); - - QFont font(settings.fontFamily(), qRound(settings.fontSize())); - font.setItalic(settings.italicFont()); - font.setWeight(settings.fontWeight()); - font.setPointSizeF(settings.fontSize()); - - option.font = font; - option.fontMetrics = QFontMetrics(font); - - setStyleOption(option); -} - -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"