use wxString in wxRegKey methods; make it compile without implicit wxString->char* conversion

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@46552 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Václav Slavík
2007-06-20 07:09:14 +00:00
parent be0ba55041
commit d38f70b249
3 changed files with 109 additions and 81 deletions

View File

@@ -71,6 +71,10 @@ Changes in behaviour which may result in compilation errors
- virtual wxHtmlParser::AddText() takes wxString, not wxChar*, argument now. - virtual wxHtmlParser::AddText() takes wxString, not wxChar*, argument now.
- Funtions that took wxChar* arguments that could by NULL in wxWidgets 2.8.
are deprecated and passing NULL to them won't compile anymore, wxEmptyString
must be used instead.
Deprecated methods and their replacements Deprecated methods and their replacements
----------------------------------------- -----------------------------------------

View File

@@ -120,15 +120,16 @@ public:
// create the key: will fail if the key already exists and !bOkIfExists // create the key: will fail if the key already exists and !bOkIfExists
bool Create(bool bOkIfExists = true); bool Create(bool bOkIfExists = true);
// rename a value from old name to new one // rename a value from old name to new one
bool RenameValue(const wxChar *szValueOld, const wxChar *szValueNew); bool RenameValue(const wxString& szValueOld, const wxString& szValueNew);
// rename the key // rename the key
bool Rename(const wxChar *szNewName); bool Rename(const wxString& szNewName);
// copy value to another key possibly changing its name (by default it will // copy value to another key possibly changing its name (by default it will
// remain the same) // remain the same)
bool CopyValue(const wxChar *szValue, wxRegKey& keyDst, bool CopyValue(const wxString& szValue, wxRegKey& keyDst,
const wxChar *szNewName = NULL); const wxString& szNewName = wxEmptyString);
// copy the entire contents of the key recursively to another location // copy the entire contents of the key recursively to another location
bool Copy(const wxChar *szNewName); bool Copy(const wxString& szNewName);
// same as Copy() but using a key and not the name // same as Copy() but using a key and not the name
bool Copy(wxRegKey& keyDst); bool Copy(wxRegKey& keyDst);
// close the key (will be automatically done in dtor) // close the key (will be automatically done in dtor)
@@ -138,21 +139,19 @@ public:
// deletes this key and all of it's subkeys/values // deletes this key and all of it's subkeys/values
bool DeleteSelf(); bool DeleteSelf();
// deletes the subkey with all of it's subkeys/values recursively // deletes the subkey with all of it's subkeys/values recursively
bool DeleteKey(const wxChar *szKey); bool DeleteKey(const wxString& szKey);
// deletes the named value (may be NULL to remove the default value) // deletes the named value (may be empty string to remove the default value)
bool DeleteValue(const wxChar *szValue); bool DeleteValue(const wxString& szValue);
// access to values and subkeys // access to values and subkeys
// get value type // get value type
ValueType GetValueType(const wxChar *szValue) const; ValueType GetValueType(const wxString& szValue) const;
// returns true if the value contains a number (else it's some string) // returns true if the value contains a number (else it's some string)
bool IsNumericValue(const wxChar *szValue) const; bool IsNumericValue(const wxString& szValue) const;
// assignment operators set the default value of the key // assignment operators set the default value of the key
wxRegKey& operator=(const wxString& strValue) wxRegKey& operator=(const wxString& strValue)
{ SetValue(NULL, strValue); return *this; } { SetValue(wxEmptyString, strValue); return *this; }
wxRegKey& operator=(long lValue)
{ SetValue(NULL, lValue); return *this; }
// query the default value of the key: implicitly or explicitly // query the default value of the key: implicitly or explicitly
wxString QueryDefaultValue() const; wxString QueryDefaultValue() const;
@@ -161,30 +160,30 @@ public:
// named values // named values
// set the string value // set the string value
bool SetValue(const wxChar *szValue, const wxString& strValue); bool SetValue(const wxString& szValue, const wxString& strValue);
// retrieve the string value // retrieve the string value
bool QueryValue(const wxChar *szValue, wxString& strValue) const bool QueryValue(const wxString& szValue, wxString& strValue) const
{ return QueryValue(szValue, strValue, false); } { return QueryValue(szValue, strValue, false); }
// retrieve raw string value // retrieve raw string value
bool QueryRawValue(const wxChar *szValue, wxString& strValue) const bool QueryRawValue(const wxString& szValue, wxString& strValue) const
{ return QueryValue(szValue, strValue, true); } { return QueryValue(szValue, strValue, true); }
// retrieve either raw or expanded string value // retrieve either raw or expanded string value
bool QueryValue(const wxChar *szValue, wxString& strValue, bool raw) const; bool QueryValue(const wxString& szValue, wxString& strValue, bool raw) const;
// set the numeric value // set the numeric value
bool SetValue(const wxChar *szValue, long lValue); bool SetValue(const wxString& szValue, long lValue);
// return the numeric value // return the numeric value
bool QueryValue(const wxChar *szValue, long *plValue) const; bool QueryValue(const wxString& szValue, long *plValue) const;
// set the binary value // set the binary value
bool SetValue(const wxChar *szValue, const wxMemoryBuffer& buf); bool SetValue(const wxString& szValue, const wxMemoryBuffer& buf);
// return the binary value // return the binary value
bool QueryValue(const wxChar *szValue, wxMemoryBuffer& buf) const; bool QueryValue(const wxString& szValue, wxMemoryBuffer& buf) const;
// query existence of a key/value // query existence of a key/value
// return true if value exists // return true if value exists
bool HasValue(const wxChar *szKey) const; bool HasValue(const wxString& szKey) const;
// return true if given subkey exists // return true if given subkey exists
bool HasSubKey(const wxChar *szKey) const; bool HasSubKey(const wxString& szKey) const;
// return true if any subkeys exist // return true if any subkeys exist
bool HasSubkeys() const; bool HasSubkeys() const;
// return true if any values exist // return true if any values exist

