File indexing completed on 2024-04-14 03:58:20

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