X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/fd74aa8e2057158d2eadb835eb61564854c81020..848abc5922167a467bb73107ee6b72e9af3c8317:/src/settings/general/previewssettingspage.cpp diff --git a/src/settings/general/previewssettingspage.cpp b/src/settings/general/previewssettingspage.cpp index 0836aef33..672bb722d 100644 --- a/src/settings/general/previewssettingspage.cpp +++ b/src/settings/general/previewssettingspage.cpp @@ -20,163 +20,157 @@ #include "previewssettingspage.h" #include "dolphin_generalsettings.h" +#include "configurepreviewplugindialog.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 MaxLocalPreviewSize = 5; // 5 MB const int MaxRemotePreviewSize = 0; // 0 MB } PreviewsSettingsPage::PreviewsSettingsPage(QWidget* parent) : SettingsPageBase(parent), m_initialized(false), - m_previewPluginsList(0), + m_listView(nullptr), m_enabledPreviewPlugins(), - m_localFileSizeBox(0), - m_remoteFileSizeBox(0) + 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 for:"), this); - m_previewPluginsList = new QListWidget(this); - m_previewPluginsList->setSortingEnabled(true); - m_previewPluginsList->setSelectionMode(QAbstractItemView::NoSelection); + m_listView = new QListView(this); - QVBoxLayout* listBoxLayout = new QVBoxLayout(listBox); - listBoxLayout->addWidget(m_previewPluginsList); + ServiceItemDelegate* delegate = new ServiceItemDelegate(m_listView, m_listView); + connect(delegate, &ServiceItemDelegate::requestServiceConfiguration, + this, &PreviewsSettingsPage::configureService); - // Create group box "Don't create previews for" - QGroupBox* fileSizeBox = new QGroupBox(i18nc("@title:group", "Do not create previews for"), this); + ServiceModel* serviceModel = new ServiceModel(this); + QSortFilterProxyModel* proxyModel = new QSortFilterProxyModel(this); + proxyModel->setSourceModel(serviceModel); + proxyModel->setSortRole(Qt::DisplayRole); - QLabel* localFileSizeLabel = new QLabel(i18nc("@label Don't create previews for: XX MByte", - "Local files above:"), this); + m_listView->setModel(proxyModel); + m_listView->setItemDelegate(delegate); + m_listView->setVerticalScrollMode(QListView::ScrollPerPixel); - m_localFileSizeBox = new KIntSpinBox(this); - m_localFileSizeBox->setSingleStep(1); - m_localFileSizeBox->setSuffix(QLatin1String(" MB")); - m_localFileSizeBox->setRange(0, 9999); /* MB */ + QLabel* remoteFileSizeLabel = new QLabel(i18nc("@label", "Skip previews for remote files above:"), this); - QLabel* remoteFileSizeLabel = new QLabel(i18nc("@label Don't create previews for: XX MByte", - "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->setRange(0, 9999); /* MB */ + m_remoteFileSizeBox->setSuffix(QStringLiteral(" MB")); + m_remoteFileSizeBox->setRange(0, 9999999); /* MB */ - QGridLayout* fileSizeBoxLayout = new QGridLayout(fileSizeBox); - fileSizeBoxLayout->addWidget(localFileSizeLabel, 0, 0, Qt::AlignRight); - fileSizeBoxLayout->addWidget(m_localFileSizeBox, 0, 1); - fileSizeBoxLayout->addWidget(remoteFileSizeLabel, 1, 0, Qt::AlignRight); - fileSizeBoxLayout->addWidget(m_remoteFileSizeBox, 1, 1); + QHBoxLayout* fileSizeBoxLayout = new QHBoxLayout(); + fileSizeBoxLayout->addWidget(remoteFileSizeLabel, 0, Qt::AlignRight); + fileSizeBoxLayout->addWidget(m_remoteFileSizeBox); - topLayout->addWidget(listBox); - topLayout->addWidget(fileSizeBox); + topLayout->addWidget(showPreviewsLabel); + topLayout->addWidget(m_listView); + topLayout->addLayout(fileSizeBoxLayout); loadSettings(); - connect(m_previewPluginsList, SIGNAL(itemClicked(QListWidgetItem*)), this, SIGNAL(changed())); - connect(m_localFileSizeBox, SIGNAL(valueChanged(int)), this, SIGNAL(changed())); - connect(m_remoteFileSizeBox, SIGNAL(valueChanged(int)), this, SIGNAL(changed())); + connect(m_listView, &QListView::clicked, this, &PreviewsSettingsPage::changed); + connect(m_remoteFileSizeBox, static_cast(&QSpinBox::valueChanged), this, &PreviewsSettingsPage::changed); } - PreviewsSettingsPage::~PreviewsSettingsPage() { } void PreviewsSettingsPage::applySettings() { - const int count = m_previewPluginsList->count(); - if (count > 0) { + const QAbstractItemModel* model = m_listView->model(); + const int rowCount = model->rowCount(); + if (rowCount > 0) { m_enabledPreviewPlugins.clear(); - for (int i = 0; i < count; ++i) { - const QListWidgetItem* item = m_previewPluginsList->item(i); - if (item->checkState() == Qt::Checked) { - const QString enabledPlugin = item->data(Qt::UserRole).toString(); + for (int i = 0; i < rowCount; ++i) { + const QModelIndex index = model->index(i, 0); + const bool checked = model->data(index, Qt::CheckStateRole).toBool(); + if (checked) { + const QString enabledPlugin = model->data(index, Qt::UserRole).toString(); m_enabledPreviewPlugins.append(enabledPlugin); } } } - KConfigGroup globalConfig(KGlobal::config(), QLatin1String("PreviewSettings")); + KConfigGroup globalConfig(KSharedConfig::openConfig(), QStringLiteral("PreviewSettings")); globalConfig.writeEntry("Plugins", m_enabledPreviewPlugins); - globalConfig.writeEntry("MaximumSize", - m_localFileSizeBox->value() * 1024 * 1024, - KConfigBase::Normal | KConfigBase::Global); + const qulonglong maximumRemoteSize = static_cast(m_remoteFileSizeBox->value()) * 1024 * 1024; globalConfig.writeEntry("MaximumRemoteSize", - m_remoteFileSizeBox->value() * 1024 * 1024, + maximumRemoteSize, KConfigBase::Normal | KConfigBase::Global); globalConfig.sync(); } void PreviewsSettingsPage::restoreDefaults() { - m_localFileSizeBox->setValue(MaxLocalPreviewSize); m_remoteFileSizeBox->setValue(MaxRemotePreviewSize); } void PreviewsSettingsPage::showEvent(QShowEvent* event) { if (!event->spontaneous() && !m_initialized) { - QMetaObject::invokeMethod(this, "loadPreviewPlugins", Qt::QueuedConnection); + loadPreviewPlugins(); m_initialized = true; } SettingsPageBase::showEvent(event); } +void PreviewsSettingsPage::configureService(const QModelIndex& index) +{ + const QAbstractItemModel* model = index.model(); + const QString pluginName = model->data(index).toString(); + const QString desktopEntryName = model->data(index, ServiceModel::DesktopEntryNameRole).toString(); + + ConfigurePreviewPluginDialog* dialog = new ConfigurePreviewPluginDialog(pluginName, desktopEntryName, this); + dialog->setAttribute(Qt::WA_DeleteOnClose); + dialog->show(); +} + void PreviewsSettingsPage::loadPreviewPlugins() { - const KService::List plugins = KServiceTypeTrader::self()->query(QLatin1String("ThumbCreator")); - foreach (const KSharedPtr& service, plugins) { - QListWidgetItem* item = new QListWidgetItem(service->name(), - m_previewPluginsList); - item->setData(Qt::UserRole, service->desktopEntryName()); + 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()); - item->setCheckState(show ? Qt::Checked : Qt::Unchecked); + + 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->sort(Qt::DisplayRole); } void PreviewsSettingsPage::loadSettings() { - KConfigGroup globalConfig(KGlobal::config(), "PreviewSettings"); - m_enabledPreviewPlugins = globalConfig.readEntry("Plugins", QStringList() - << QLatin1String("directorythumbnail") - << QLatin1String("imagethumbnail") - << QLatin1String("jpegrotatedthumbnail")); - - const int maxLocalByteSize = globalConfig.readEntry("MaximumSize", MaxLocalPreviewSize * 1024 * 1024); - const int maxLocalMByteSize = maxLocalByteSize / (1024 * 1024); - m_localFileSizeBox->setValue(maxLocalMByteSize); + const KConfigGroup globalConfig(KSharedConfig::openConfig(), QStringLiteral("PreviewSettings")); + m_enabledPreviewPlugins = globalConfig.readEntry("Plugins", KIO::PreviewJob::defaultPlugins()); - const int maxRemoteByteSize = globalConfig.readEntry("MaximumRemoteSize", MaxRemotePreviewSize * 1024 * 1024); + const qulonglong defaultRemotePreview = static_cast(MaxRemotePreviewSize) * 1024 * 1024; + const qulonglong maxRemoteByteSize = globalConfig.readEntry("MaximumRemoteSize", defaultRemotePreview); const int maxRemoteMByteSize = maxRemoteByteSize / (1024 * 1024); m_remoteFileSizeBox->setValue(maxRemoteMByteSize); } -#include "previewssettingspage.moc"