]> cloud.milkyroute.net Git - dolphin.git/blob - src/settings/general/configurepreviewplugindialog.cpp
Port away from deprecated ThumbCreator API
[dolphin.git] / src / settings / general / configurepreviewplugindialog.cpp
1 /*
2 * SPDX-FileCopyrightText: 2011 Peter Penz <peter.penz19@gmail.com>
3 *
4 * SPDX-License-Identifier: GPL-2.0-or-later
5 */
6
7 #include "configurepreviewplugindialog.h"
8
9 #if KIOWIDGETS_BUILD_DEPRECATED_SINCE(5, 87)
10
11 #include <KIO/DeleteJob>
12 #include <KIO/JobUiDelegate>
13 #include <KIO/ThumbCreator>
14 #include <KJobWidgets>
15 #include <KLocalizedString>
16 #include <QPluginLoader>
17
18 #include <QDialogButtonBox>
19 #include <QPushButton>
20 #include <QStandardPaths>
21 #include <QUrl>
22 #include <QVBoxLayout>
23
24 ConfigurePreviewPluginDialog::ConfigurePreviewPluginDialog(const QString& pluginName,
25 const QString& desktopEntryName,
26 QWidget* parent) :
27 QDialog(parent)
28 {
29 QSharedPointer<ThumbCreator> previewPlugin;
30 const QString pluginPath = QPluginLoader(desktopEntryName).fileName();
31 if (!pluginPath.isEmpty()) {
32 newCreator create = (newCreator)QLibrary::resolve(pluginPath, "new_creator");
33 if (create) {
34 previewPlugin.reset(dynamic_cast<ThumbCreator*>(create()));
35 }
36 }
37
38 setWindowTitle(i18nc("@title:window", "Configure Preview for %1", pluginName));
39 setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Minimum);
40 setMinimumWidth(400);
41
42 auto layout = new QVBoxLayout(this);
43
44 if (previewPlugin) {
45 auto configurationWidget = previewPlugin->createConfigurationWidget();
46 configurationWidget->setParent(this);
47 layout->addWidget(configurationWidget);
48
49 layout->addStretch();
50
51 connect(this, &ConfigurePreviewPluginDialog::accepted, this, [=] {
52 // TODO: It would be great having a mechanism to tell PreviewJob that only previews
53 // for a specific MIME-type should be regenerated. As this is not available yet we
54 // delete the whole thumbnails directory.
55 previewPlugin->writeConfiguration(configurationWidget);
56
57 // https://specifications.freedesktop.org/thumbnail-spec/thumbnail-spec-latest.html#DIRECTORY
58 const QString thumbnailsPath = QStandardPaths::writableLocation(QStandardPaths::GenericCacheLocation) + QLatin1String("/thumbnails/");
59 KIO::del(QUrl::fromLocalFile(thumbnailsPath), KIO::HideProgressInfo);
60 });
61 }
62
63 auto buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, this);
64 connect(buttonBox, &QDialogButtonBox::accepted, this, &ConfigurePreviewPluginDialog::accept);
65 connect(buttonBox, &QDialogButtonBox::rejected, this, &ConfigurePreviewPluginDialog::reject);
66 layout->addWidget(buttonBox);
67
68 auto okButton = buttonBox->button(QDialogButtonBox::Ok);
69 okButton->setShortcut(Qt::CTRL | Qt::Key_Return);
70 okButton->setDefault(true);
71 }
72
73 #endif // KIO_VERSION