//
// 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