X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/ad9835c97c10c0d7de345e3a7a7c0fc2776eb2cb..1f77d487b7ce351b20033312a038f9bb1eb01efc:/src/msw/iniconf.cpp diff --git a/src/msw/iniconf.cpp b/src/msw/iniconf.cpp index 5761d72e19..604a452962 100644 --- a/src/msw/iniconf.cpp +++ b/src/msw/iniconf.cpp @@ -16,31 +16,24 @@ #pragma hdrstop #endif -// Doesn't yet compile in Unicode mode - -#if wxUSE_CONFIG && !wxUSE_UNICODE +#if wxUSE_INICONF #ifndef WX_PRECOMP - #include "wx/dynarray.h" - #include "wx/string.h" - #include "wx/intl.h" - #include "wx/event.h" - #include "wx/app.h" - #include "wx/utils.h" + #include "wx/msw/wrapwin.h" + #include "wx/dynarray.h" + #include "wx/string.h" + #include "wx/intl.h" + #include "wx/event.h" + #include "wx/app.h" + #include "wx/utils.h" + #include "wx/log.h" #endif //WX_PRECOMP -#include "wx/log.h" #include "wx/config.h" #include "wx/file.h" #include "wx/msw/iniconf.h" -// _WINDOWS_ is defined when windows.h is included, -// __WXMSW__ is defined for MS Windows compilation -#if defined(__WXMSW__) && !defined(_WINDOWS_) - #include "wx/msw/wrapwin.h" -#endif //windows.h - // ---------------------------------------------------------------------------- // constants // ---------------------------------------------------------------------------- @@ -55,6 +48,7 @@ // ---------------------------------------------------------------------------- // ctor & dtor // ---------------------------------------------------------------------------- +IMPLEMENT_ABSTRACT_CLASS(wxIniConfig, wxConfigBase) wxIniConfig::wxIniConfig(const wxString& strAppName, const wxString& strVendor, @@ -158,7 +152,7 @@ const wxString& wxIniConfig::GetPath() const s_str << m_strGroup; if ( !m_strPath.empty() ) s_str << wxCONFIG_PATH_SEPARATOR; - for ( const char *p = m_strPath; *p != '\0'; p++ ) { + for ( const wxStringCharType *p = m_strPath.wx_str(); *p != '\0'; p++ ) { s_str << (*p == PATH_SEP_REPLACE ? wxCONFIG_PATH_SEPARATOR : *p); } } @@ -261,15 +255,16 @@ bool wxIniConfig::HasEntry(const wxString& WXUNUSED(strName)) const // is current group empty? bool wxIniConfig::IsEmpty() const { - char szBuf[1024]; + wxChar szBuf[1024]; - GetPrivateProfileString(m_strGroup, NULL, "", - szBuf, WXSIZEOF(szBuf), m_strLocalFilename); - if ( !::IsEmpty(szBuf) ) + GetPrivateProfileString(m_strGroup.wx_str(), NULL, wxT(""), + szBuf, WXSIZEOF(szBuf), + m_strLocalFilename.wx_str()); + if ( !wxIsEmpty(szBuf) ) return false; - GetProfileString(m_strGroup, NULL, "", szBuf, WXSIZEOF(szBuf)); - if ( !::IsEmpty(szBuf) ) + GetProfileString(m_strGroup.wx_str(), NULL, wxT(""), szBuf, WXSIZEOF(szBuf)); + if ( !wxIsEmpty(szBuf) ) return false; return true; @@ -284,20 +279,22 @@ bool wxIniConfig::DoReadString(const wxString& szKey, wxString *pstr) const wxConfigPathChanger path(this, szKey); wxString strKey = GetPrivateKeyName(path.Name()); - char szBuf[1024]; // @@ should dynamically allocate memory... + wxChar szBuf[1024]; // FIXME: should dynamically allocate memory... // first look in the private INI file // NB: the lpDefault param to GetPrivateProfileString can't be NULL - GetPrivateProfileString(m_strGroup, strKey, "", - szBuf, WXSIZEOF(szBuf), m_strLocalFilename); - if ( ::IsEmpty(szBuf) ) { + GetPrivateProfileString(m_strGroup.wx_str(), strKey.wx_str(), wxT(""), + szBuf, WXSIZEOF(szBuf), + m_strLocalFilename.wx_str()); + if ( wxIsEmpty(szBuf) ) { // now look in win.ini wxString strKey = GetKeyName(path.Name()); - GetProfileString(m_strGroup, strKey, "", szBuf, WXSIZEOF(szBuf)); + GetProfileString(m_strGroup.wx_str(), strKey.wx_str(), + wxT(""), szBuf, WXSIZEOF(szBuf)); } - if ( ::IsEmpty(szBuf) ) + if ( wxIsEmpty(szBuf) ) return false; *pstr = szBuf; @@ -314,7 +311,8 @@ bool wxIniConfig::DoReadLong(const wxString& szKey, long *pl) const static const int nMagic = 17; // 17 is some "rare" number static const int nMagic2 = 28; // arbitrary number != nMagic - long lVal = GetPrivateProfileInt(m_strGroup, strKey, nMagic, m_strLocalFilename); + long lVal = GetPrivateProfileInt(m_strGroup.wx_str(), strKey.wx_str(), + nMagic, m_strLocalFilename.wx_str()); if ( lVal != nMagic ) { // the value was read from the file *pl = lVal; @@ -322,7 +320,8 @@ bool wxIniConfig::DoReadLong(const wxString& szKey, long *pl) const } // is it really nMagic? - lVal = GetPrivateProfileInt(m_strGroup, strKey, nMagic2, m_strLocalFilename); + lVal = GetPrivateProfileInt(m_strGroup.wx_str(), strKey.wx_str(), + nMagic2, m_strLocalFilename.wx_str()); if ( lVal != nMagic2 ) { // the nMagic it returned was indeed read from the file *pl = lVal; @@ -346,28 +345,44 @@ bool wxIniConfig::DoWriteString(const wxString& szKey, const wxString& szValue) wxConfigPathChanger path(this, szKey); wxString strKey = GetPrivateKeyName(path.Name()); - bool bOk = WritePrivateProfileString(m_strGroup, strKey, - szValue, m_strLocalFilename) != 0; + bool bOk = WritePrivateProfileString(m_strGroup.wx_str(), strKey.wx_str(), + szValue.wx_str(), + m_strLocalFilename.wx_str()) != 0; if ( !bOk ) + { wxLogLastError(wxT("WritePrivateProfileString")); + } return bOk; } bool wxIniConfig::DoWriteLong(const wxString& szKey, long lValue) { - // ltoa() is not ANSI :-( - char szBuf[40]; // should be good for sizeof(long) <= 16 (128 bits) - sprintf(szBuf, "%ld", lValue); + return Write(szKey, wxString::Format(wxT("%ld"), lValue)); +} + +bool wxIniConfig::DoReadBinary(const wxString& WXUNUSED(key), + wxMemoryBuffer * WXUNUSED(buf)) const +{ + wxFAIL_MSG("not implemented"); + + return false; +} + +bool wxIniConfig::DoWriteBinary(const wxString& WXUNUSED(key), + const wxMemoryBuffer& WXUNUSED(buf)) +{ + wxFAIL_MSG("not implemented"); - return Write(szKey, szBuf); + return false; } bool wxIniConfig::Flush(bool /* bCurrentOnly */) { // this is just the way it works - return WritePrivateProfileString(NULL, NULL, NULL, m_strLocalFilename) != 0; + return WritePrivateProfileString(NULL, NULL, NULL, + m_strLocalFilename.wx_str()) != 0; } // ---------------------------------------------------------------------------- @@ -380,19 +395,21 @@ bool wxIniConfig::DeleteEntry(const wxString& szKey, bool bGroupIfEmptyAlso) wxConfigPathChanger path(this, szKey); wxString strKey = GetPrivateKeyName(path.Name()); - if (WritePrivateProfileString(m_strGroup, strKey, - (const char*) NULL, m_strLocalFilename) == 0) + if (WritePrivateProfileString(m_strGroup.wx_str(), strKey.wx_str(), + NULL, m_strLocalFilename.wx_str()) == 0) return false; if ( !bGroupIfEmptyAlso || !IsEmpty() ) return true; // delete the current group too - bool bOk = WritePrivateProfileString(m_strGroup, NULL, - NULL, m_strLocalFilename) != 0; + bool bOk = WritePrivateProfileString(m_strGroup.wx_str(), NULL, + NULL, m_strLocalFilename.wx_str()) != 0; if ( !bOk ) + { wxLogLastError(wxT("WritePrivateProfileString")); + } return bOk; } @@ -403,11 +420,13 @@ bool wxIniConfig::DeleteGroup(const wxString& szKey) // passing NULL as section name to WritePrivateProfileString deletes the // whole section according to the docs - bool bOk = WritePrivateProfileString(path.Name(), NULL, - NULL, m_strLocalFilename) != 0; + bool bOk = WritePrivateProfileString(path.Name().wx_str(), NULL, + NULL, m_strLocalFilename.wx_str()) != 0; if ( !bOk ) + { wxLogLastError(wxT("WritePrivateProfileString")); + } return bOk; } @@ -419,10 +438,10 @@ bool wxIniConfig::DeleteGroup(const wxString& szKey) bool wxIniConfig::DeleteAll() { // first delete our group in win.ini - WriteProfileString(GetVendorName(), NULL, NULL); + WriteProfileString(GetVendorName().wx_str(), NULL, NULL); // then delete our own ini file - char szBuf[MAX_PATH]; + wxChar szBuf[MAX_PATH]; size_t nRc = GetWindowsDirectory(szBuf, WXSIZEOF(szBuf)); if ( nRc == 0 ) { @@ -458,5 +477,4 @@ bool wxIniConfig::RenameGroup(const wxString& WXUNUSED(oldName), return false; } -#endif - // wxUSE_CONFIG && wxUSE_UNICODE +#endif // wxUSE_INICONF