]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/config.cpp
Added in-place editiging in wxListCtrl
[wxWidgets.git] / src / common / config.cpp
index 667d25e5fe854dea4885f14fb414ee26d31b0436..1ba9f4edf27baad93c324b3b4ca874171556eef1 100644 (file)
@@ -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
 #include  <wx/log.h>
 #include  <wx/textfile.h>
 #include  <wx/config.h>
-#include  <wx/fileconf.h>
-#include <stdlib.h>
 
+// we must include (one of) these files for wxConfigBase::Create
+#if defined(__WXMSW__) && defined(wxCONFIG_WIN32_NATIVE)
+  #ifdef __WIN32__
+    #include  <wx/msw/regconf.h>
+  #else  //WIN16
+    #include  <wx/msw/iniconf.h>
+  #endif
+#else // either we're under Unix or wish to use files even under Windows
+  #include  <wx/fileconf.h>
+#endif
+
+#include  <stdlib.h>
 #include  <ctype.h>       // for isalnum()
 
 // ----------------------------------------------------------------------------
 // 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()
-{
-}
 
-wxConfig *wxConfig::Set(wxConfig *pConfig)
+wxConfigBase *wxConfigBase::Set(wxConfigBase *pConfig)
 {
-  wxConfig *pOld = ms_pConfig;
+  wxConfigBase *pOld = ms_pConfig;
   ms_pConfig = pConfig;
   return pOld;
 }
 
-void wxConfig::Create()
+wxConfigBase *wxConfigBase::Create()
 {
-  ms_pConfig = wxTheApp->CreateConfig();
+  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;
@@ -85,22 +107,22 @@ 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;
-  wxString strPath = strEntry.Before(APPCONF_PATH_SEPARATOR);
+  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] == APPCONF_PATH_SEPARATOR )
-    strPath = APPCONF_PATH_SEPARATOR;
+  if ( strPath.IsEmpty() && ((!strEntry.IsEmpty()) && strEntry[0] == wxCONFIG_PATH_SEPARATOR ))
+    strPath = wxCONFIG_PATH_SEPARATOR;
 
   if ( !strPath.IsEmpty() ) {
     // do change the path
     m_bChanged = TRUE;
-    m_strName = strEntry.Right(APPCONF_PATH_SEPARATOR);
+    m_strName = strEntry.Right(wxCONFIG_PATH_SEPARATOR);
     m_strOldPath = m_pContainer->GetPath();
-    m_strOldPath += APPCONF_PATH_SEPARATOR;
+    m_strOldPath += wxCONFIG_PATH_SEPARATOR;
     m_pContainer->SetPath(strPath);
   }
   else {
@@ -110,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 ) {
@@ -125,7 +147,7 @@ wxConfig::PathChanger::~PathChanger()
 // understands both Unix and Windows (but only under Windows) environment
 // variables expansion: i.e. $var, $(var) and ${var} are always understood
 // and in addition under Windows %var% is also.
-wxString ExpandEnvVars(const wxString& str)
+wxString wxExpandEnvVars(const wxString& str)
 {
   wxString strResult;
   strResult.Alloc(str.Len());
@@ -200,11 +222,12 @@ wxString ExpandEnvVars(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++;
@@ -215,6 +238,15 @@ wxString ExpandEnvVars(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];
     }
@@ -224,14 +256,14 @@ wxString ExpandEnvVars(const wxString& str)
 }
 
 // this function is used to properly interpret '..' in path
-void SplitPath(wxArrayString& aParts, const char *sz)
+void wxSplitPath(wxArrayString& aParts, const char *sz)
 {
   aParts.Empty();
 
   wxString strCurrent;
   const char *pc = sz;
   for ( ;; ) {
-    if ( *pc == '\0' || *pc == APPCONF_PATH_SEPARATOR ) {
+    if ( *pc == '\0' || *pc == wxCONFIG_PATH_SEPARATOR ) {
       if ( strCurrent == "." ) {
         // ignore
       }