]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/config.cpp
Some manual updates; in MDI sample, child frames now have default size/position ...
[wxWidgets.git] / src / common / config.cpp
index 36c7bcdde1afef3f1afa1b4394e5cdd29ae2de76..f9d449b7f22138ec16b49329cf4aba5e933fe1b1 100644 (file)
@@ -2,10 +2,10 @@
 // Name:        config.cpp
 // Purpose:     implementation of wxConfig class
 // Author:      Vadim Zeitlin
-// Modified by: 
+// Modified by:
 // Created:     07.04.98
 // RCS-ID:      $Id$
-// Copyright:   (c) 1997 Karsten Ballüder   Ballueder@usa.net  
+// Copyright:   (c) 1997 Karsten Ballüder   Ballueder@usa.net
 //                       Vadim Zeitlin      <zeitlin@dptmaths.ens-cachan.fr>
 // Licence:     wxWindows license
 ///////////////////////////////////////////////////////////////////////////////
 #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 wxConfig::Create
+#if defined(__MSWIN__) && 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()
 
 // ----------------------------------------------------------------------------
@@ -55,9 +65,6 @@ wxConfig *wxConfig::ms_pConfig = NULL;
 // ----------------------------------------------------------------------------
 // wxConfig
 // ----------------------------------------------------------------------------
-wxConfig::~wxConfig()
-{
-}
 
 wxConfig *wxConfig::Set(wxConfig *pConfig)
 {
@@ -66,9 +73,19 @@ wxConfig *wxConfig::Set(wxConfig *pConfig)
   return pOld;
 }
 
-void wxConfig::Create()
+wxConfig *wxConfig::Create()
 {
-  ms_pConfig = wxTheApp->CreateConfig();
+  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
 }
 
 const char *wxConfig::Read(const char *szKey, const char *szDefault) const
@@ -89,18 +106,18 @@ wxConfig::PathChanger::PathChanger(const wxConfig *pContainer,
                                  const wxString& strEntry)
 {
   m_pContainer = (wxConfig *)pContainer;
-  wxString strPath = strEntry.Before(APPCONF_PATH_SEPARATOR);
+  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[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 {
@@ -125,16 +142,17 @@ 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());
 
   // don't change the values the enum elements: they must be equal
   // to the matching [closing] delimiter.
   enum Bracket
-  { 
-    Bracket_None, 
-    Bracket_Normal  = ')', 
+  {
+    Bracket_None,
+    Bracket_Normal  = ')',
     Bracket_Curly   = '}',
 #ifdef  __WXMSW__
     Bracket_Windows = '%'     // yeah, Windows people are a bit strange ;-)
@@ -160,8 +178,8 @@ wxString ExpandEnvVars(const wxString& str)
           }
           else {
             switch ( str[n + 1] ) {
-              case '(': 
-                bracket = Bracket_Normal; 
+              case '(':
+                bracket = Bracket_Normal;
                 n++;                   // skip the bracket
                 break;
 
@@ -199,7 +217,7 @@ 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(_("missing '%c' at position %d in '%s'."),
                            (char)bracket, m + 1, str.c_str());
             }
             else {
@@ -223,21 +241,21 @@ 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
       }
       else if ( strCurrent == ".." ) {
         // go up one level
         if ( aParts.IsEmpty() )
-          wxLogWarning("'%s' has extra '..', ignored.", sz);
+          wxLogWarning(_("'%s' has extra '..', ignored."), sz);
         else
           aParts.Remove(aParts.Count() - 1);