#include "configurepreviewplugindialog.h"
-#include <KLibrary>
+#include <KPluginLoader>
#include <KLocalizedString>
-#include <KIO/NetAccess>
-#include <kio/thumbcreator.h>
+#include <KJobWidgets>
+#include <KIO/JobUiDelegate>
+#include <KIO/DeleteJob>
+#include <KIO/ThumbCreator>
-#include <QApplication>
-#include <QDir>
-#include <QVBoxLayout>
#include <QUrl>
+#include <QLibrary>
+#include <QVBoxLayout>
+#include <QStandardPaths>
+#include <QDialogButtonBox>
+#include <QPushButton>
ConfigurePreviewPluginDialog::ConfigurePreviewPluginDialog(const QString& pluginName,
const QString& desktopEntryName,
QWidget* parent) :
- KDialog(parent),
- m_configurationWidget(0),
- m_previewPlugin(0)
+ QDialog(parent)
{
- KLibrary library(desktopEntryName);
- if (library.load()) {
- newCreator create = (newCreator)library.resolveFunction("new_creator");
+ QSharedPointer<ThumbCreator> previewPlugin;
+ const QString pluginPath = KPluginLoader::findPlugin(desktopEntryName);
+ if (!pluginPath.isEmpty()) {
+ newCreator create = (newCreator)QLibrary::resolve(pluginPath, "new_creator");
if (create) {
- m_previewPlugin = dynamic_cast<ThumbCreatorV2*>(create());
+ previewPlugin.reset(dynamic_cast<ThumbCreator*>(create()));
}
}
- setCaption(i18nc("@title:window", "Configure Preview for %1", pluginName));
+ setWindowTitle(i18nc("@title:window", "Configure Preview for %1", pluginName));
+ setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Minimum);
setMinimumWidth(400);
- setButtons(Ok | Cancel);
- setDefaultButton(Ok);
- QWidget* mainWidget = new QWidget(this);
- mainWidget->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Minimum);
- QVBoxLayout* layout = new QVBoxLayout(mainWidget);
- if (m_previewPlugin) {
- m_configurationWidget = m_previewPlugin->createConfigurationWidget();
- layout->addWidget(m_configurationWidget);
- }
- layout->addStretch(1);
+ auto layout = new QVBoxLayout(this);
+ setLayout(layout);
- setMainWidget(mainWidget);
+ if (previewPlugin) {
+ auto configurationWidget = previewPlugin->createConfigurationWidget();
+ configurationWidget->setParent(this);
+ layout->addWidget(configurationWidget);
- connect(this, &ConfigurePreviewPluginDialog::okClicked, this, &ConfigurePreviewPluginDialog::slotOk);
-}
+ layout->addStretch();
-ConfigurePreviewPluginDialog::~ConfigurePreviewPluginDialog()
-{
-}
+ connect(this, &ConfigurePreviewPluginDialog::accepted, this, [=] {
+ // TODO: It would be great having a mechanism to tell PreviewJob that only previews
+ // for a specific MIME-type should be regenerated. As this is not available yet we
+ // delete the whole thumbnails directory.
+ previewPlugin->writeConfiguration(configurationWidget);
-void ConfigurePreviewPluginDialog::slotOk()
-{
- m_previewPlugin->writeConfiguration(m_configurationWidget);
- // TODO: It would be great having a mechanism to tell PreviewJob that only previews
- // for a specific MIME-type should be regenerated. As this is not available yet we
- // delete the whole thumbnails directory.
- QApplication::changeOverrideCursor(Qt::BusyCursor);
- KIO::NetAccess::del(QUrl::fromLocalFile(QDir::homePath() + "/.thumbnails/"), this);
- QApplication::restoreOverrideCursor();
-}
+ // http://specifications.freedesktop.org/thumbnail-spec/thumbnail-spec-latest.html#DIRECTORY
+ const QString thumbnailsPath = QStandardPaths::writableLocation(QStandardPaths::GenericCacheLocation) + QLatin1String("/thumbnails/");
+ KIO::del(QUrl::fromLocalFile(thumbnailsPath), KIO::HideProgressInfo);
+ });
+ }
+
+ auto buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, this);
+ connect(buttonBox, &QDialogButtonBox::accepted, this, &ConfigurePreviewPluginDialog::accept);
+ connect(buttonBox, &QDialogButtonBox::rejected, this, &ConfigurePreviewPluginDialog::reject);
+ layout->addWidget(buttonBox);
+
+ auto okButton = buttonBox->button(QDialogButtonBox::Ok);
+ okButton->setShortcut(Qt::CTRL | Qt::Key_Return);
+ okButton->setDefault(true);
+}
\ No newline at end of file