diff options
Diffstat (limited to 'src/backend/config/btconfig.h')
-rw-r--r-- | src/backend/config/btconfig.h | 248 |
1 files changed, 248 insertions, 0 deletions
diff --git a/src/backend/config/btconfig.h b/src/backend/config/btconfig.h new file mode 100644 index 0000000..be19d41 --- /dev/null +++ b/src/backend/config/btconfig.h @@ -0,0 +1,248 @@ +/********* +* +* In the name of the Father, and of the Son, and of the Holy Spirit. +* +* This file is part of BibleTime's source code, http://www.bibletime.info/. +* +* Copyright 1999-2014 by the BibleTime developers. +* The BibleTime source code is licensed under the GNU General Public License version 2.0. +* +**********/ + +#ifndef BTCONFIG_H +#define BTCONFIG_H + +#include <QDataStream> +#include <QFont> +#include <QHash> +#include <QKeySequence> +#include <QMetaType> +#include <QSet> +#include <QSettings> +#include <QString> +#include <QStringList> +#include <QVariant> + +#include "backend/config/btconfigcore.h" + +#include "backend/btmoduletreeitem.h" // for BTModuleTreeItem::Grouping +#include "backend/drivers/cswordmoduleinfo.h" +#include "btglobal.h" + + +class BibleTimeApp; + +class BtConfig: public BtConfigCore { + + Q_DISABLE_COPY(BtConfig) + + friend class BibleTimeApp; + +public: /* Types: */ + + /*! + * The first parameter indicates whether the custom font should be used or not. + * The second parameter is the custom font that has been set. + */ + typedef QPair<bool, QFont> FontSettingsPair; + typedef QMap<QString, QString> StringMap; + +private: /* Types: */ + + typedef QHash<const CLanguageMgr::Language *, FontSettingsPair> FontCacheMap; + +public: /* Methods: */ + + static BtConfig & getInstance(); + + /*! + * \brief Function to set a module decryption key. + * + * This helper function will set a module decryption key + * in the configuration. Any previous key will be overwritten. + * + * \param[in] name Name of module to set the key for + * \param[in] key Decryption key to set as string + */ + void setModuleEncryptionKey(const QString & name, const QString & key); + + /*! + * \brief Function to get a module decryption key. + * + * This helper function will retrieve a previously set + * module decryption key from the configuration. If the key + * is not set it will return a null string. + * + * \param[in] name Name of module to retrieve the key for + * \returns Decryption key as a string + */ + QString getModuleEncryptionKey(const QString & name); + + /*! + * \brief Gets the shortcuts for the given group. + * + * Returns a hash of shortcuts for strings for the respective + * shortcut group. + * \param[in] shortcutGroup The group to retrieve shortcuts for. + * \returns Hash of strings and lists of shortcuts. + */ + QHash<QString, QList<QKeySequence> > getShortcuts(const QString & shortcutGroup); + + /*! + * \brief Sets the shortcuts for the given group. + * + * Writes a hash of shortcuts for strings for the respective + * shortcut group. + * \param[in] shortcutGroup The group to retrieve shortcuts for. + * \param[in] Hash of strings and lists of shortcuts to write. + */ + void setShortcuts(const QString & shortcutGroup, + const QHash<QString, QList<QKeySequence> > & shortcuts); + + /*! + * \brief Returns current filter options. + * + * Returns a structure containing the current + * settings to be used for filtering. + * + * \returns FilterOptions structure containing filter settings. + */ + FilterOptions getFilterOptions(); + + /*! + * \brief Saves the current filter options. + * + * \param[in] options The filter options to save. + */ + void setFilterOptions(const FilterOptions & options); + + /*! + * \brief Returns current display options. + * + * Returns a structure containing the current + * settings to be used for displaying texts. + * + * \returns DisplayOptions structure containing display settings. + */ + DisplayOptions getDisplayOptions(); + + /*! + * \brief Saves the current display options. + * + * \param[in] options The display options to save. + */ + void setDisplayOptions(const DisplayOptions & options); + + /*! + * Returns a default font that is suitable for the current language. + * \returns QFont suitable for current language. + */ + inline const QFont & getDefaultFont() const { + QMutexLocker lock(&this->m_mutex); + return m_defaultFont; + } + + /// \todo: put FontSettingsPair in QVariant directly + /*! + * \brief Set font for a language. + * + * Sets a FontSettingsPair for the language given. + * \param[in] language pointer to a language to set the font for + * \param[in] fontSettings FontSettingsPair to set + */ + void setFontForLanguage(const CLanguageMgr::Language & language, + const FontSettingsPair & fontSettings); + + /*! + * \brief Get font for a language. + * + * Gets a FontSettingsPair for the language given. If no font has been saved + * a default font is returned. + * \param[in] language pointer to a language to get the font for. + * \returns FontSettingsPair for given language + */ + FontSettingsPair getFontForLanguage(const CLanguageMgr::Language & language); + + /// \todo: unit test these functions + /*! + * Returns the searchScopes for the current locale. + * + * This function retrieves the search scopes of the + * "properties/searchScopes" property and converts them + * to the current locale. + * + * \returns Search scopes in current locale. + */ + StringMap getSearchScopesForCurrentLocale(); + + /*! + * Sets the searchScopes given in the current locale. + * + * This function sets the search scopes of the + * "properties/searchScopes" property, the scopes are + * converted to the english locale before saving them. + * + * \param[in] searchScopes Search scopes in any locale. + */ + void setSearchScopesWithCurrentLocale(StringMap searchScopes); + + /*! + * Deletes the searchScopes given in the current locale. + */ + void deleteSearchScopesWithCurrentLocale(); + + /*! + * \brief Returns default sword module info class for a given module type. + * + * This is basically a convenience function for getting the respective + * "settings/defaults/ *" variable and searching that module manually. + * If module is not installed 0 will be returned. + * \param[in] moduleType module type to return the default sword module info for + * \returns sword module info pointer or 0 + */ + CSwordModuleInfo * getDefaultSwordModuleByType(const QString & moduleType); + + /*! + * \brief Sets the default sword module for a module type. + * + * This is basically a convenience function for setting the "settings/defaults/ *" + * variables to the module->name() string manually. + * 0 is allowed as the module, then the default module will be unset. + * \param[in] moduleType module type to set + * \param[in] module the sword module info to set as default module + */ + void setDefaultSwordModuleByType(const QString & moduleType, + const CSwordModuleInfo * const module); + +private: /* Methods: */ + + explicit BtConfig(const QString & settingsFile); + + static bool initBtConfig(); + + static void destroyInstance(); + +private: /* Fields: */ + + static BtConfig * m_instance; //!< singleton instance + + QFont m_defaultFont; //!< default font used when no special one is set + FontCacheMap m_fontCache; //!< a cache for the fonts saved in the configuration file for speed + + static StringMap m_defaultSearchScopes; + +}; + +// declare types used in configuration as metatype so they can be saved directly into the configuration +Q_DECLARE_METATYPE(BtConfig::StringMap) +Q_DECLARE_METATYPE(QList<int>) + +/*! + * \brief This is a shortchand for BtConfig::getInstance(). + * \returns BtConfig singleton instance. + */ +inline BtConfig & btConfig() { + return BtConfig::getInstance(); +} + +#endif // BTCONFIG_H |