File indexing completed on 2024-06-16 05:08:59
0001 /* 0002 SPDX-FileCopyrightText: 2014 Vishesh Handa <me@vhanda.in> 0003 SPDX-FileCopyrightText: 2020 Alexander Lohnau <alexander.lohnau@gmx.de> 0004 SPDX-FileCopyrightText: 2020 Cyril Rossi <cyril.rossi@enioka.com> 0005 SPDX-FileCopyrightText: 2022 Alexander Lohnau <alexander.lohnau@gmx.de> 0006 0007 SPDX-License-Identifier: LGPL-2.0-only 0008 */ 0009 0010 #pragma once 0011 0012 #include <KLocalizedString> 0013 #include <KPluginModel> 0014 #include <KQuickManagedConfigModule> 0015 #include <KSharedConfig> 0016 0017 class KPluginWidget; 0018 class KCMultiDialog; 0019 0020 class SearchConfigModule : public KQuickManagedConfigModule 0021 { 0022 Q_OBJECT 0023 Q_PROPERTY(QAbstractItemModel *model READ model CONSTANT) 0024 Q_PROPERTY(QString favoriteCategory MEMBER m_favoriteCategory CONSTANT) 0025 0026 public: 0027 explicit SearchConfigModule(QObject *parent, const KPluginMetaData &data, const QVariantList &args); 0028 0029 QAbstractItemModel *model() const 0030 { 0031 return m_model; 0032 } 0033 static QStringList defaultFavoriteIds() 0034 { 0035 return {QStringLiteral("krunner_services")}; 0036 } 0037 0038 public Q_SLOTS: 0039 void load() override; 0040 void save() override; 0041 void defaults() override; 0042 void reloadPlugins(); 0043 void showKCM(const KPluginMetaData &data, const QVariantList args = {}, const KPluginMetaData &krunnerPluginData = {}) const; 0044 void showKRunnerKCM() const 0045 { 0046 showKCM(KPluginMetaData(QStringLiteral("plasma/kcms/desktop/kcm_krunnersettings")), {QStringLiteral("openedFromPluginSettings")}); 0047 }; 0048 void addToFavorites(const KPluginMetaData &data); 0049 void removeFromFavorites(const KPluginMetaData &data); 0050 void movePlugin(const KPluginMetaData &data, int destIndex); 0051 0052 private: 0053 void setDefaultIndicatorVisible(QWidget *widget, bool visible); 0054 QStringList getFavPluginIds() const 0055 { 0056 QStringList favIds; 0057 for (const KPluginMetaData &data : std::as_const(m_favoriteMetaDataList)) { 0058 favIds << data.pluginId(); 0059 } 0060 return favIds; 0061 } 0062 void checkNeedsSave() 0063 { 0064 setNeedsSave(m_model->isSaveNeeded() || m_initialFavs != getFavPluginIds()); 0065 } 0066 KPluginModel *m_model; 0067 KSharedConfigPtr m_config; 0068 QString m_pluginID; 0069 KCMultiDialog *m_krunnerSettingsDialog = nullptr; 0070 const QString m_favoriteCategory = i18n("Favorite Plugins"); 0071 const QString m_normalCategory = i18n("Available Plugins"); 0072 QList<KPluginMetaData> m_favoriteMetaDataList; 0073 QStringList m_initialFavs; 0074 };