]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/settings/services/servicessettingspage.cpp
Dolphin Services: Add search box
[dolphin.git] / src / settings / services / servicessettingspage.cpp
index 2b9b8f46fb3d869c02d40c0f69af18fb468ac331..4230ff445b1c9c7958e4721ad3be80edb5d3bbaf 100644 (file)
 
 #include "dolphin_generalsettings.h"
 #include "dolphin_versioncontrolsettings.h"
+#include "settings/serviceitemdelegate.h"
+#include "settings/servicemodel.h"
 
-#include <KConfig>
-#include <KConfigGroup>
 #include <KDesktopFile>
-#include <kdesktopfileactions.h>
-#include <QIcon>
 #include <KLocalizedString>
 #include <KMessageBox>
 #include <KNS3/Button>
 #include <KPluginMetaData>
 #include <KService>
 #include <KServiceTypeTrader>
-#include <QStandardPaths>
-
-#include <settings/serviceitemdelegate.h>
-#include <settings/servicemodel.h>
+#include <kdesktopfileactions.h>
 
-#include <QCheckBox>
 #include <QGridLayout>
-#include <QGroupBox>
 #include <QLabel>
 #include <QListWidget>
-#include <QPushButton>
-#include <QSortFilterProxyModel>
 #include <QShowEvent>
+#include <QSortFilterProxyModel>
+#include <QLineEdit>
 
 namespace
 {
@@ -58,9 +51,9 @@ namespace
 ServicesSettingsPage::ServicesSettingsPage(QWidget* parent) :
     SettingsPageBase(parent),
     m_initialized(false),
-    m_serviceModel(0),
-    m_sortModel(0),
-    m_listView(0),
+    m_serviceModel(nullptr),
+    m_sortModel(nullptr),
+    m_listView(nullptr),
     m_enabledVcsPlugins()
 {
     QVBoxLayout* topLayout = new QVBoxLayout(this);
@@ -69,6 +62,11 @@ ServicesSettingsPage::ServicesSettingsPage(QWidget* parent) :
                                      "Select which services should "
                                      "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, [=](const QString &filter){
+        m_sortModel->setFilterFixedString(filter);
+    });
 
     m_listView = new QListView(this);
     ServiceItemDelegate* delegate = new ServiceItemDelegate(m_listView, m_listView);
@@ -76,6 +74,9 @@ ServicesSettingsPage::ServicesSettingsPage(QWidget* parent) :
     m_sortModel = new QSortFilterProxyModel(this);
     m_sortModel->setSourceModel(m_serviceModel);
     m_sortModel->setSortRole(Qt::DisplayRole);
+    m_sortModel->setSortLocaleAware(true);
+    m_sortModel->setFilterRole(Qt::DisplayRole);
+    m_sortModel->setFilterCaseSensitivity(Qt::CaseInsensitive);
     m_listView->setModel(m_sortModel);
     m_listView->setItemDelegate(delegate);
     m_listView->setVerticalScrollMode(QListView::ScrollPerPixel);
@@ -87,11 +88,12 @@ ServicesSettingsPage::ServicesSettingsPage(QWidget* parent) :
     connect(downloadButton, &KNS3::Button::dialogFinished, this, &ServicesSettingsPage::loadServices);
 
     topLayout->addWidget(label);
+    topLayout->addWidget(m_searchLineEdit);
     topLayout->addWidget(m_listView);
     topLayout->addWidget(downloadButton);
 
     m_enabledVcsPlugins = VersionControlSettings::enabledPlugins();
-    qSort(m_enabledVcsPlugins);
+    std::sort(m_enabledVcsPlugins.begin(), m_enabledVcsPlugins.end());
 }
 
 ServicesSettingsPage::~ServicesSettingsPage()
@@ -231,7 +233,7 @@ void ServicesSettingsPage::loadServices()
 
     // Load JSON-based plugins that implement the KFileItemActionPlugin interface
     const auto jsonPlugins = KPluginLoader::findPlugins(QStringLiteral("kf5/kfileitemaction"), [](const KPluginMetaData& metaData) {
-        return metaData.serviceTypes().contains(QStringLiteral("KFileItemAction/Plugin"));
+        return metaData.serviceTypes().contains(QLatin1String("KFileItemAction/Plugin"));
     });
 
     foreach (const auto& jsonMetadata, jsonPlugins) {
@@ -243,6 +245,7 @@ void ServicesSettingsPage::loadServices()
     }
 
     m_sortModel->sort(Qt::DisplayRole);
+    m_searchLineEdit->setFocus(Qt::OtherFocusReason);
 }
 
 void ServicesSettingsPage::loadVersionControlSystems()