X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/da468d387db3b7e22b008bf08be2ff6b202508fb..ff7b1510ea7f7855091df83d75a44415dc1cba18:/src/common/config.cpp diff --git a/src/common/config.cpp b/src/common/config.cpp index f9d449b7f2..1ba9f4edf2 100644 --- a/src/common/config.cpp +++ b/src/common/config.cpp @@ -1,6 +1,6 @@ /////////////////////////////////////////////////////////////////////////////// // Name: config.cpp -// Purpose: implementation of wxConfig class +// Purpose: implementation of wxConfigBase class // Author: Vadim Zeitlin // Modified by: // Created: 07.04.98 @@ -38,8 +38,8 @@ #include #include -// we must include (one of) these files for wxConfig::Create -#if defined(__MSWIN__) && defined(wxCONFIG_WIN32_NATIVE) +// we must include (one of) these files for wxConfigBase::Create +#if defined(__WXMSW__) && defined(wxCONFIG_WIN32_NATIVE) #ifdef __WIN32__ #include #else //WIN16 @@ -56,39 +56,44 @@ // global and class static variables // ---------------------------------------------------------------------------- -wxConfig *wxConfig::ms_pConfig = NULL; +wxConfigBase *wxConfigBase::ms_pConfig = NULL; +bool wxConfigBase::ms_bAutoCreate = TRUE; // ============================================================================ // implementation // ============================================================================ // ---------------------------------------------------------------------------- -// wxConfig +// wxConfigBase // ---------------------------------------------------------------------------- -wxConfig *wxConfig::Set(wxConfig *pConfig) +wxConfigBase *wxConfigBase::Set(wxConfigBase *pConfig) { - wxConfig *pOld = ms_pConfig; + wxConfigBase *pOld = ms_pConfig; ms_pConfig = pConfig; return pOld; } -wxConfig *wxConfig::Create() +wxConfigBase *wxConfigBase::Create() { - return ms_pConfig = -#if defined(__MSWIN__) && defined(wxCONFIG_WIN32_NATIVE) - #ifdef __WIN32__ - new wxRegConfig(wxTheApp->GetAppName(), wxTheApp->GetVendorName()); - #else //WIN16 - #error "Sorry, no wxIniConfig yet..." - //new wxIniConfig(wxTheApp->GetAppName(), wxTheApp->GetVendorName()); - #endif -#else // either we're under Unix or wish to use files even under Windows - new wxFileConfig(wxTheApp->GetAppName()); -#endif + if ( ms_bAutoCreate && ms_pConfig == NULL ) { + ms_pConfig = + #if defined(__WXMSW__) && defined(wxCONFIG_WIN32_NATIVE) + #ifdef __WIN32__ + new wxRegConfig(wxTheApp->GetVendorName() + '\\' + + wxTheApp->GetAppName()); + #else //WIN16 + new wxIniConfig(wxTheApp->GetAppName(), wxTheApp->GetVendorName()); + #endif + #else // either we're under Unix or wish to use files even under Windows + new wxFileConfig(wxTheApp->GetAppName()); + #endif + } + + return ms_pConfig; } -const char *wxConfig::Read(const char *szKey, const char *szDefault) const +const char *wxConfigBase::Read(const char *szKey, const char *szDefault) const { static char s_szBuf[1024]; wxString s; @@ -102,14 +107,14 @@ const char *wxConfig::Read(const char *szKey, const char *szDefault) const // Config::PathChanger // ---------------------------------------------------------------------------- -wxConfig::PathChanger::PathChanger(const wxConfig *pContainer, +wxConfigBase::PathChanger::PathChanger(const wxConfigBase *pContainer, const wxString& strEntry) { - m_pContainer = (wxConfig *)pContainer; + m_pContainer = (wxConfigBase *)pContainer; wxString strPath = strEntry.Before(wxCONFIG_PATH_SEPARATOR); // special case of "/keyname" when there is nothing before "/" - if ( strPath.IsEmpty() && strEntry[0] == wxCONFIG_PATH_SEPARATOR ) + if ( strPath.IsEmpty() && ((!strEntry.IsEmpty()) && strEntry[0] == wxCONFIG_PATH_SEPARATOR )) strPath = wxCONFIG_PATH_SEPARATOR; if ( !strPath.IsEmpty() ) { @@ -127,7 +132,7 @@ wxConfig::PathChanger::PathChanger(const wxConfig *pContainer, } } -wxConfig::PathChanger::~PathChanger() +wxConfigBase::PathChanger::~PathChanger() { // only restore path if it was changed if ( m_bChanged ) { @@ -217,11 +222,12 @@ wxString wxExpandEnvVars(const wxString& str) // check the closing bracket if ( bracket != Bracket_None ) { if ( m == str.Len() || str[m] != (char)bracket ) { - wxLogWarning(_("missing '%c' at position %d in '%s'."), + wxLogWarning(_("Environment variables expansion failed: " + "missing '%c' at position %d in '%s'."), (char)bracket, m + 1, str.c_str()); } else { - // skip closing bracket + // skip closing bracket unless the variables wasn't expanded if ( pszValue == NULL ) strResult << (char)bracket; m++; @@ -232,6 +238,15 @@ wxString wxExpandEnvVars(const wxString& str) } break; + case '\\': + // backslash can be used to suppress special meaning of % and $ + if ( n != str.Len() && (str[n + 1] == '%' || str[n + 1] == '$') ) { + strResult += str[++n]; + + break; + } + //else: fall through + default: strResult += str[n]; }