]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/registry.cpp
Implement support for gradient stops for OS X.
[wxWidgets.git] / src / msw / registry.cpp
index 6ba78d3c250085ddbb024db28851a8db272a3c9e..57eea64341e2381f4d5b7d9737bbe82568d086c6 100644 (file)
@@ -19,6 +19,8 @@
     #pragma hdrstop
 #endif
 
+#if wxUSE_REGKEY
+
 #ifndef WX_PRECOMP
     #include "wx/msw/wrapwin.h"
     #include "wx/string.h"
@@ -292,6 +294,18 @@ void wxRegKey::SetHkey(WXHKEY hKey)
   Close();
 
   m_hKey = hKey;
+
+  // we don't know the parent of this key, assume HKLM by default
+  m_hRootKey = HKEY_LOCAL_MACHINE;
+
+  // we don't know in which mode was this key opened but we can't reopen it
+  // anyhow because we don't know its name, so the only thing we can is to hope
+  // that it allows all the operations which we're going to perform on it
+  m_mode = Write;
+
+  // reset old data
+  m_strKey.empty();
+  m_dwLastError = 0;
 }
 
 // ----------------------------------------------------------------------------
@@ -312,7 +326,7 @@ wxString wxRegKey::GetName(bool bShortPrefix) const
   wxString str = bShortPrefix ? aStdKeys[key].szShortName
                               : aStdKeys[key].szName;
   if ( !m_strKey.empty() )
-    str << _T("\\") << m_strKey;
+    str << wxT("\\") << m_strKey;
 
   return str;
 }
