File indexing completed on 2024-06-09 05:25:46

0001 /*
0002     SPDX-FileCopyrightText: 2020 Ismael Asensio <isma.af@gmail.com>
0003 
0004     SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
0005 */
0006 
0007 #pragma once
0008 
0009 #include "rulebookmodel.h"
0010 #include "rulesmodel.h"
0011 
0012 #include <KQuickConfigModule>
0013 
0014 namespace KWin
0015 {
0016 class RuleSettings;
0017 
0018 class KCMKWinRules : public KQuickConfigModule
0019 {
0020     Q_OBJECT
0021 
0022     Q_PROPERTY(RuleBookModel *ruleBookModel MEMBER m_ruleBookModel CONSTANT)
0023     Q_PROPERTY(RulesModel *rulesModel MEMBER m_rulesModel CONSTANT)
0024     Q_PROPERTY(int editIndex READ editIndex NOTIFY editIndexChanged)
0025 
0026 public:
0027     explicit KCMKWinRules(QObject *parent, const KPluginMetaData &metaData, const QVariantList &arguments);
0028 
0029     Q_INVOKABLE void setRuleDescription(int index, const QString &description);
0030     Q_INVOKABLE void editRule(int index);
0031 
0032     Q_INVOKABLE void createRule();
0033     Q_INVOKABLE void removeRule(int index);
0034     Q_INVOKABLE void moveRule(int sourceIndex, int destIndex);
0035     Q_INVOKABLE void duplicateRule(int index);
0036 
0037     Q_INVOKABLE void exportToFile(const QUrl &path, const QList<int> &indexes);
0038     Q_INVOKABLE void importFromFile(const QUrl &path);
0039 
0040 public Q_SLOTS:
0041     void load() override;
0042     void save() override;
0043 
0044 Q_SIGNALS:
0045     void editIndexChanged();
0046 
0047 private Q_SLOTS:
0048     void updateNeedsSave();
0049 
0050 private:
0051     int editIndex() const;
0052     void parseArguments(const QStringList &args);
0053     void createRuleFromProperties();
0054 
0055     QModelIndex findRuleWithProperties(const QVariantMap &info, bool wholeApp) const;
0056     void fillSettingsFromProperties(RuleSettings *settings, const QVariantMap &info, bool wholeApp) const;
0057 
0058 private:
0059     RuleBookModel *m_ruleBookModel;
0060     RulesModel *m_rulesModel;
0061 
0062     QPersistentModelIndex m_editIndex;
0063 
0064     bool m_alreadyLoaded = false;
0065     QVariantMap m_winProperties;
0066     bool m_wholeApp = false;
0067 };
0068 
0069 } // namespace