1 #ifndef CSM_PREFS_STATE_H 2 #define CSM_PREFS_STATE_H 3 4 #include <map> 5 #include <string> 6 7 #include <QObject> 8 #include <QMutex> 9 10 #ifndef Q_MOC_RUN 11 #include <components/files/configurationmanager.hpp> 12 #endif 13 14 #include <components/settings/settings.hpp> 15 16 #include "category.hpp" 17 #include "setting.hpp" 18 #include "enumsetting.hpp" 19 #include "stringsetting.hpp" 20 #include "shortcutmanager.hpp" 21 22 class QColor; 23 24 namespace CSMPrefs 25 { 26 class IntSetting; 27 class DoubleSetting; 28 class BoolSetting; 29 class ColourSetting; 30 class ShortcutSetting; 31 class ModifierSetting; 32 33 /// \brief User settings state 34 /// 35 /// \note Access to the user settings is thread-safe once all declarations and loading has 36 /// been completed. 37 class State : public QObject 38 { 39 Q_OBJECT 40 41 static State *sThis; 42 43 public: 44 45 typedef std::map<std::string, Category> Collection; 46 typedef Collection::iterator Iterator; 47 48 private: 49 50 const std::string mConfigFile; 51 const std::string mDefaultConfigFile; 52 const Files::ConfigurationManager& mConfigurationManager; 53 ShortcutManager mShortcutManager; 54 Settings::Manager mSettings; 55 Collection mCategories; 56 Iterator mCurrentCategory; 57 QMutex mMutex; 58 59 // not implemented 60 State (const State&); 61 State& operator= (const State&); 62 63 private: 64 65 void load(); 66 67 void declare(); 68 69 void declareCategory (const std::string& key); 70 71 IntSetting& declareInt (const std::string& key, const std::string& label, int default_); 72 DoubleSetting& declareDouble (const std::string& key, const std::string& label, double default_); 73 74 BoolSetting& declareBool (const std::string& key, const std::string& label, bool default_); 75 76 EnumSetting& declareEnum (const std::string& key, const std::string& label, EnumValue default_); 77 78 ColourSetting& declareColour (const std::string& key, const std::string& label, QColor default_); 79 80 ShortcutSetting& declareShortcut (const std::string& key, const std::string& label, 81 const QKeySequence& default_); 82 83 StringSetting& declareString (const std::string& key, const std::string& label, std::string default_); 84 85 ModifierSetting& declareModifier(const std::string& key, const std::string& label, int modifier_); 86 87 void declareSeparator(); 88 89 void declareSubcategory(const std::string& label); 90 91 void setDefault (const std::string& key, const std::string& default_); 92 93 public: 94 95 State (const Files::ConfigurationManager& configurationManager); 96 97 ~State(); 98 99 void save(); 100 101 Iterator begin(); 102 103 Iterator end(); 104 105 ShortcutManager& getShortcutManager(); 106 107 Category& operator[](const std::string& key); 108 109 void update (const Setting& setting); 110 111 static State& get(); 112 113 void resetCategory(const std::string& category); 114 115 void resetAll(); 116 117 signals: 118 119 void settingChanged (const CSMPrefs::Setting *setting); 120 }; 121 122 // convenience function 123 State& get(); 124 } 125 126 #endif 127