View File

@@ -112,11 +112,16 @@ aStdKeys[] =
static inline void RemoveTrailingSeparator(wxString& str); static inline void RemoveTrailingSeparator(wxString& str);
// returns true if given registry key exists // returns true if given registry key exists
static bool KeyExists(WXHKEY hRootKey, const wxChar *szKey); static bool KeyExists(WXHKEY hRootKey, const wxString& szKey);
// combines value and key name (uses static buffer!) // combines value and key name
static const wxChar *GetFullName(const wxRegKey *pKey, static wxString GetFullName(const wxRegKey *pKey);
const wxChar *szValue = NULL); static wxString GetFullName(const wxRegKey *pKey, const wxString& szValue);
// returns "value" argument of wxRegKey methods converted into a value that can
// be passed to win32 registry functions; specifically, converts empty string
// to NULL
static inline const wxChar *RegValueStr(const wxString& szValue);
// ============================================================================ // ============================================================================
// implementation of wxRegKey class // implementation of wxRegKey class
@@ -297,7 +302,7 @@ void wxRegKey::SetHkey(WXHKEY hKey)
bool wxRegKey::Exists() const bool wxRegKey::Exists() const
{ {
// opened key has to exist, try to open it if not done yet // opened key has to exist, try to open it if not done yet
return IsOpened() ? true : KeyExists(m_hRootKey, m_strKey); return IsOpened() ? true : KeyExists(m_hRootKey, m_strKey.wx_str());
} }
// returns the full name of the key (prefix is abbreviated if bShortPrefix) // returns the full name of the key (prefix is abbreviated if bShortPrefix)
@@ -378,7 +383,7 @@ bool wxRegKey::Open(AccessMode mode)
m_dwLastError = ::RegOpenKeyEx m_dwLastError = ::RegOpenKeyEx
( (
(HKEY) m_hRootKey, (HKEY) m_hRootKey,
m_strKey, m_strKey.wx_str(),
RESERVED, RESERVED,
mode == Read ? KEY_READ : KEY_ALL_ACCESS, mode == Read ? KEY_READ : KEY_ALL_ACCESS,
&tmpKey &tmpKey
@@ -410,7 +415,7 @@ bool wxRegKey::Create(bool bOkIfExists)
HKEY tmpKey; HKEY tmpKey;
#ifdef __WXWINCE__ #ifdef __WXWINCE__
DWORD disposition; DWORD disposition;
m_dwLastError = RegCreateKeyEx((HKEY) m_hRootKey, m_strKey, m_dwLastError = RegCreateKeyEx((HKEY) m_hRootKey, m_strKey.wx_str(),
NULL, // reserved NULL, // reserved
NULL, // class string NULL, // class string
0, 0,
@@ -419,7 +424,7 @@ bool wxRegKey::Create(bool bOkIfExists)
&tmpKey, &tmpKey,
&disposition); &disposition);
#else #else
m_dwLastError = RegCreateKey((HKEY) m_hRootKey, m_strKey, &tmpKey); m_dwLastError = RegCreateKey((HKEY) m_hRootKey, m_strKey.wx_str(), &tmpKey);
#endif #endif
if ( m_dwLastError != ERROR_SUCCESS ) { if ( m_dwLastError != ERROR_SUCCESS ) {
wxLogSysError(m_dwLastError, _("Can't create registry key '%s'"), wxLogSysError(m_dwLastError, _("Can't create registry key '%s'"),
@@ -451,7 +456,8 @@ bool wxRegKey::Close()
return true; return true;
} }
bool wxRegKey::RenameValue(const wxChar *szValueOld, const wxChar *szValueNew) bool
wxRegKey::RenameValue(const wxString& szValueOld, const wxString& szValueNew)
{ {
bool ok = true; bool ok = true;
if ( HasValue(szValueNew) ) { if ( HasValue(szValueNew) ) {
@@ -472,13 +478,14 @@ bool wxRegKey::RenameValue(const wxChar *szValueOld, const wxChar *szValueNew)
return true; return true;
} }
bool wxRegKey::CopyValue(const wxChar *szValue, bool wxRegKey::CopyValue(const wxString& szValue,
wxRegKey& keyDst, wxRegKey& keyDst,
const wxChar *szValueNew) const wxString& szValueNew)
{ {
if ( !szValueNew ) { wxString valueNew(szValueNew);
if ( valueNew.empty() ) {
// by default, use the same name // by default, use the same name
szValueNew = szValue; valueNew = szValue;
} }
switch ( GetValueType(szValue) ) { switch ( GetValueType(szValue) ) {
@@ -486,7 +493,7 @@ bool wxRegKey::CopyValue(const wxChar *szValue,
{ {
wxString strVal; wxString strVal;
return QueryValue(szValue, strVal) && return QueryValue(szValue, strVal) &&
keyDst.SetValue(szValueNew, strVal); keyDst.SetValue(valueNew, strVal);
} }
case Type_Dword: case Type_Dword:
@@ -494,14 +501,14 @@ bool wxRegKey::CopyValue(const wxChar *szValue,
{ {
long dwVal; long dwVal;
return QueryValue(szValue, &dwVal) && return QueryValue(szValue, &dwVal) &&
keyDst.SetValue(szValueNew, dwVal); keyDst.SetValue(valueNew, dwVal);
} }
case Type_Binary: case Type_Binary:
{ {
wxMemoryBuffer buf; wxMemoryBuffer buf;
return QueryValue(szValue,buf) && return QueryValue(szValue,buf) &&
keyDst.SetValue(szValueNew,buf); keyDst.SetValue(valueNew,buf);
} }
// these types are unsupported because I am not sure about how // these types are unsupported because I am not sure about how
@@ -523,7 +530,7 @@ bool wxRegKey::CopyValue(const wxChar *szValue,
} }
} }
bool wxRegKey::Rename(const wxChar *szNewName) bool wxRegKey::Rename(const wxString& szNewName)
{ {
wxCHECK_MSG( !m_strKey.empty(), false, _T("registry hives can't be renamed") ); wxCHECK_MSG( !m_strKey.empty(), false, _T("registry hives can't be renamed") );
@@ -578,7 +585,7 @@ bool wxRegKey::Rename(const wxChar *szNewName)
return ok; return ok;
} }
bool wxRegKey::Copy(const wxChar *szNewName) bool wxRegKey::Copy(const wxString& szNewName)
{ {
// create the new key first // create the new key first
wxRegKey keyDst(szNewName); wxRegKey keyDst(szNewName);
@@ -607,7 +614,7 @@ bool wxRegKey::Copy(wxRegKey& keyDst)
wxRegKey key(*this, strKey); wxRegKey key(*this, strKey);
wxString keyName; wxString keyName;
keyName << GetFullName(&keyDst) << REG_SEPARATOR << strKey; keyName << GetFullName(&keyDst) << REG_SEPARATOR << strKey;
ok = key.Copy((const wxChar*) keyName); ok = key.Copy(keyName);
if ( ok ) if ( ok )
bCont = GetNextKey(strKey, lIndex); bCont = GetNextKey(strKey, lIndex);
@@ -689,7 +696,7 @@ bool wxRegKey::DeleteSelf()
// now delete this key itself // now delete this key itself
Close(); Close();
m_dwLastError = RegDeleteKey((HKEY) m_hRootKey, m_strKey); m_dwLastError = RegDeleteKey((HKEY) m_hRootKey, m_strKey.wx_str());
// deleting a key which doesn't exist is not considered an error // deleting a key which doesn't exist is not considered an error
if ( m_dwLastError != ERROR_SUCCESS && if ( m_dwLastError != ERROR_SUCCESS &&
m_dwLastError != ERROR_FILE_NOT_FOUND ) { m_dwLastError != ERROR_FILE_NOT_FOUND ) {
@@ -701,7 +708,7 @@ bool wxRegKey::DeleteSelf()
return true; return true;
} }
bool wxRegKey::DeleteKey(const wxChar *szKey) bool wxRegKey::DeleteKey(const wxString& szKey)
{ {
if ( !Open() ) if ( !Open() )
return false; return false;
@@ -710,12 +717,12 @@ bool wxRegKey::DeleteKey(const wxChar *szKey)
return key.DeleteSelf(); return key.DeleteSelf();
} }
bool wxRegKey::DeleteValue(const wxChar *szValue) bool wxRegKey::DeleteValue(const wxString& szValue)
{ {
if ( !Open() ) if ( !Open() )
return false; return false;
m_dwLastError = RegDeleteValue((HKEY) m_hKey, WXSTRINGCAST szValue); m_dwLastError = RegDeleteValue((HKEY) m_hKey, RegValueStr(szValue));
// deleting a value which doesn't exist is not considered an error // deleting a value which doesn't exist is not considered an error
if ( (m_dwLastError != ERROR_SUCCESS) && if ( (m_dwLastError != ERROR_SUCCESS) &&
@@ -734,7 +741,7 @@ bool wxRegKey::DeleteValue(const wxChar *szValue)
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// return true if value exists // return true if value exists
bool wxRegKey::HasValue(const wxChar *szValue) const bool wxRegKey::HasValue(const wxString& szValue) const
{ {
// this function should be silent, so suppress possible messages from Open() // this function should be silent, so suppress possible messages from Open()
wxLogNull nolog; wxLogNull nolog;
@@ -743,7 +750,7 @@ bool wxRegKey::HasValue(const wxChar *szValue) const
return false; return false;
LONG dwRet = ::RegQueryValueEx((HKEY) m_hKey, LONG dwRet = ::RegQueryValueEx((HKEY) m_hKey,
WXSTRINGCAST szValue, RegValueStr(szValue),
RESERVED, RESERVED,
NULL, NULL, NULL); NULL, NULL, NULL);
return dwRet == ERROR_SUCCESS; return dwRet == ERROR_SUCCESS;
@@ -774,7 +781,7 @@ bool wxRegKey::HasSubkeys() const
} }
// returns true if given subkey exists // returns true if given subkey exists
bool wxRegKey::HasSubKey(const wxChar *szKey) const bool wxRegKey::HasSubKey(const wxString& szKey) const
{ {
// this function should be silent, so suppress possible messages from Open() // this function should be silent, so suppress possible messages from Open()
wxLogNull nolog; wxLogNull nolog;
@@ -785,13 +792,13 @@ bool wxRegKey::HasSubKey(const wxChar *szKey) const
return KeyExists(m_hKey, szKey); return KeyExists(m_hKey, szKey);
} }
wxRegKey::ValueType wxRegKey::GetValueType(const wxChar *szValue) const wxRegKey::ValueType wxRegKey::GetValueType(const wxString& szValue) const
{ {
if ( ! CONST_CAST Open(Read) ) if ( ! CONST_CAST Open(Read) )
return Type_None; return Type_None;
DWORD dwType; DWORD dwType;
m_dwLastError = RegQueryValueEx((HKEY) m_hKey, WXSTRINGCAST szValue, RESERVED, m_dwLastError = RegQueryValueEx((HKEY) m_hKey, RegValueStr(szValue), RESERVED,
&dwType, NULL, NULL); &dwType, NULL, NULL);
if ( m_dwLastError != ERROR_SUCCESS ) { if ( m_dwLastError != ERROR_SUCCESS ) {
wxLogSysError(m_dwLastError, _("Can't read value of key '%s'"), wxLogSysError(m_dwLastError, _("Can't read value of key '%s'"),
@@ -802,10 +809,11 @@ wxRegKey::ValueType wxRegKey::GetValueType(const wxChar *szValue) const
return (ValueType)dwType; return (ValueType)dwType;
} }
bool wxRegKey::SetValue(const wxChar *szValue, long lValue) bool wxRegKey::SetValue(const wxString& szValue, long lValue)
{ {
if ( CONST_CAST Open() ) { if ( CONST_CAST Open() ) {
m_dwLastError = RegSetValueEx((HKEY) m_hKey, szValue, (DWORD) RESERVED, REG_DWORD, m_dwLastError = RegSetValueEx((HKEY) m_hKey, RegValueStr(szValue),
(DWORD) RESERVED, REG_DWORD,
(RegString)&lValue, sizeof(lValue)); (RegString)&lValue, sizeof(lValue));
if ( m_dwLastError == ERROR_SUCCESS ) if ( m_dwLastError == ERROR_SUCCESS )
return true; return true;
@@ -816,12 +824,13 @@ bool wxRegKey::SetValue(const wxChar *szValue, long lValue)
return false; return false;
} }
bool wxRegKey::QueryValue(const wxChar *szValue, long *plValue) const bool wxRegKey::QueryValue(const wxString& szValue, long *plValue) const
{ {
if ( CONST_CAST Open(Read) ) { if ( CONST_CAST Open(Read) ) {
DWORD dwType, dwSize = sizeof(DWORD); DWORD dwType, dwSize = sizeof(DWORD);
RegString pBuf = (RegString)plValue; RegString pBuf = (RegString)plValue;
m_dwLastError = RegQueryValueEx((HKEY) m_hKey, WXSTRINGCAST szValue, RESERVED, m_dwLastError = RegQueryValueEx((HKEY) m_hKey, RegValueStr(szValue),
RESERVED,
&dwType, pBuf, &dwSize); &dwType, pBuf, &dwSize);
if ( m_dwLastError != ERROR_SUCCESS ) { if ( m_dwLastError != ERROR_SUCCESS ) {
wxLogSysError(m_dwLastError, _("Can't read value of key '%s'"), wxLogSysError(m_dwLastError, _("Can't read value of key '%s'"),
@@ -840,14 +849,15 @@ bool wxRegKey::QueryValue(const wxChar *szValue, long *plValue) const
return false; return false;
} }
bool wxRegKey::SetValue(const wxChar *szValue,const wxMemoryBuffer& buffer) bool wxRegKey::SetValue(const wxString& szValue, const wxMemoryBuffer& buffer)
{ {
#ifdef __TWIN32__ #ifdef __TWIN32__
wxFAIL_MSG("RegSetValueEx not implemented by TWIN32"); wxFAIL_MSG("RegSetValueEx not implemented by TWIN32");
return false; return false;
#else #else
if ( CONST_CAST Open() ) { if ( CONST_CAST Open() ) {
m_dwLastError = RegSetValueEx((HKEY) m_hKey, szValue, (DWORD) RESERVED, REG_BINARY, m_dwLastError = RegSetValueEx((HKEY) m_hKey, RegValueStr(szValue),
(DWORD) RESERVED, REG_BINARY,
(RegBinary)buffer.GetData(),buffer.GetDataLen()); (RegBinary)buffer.GetData(),buffer.GetDataLen());
if ( m_dwLastError == ERROR_SUCCESS ) if ( m_dwLastError == ERROR_SUCCESS )
return true; return true;
@@ -859,19 +869,20 @@ bool wxRegKey::SetValue(const wxChar *szValue,const wxMemoryBuffer& buffer)
#endif #endif
} }
bool wxRegKey::QueryValue(const wxChar *szValue, wxMemoryBuffer& buffer) const bool wxRegKey::QueryValue(const wxString& szValue, wxMemoryBuffer& buffer) const
{ {
if ( CONST_CAST Open(Read) ) { if ( CONST_CAST Open(Read) ) {
// first get the type and size of the data // first get the type and size of the data
DWORD dwType, dwSize; DWORD dwType, dwSize;
m_dwLastError = RegQueryValueEx((HKEY) m_hKey, WXSTRINGCAST szValue, RESERVED, m_dwLastError = RegQueryValueEx((HKEY) m_hKey, RegValueStr(szValue),
&dwType, NULL, &dwSize); RESERVED,
&dwType, NULL, &dwSize);
if ( m_dwLastError == ERROR_SUCCESS ) { if ( m_dwLastError == ERROR_SUCCESS ) {
if ( dwSize ) { if ( dwSize ) {
const RegBinary pBuf = (RegBinary)buffer.GetWriteBuf(dwSize); const RegBinary pBuf = (RegBinary)buffer.GetWriteBuf(dwSize);
m_dwLastError = RegQueryValueEx((HKEY) m_hKey, m_dwLastError = RegQueryValueEx((HKEY) m_hKey,
WXSTRINGCAST szValue, RegValueStr(szValue),
RESERVED, RESERVED,
&dwType, &dwType,
pBuf, pBuf,
@@ -895,7 +906,7 @@ bool wxRegKey::QueryValue(const wxChar *szValue, wxMemoryBuffer& buffer) const
bool wxRegKey::QueryValue(const wxChar *szValue, bool wxRegKey::QueryValue(const wxString& szValue,
wxString& strValue, wxString& strValue,
bool WXUNUSED_IN_WINCE(raw)) const bool WXUNUSED_IN_WINCE(raw)) const
{ {
@@ -904,7 +915,9 @@ bool wxRegKey::QueryValue(const wxChar *szValue,
// first get the type and size of the data // first get the type and size of the data
DWORD dwType=REG_NONE, dwSize=0; DWORD dwType=REG_NONE, dwSize=0;
m_dwLastError = RegQueryValueEx((HKEY) m_hKey, WXSTRINGCAST szValue, RESERVED, m_dwLastError = RegQueryValueEx((HKEY) m_hKey,
RegValueStr(szValue),
RESERVED,
&dwType, NULL, &dwSize); &dwType, NULL, &dwSize);
if ( m_dwLastError == ERROR_SUCCESS ) if ( m_dwLastError == ERROR_SUCCESS )
{ {
@@ -917,7 +930,7 @@ bool wxRegKey::QueryValue(const wxChar *szValue,
else else
{ {
m_dwLastError = RegQueryValueEx((HKEY) m_hKey, m_dwLastError = RegQueryValueEx((HKEY) m_hKey,
WXSTRINGCAST szValue, RegValueStr(szValue),
RESERVED, RESERVED,
&dwType, &dwType,
(RegString)(wxChar*)wxStringBuffer(strValue, dwSize), (RegString)(wxChar*)wxStringBuffer(strValue, dwSize),
@@ -927,12 +940,12 @@ bool wxRegKey::QueryValue(const wxChar *szValue,
#ifndef __WXWINCE__ #ifndef __WXWINCE__
if ( (dwType == REG_EXPAND_SZ) && !raw ) if ( (dwType == REG_EXPAND_SZ) && !raw )
{ {
DWORD dwExpSize = ::ExpandEnvironmentStrings(strValue, NULL, 0); DWORD dwExpSize = ::ExpandEnvironmentStrings(strValue.wx_str(), NULL, 0);
bool ok = dwExpSize != 0; bool ok = dwExpSize != 0;
if ( ok ) if ( ok )
{ {
wxString strExpValue; wxString strExpValue;
ok = ::ExpandEnvironmentStrings(strValue, ok = ::ExpandEnvironmentStrings(strValue.wx_str(),
wxStringBuffer(strExpValue, dwExpSize), wxStringBuffer(strExpValue, dwExpSize),
dwExpSize dwExpSize
) != 0; ) != 0;
@@ -964,10 +977,12 @@ bool wxRegKey::QueryValue(const wxChar *szValue,
return false; return false;
} }
bool wxRegKey::SetValue(const wxChar *szValue, const wxString& strValue) bool wxRegKey::SetValue(const wxString& szValue, const wxString& strValue)
{ {
if ( CONST_CAST Open() ) { if ( CONST_CAST Open() ) {
m_dwLastError = RegSetValueEx((HKEY) m_hKey, szValue, (DWORD) RESERVED, REG_SZ, m_dwLastError = RegSetValueEx((HKEY) m_hKey,
RegValueStr(szValue),
(DWORD) RESERVED, REG_SZ,
(RegString)strValue.wx_str(), (RegString)strValue.wx_str(),
(strValue.Len() + 1)*sizeof(wxChar)); (strValue.Len() + 1)*sizeof(wxChar));
if ( m_dwLastError == ERROR_SUCCESS ) if ( m_dwLastError == ERROR_SUCCESS )
@@ -982,7 +997,7 @@ bool wxRegKey::SetValue(const wxChar *szValue, const wxString& strValue)
wxString wxRegKey::QueryDefaultValue() const wxString wxRegKey::QueryDefaultValue() const
{ {
wxString str; wxString str;
QueryValue(NULL, str); QueryValue(wxEmptyString, str, false);
return str; return str;
} }
@@ -1082,7 +1097,7 @@ bool wxRegKey::GetNextKey(wxString& strKeyName, long& lIndex) const
} }
// returns true if the value contains a number (else it's some string) // returns true if the value contains a number (else it's some string)
bool wxRegKey::IsNumericValue(const wxChar *szValue) const bool wxRegKey::IsNumericValue(const wxString& szValue) const
{ {
ValueType type = GetValueType(szValue); ValueType type = GetValueType(szValue);
switch ( type ) { switch ( type ) {
@@ -1220,9 +1235,10 @@ wxString wxRegKey::FormatValue(const wxString& name) const
// there can be no NULs here // there can be no NULs here
bool useHex = false; bool useHex = false;
for ( const wxChar *p = value.c_str(); *p && !useHex; p++ ) for ( wxString::const_iterator p = value.begin();
p != value.end() && !useHex; ++p )
{ {
switch ( *p ) switch ( (*p).GetValue() )
{ {
case _T('\n'): case _T('\n'):
// we can only represent this string in hex // we can only represent this string in hex
@@ -1380,17 +1396,17 @@ bool wxRegKey::DoExport(wxOutputStream& ostr) const
// implementation of global private functions // implementation of global private functions
// ============================================================================ // ============================================================================
bool KeyExists(WXHKEY hRootKey, const wxChar *szKey) bool KeyExists(WXHKEY hRootKey, const wxString& szKey)
{ {
// don't close this key itself for the case of empty szKey! // don't close this key itself for the case of empty szKey!
if ( wxIsEmpty(szKey) ) if ( szKey.empty() )
return true; return true;
HKEY hkeyDummy; HKEY hkeyDummy;
if ( ::RegOpenKeyEx if ( ::RegOpenKeyEx
( (
(HKEY)hRootKey, (HKEY)hRootKey,
szKey, szKey.wx_str(),
RESERVED, RESERVED,
KEY_READ, // we might not have enough rights for rw access KEY_READ, // we might not have enough rights for rw access
&hkeyDummy &hkeyDummy
@@ -1404,14 +1420,18 @@ bool KeyExists(WXHKEY hRootKey, const wxChar *szKey)
return false; return false;
} }
const wxChar *GetFullName(const wxRegKey *pKey, const wxChar *szValue) wxString GetFullName(const wxRegKey *pKey, const wxString& szValue)
{ {
static wxString s_str; wxString str(pKey->GetName());
s_str = pKey->GetName(); if ( !szValue.empty() )
if ( !wxIsEmpty(szValue) ) str << wxT("\\") << szValue;
s_str << wxT("\\") << szValue;
return s_str.c_str(); return str;
}
wxString GetFullName(const wxRegKey *pKey)
{
return pKey->GetName();
} }
inline void RemoveTrailingSeparator(wxString& str) inline void RemoveTrailingSeparator(wxString& str)
@@ -1419,3 +1439,8 @@ inline void RemoveTrailingSeparator(wxString& str)
if ( !str.empty() && str.Last() == REG_SEPARATOR ) if ( !str.empty() && str.Last() == REG_SEPARATOR )
str.Truncate(str.Len() - 1); str.Truncate(str.Len() - 1);
} }
inline const wxChar *RegValueStr(const wxString& szValue)
{
return szValue.empty() ? (const wxChar*)NULL : szValue.wx_str();
}