]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/settings/contextmenu/contextmenusettingspage.cpp
Port to Qt6
[dolphin.git] / src / settings / contextmenu / contextmenusettingspage.cpp
index acf80d19526367cb1100f93f0f648c152a9e8e15..ebdda1c1c1d0488eee504b8b6acd7d07d76816dd 100644 (file)
@@ -6,12 +6,12 @@
 
 #include "contextmenusettingspage.h"
 
+#include "dolphin_contextmenusettings.h"
 #include "dolphin_generalsettings.h"
 #include "dolphin_versioncontrolsettings.h"
-#include "dolphin_contextmenusettings.h"
+#include "global.h"
 #include "settings/serviceitemdelegate.h"
 #include "settings/servicemodel.h"
-#include "global.h"
 
 #include <KDesktopFile>
 #include <KDesktopFileActions>
 #include <KMessageBox>
 #include <KPluginMetaData>
 #include <KService>
-#include <KServiceTypeTrader>
 #include <kio_version.h>
 #include <kiocore_export.h>
 #include <kservice_export.h>
+#include <kwidgetsaddons_version.h>
 
-#include <QtGlobal>
-#include <knewstuff_version.h>
-#if KNEWSTUFF_VERSION >= QT_VERSION_CHECK(5, 91, 0)
 #include <KNSWidgets/Button>
-#else
-#include <KNS3/Button>
-#endif
+#include <QtGlobal>
 
+#include <QApplication>
 #include <QGridLayout>
 #include <QLabel>
+#include <QLineEdit>
 #include <QListWidget>
 #include <QScroller>
 #include <QShowEvent>
 #include <QSortFilterProxyModel>
-#include <QLineEdit>
-#include <QApplication>
 
 namespace
 {
-    const bool ShowDeleteDefault = false;
-    const char VersionControlServicePrefix[] = "_version_control_";
-    const char DeleteService[] = "_delete";
-    const char CopyToMoveToService[] ="_copy_to_move_to";
+const bool ShowDeleteDefault = false;
+const char VersionControlServicePrefix[] = "_version_control_";
+const char DeleteService[] = "_delete";
+const char CopyToMoveToService[] = "_copy_to_move_to";
 
-    bool laterSelected = false;
+bool laterSelected = false;
 }
 
