X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/a3a584a7a6ade199990dd4463488e4bbf3545349..14f8fa9d7fa07b02c276981d135ce73cf6818879:/src/common/fileconf.cpp diff --git a/src/common/fileconf.cpp b/src/common/fileconf.cpp index 9b3412c6d9..5ef534169b 100644 --- a/src/common/fileconf.cpp +++ b/src/common/fileconf.cpp @@ -46,10 +46,12 @@ #include "wx/utils.h" // for wxGetHomeDir -// _WINDOWS_ is defined when windows.h is included, -// __WXMSW__ is defined for MS Windows compilation -#if defined(__WXMSW__) && !defined(_WINDOWS_) - #include +#if defined(__WXMAC__) + #include "wx/mac/private.h" // includes mac headers +#endif + +#if defined(__WXMSW__) + #include "wx/msw/private.h" #endif //windows.h #if defined(__WXPM__) #define INCL_DOS @@ -274,90 +276,14 @@ wxString wxFileConfig::GetGlobalDir() if (rc == 0) { drive = aulSysInfo[QSV_BOOT_DRIVE - 1]; - switch(drive) - { - case 1: - strDir = "A:\\OS2\\"; - break; - case 2: - strDir = "B:\\OS2\\"; - break; - case 3: - strDir = "C:\\OS2\\"; - break; - case 4: - strDir = "D:\\OS2\\"; - break; - case 5: - strDir = "E:\\OS2\\"; - break; - case 6: - strDir = "F:\\OS2\\"; - break; - case 7: - strDir = "G:\\OS2\\"; - break; - case 8: - strDir = "H:\\OS2\\"; - break; - case 9: - strDir = "I:\\OS2\\"; - break; - case 10: - strDir = "J:\\OS2\\"; - break; - case 11: - strDir = "K:\\OS2\\"; - break; - case 12: - strDir = "L:\\OS2\\"; - break; - case 13: - strDir = "M:\\OS2\\"; - break; - case 14: - strDir = "N:\\OS2\\"; - break; - case 15: - strDir = "O:\\OS2\\"; - break; - case 16: - strDir = "P:\\OS2\\"; - break; - case 17: - strDir = "Q:\\OS2\\"; - break; - case 18: - strDir = "R:\\OS2\\"; - break; - case 19: - strDir = "S:\\OS2\\"; - break; - case 20: - strDir = "T:\\OS2\\"; - break; - case 21: - strDir = "U:\\OS2\\"; - break; - case 22: - strDir = "V:\\OS2\\"; - break; - case 23: - strDir = "W:\\OS2\\"; - break; - case 24: - strDir = "X:\\OS2\\"; - break; - case 25: - strDir = "Y:\\OS2\\"; - break; - case 26: - strDir = "Z:\\OS2\\"; - break; - } + strDir.Printf(wxT("%c:\\OS2\\"), 'A'+drive-1); } #elif defined(__WXSTUBS__) wxASSERT_MSG( FALSE, wxT("TODO") ) ; + #elif defined(__DOS__) + // There's no such thing as global cfg dir in MS-DOS, let's return + // current directory (FIXME_MGL?) + return wxT(".\\"); #else // Windows wxChar szWinDir[MAX_PATH]; ::GetWindowsDirectory(szWinDir, MAX_PATH); @@ -373,8 +299,8 @@ wxString wxFileConfig::GetLocalDir() { wxString strDir; -#if defined(__WXMAC__) - // no local dir concept on Mac OS 9 +#if defined(__WXMAC__) || defined(__DOS__) + // no local dir concept on Mac OS 9 or MS-DOS return GetGlobalDir() ; #else wxGetHomeDir(&strDir); @@ -414,18 +340,18 @@ wxString wxFileConfig::GetLocalFileName(const wxChar *szFile) #ifdef __VMS__ // On VMS I saw the problem that the home directory was appended // twice for the configuration file. Does that also happen for other // platforms? - wxString str = wxT( '.' ); + wxString str = wxT( '.' ); #else wxString str = GetLocalDir(); #endif - + #if defined( __UNIX__ ) && !defined( __VMS ) && !defined( __WXMAC__ ) str << wxT('.'); #endif str << szFile; - #ifdef __WXMSW__ + #if defined(__WINDOWS__) || defined(__DOS__) if ( wxStrchr(szFile, wxT('.')) == NULL ) str << wxT(".ini"); #endif @@ -549,9 +475,9 @@ wxFileConfig::wxFileConfig(wxInputStream &inStream) char buf[1024]; while ( !inStream.Read(buf, WXSIZEOF(buf)).Eof() ) - strTmp += wxString(buf, inStream.LastRead()); + strTmp.append(wxConvertMB2WX(buf), inStream.LastRead()); - strTmp += wxString(buf, inStream.LastRead()); + strTmp.append(wxConvertMB2WX(buf), inStream.LastRead()); strTrans = wxTextBuffer::Translate(strTmp); } @@ -750,7 +676,11 @@ void wxFileConfig::Parse(wxTextBuffer& buffer, bool bLocal) while ( wxIsspace(*pEnd) ) pEnd++; - pEntry->SetValue(FilterInValue(pEnd), FALSE /* read from file */); + wxString value = pEnd; + if ( !(GetStyle() & wxCONFIG_USE_NO_ESCAPE_CHARACTERS) ) + value = FilterInValue(value); + + pEntry->SetValue(value, FALSE); } } } @@ -895,8 +825,7 @@ bool wxFileConfig::HasEntry(const wxString& strName) const // read/write values // ---------------------------------------------------------------------------- -bool wxFileConfig::Read(const wxString& key, - wxString* pStr) const +bool wxFileConfig::DoReadString(const wxString& key, wxString* pStr) const { wxConfigPathChanger path(this, key); @@ -905,44 +834,22 @@ bool wxFileConfig::Read(const wxString& key, return FALSE; } - *pStr = ExpandEnvVars(pEntry->Value()); - return TRUE; -} - -bool wxFileConfig::Read(const wxString& key, - wxString* pStr, const wxString& defVal) const -{ - wxConfigPathChanger path(this, key); + *pStr = pEntry->Value(); - wxFileConfigEntry *pEntry = m_pCurrentGroup->FindEntry(path.Name()); - bool ok; - if (pEntry == NULL) { - if( IsRecordingDefaults() ) - ((wxFileConfig *)this)->Write(key,defVal); - *pStr = ExpandEnvVars(defVal); - ok = FALSE; - } - else { - *pStr = ExpandEnvVars(pEntry->Value()); - ok = TRUE; - } - - return ok; + return TRUE; } -bool wxFileConfig::Read(const wxString& key, long *pl) const +bool wxFileConfig::DoReadLong(const wxString& key, long *pl) const { wxString str; if ( !Read(key, & str) ) { return FALSE; } - - *pl = wxAtol(str); - return TRUE; + return str.ToLong(pl) ; } -bool wxFileConfig::Write(const wxString& key, const wxString& szValue) +bool wxFileConfig::DoWriteString(const wxString& key, const wxString& szValue) { wxConfigPathChanger path(this, key); @@ -977,12 +884,9 @@ bool wxFileConfig::Write(const wxString& key, const wxString& szValue) return TRUE; } -bool wxFileConfig::Write(const wxString& key, long lValue) +bool wxFileConfig::DoWriteLong(const wxString& key, long lValue) { - // ltoa() is not ANSI :-( - wxString buf; - buf.Printf(wxT("%ld"), lValue); - return Write(key, buf); + return Write(key, wxString::Format(_T("%ld"), lValue)); } bool wxFileConfig::Flush(bool /* bCurrentOnly */) @@ -1001,14 +905,24 @@ bool wxFileConfig::Flush(bool /* bCurrentOnly */) wxTempFile file(m_strLocalFile); - if ( !file.IsOpened() ) { + if ( !file.IsOpened() ) + { wxLogError(_("can't open user configuration file.")); return FALSE; } // write all strings to file - for ( wxFileConfigLineList *p = m_linesHead; p != NULL; p = p->Next() ) { - if ( !file.Write(p->Text() + wxTextFile::GetEOL()) ) { + for ( wxFileConfigLineList *p = m_linesHead; p != NULL; p = p->Next() ) + { + wxString line = p->Text(); + line += wxTextFile::GetEOL(); +#if wxUSE_UNICODE + wxCharBuffer buf = wxConvLocal.cWX2MB( line ); + if ( !file.Write( (const char*)buf, strlen( (const char*) buf ) ) ) +#else + if ( !file.Write( line.c_str(), line.Len() ) ) +#endif + { wxLogError(_("can't write user configuration file.")); return FALSE; } @@ -1020,7 +934,7 @@ bool wxFileConfig::Flush(bool /* bCurrentOnly */) if ( ret ) { FSSpec spec ; - + wxMacFilename2FSSpec( m_strLocalFile , &spec ) ; FInfo finfo ; if ( FSpGetFInfo( &spec , &finfo ) == noErr ) @@ -1667,9 +1581,16 @@ void wxFileConfigEntry::SetValue(const wxString& strValue, bool bUser) m_strValue = strValue; if ( bUser ) { - wxString strVal = FilterOutValue(strValue); + wxString strValFiltered; + if ( Group()->Config()->GetStyle() & wxCONFIG_USE_NO_ESCAPE_CHARACTERS ) { + strValFiltered = strValue; + } + else { + strValFiltered = FilterOutValue(strValue); + } + wxString strLine; - strLine << FilterOutEntryName(m_strName) << wxT('=') << strVal; + strLine << FilterOutEntryName(m_strName) << wxT('=') << strValFiltered; if ( m_pLine != NULL ) { // entry was read from the local config file, just modify the line