X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/1a6b3c0a2baba955259d6083c0a3f25dfb44a682..ce7852fb2352155e4373f9a41f0a01549985bd45:/src/settings/general/previewssettingspage.cpp diff --git a/src/settings/general/previewssettingspage.cpp b/src/settings/general/previewssettingspage.cpp index e579a572d..f12338aef 100644 --- a/src/settings/general/previewssettingspage.cpp +++ b/src/settings/general/previewssettingspage.cpp @@ -1,52 +1,33 @@ -/*************************************************************************** - * Copyright (C) 2006 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: 2006 Peter Penz + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ #include "previewssettingspage.h" #include "dolphin_generalsettings.h" #include "configurepreviewplugindialog.h" +#include "settings/serviceitemdelegate.h" +#include "settings/servicemodel.h" -#include +#include #include #include -#include -#include -#include -#include - -#include -#include #include #include #include #include -#include +#include #include -#include -#include #include -#include +#include // default settings namespace { - const int MaxRemotePreviewSize = 0; // 0 MB + const int DefaultMaxLocalPreviewSize = 0; // 0 MB + const int DefaultMaxRemotePreviewSize = 0; // 0 MB } PreviewsSettingsPage::PreviewsSettingsPage(QWidget* parent) : @@ -54,13 +35,15 @@ PreviewsSettingsPage::PreviewsSettingsPage(QWidget* parent) : m_initialized(false), m_listView(nullptr), m_enabledPreviewPlugins(), + m_localFileSizeBox(nullptr), m_remoteFileSizeBox(nullptr) { QVBoxLayout* topLayout = new QVBoxLayout(this); - QLabel* showPreviewsLabel = new QLabel(i18nc("@title:group", "Show previews for:"), this); + QLabel* showPreviewsLabel = new QLabel(i18nc("@title:group", "Show previews in the view for:"), this); m_listView = new QListView(this); + QScroller::grabGesture(m_listView->viewport(), QScroller::TouchGesture); ServiceItemDelegate* delegate = new ServiceItemDelegate(m_listView, m_listView); connect(delegate, &ServiceItemDelegate::requestServiceConfiguration, @@ -70,30 +53,49 @@ PreviewsSettingsPage::PreviewsSettingsPage(QWidget* parent) : QSortFilterProxyModel* proxyModel = new QSortFilterProxyModel(this); proxyModel->setSourceModel(serviceModel); proxyModel->setSortRole(Qt::DisplayRole); + proxyModel->setSortCaseSensitivity(Qt::CaseInsensitive); m_listView->setModel(proxyModel); m_listView->setItemDelegate(delegate); m_listView->setVerticalScrollMode(QListView::ScrollPerPixel); + m_listView->setUniformItemSizes(true); + + QLabel* localFileSizeLabel = new QLabel(i18n("Skip previews for local files above:"), this); + + m_localFileSizeBox = new QSpinBox(this); + m_localFileSizeBox->setSingleStep(1); + m_localFileSizeBox->setSuffix(i18nc("Mebibytes; used as a suffix in a spinbox showing e.g. '3 MiB'", " MiB")); + m_localFileSizeBox->setRange(0, 9999999); /* MB */ + m_localFileSizeBox->setSpecialValueText(i18n("No limit")); + + QHBoxLayout* localFileSizeBoxLayout = new QHBoxLayout(); + localFileSizeBoxLayout->addWidget(localFileSizeLabel); + localFileSizeBoxLayout->addStretch(0); + localFileSizeBoxLayout->addWidget(m_localFileSizeBox); QLabel* remoteFileSizeLabel = new QLabel(i18nc("@label", "Skip previews for remote files above:"), this); m_remoteFileSizeBox = new QSpinBox(this); m_remoteFileSizeBox->setSingleStep(1); - m_remoteFileSizeBox->setSuffix(QStringLiteral(" MB")); + m_remoteFileSizeBox->setSuffix(i18nc("Mebibytes; used as a suffix in a spinbox showing e.g. '3 MiB'", " MiB")); m_remoteFileSizeBox->setRange(0, 9999999); /* MB */ + m_remoteFileSizeBox->setSpecialValueText(i18n("No previews")); - QHBoxLayout* fileSizeBoxLayout = new QHBoxLayout(); - fileSizeBoxLayout->addWidget(remoteFileSizeLabel, 0, Qt::AlignRight); - fileSizeBoxLayout->addWidget(m_remoteFileSizeBox); + QHBoxLayout* remoteFileSizeBoxLayout = new QHBoxLayout(); + remoteFileSizeBoxLayout->addWidget(remoteFileSizeLabel); + remoteFileSizeBoxLayout->addStretch(0); + remoteFileSizeBoxLayout->addWidget(m_remoteFileSizeBox); topLayout->addWidget(showPreviewsLabel); topLayout->addWidget(m_listView); - topLayout->addLayout(fileSizeBoxLayout); + topLayout->addLayout(localFileSizeBoxLayout); + topLayout->addLayout(remoteFileSizeBoxLayout); loadSettings(); connect(m_listView, &QListView::clicked, this, &PreviewsSettingsPage::changed); - connect(m_remoteFileSizeBox, static_cast(&QSpinBox::valueChanged), this, &PreviewsSettingsPage::changed); + connect(m_localFileSizeBox, &QSpinBox::valueChanged, this, &PreviewsSettingsPage::changed); + connect(m_remoteFileSizeBox, &QSpinBox::valueChanged, this, &PreviewsSettingsPage::changed); } PreviewsSettingsPage::~PreviewsSettingsPage() @@ -119,16 +121,27 @@ void PreviewsSettingsPage::applySettings() KConfigGroup globalConfig(KSharedConfig::openConfig(), QStringLiteral("PreviewSettings")); globalConfig.writeEntry("Plugins", m_enabledPreviewPlugins); + if (!m_localFileSizeBox->value()) { + globalConfig.deleteEntry("MaximumSize", KConfigBase::Normal | KConfigBase::Global); + } else { + const qulonglong maximumLocalSize = static_cast(m_localFileSizeBox->value()) * 1024 * 1024; + globalConfig.writeEntry("MaximumSize", + maximumLocalSize, + KConfigBase::Normal | KConfigBase::Global); + } + const qulonglong maximumRemoteSize = static_cast(m_remoteFileSizeBox->value()) * 1024 * 1024; globalConfig.writeEntry("MaximumRemoteSize", maximumRemoteSize, KConfigBase::Normal | KConfigBase::Global); + globalConfig.sync(); } void PreviewsSettingsPage::restoreDefaults() { - m_remoteFileSizeBox->setValue(MaxRemotePreviewSize); + m_localFileSizeBox->setValue(DefaultMaxLocalPreviewSize); + m_remoteFileSizeBox->setValue(DefaultMaxRemotePreviewSize); } void PreviewsSettingsPage::showEvent(QShowEvent* event) @@ -155,17 +168,17 @@ void PreviewsSettingsPage::loadPreviewPlugins() { QAbstractItemModel* model = m_listView->model(); - const KService::List plugins = KServiceTypeTrader::self()->query(QStringLiteral("ThumbCreator")); - foreach (const KService::Ptr& service, plugins) { - const bool configurable = service->property(QStringLiteral("Configurable"), QVariant::Bool).toBool(); - const bool show = m_enabledPreviewPlugins.contains(service->desktopEntryName()); + const QVector plugins = KIO::PreviewJob::availableThumbnailerPlugins(); + for (const KPluginMetaData &plugin : plugins) { + const bool configurable = plugin.value(QStringLiteral("Configurable"), false); + const bool show = m_enabledPreviewPlugins.contains(plugin.pluginId()); model->insertRow(0); const QModelIndex index = model->index(0, 0); model->setData(index, show, Qt::CheckStateRole); model->setData(index, configurable, ServiceModel::ConfigurableRole); - model->setData(index, service->name(), Qt::DisplayRole); - model->setData(index, service->desktopEntryName(), ServiceModel::DesktopEntryNameRole); + model->setData(index, plugin.name(), Qt::DisplayRole); + model->setData(index, plugin.pluginId(), ServiceModel::DesktopEntryNameRole); } model->sort(Qt::DisplayRole); @@ -176,9 +189,13 @@ void PreviewsSettingsPage::loadSettings() const KConfigGroup globalConfig(KSharedConfig::openConfig(), QStringLiteral("PreviewSettings")); m_enabledPreviewPlugins = globalConfig.readEntry("Plugins", KIO::PreviewJob::defaultPlugins()); - const qulonglong defaultRemotePreview = static_cast(MaxRemotePreviewSize) * 1024 * 1024; + const qulonglong defaultLocalPreview = static_cast(DefaultMaxLocalPreviewSize) * 1024 * 1024; + const qulonglong maxLocalByteSize = globalConfig.readEntry("MaximumSize", defaultLocalPreview); + const int maxLocalMByteSize = maxLocalByteSize / (1024 * 1024); + m_localFileSizeBox->setValue(maxLocalMByteSize); + + const qulonglong defaultRemotePreview = static_cast(DefaultMaxRemotePreviewSize) * 1024 * 1024; const qulonglong maxRemoteByteSize = globalConfig.readEntry("MaximumRemoteSize", defaultRemotePreview); const int maxRemoteMByteSize = maxRemoteByteSize / (1024 * 1024); m_remoteFileSizeBox->setValue(maxRemoteMByteSize); } -