blob: 91c35dec9a478a99b613c18f1398cb0301e9c807 [file] [log] [blame]
The Android Open Source Project52d4c302009-03-03 19:29:09 -08001//
2// Copyright 2005 The Android Open Source Project
3//
4// Preferences file access.
5//
6#ifndef _SIM_PREFERENCES_H
7#define _SIM_PREFERENCES_H
8
9#include "tinyxml.h"
10
11/*
12 * This class provides access to a preferences file. It's possible to
13 * have more than one instance, though it's probably unwise to have multiple
14 * objects for the same file on disk.
15 *
16 * All value are stored as strings. The class doesn't really try to
17 * enforce type safety, but it will complain if you try to do something
18 * nonsensical (like convert "foo" to an integer).
19 */
20class Preferences {
21public:
22 Preferences(void) :
23 mpDoc(NULL), mDirty(false)
24 {}
25 ~Preferences(void) {
26 delete mpDoc;
27 }
28
29 /* load all preferences from a file */
30 bool Load(const char* fileName);
31
32 /* save all preferences to a file */
33 bool Save(const char* fileName);
34
35 /* create new preferences set (use when file does not exist) */
36 bool Create(void);
37
38 /*
39 * Retrieve a value from the preferences database.
40 *
41 * These return "false" if the value was not found or could not be
42 * converted to the expected type. The value pointed to be the second
43 * arg is guaranteed to be left undisturbed in this case.
44 *
45 * The value set by GetString(const char*, char**) will be set to
46 * newly-allocated storage that must be freed with "delete[]". This
47 * is done instead of returning a const char* because it's unclear
48 * what guarantees TinyXml makes wrt string lifetime (especially in
49 * a multithreaded environment).
50 */
51 bool GetBool(const char* name, bool* pVal) const;
52 bool GetInt(const char* name, int* pInt) const;
53 bool GetDouble(const char* name, double* pDouble) const;
54 bool GetString(const char* name, char** pVal) const;
55 bool GetString(const char* name, wxString& str) const;
56
57 /*
58 * Set a value in the database.
59 */
60 void SetBool(const char* name, bool val);
61 void SetInt(const char* name, int val);
62 void SetDouble(const char* name, double val);
63 void SetString(const char* name, const char* val);
64
65 /*
66 * Just test for existence.
67 */
68 bool Exists(const char* name) const;
69
70 /*
71 * Remove a <pref> from the config file.
72 */
73 bool RemovePref(const char* name);
74
75 /*
76 * Get the value of the "dirty" flag.
77 */
78 bool GetDirty(void) const { return mDirty; }
79
80private:
81 /* Implementation of getters */
82 bool _GetBool(TiXmlElement* pElem, bool* pVal) const;
83 bool _GetInt(TiXmlElement* pElem, int* pInt) const;
84 bool _GetDouble(TiXmlElement* pElem, double* pDouble) const;
85 bool _GetString(TiXmlElement* pElem, wxString& str) const;
86
87 /* this can be used to generate some defaults */
88 void SetDefaults(void);
89
90 /* locate the named preference */
91 TiXmlNode* _FindNode(const char* type, const char* name) const;
92 TiXmlNode* FindPref(const char* str) const;
93 /* like FindPref, but returns a TiXmlElement */
94 TiXmlElement* FindPrefElement(const char* str) const;
95 /* add a new preference entry */
96 TiXmlElement* AddPref(const char* str);
97 /* removes a node */
98 bool _RemoveNode(TiXmlNode* pNode);
99
100 TiXmlDocument* mpDoc;
101 bool mDirty;
102};
103
104#endif // _SIM_PREFERENCES_H