| // |
| // Copyright 2005 The Android Open Source Project |
| // |
| // Preferences file access. |
| // |
| #ifndef _SIM_PREFERENCES_H |
| #define _SIM_PREFERENCES_H |
| |
| #include "tinyxml.h" |
| |
| /* |
| * This class provides access to a preferences file. It's possible to |
| * have more than one instance, though it's probably unwise to have multiple |
| * objects for the same file on disk. |
| * |
| * All value are stored as strings. The class doesn't really try to |
| * enforce type safety, but it will complain if you try to do something |
| * nonsensical (like convert "foo" to an integer). |
| */ |
| class Preferences { |
| public: |
| Preferences(void) : |
| mpDoc(NULL), mDirty(false) |
| {} |
| ~Preferences(void) { |
| delete mpDoc; |
| } |
| |
| /* load all preferences from a file */ |
| bool Load(const char* fileName); |
| |
| /* save all preferences to a file */ |
| bool Save(const char* fileName); |
| |
| /* create new preferences set (use when file does not exist) */ |
| bool Create(void); |
| |
| /* |
| * Retrieve a value from the preferences database. |
| * |
| * These return "false" if the value was not found or could not be |
| * converted to the expected type. The value pointed to be the second |
| * arg is guaranteed to be left undisturbed in this case. |
| * |
| * The value set by GetString(const char*, char**) will be set to |
| * newly-allocated storage that must be freed with "delete[]". This |
| * is done instead of returning a const char* because it's unclear |
| * what guarantees TinyXml makes wrt string lifetime (especially in |
| * a multithreaded environment). |
| */ |
| bool GetBool(const char* name, bool* pVal) const; |
| bool GetInt(const char* name, int* pInt) const; |
| bool GetDouble(const char* name, double* pDouble) const; |
| bool GetString(const char* name, char** pVal) const; |
| bool GetString(const char* name, wxString& str) const; |
| |
| /* |
| * Set a value in the database. |
| */ |
| void SetBool(const char* name, bool val); |
| void SetInt(const char* name, int val); |
| void SetDouble(const char* name, double val); |
| void SetString(const char* name, const char* val); |
| |
| /* |
| * Just test for existence. |
| */ |
| bool Exists(const char* name) const; |
| |
| /* |
| * Remove a <pref> from the config file. |
| */ |
| bool RemovePref(const char* name); |
| |
| /* |
| * Get the value of the "dirty" flag. |
| */ |
| bool GetDirty(void) const { return mDirty; } |
| |
| private: |
| /* Implementation of getters */ |
| bool _GetBool(TiXmlElement* pElem, bool* pVal) const; |
| bool _GetInt(TiXmlElement* pElem, int* pInt) const; |
| bool _GetDouble(TiXmlElement* pElem, double* pDouble) const; |
| bool _GetString(TiXmlElement* pElem, wxString& str) const; |
| |
| /* this can be used to generate some defaults */ |
| void SetDefaults(void); |
| |
| /* locate the named preference */ |
| TiXmlNode* _FindNode(const char* type, const char* name) const; |
| TiXmlNode* FindPref(const char* str) const; |
| /* like FindPref, but returns a TiXmlElement */ |
| TiXmlElement* FindPrefElement(const char* str) const; |
| /* add a new preference entry */ |
| TiXmlElement* AddPref(const char* str); |
| /* removes a node */ |
| bool _RemoveNode(TiXmlNode* pNode); |
| |
| TiXmlDocument* mpDoc; |
| bool mDirty; |
| }; |
| |
| #endif // _SIM_PREFERENCES_H |