File indexing completed on 2024-05-12 17:08:26

0001 /*
0002  *   SPDX-FileCopyrightText: 2016 Marco Martin <mart@kde.org>
0003  *
0004  *   SPDX-License-Identifier: LGPL-2.0-or-later
0005  */
0006 
0007 #ifndef LNFLOGIC_H
0008 #define LNFLOGIC_H
0009 
0010 #include <QAbstractListModel>
0011 #include <kpackage/package.h>
0012 
0013 class LnfListModel;
0014 
0015 class LnfLogic : public QObject
0016 {
0017     Q_OBJECT
0018 
0019     Q_PROPERTY(LnfListModel *lnfList READ lnfList CONSTANT)
0020     Q_PROPERTY(QString theme READ theme WRITE setTheme NOTIFY themeChanged)
0021     Q_PROPERTY(bool isWritable READ isWritable NOTIFY themeChanged)
0022     Q_PROPERTY(QString themeFolder READ themeFolder NOTIFY themeChanged)
0023 
0024     Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged)
0025     Q_PROPERTY(QString comment READ comment WRITE setComment NOTIFY commentChanged)
0026     Q_PROPERTY(QString author READ author WRITE setAuthor NOTIFY authorChanged)
0027     Q_PROPERTY(QString email READ email WRITE setEmail NOTIFY emailChanged)
0028     Q_PROPERTY(QString version READ version WRITE setVersion NOTIFY versionChanged)
0029     Q_PROPERTY(QString website READ website WRITE setWebsite NOTIFY websiteChanged)
0030     Q_PROPERTY(QString license READ license WRITE setLicense NOTIFY licenseChanged)
0031     Q_PROPERTY(QString thumbnailPath READ thumbnailPath NOTIFY themeChanged)
0032 
0033     Q_PROPERTY(bool performLayoutDump READ performLayoutDump WRITE setPerformLayoutDump NOTIFY performLayoutDumpChanged)
0034     Q_PROPERTY(bool performDefaultsDump READ performDefaultsDump WRITE setPerformDefaultsDump NOTIFY performDefaultsDumpChanged)
0035 
0036     Q_PROPERTY(bool needsSave READ needsSave NOTIFY needsSaveChanged)
0037 
0038 public:
0039     enum ErrorLevel {
0040         Info,
0041         Error,
0042     };
0043     Q_ENUMS(ErrorLevel)
0044 
0045     explicit LnfLogic(QObject *parent = nullptr);
0046     ~LnfLogic() override;
0047 
0048     LnfListModel *lnfList();
0049 
0050     void setTheme(const QString &theme);
0051     QString theme() const;
0052 
0053     bool isWritable() const;
0054     QString themeFolder() const;
0055 
0056     QString name() const;
0057     void setName(const QString &name);
0058 
0059     QString comment() const;
0060     void setComment(const QString &comment);
0061 
0062     QString author() const;
0063     void setAuthor(const QString &author);
0064 
0065     QString email() const;
0066     void setEmail(const QString &email);
0067 
0068     QString version() const;
0069     void setVersion(const QString &version);
0070 
0071     QString website() const;
0072     void setWebsite(const QString &website);
0073 
0074     QString license() const;
0075     void setLicense(const QString &license);
0076 
0077     bool performLayoutDump() const;
0078     void setPerformLayoutDump(bool dump);
0079 
0080     bool performDefaultsDump() const;
0081     void setPerformDefaultsDump(bool dump);
0082 
0083     QString thumbnailPath() const;
0084 
0085     void dumpPlasmaLayout(const QString &pluginName);
0086 
0087     bool needsSave();
0088 
0089     Q_INVOKABLE void save();
0090     Q_INVOKABLE void createNewTheme(const QString &pluginName,
0091                                     const QString &name,
0092                                     const QString &comment,
0093                                     const QString &author,
0094                                     const QString &email,
0095                                     const QString &license,
0096                                     const QString &website);
0097     Q_INVOKABLE void processThumbnail(const QString &path);
0098     Q_INVOKABLE QString openFile();
0099 
0100     void dumpCurrentPlasmaLayout();
0101     void dumpDefaultsConfigFile(const QString &pluginName);
0102 
0103 Q_SIGNALS:
0104     void themeChanged();
0105     void messageRequested(ErrorLevel level, const QString &message);
0106     void needsSaveChanged();
0107     void nameChanged();
0108     void commentChanged();
0109     void authorChanged();
0110     void emailChanged();
0111     void versionChanged();
0112     void websiteChanged();
0113     void licenseChanged();
0114     void performLayoutDumpChanged();
0115     void performDefaultsDumpChanged();
0116 
0117 private:
0118     QString m_themeName;
0119     KPackage::Package m_package;
0120     LnfListModel *m_lnfListModel;
0121     QHash<QString, QString> m_tempMetadata;
0122     bool m_performLayoutDump : 1;
0123     bool m_performDefaultsDump : 1;
0124     bool m_needsSave;
0125 };
0126 
0127 #endif // LNFLOGIC_H