X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/855e92a8d9c1a389c09b7afd88dcc16fd4f055f9..716b736420b6f9722f44c53931ceeeb23e8e54e4:/include/wx/config.h diff --git a/include/wx/config.h b/include/wx/config.h index 07ddc77804..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,13 +14,26 @@ #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 // ---------------------------------------------------------------------------- /// shall we be case sensitive in parsing variable names? #ifndef APPCONF_CASE_SENSITIVE - #define APPCONF_CASE_SENSITIVE false + #define APPCONF_CASE_SENSITIVE FALSE #endif /// separates group and entry names @@ -34,7 +48,7 @@ /// should we use registry instead of configuration files under Win32? #ifndef APPCONF_WIN32_NATIVE - #define APPCONF_WIN32_NATIVE true + #define APPCONF_WIN32_NATIVE TRUE #endif // ---------------------------------------------------------------------------- @@ -46,12 +60,12 @@ $VARNAME or ${VARNAME} where VARNAME contains alphanumeric characters and '_' only. '$' must be escaped ('\$') in order to be taken literally. */ -extern wxString ExpandEnvVars(const wxString& str); +extern wxString wxExpandEnvVars(const wxString &sz); /* Split path into parts removing '..' in progress */ -extern void SplitPath(wxArrayString& aParts, const char *sz); +extern void wxSplitPath(wxArrayString& aParts, const char *sz); // ---------------------------------------------------------------------------- // abstract base class wxConfig which defines the interface for derived classes @@ -75,7 +89,7 @@ public: static void Create(); // ctor & virtual dtor - wxConfig() { } + wxConfig() { m_bExpandEnvVars = TRUE; } virtual ~wxConfig(); // path management @@ -94,6 +108,19 @@ public: // enumerate entries virtual bool GetFirstEntry(wxString& str, long& lIndex) = 0; virtual bool GetNextEntry (wxString& str, long& lIndex) = 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.) @@ -105,7 +132,7 @@ public: virtual const char *Read(const char *szKey, const char *szDefault = NULL) const; // the same for longs - long Read(const char *szKey, long lDefault) const + 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; @@ -114,19 +141,28 @@ public: virtual bool Write(const char *szKey, const char *szValue) = 0; virtual bool Write(const char *szKey, long lValue) = 0; // permanently writes all changes - virtual bool Flush(bool bCurrentOnly = false) = 0; + virtual bool Flush(bool bCurrentOnly = FALSE) = 0; // delete entries/groups // deletes the specified entry and the group it belongs to if // it was the last key in it and the second parameter is true virtual bool DeleteEntry(const char *szKey, - bool bDeleteGroupIfEmpty = true) = 0; + bool bDeleteGroupIfEmpty = TRUE) = 0; // delete the group (with all subgroups) virtual bool DeleteGroup(const char *szKey) = 0; // delete the whole underlying object (disk file, registry key, ...) // 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: static bool IsImmutable(const char *szKey) { return *szKey == APPCONF_IMMUTABLE_PREFIX; } @@ -134,7 +170,7 @@ protected: // 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 function returns + // when the function returns class PathChanger { public: @@ -152,6 +188,7 @@ protected: bool m_bChanged; // was the path changed? }; +private: // are we doing automatic environment variable expansion? bool m_bExpandEnvVars;