X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/c801d85f158c4cba50b588807daabdcbd0ed3853..3bbb630a217d8212c63ac16d5338f692b70ab392:/include/wx/config.h?ds=sidebyside diff --git a/include/wx/config.h b/include/wx/config.h index e7278dfd32..df24b8e873 100644 --- a/include/wx/config.h +++ b/include/wx/config.h @@ -1,6 +1,7 @@ /////////////////////////////////////////////////////////////////////////////// -// Name: -// Purpose: +// Name: config.h +// Purpose: declaration of the base class of all config implementations +// (see also: fileconf.h and msw/regconf.h) // Author: Karsten Ballüder & Vadim Zeitlin // Modified by: // Created: 07.04.98 (adapted from appconf.h) @@ -13,6 +14,19 @@ #ifndef _APPCONF_H #define _APPCONF_H +#ifdef __GNUG__ +#pragma interface "config.h" +#endif + +// ---------------------------------------------------------------------------- +// compile options +// ---------------------------------------------------------------------------- + +// it won't compile without it anyhow +#ifndef USE_WXCONFIG + #error "Please define USE_WXCONFIG or remove config.cpp from your makefile" +#endif // USE_WXCONFIG + // ---------------------------------------------------------------------------- // constants // ---------------------------------------------------------------------------- @@ -38,15 +52,20 @@ #endif // ---------------------------------------------------------------------------- -// global functions +// various helper global functions // ---------------------------------------------------------------------------- /* Replace environment variables ($SOMETHING) with their values. The format is $VARNAME or ${VARNAME} where VARNAME contains alphanumeric characters and '_' only. '$' must be escaped ('\$') in order to be taken literally. -*/ -wxString ExpandEnvVars(const wxString& str); + */ +extern wxString wxExpandEnvVars(const wxString &sz); + +/* + Split path into parts removing '..' in progress + */ +extern void wxSplitPath(wxArrayString& aParts, const char *sz); // ---------------------------------------------------------------------------- // abstract base class wxConfig which defines the interface for derived classes @@ -61,8 +80,16 @@ wxString ExpandEnvVars(const wxString& str); class wxConfig { public: + // static functions + // sets the config object, returns the previous pointer + static wxConfig *Set(wxConfig *pConfig); + // get the config object, creates it on demand + static wxConfig *Get() { if ( !ms_pConfig ) Create(); return ms_pConfig; } + // create a new config object + static void Create(); + // ctor & virtual dtor - wxConfig() { } + wxConfig() { m_bExpandEnvVars = TRUE; } virtual ~wxConfig(); // path management @@ -81,13 +108,34 @@ public: // enumerate entries virtual bool GetFirstEntry(wxString& str, long& lIndex) = 0; virtual bool GetNextEntry (wxString& str, long& lIndex) = 0; - - // key access - // read a string or long value from the key. If the key is not - // found the default value is returned. - virtual const char *Read(const char *szKey, - const char *szDefault = NULL) const = 0; - virtual long Read(const char *szKey, long lDefault) const = 0; + // get number of entries/subgroups in the current group, with or without + // it's subgroups + virtual uint GetNumberOfEntries(bool bRecursive = FALSE) const = 0; + virtual uint GetNumberOfGroups(bool bRecursive = FALSE) const = 0; + + // tests of existence + // returns TRUE if the group by this name exists + virtual bool HasGroup(const wxString& strName) const = 0; + // same as above, but for an entry + virtual bool HasEntry(const wxString& strName) const = 0; + // returns TRUE if either a group or an entry with a given name exist + bool Exists(const wxString& strName) const + { return HasGroup(strName) || HasEntry(strName); } + + // key access: returns TRUE if value was really read, FALSE if default used + // (and if the key is not found the default value is returned.) + // read a string from the key + virtual bool Read(wxString *pStr, const char *szKey, + const char *szDefault = NULL) const = 0; + // another version using statis buffer - it means it will be overwritten + // after each call to this function! + virtual const char *Read(const char *szKey, + const char *szDefault = NULL) const; + // the same for longs + virtual long Read(const char *szKey, long lDefault) const + { long l; Read(&l, szKey, lDefault); return l; } + // and another version: returns true if default value is returned + virtual bool Read(long *pl, const char *szKey, long lDefault = 0) const = 0; // write the value (return true on success) virtual bool Write(const char *szKey, const char *szValue) = 0; @@ -106,16 +154,47 @@ public: // primarly for use by desinstallation routine. virtual bool DeleteAll() = 0; + // options + // we can automatically expand environment variables in the config entries + // (this option is on by default, you can turn it on/off at any time) + bool IsExpandingEnvVars() const { return m_bExpandEnvVars; } + void SetExpandEnvVars(bool bDoIt = TRUE) { m_bExpandEnvVars = bDoIt; } + // does expansion only if needed + wxString ExpandEnvVars(const wxString& str) const + { return IsExpandingEnvVars() ? wxExpandEnvVars(str) : str; } + protected: - // true if environment variables are to be auto-expanded + static bool IsImmutable(const char *szKey) + { return *szKey == APPCONF_IMMUTABLE_PREFIX; } + + // a handy little class which changes current path to the path of given entry + // and restores it in dtor: so if you declare a local variable of this type, + // you work in the entry directory and the path is automatically restored + // when the function returns + class PathChanger + { + public: + // ctor/dtor do path changing/restorin + PathChanger(const wxConfig *pContainer, const wxString& strEntry); + ~PathChanger(); + + // get the key name + const wxString& Name() const { return m_strName; } + + private: + wxConfig *m_pContainer; // object we live in + wxString m_strName, // name of entry (i.e. name only) + m_strOldPath; // saved path + bool m_bChanged; // was the path changed? + }; + +private: + // are we doing automatic environment variable expansion? bool m_bExpandEnvVars; -}; -// ---------------------------------------------------------------------------- -// functions to create different config implementations -// ---------------------------------------------------------------------------- - -wxConfig *CreateFileConfig(const wxString& strFile, bool bLocalOnly = FALSE); + // static variables + static wxConfig *ms_pConfig; +}; #endif //_APPCONF_H