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 };