-ContextMenuSettingsPage::ContextMenuSettingsPage(QWidget* parent,
-                                                 const KActionCollection* actions,
-                                                 const QStringList& actionIds) :
-    SettingsPageBase(parent),
-    m_initialized(false),
-    m_serviceModel(nullptr),
-    m_sortModel(nullptr),
-    m_listView(nullptr),
-    m_enabledVcsPlugins(),
-    m_actions(actions),
-    m_actionIds(actionIds)
+ContextMenuSettingsPage::ContextMenuSettingsPage(QWidget *parent, const KActionCollection *actions, const QStringList &actionIds)
+    : SettingsPageBase(parent)
+    , m_initialized(false)
+    , m_serviceModel(nullptr)
+    , m_sortModel(nullptr)
+    , m_listView(nullptr)
+    , m_enabledVcsPlugins()
+    , m_actions(actions)
+    , m_actionIds(actionIds)
 {
-    QVBoxLayouttopLayout = new QVBoxLayout(this);
+    QVBoxLayout *topLayout = new QVBoxLayout(this);
 
-    QLabellabel = new QLabel(i18nc("@label:textbox",
+    QLabel *label = new QLabel(i18nc("@label:textbox",
                                      "Select which services should "
-                                     "be shown in the context menu:"), this);
+                                     "be shown in the context menu:"),
+                               this);
     label->setWordWrap(true);
     m_searchLineEdit = new QLineEdit(this);
     m_searchLineEdit->setPlaceholderText(i18nc("@label:textbox", "Search..."));
-    connect(m_searchLineEdit, &QLineEdit::textChanged, this, [this](const QString &filter){
+    connect(m_searchLineEdit, &QLineEdit::textChanged, this, [this](const QString &filter) {
         m_sortModel->setFilterFixedString(filter);
     });
 
@@ -97,19 +91,13 @@ ContextMenuSettingsPage::ContextMenuSettingsPage(QWidget* parent,
     topLayout->addWidget(m_listView);
 
 #ifndef Q_OS_WIN
-#if KNEWSTUFF_VERSION >= QT_VERSION_CHECK(5, 91, 0)
     using NewStuffButton = KNSWidgets::Button;
-#else
-    using NewStuffButton = KNS3::Button;
-#endif // KNEWSTUFF_VERSION
-    auto *downloadButton = new NewStuffButton(i18nc("@action:button", "Download New Services..."),
-                                              QStringLiteral("servicemenu.knsrc"),
-                                              this);
+    auto *downloadButton = new NewStuffButton(i18nc("@action:button", "Download New Services..."), QStringLiteral("servicemenu.knsrc"), this);
     connect(downloadButton, &NewStuffButton::dialogFinished, this, [this](const auto &changedEntries) {
-           if (!changedEntries.isEmpty()) {
-               m_serviceModel->clear();
-               loadServices();
-           }
+        if (!changedEntries.isEmpty()) {
+            m_serviceModel->clear();
+            loadServices();
+        }
     });
     topLayout->addWidget(downloadButton);
 #endif // Q_OS_WIN
@@ -118,10 +106,11 @@ ContextMenuSettingsPage::ContextMenuSettingsPage(QWidget* parent,
     std::sort(m_enabledVcsPlugins.begin(), m_enabledVcsPlugins.end());
 }
 
-ContextMenuSettingsPage::~ContextMenuSettingsPage() {
+ContextMenuSettingsPage::~ContextMenuSettingsPage()
+{
 }
 
-bool ContextMenuSettingsPage::entryVisible(const QStringid)
+bool ContextMenuSettingsPage::entryVisible(const QString &id)
 {
     if (id == "add_to_places") {
         return ContextMenuSettings::showAddToPlaces();
@@ -143,7 +132,7 @@ bool ContextMenuSettingsPage::entryVisible(const QString& id)
     return false;
 }
 
-void ContextMenuSettingsPage::setEntryVisible(const QStringid, bool visible)
+void ContextMenuSettingsPage::setEntryVisible(const QString &id, bool visible)
 {
     if (id == "add_to_places") {
         ContextMenuSettings::setShowAddToPlaces(visible);
@@ -208,14 +197,24 @@ void ContextMenuSettingsPage::applySettings()
         VersionControlSettings::self()->save();
 
         if (!laterSelected) {
-            KMessageBox::ButtonCode promptRestart = KMessageBox::questionYesNo(window(),
-                                    i18nc("@info", "Dolphin must be restarted to apply the "
-                                                "updated version control system settings."),
-                                    i18nc("@info", "Restart now?"),
-                                    KGuiItem(QApplication::translate("KStandardGuiItem", "&Restart"), QStringLiteral("dialog-restart")),
-                                    KGuiItem(QApplication::translate("KStandardGuiItem", "&Later"), QStringLiteral("dialog-later"))
-                        );
+#if KWIDGETSADDONS_VERSION >= QT_VERSION_CHECK(5, 100, 0)
+            KMessageBox::ButtonCode promptRestart =
+                KMessageBox::questionTwoActions(window(),
+#else
+            KMessageBox::ButtonCode promptRestart =
+                KMessageBox::questionYesNo(window(),
+#endif
+                                                i18nc("@info",
+                                                      "Dolphin must be restarted to apply the "
+                                                      "updated version control system settings."),
+                                                i18nc("@info", "Restart now?"),
+                                                KGuiItem(QApplication::translate("KStandardGuiItem", "&Restart"), QStringLiteral("dialog-restart")),
+                                                KGuiItem(QApplication::translate("KStandardGuiItem", "&Later"), QStringLiteral("dialog-later")));
+#if KWIDGETSADDONS_VERSION >= QT_VERSION_CHECK(5, 100, 0)
+            if (promptRestart == KMessageBox::ButtonCode::PrimaryAction) {
+#else
             if (promptRestart == KMessageBox::ButtonCode::Yes) {
+#endif
                 Dolphin::openNewWindow();
                 qApp->quit();
             } else {
@@ -227,19 +226,18 @@ void ContextMenuSettingsPage::applySettings()
 
 void ContextMenuSettingsPage::restoreDefaults()
 {
-    QAbstractItemModelmodel = m_listView->model();
+    QAbstractItemModel *model = m_listView->model();
     for (int i = 0; i < model->rowCount(); ++i) {
         const QModelIndex index = model->index(i, 0);
         const QString service = model->data(index, ServiceModel::DesktopEntryNameRole).toString();
 
-        const bool checked = !service.startsWith(VersionControlServicePrefix)
-                             && service != QLatin1String(DeleteService)
-                             && service != QLatin1String(CopyToMoveToService);
+        const bool checked =
+            !service.startsWith(VersionControlServicePrefix) && service != QLatin1String(DeleteService) && service != QLatin1String(CopyToMoveToService);
         model->setData(index, checked, Qt::CheckStateRole);
     }
 }
 
-void ContextMenuSettingsPage::showEvent(QShowEventevent)
+void ContextMenuSettingsPage::showEvent(QShowEvent *event)
 {
     if (!event->spontaneous() && !m_initialized) {
         loadServices();
@@ -249,10 +247,7 @@ void ContextMenuSettingsPage::showEvent(QShowEvent* event)
         // Add "Show 'Delete' command" as service
         KSharedConfig::Ptr globalConfig = KSharedConfig::openConfig(QStringLiteral("kdeglobals"), KConfig::IncludeGlobals);
         KConfigGroup configGroup(globalConfig, "KDE");
-        addRow(QStringLiteral("edit-delete"),
-               i18nc("@option:check", "Delete"),
-               DeleteService,
-               configGroup.readEntry("ShowDeleteCommand", ShowDeleteDefault));
+        addRow(QStringLiteral("edit-delete"), i18nc("@option:check", "Delete"), DeleteService, configGroup.readEntry("ShowDeleteCommand", ShowDeleteDefault));
 
         // Add "Show 'Copy To' and 'Move To' commands" as service
         addRow(QStringLiteral("edit-copy"),
@@ -260,10 +255,10 @@ void ContextMenuSettingsPage::showEvent(QShowEvent* event)
                CopyToMoveToService,
                ContextMenuSettings::showCopyMoveMenu());
 
-        if (m_actions){
+        if (m_actions) {
             // Add other built-in actions
-            for (const QStringid : m_actionIds) {
-                const QActionaction = m_actions->action(id);
+            for (const QString &id : m_actionIds) {
+                const QAction *action = m_actions->action(id);
                 if (action) {
                     addRow(action->icon().name(), action->text(), id, entryVisible(id));
                 }
@@ -286,13 +281,6 @@ void ContextMenuSettingsPage::loadServices()
     const auto locations = QStandardPaths::locateAll(QStandardPaths::GenericDataLocation, QStringLiteral("kio/servicemenus"), QStandardPaths::LocateDirectory);
     QStringList files = KFileUtils::findAllUniqueFiles(locations);
 
-#if KIOWIDGETS_BUILD_DEPRECATED_SINCE(5, 90)
-    const KService::List services = KServiceTypeTrader::self()->query(QStringLiteral("KonqPopupMenu/Plugin"));
-    for (const KService::Ptr &service : services) {
-        files << QStandardPaths::locate(QStandardPaths::GenericDataLocation, "kservices5/" % service->entryPath());
-    }
-#endif
-
     for (const auto &file : qAsConst(files)) {
         const QList<KServiceAction> serviceActions = KDesktopFileActions::userDefinedServices(KService(file), true);
 
@@ -304,29 +292,15 @@ void ContextMenuSettingsPage::loadServices()
             const bool addService = !action.noDisplay() && !action.isSeparator() && !isInServicesList(serviceName);
 
             if (addService) {
-                const QString itemName = subMenuName.isEmpty()
-                                         ? action.text()
-                                         : i18nc("@item:inmenu", "%1: %2", subMenuName, action.text());
+                const QString itemName = subMenuName.isEmpty() ? action.text() : i18nc("@item:inmenu", "%1: %2", subMenuName, action.text());
                 const bool checked = showGroup.readEntry(serviceName, true);
                 addRow(action.icon(), itemName, serviceName, checked);
             }
         }
     }
 
-    // Load service plugins, this is deprecated in KIO 5.82
-#if KIOCORE_BUILD_DEPRECATED_SINCE(5, 82)
-    const KService::List pluginServices = KServiceTypeTrader::self()->query(QStringLiteral("KFileItemAction/Plugin"));
-    for (const KService::Ptr &service : pluginServices) {
-        const QString desktopEntryName = service->desktopEntryName();
-        if (!isInServicesList(desktopEntryName)) {
-            const bool checked = showGroup.readEntry(desktopEntryName, true);
-            addRow(service->icon(), service->name(), desktopEntryName, checked);
-        }
-    }
-#endif
-
     // Load JSON-based plugins that implement the KFileItemActionPlugin interface
-    const auto jsonPlugins = KPluginMetaData::findPlugins(QStringLiteral("kf5/kfileitemaction"));
+    const auto jsonPlugins = KPluginMetaData::findPlugins(QStringLiteral("kf" QT_STRINGIFY(QT_MAJOR_VERSION)) + QStringLiteral("/kfileitemaction"));
 
     for (const auto &jsonMetadata : jsonPlugins) {
         const QString desktopEntryName = jsonMetadata.pluginId();
@@ -350,10 +324,7 @@ void ContextMenuSettingsPage::loadVersionControlSystems()
     const QVector<KPluginMetaData> plugins = KPluginMetaData::findPlugins(QStringLiteral("dolphin/vcs"));
     for (const auto &plugin : plugins) {
         const QString pluginName = plugin.name();
-        addRow(QStringLiteral("code-class"),
-               pluginName,
-               VersionControlServicePrefix + pluginName,
-               enabledPlugins.contains(pluginName));
+        addRow(QStringLiteral("code-class"), pluginName, VersionControlServicePrefix + pluginName, enabledPlugins.contains(pluginName));
         loadedPlugins += pluginName;
     }
 
@@ -371,10 +342,7 @@ bool ContextMenuSettingsPage::isInServicesList(const QString &service) const
     return false;
 }
 
-void ContextMenuSettingsPage::addRow(const QString &icon,
-                                     const QString &text,
-                                     const QString &value,
-                                     bool checked)
+void ContextMenuSettingsPage::addRow(const QString &icon, const QString &text, const QString &value, bool checked)
 {
     m_serviceModel->insertRow(0);