@@ -330,7 +344,7 @@ bool wxRegKey::GetKeyInfo(size_t *pnSubKeys,
 #endif
 
   // it might be unexpected to some that this function doesn't open the key
-  wxASSERT_MSG( IsOpened(), _T("key should be opened in GetKeyInfo") );
+  wxASSERT_MSG( IsOpened(), wxT("key should be opened in GetKeyInfo") );
 
   m_dwLastError = ::RegQueryInfoKey
                   (
@@ -383,7 +397,7 @@ bool wxRegKey::Open(AccessMode mode)
     m_dwLastError = ::RegOpenKeyEx
                     (
                         (HKEY) m_hRootKey,
-                        m_strKey.wx_str(),
+                        m_strKey.t_str(),
                         RESERVED,
                         mode == Read ? KEY_READ : KEY_ALL_ACCESS,
                         &tmpKey
@@ -424,7 +438,7 @@ bool wxRegKey::Create(bool bOkIfExists)
       &tmpKey,
       &disposition);
 #else
-  m_dwLastError = RegCreateKey((HKEY) m_hRootKey, m_strKey.wx_str(), &tmpKey);
+  m_dwLastError = RegCreateKey((HKEY) m_hRootKey, m_strKey.t_str(), &tmpKey);
 #endif
   if ( m_dwLastError != ERROR_SUCCESS ) {
     wxLogSysError(m_dwLastError, _("Can't create registry key '%s'"),
@@ -532,7 +546,7 @@ bool wxRegKey::CopyValue(const wxString& szValue,
 
 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, wxT("registry hives can't be renamed") );
 
     if ( !Exists() ) {
         wxLogError(_("Registry key '%s' does not exist, cannot rename it."),
@@ -696,7 +710,7 @@ bool wxRegKey::DeleteSelf()
   // now delete this key itself
   Close();
 
-  m_dwLastError = RegDeleteKey((HKEY) m_hRootKey, m_strKey.wx_str());
+  m_dwLastError = RegDeleteKey((HKEY) m_hRootKey, m_strKey.t_str());
   // deleting a key which doesn't exist is not considered an error
   if ( m_dwLastError != ERROR_SUCCESS &&
           m_dwLastError != ERROR_FILE_NOT_FOUND ) {
@@ -940,12 +954,12 @@ bool wxRegKey::QueryValue(const wxString& szValue,
 #ifndef __WXWINCE__
                 if ( (dwType == REG_EXPAND_SZ) && !raw )
                 {
-                    DWORD dwExpSize = ::ExpandEnvironmentStrings(strValue.wx_str(), NULL, 0);
+                    DWORD dwExpSize = ::ExpandEnvironmentStrings(strValue.t_str(), NULL, 0);
                     bool ok = dwExpSize != 0;
                     if ( ok )
                     {
                         wxString strExpValue;
-                        ok = ::ExpandEnvironmentStrings(strValue.wx_str(),
+                        ok = ::ExpandEnvironmentStrings(strValue.t_str(),
                                                         wxStringBuffer(strExpValue, dwExpSize),
                                                         dwExpSize
                                                         ) != 0;
@@ -954,7 +968,7 @@ bool wxRegKey::QueryValue(const wxString& szValue,
 
                     if ( !ok )
                     {
-                        wxLogLastError(_T("ExpandEnvironmentStrings"));
+                        wxLogLastError(wxT("ExpandEnvironmentStrings"));
                     }
                 }
 #endif
@@ -1159,7 +1173,7 @@ bool wxRegKey::Export(const wxString& filename) const
         return false;
     }
 
-    wxFFileOutputStream ostr(filename, _T("w"));
+    wxFFileOutputStream ostr(filename, wxT("w"));
 
     return ostr.Ok() && Export(ostr);
 #else
@@ -1185,26 +1199,26 @@ FormatAsHex(const void *data,
             size_t size,
             wxRegKey::ValueType type = wxRegKey::Type_Binary)
 {
-    wxString value(_T("hex"));
+    wxString value(wxT("hex"));
 
     // binary values use just "hex:" prefix while the other ones must indicate
     // the real type
     if ( type != wxRegKey::Type_Binary )
-        value << _T('(') << type << _T(')');
-    value << _T(':');
+        value << wxT('(') << type << wxT(')');
+    value << wxT(':');
 
     // write all the rest as comma-separated bytes
     value.reserve(3*size + 10);
-    const char * const p = wx_static_cast(const char *, data);
+    const char * const p = static_cast<const char *>(data);
     for ( size_t n = 0; n < size; n++ )
     {
         // TODO: line wrapping: although not required by regedit, this makes
         //       the generated files easier to read and compare with the files
         //       produced by regedit
         if ( n )
-            value << _T(',');
+            value << wxT(',');
 
-        value << wxString::Format(_T("%02x"), (unsigned char)p[n]);
+        value << wxString::Format(wxT("%02x"), (unsigned char)p[n]);
     }
 
     return value;
@@ -1231,7 +1245,7 @@ wxString wxRegKey::FormatValue(const wxString& name) const
                 // quotes and backslashes must be quoted, linefeeds are not
                 // allowed in string values
                 rhs.reserve(value.length() + 2);
-                rhs = _T('"');
+                rhs = wxT('"');
 
                 // there can be no NULs here
                 bool useHex = false;
@@ -1240,15 +1254,15 @@ wxString wxRegKey::FormatValue(const wxString& name) const
                 {
                     switch ( (*p).GetValue() )
                     {
-                        case _T('\n'):
+                        case wxT('\n'):
                             // we can only represent this string in hex
                             useHex = true;
                             break;
 
-                        case _T('"'):
-                        case _T('\\'):
+                        case wxT('"'):
+                        case wxT('\\'):
                             // escape special symbol
-                            rhs += _T('\\');
+                            rhs += wxT('\\');
                             // fall through
 
                         default:
@@ -1259,7 +1273,7 @@ wxString wxRegKey::FormatValue(const wxString& name) const
                 if ( useHex )
                     rhs = FormatAsHex(value, Type_String);
                 else
-                    rhs += _T('"');
+                    rhs += wxT('"');
             }
             break;
 
@@ -1270,7 +1284,7 @@ wxString wxRegKey::FormatValue(const wxString& name) const
                 if ( !QueryValue(name, &value) )
                     break;
 
-                rhs.Printf(_T("dword:%08x"), (unsigned int)value);
+                rhs.Printf(wxT("dword:%08x"), (unsigned int)value);
             }
             break;
 
@@ -1362,7 +1376,7 @@ bool wxRegKey::DoExport(wxOutputStream& ostr) const
     // dump all our values
     long dummy;
     wxString name;
-    wxRegKey& self = wx_const_cast(wxRegKey&, *this);
+    wxRegKey& self = const_cast<wxRegKey&>(*this);
     bool cont = self.GetFirstValue(name, dummy);
     while ( cont )
     {
@@ -1406,7 +1420,7 @@ bool KeyExists(WXHKEY hRootKey, const wxString& szKey)
     if ( ::RegOpenKeyEx
          (
             (HKEY)hRootKey,
-            szKey.wx_str(),
+            szKey.t_str(),
             RESERVED,
             KEY_READ,        // we might not have enough rights for rw access
             &hkeyDummy
@@ -1442,5 +1456,7 @@ inline void RemoveTrailingSeparator(wxString& str)
 
 inline const wxChar *RegValueStr(const wxString& szValue)
 {
-    return szValue.empty() ? (const wxChar*)NULL : szValue.wx_str();
+    return szValue.empty() ? (const wxChar*)NULL : szValue.t_str();
 }
+
+#endif // wxUSE_REGKEY