File indexing completed on 2024-04-28 15:34:18

0001 /*
0002  * SPDX-FileCopyrightText: 2020 Benjamin Port <benjamin.port@enioka.com>
0003  *
0004  * SPDX-License-Identifier: LGPL-2.1-or-later
0005  */
0006 #ifndef SONNET_SETTINGS_H
0007 #define SONNET_SETTINGS_H
0008 
0009 #include <QAbstractListModel>
0010 #include <QString>
0011 #include <QStringList>
0012 #include <QtCore/QObject>
0013 
0014 #include "sonnetcore_export.h"
0015 
0016 namespace Sonnet
0017 {
0018 class Loader;
0019 class SettingsPrivate;
0020 
0021 class SONNETCORE_EXPORT Settings : public QObject
0022 {
0023     Q_OBJECT
0024     /// This property holds whether Sonnet should skip checkign words starting with an uppercase letter.
0025     Q_PROPERTY(bool skipUppercase READ skipUppercase WRITE setSkipUppercase NOTIFY skipUppercaseChanged)
0026     /// This property holds whether Sonnet should autodetect language.
0027     Q_PROPERTY(bool autodetectLanguage READ autodetectLanguage WRITE setAutodetectLanguage NOTIFY autodetectLanguageChanged)
0028     /// This property holds whether Sonnet should run spellchecking checks in the background.
0029     Q_PROPERTY(bool backgroundCheckerEnabled READ backgroundCheckerEnabled WRITE setBackgroundCheckerEnabled NOTIFY backgroundCheckerEnabledChanged)
0030     /// This property holds whether Sonnet should be enabled by default.
0031     Q_PROPERTY(bool checkerEnabledByDefault READ checkerEnabledByDefault WRITE setCheckerEnabledByDefault NOTIFY checkerEnabledByDefaultChanged)
0032     /// This property holds whether Sonnet should skip checking compounds words.
0033     Q_PROPERTY(bool skipRunTogether READ skipRunTogether WRITE setSkipRunTogether NOTIFY skipRunTogetherChanged)
0034     /// This property holds the list of ignored words.
0035     Q_PROPERTY(QStringList currentIgnoreList READ currentIgnoreList WRITE setCurrentIgnoreList NOTIFY currentIgnoreListChanged)
0036     /// This property holds the list of preferred languages.
0037     Q_PROPERTY(QStringList preferredLanguages READ preferredLanguages WRITE setPreferredLanguages NOTIFY preferredLanguagesChanged)
0038     /// This property holds the default language for spell checking.
0039     Q_PROPERTY(QString defaultLanguage READ defaultLanguage WRITE setDefaultLanguage NOTIFY defaultLanguageChanged)
0040 
0041     /// This property holds a Qt Model containing all the preferred dictionaries
0042     /// with language description and theirs codes. This model makes the
0043     /// Qt::DisplayRole as well as the roles defined in \ref DictionaryRoles
0044     /// available.
0045     /// \since 5.88
0046     Q_PROPERTY(QAbstractListModel *dictionaryModel READ dictionaryModel CONSTANT)
0047 
0048     Q_PROPERTY(bool modified READ modified NOTIFY modifiedChanged)
0049 
0050 public:
0051     /// Roles for \ref dictionaryModel
0052     enum DictionaryRoles {
0053         LanguageCodeRole = Qt::UserRole + 1, //< Language code of the language. This uses "languageCode" as roleNames.
0054         PreferredRole, //< This role holds whether the language is one of the preferred languages. This uses "isPreferred" as roleNames.
0055         DefaultRole //< This role holds whether the language is the default language. This uses "isDefault" as roleNames.
0056     };
0057 
0058     explicit Settings(QObject *parent = nullptr);
0059     ~Settings() override;
0060 
0061     void setDefaultLanguage(const QString &lang);
0062     QString defaultLanguage() const;
0063 
0064     void setPreferredLanguages(const QStringList &lang);
0065     QStringList preferredLanguages() const;
0066 
0067     void setDefaultClient(const QString &client);
0068     QString defaultClient() const;
0069 
0070     void setSkipUppercase(bool);
0071     bool skipUppercase() const;
0072 
0073     void setAutodetectLanguage(bool);
0074     bool autodetectLanguage() const;
0075 
0076     void setSkipRunTogether(bool);
0077     bool skipRunTogether() const;
0078 
0079     void setBackgroundCheckerEnabled(bool);
0080     bool backgroundCheckerEnabled() const;
0081 
0082     void setCheckerEnabledByDefault(bool);
0083     bool checkerEnabledByDefault() const;
0084 
0085     void setCurrentIgnoreList(const QStringList &ignores);
0086     QStringList currentIgnoreList() const;
0087 
0088     QStringList clients() const;
0089     bool modified() const;
0090 
0091     QAbstractListModel *dictionaryModel();
0092 
0093     Q_INVOKABLE void save();
0094 
0095     static QStringList defaultIgnoreList();
0096     static bool defaultSkipUppercase();
0097     static bool defaultAutodetectLanguage();
0098     static bool defaultBackgroundCheckerEnabled();
0099     static bool defaultCheckerEnabledByDefault();
0100     static bool defauktSkipRunTogether();
0101     static QString defaultDefaultLanguage();
0102     static QStringList defaultPreferredLanguages();
0103 
0104 Q_SIGNALS:
0105     void skipUppercaseChanged();
0106     void autodetectLanguageChanged();
0107     void backgroundCheckerEnabledChanged();
0108     void defaultClientChanged();
0109     void defaultLanguageChanged();
0110     void preferredLanguagesChanged();
0111     void skipRunTogetherChanged();
0112     void checkerEnabledByDefaultChanged();
0113     void currentIgnoreListChanged();
0114     void modifiedChanged();
0115 
0116 private:
0117     friend class Loader;
0118     SettingsPrivate *const d;
0119 };
0120 }
0121 Q_DECLARE_METATYPE(QAbstractListModel *)
0122 
0123 #endif // SONNET_SETTINGS_H