X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/5593c252e8d9638c86dcc2bb9edd394ea14f8ba1..d1a70c0b629b:/src/settings/services/servicessettingspage.cpp diff --git a/src/settings/services/servicessettingspage.cpp b/src/settings/services/servicessettingspage.cpp index 4cfa2327c..ba6c48f80 100644 --- a/src/settings/services/servicessettingspage.cpp +++ b/src/settings/services/servicessettingspage.cpp @@ -21,30 +21,24 @@ #include "dolphin_generalsettings.h" #include "dolphin_versioncontrolsettings.h" +#include "settings/serviceitemdelegate.h" +#include "settings/servicemodel.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 namespace { @@ -57,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); @@ -68,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, this, [=](const QString &filter){ + m_sortModel->setFilterFixedString(filter); + }); m_listView = new QListView(this); ServiceItemDelegate* delegate = new ServiceItemDelegate(m_listView, m_listView); @@ -75,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); @@ -86,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() @@ -228,7 +231,21 @@ 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(QLatin1String("KFileItemAction/Plugin")); + }); + + foreach (const auto& jsonMetadata, jsonPlugins) { + const QString desktopEntryName = jsonMetadata.pluginId(); + if (!isInServicesList(desktopEntryName)) { + const bool checked = showGroup.readEntry(desktopEntryName, true); + addRow(jsonMetadata.iconName(), jsonMetadata.name(), desktopEntryName, checked); + } + } + m_sortModel->sort(Qt::DisplayRole); + m_searchLineEdit->setFocus(Qt::OtherFocusReason); } void ServicesSettingsPage::loadVersionControlSystems()