X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/05082aed16cdf7e511d9c97d0cf07e270af493e5..e19aa49a082076d5ae69931893c1d47b98f85e30:/src/settings/general/previewssettingspage.cpp diff --git a/src/settings/general/previewssettingspage.cpp b/src/settings/general/previewssettingspage.cpp index 4df3fc378..b30d1940a 100644 --- a/src/settings/general/previewssettingspage.cpp +++ b/src/settings/general/previewssettingspage.cpp @@ -1,108 +1,102 @@ -/*************************************************************************** - * 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 #include -#include +#include // default settings namespace { - const bool UseThumbnails = true; - const int MaxRemotePreviewSize = 0; // 0 MB + const int DefaultMaxLocalPreviewSize = 0; // 0 MB + const int DefaultMaxRemotePreviewSize = 0; // 0 MB } PreviewsSettingsPage::PreviewsSettingsPage(QWidget* parent) : SettingsPageBase(parent), m_initialized(false), - m_listView(0), + m_listView(nullptr), m_enabledPreviewPlugins(), - m_remoteFileSizeBox(0) + m_localFileSizeBox(nullptr), + m_remoteFileSizeBox(nullptr) { QVBoxLayout* topLayout = new QVBoxLayout(this); - topLayout->setSpacing(KDialog::spacingHint()); - topLayout->setMargin(KDialog::marginHint()); - // Create group box "Show previews for:" - QGroupBox* listBox = new QGroupBox(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); +#if KIOWIDGETS_BUILD_DEPRECATED_SINCE(5, 87) ServiceItemDelegate* delegate = new ServiceItemDelegate(m_listView, m_listView); - connect(delegate, SIGNAL(requestServiceConfiguration(QModelIndex)), - this, SLOT(configureService(QModelIndex))); + connect(delegate, &ServiceItemDelegate::requestServiceConfiguration, + this, &PreviewsSettingsPage::configureService); + m_listView->setItemDelegate(delegate); +#endif ServiceModel* serviceModel = new ServiceModel(this); 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); - QVBoxLayout* listBoxLayout = new QVBoxLayout(listBox); - listBoxLayout->setSpacing(KDialog::spacingHint()); - listBoxLayout->setMargin(KDialog::marginHint()); - listBoxLayout->addWidget(m_listView); + 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 KIntSpinBox(this); + m_remoteFileSizeBox = new QSpinBox(this); m_remoteFileSizeBox->setSingleStep(1); - m_remoteFileSizeBox->setSuffix(QLatin1String(" 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(this); - 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(listBox); - topLayout->addLayout(fileSizeBoxLayout); + topLayout->addWidget(showPreviewsLabel); + topLayout->addWidget(m_listView); + topLayout->addLayout(localFileSizeBoxLayout); + topLayout->addLayout(remoteFileSizeBoxLayout); loadSettings(); - connect(m_listView, SIGNAL(clicked(QModelIndex)), this, SIGNAL(changed())); - connect(m_remoteFileSizeBox, SIGNAL(valueChanged(int)), this, SIGNAL(changed())); + connect(m_listView, &QListView::clicked, this, &PreviewsSettingsPage::changed); + connect(m_localFileSizeBox, &QSpinBox::valueChanged, this, &PreviewsSettingsPage::changed); + connect(m_remoteFileSizeBox, &QSpinBox::valueChanged, this, &PreviewsSettingsPage::changed); } PreviewsSettingsPage::~PreviewsSettingsPage() @@ -125,19 +119,30 @@ void PreviewsSettingsPage::applySettings() } } - KConfigGroup globalConfig(KGlobal::config(), QLatin1String("PreviewSettings")); + 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) @@ -149,6 +154,7 @@ void PreviewsSettingsPage::showEvent(QShowEvent* event) SettingsPageBase::showEvent(event); } +#if KIOWIDGETS_BUILD_DEPRECATED_SINCE(5, 87) void PreviewsSettingsPage::configureService(const QModelIndex& index) { const QAbstractItemModel* model = index.model(); @@ -159,22 +165,26 @@ void PreviewsSettingsPage::configureService(const QModelIndex& index) dialog->setAttribute(Qt::WA_DeleteOnClose); dialog->show(); } +#endif void PreviewsSettingsPage::loadPreviewPlugins() { QAbstractItemModel* model = m_listView->model(); - const KService::List plugins = KServiceTypeTrader::self()->query(QLatin1String("ThumbCreator")); - foreach (const KSharedPtr& service, plugins) { - const bool configurable = service->property("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 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, plugin.name(), Qt::DisplayRole); + model->setData(index, plugin.pluginId(), ServiceModel::DesktopEntryNameRole); + +#if KIOWIDGETS_BUILD_DEPRECATED_SINCE(5, 87) + const bool configurable = plugin.value(QStringLiteral("Configurable"), false); model->setData(index, configurable, ServiceModel::ConfigurableRole); - model->setData(index, service->name(), Qt::DisplayRole); - model->setData(index, service->desktopEntryName(), ServiceModel::DesktopEntryNameRole); +#endif } model->sort(Qt::DisplayRole); @@ -182,29 +192,16 @@ void PreviewsSettingsPage::loadPreviewPlugins() void PreviewsSettingsPage::loadSettings() { - KConfigGroup globalConfig(KGlobal::config(), "PreviewSettings"); - m_enabledPreviewPlugins = globalConfig.readEntry("Plugins", QStringList() - << QLatin1String("directorythumbnail") - << QLatin1String("imagethumbnail") - << QLatin1String("jpegthumbnail")); - - // If the user is upgrading from KDE <= 4.6, we must check if he had the 'jpegrotatedthumbnail' plugin enabled. - // This plugin does not exist any more in KDE >= 4.7, so we have to replace it with the 'jpegthumbnail' plugin. - // - // Note that the upgrade to the correct plugin is done already in KFilePreviewGenerator. However, if Konqueror is - // opened in web browsing mode and the Settings dialog is opened, we might end up here before KFilePreviewGenerator's - // constructor is ever called -> the plugin replacement should be done here as well. - if(m_enabledPreviewPlugins.contains(QLatin1String("jpegrotatedthumbnail"))) { - m_enabledPreviewPlugins.removeAll(QLatin1String("jpegrotatedthumbnail")); - m_enabledPreviewPlugins.append(QLatin1String("jpegthumbnail")); - globalConfig.writeEntry("Plugins", m_enabledPreviewPlugins); - globalConfig.sync(); - } + const KConfigGroup globalConfig(KSharedConfig::openConfig(), QStringLiteral("PreviewSettings")); + m_enabledPreviewPlugins = globalConfig.readEntry("Plugins", KIO::PreviewJob::defaultPlugins()); + + 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(MaxRemotePreviewSize) * 1024 * 1024; + 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); } - -#include "previewssettingspage.moc"