]> git.saurik.com Git - wxWidgets.git/commitdiff
minor fixes
authorVadim Zeitlin <vadim@wxwidgets.org>
Sun, 23 Aug 1998 22:21:47 +0000 (22:21 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Sun, 23 Aug 1998 22:21:47 +0000 (22:21 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@629 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

src/msw/regconf.cpp
src/msw/registry.cpp

index 991e334f5b5ba7d8f991718bcaf4530177439dea..9b6bdf0962b40cf2884ab983c19f9eef32637585 100644 (file)
@@ -78,6 +78,9 @@ wxRegConfig::wxRegConfig(const wxString& strRoot)
   // Create() will Open() if key already exists
   m_keyLocalRoot.Create();
 
+  // as it's the same key, Open() shouldn't fail (i.e. no need for Create())
+  m_keyLocal.Open();
+
   wxLogNull nolog;
   m_keyGlobalRoot.Open();
 }
@@ -94,10 +97,9 @@ void wxRegConfig::SetPath(const wxString& strPath)
 {
   wxArrayString aParts;
 
-  if ( strPath.IsEmpty() )
-    return;
-
-  if ( strPath[0] == wxCONFIG_PATH_SEPARATOR ) {
+  // because GetPath() returns "" when we're at root, we must understand
+  // empty string as "/"
+  if ( strPath.IsEmpty() || (strPath[0] == wxCONFIG_PATH_SEPARATOR) ) {
     // absolute path
     wxSplitPath(aParts, strPath);
   }
@@ -278,14 +280,19 @@ bool wxRegConfig::Read(wxString *pStr,
   // first try local key
   if ( TryGetValue(m_keyLocal, path.Name(), *pStr) ||
        (bQueryGlobal && TryGetValue(m_keyGlobal, path.Name(), *pStr)) ) {
-    return TRUE;
+    // nothing to do
+  }
+  else {
+    if ( IsRecordingDefaults() ) {
+      ((wxRegConfig*)this)->Write(szKey, szDefault);
+    }
+
+    // default value
+    *pStr = szDefault;
   }
 
-  if(IsRecordingDefaults())
-     ((wxRegConfig*)this)->Write(szKey,szDefault);
+  *pStr = wxConfigBase::ExpandEnvVars(*pStr);
 
-  // default value
-  *pStr = szDefault;
   return FALSE;
 }
 
index bf05ac66482843d430948c4e050aafa92d3b398f..8523ad298927911bcb0c06cfa6e595973f4f1f76 100644 (file)
@@ -32,6 +32,8 @@
 #include  "wx/intl.h"
 #include  "wx/log.h"
 
+#include  "wx/config.h"    // for wxExpandEnvVars
+
 // Windows headers
 /*
 #define   STRICT
@@ -804,7 +806,7 @@ bool GetExtensionFromMimeType(wxString *pExt, const wxString& strMimeType)
   // suppress possible error messages
   wxLogNull nolog;
   wxRegKey key(wxRegKey::HKCR, strKey);
-  if ( key.IsOpened() ) {
+  if ( key.Open() ) {
     if ( key.QueryValue("Extension", *pExt) )
       return TRUE;
   }
@@ -827,7 +829,7 @@ bool GetMimeTypeFromExtension(wxString *pMimeType, const wxString& strExt)
   // suppress possible error messages
   wxLogNull nolog;
   wxRegKey key(wxRegKey::HKCR, str);
-  if ( key.IsOpened() ) {
+  if ( key.Open() ) {
     if ( key.QueryValue("Content Type", *pMimeType) )
       return TRUE;
   }
@@ -850,11 +852,74 @@ bool GetFileTypeFromExtension(wxString *pFileType, const wxString& strExt)
   // suppress possible error messages
   wxLogNull nolog;
   wxRegKey key(wxRegKey::HKCR, str);
-  if ( key.IsOpened() ) {
+  if ( key.Open() ) {
     if ( key.QueryValue("", *pFileType) )  // it's the default value of the key
       return TRUE;
   }
 
   // no such extension or no value
   return FALSE;
-}
\ No newline at end of file
+}
+
+bool GetFileTypeIcon(wxIcon *pIcon, const wxString& strFileType)
+{
+  wxCHECK( !strFileType.IsEmpty(), FALSE );
+
+  wxString strIconKey;
+  strIconKey << strFileType << REG_SEPARATOR << "DefaultIcon";
+
+  // suppress possible error messages
+  wxLogNull nolog;
+  wxRegKey key(wxRegKey::HKCR, strIconKey);
+
+  if ( key.Open() ) {
+    wxString strIcon;
+    if ( key.QueryValue("", strIcon) ) { // it's the default value of the key
+      // the format is the following: <full path to file>, <icon index>
+      // NB: icon index may be negative as well as positive and the full path
+      //     may contain the environment variables inside '%'
+      wxString strFullPath = strIcon.Before(','),
+               strIndex = strIcon.After(',');
+
+      // unless I misunderstand the format (may be index may be ommited, I
+      // don't know)
+      wxASSERT( !(strFullPath.IsEmpty() || strIndex.IsEmpty()) );
+
+      wxString strExpPath = wxExpandEnvVars(strFullPath);
+      int nIndex = atoi(strIndex);
+
+      HICON hIcon = ExtractIcon(GetModuleHandle(NULL), strExpPath, nIndex);
+      switch ( (int)hIcon ) {
+        case 0: // means no icons were found
+        case 1: // means no such file or it wasn't a DLL/EXE/OCX/ICO/...
+          wxLogDebug("incorrect registry entry '%s': no such icon.",
+                     GetFullName(&key));
+          break;
+
+        default:
+          pIcon->SetHICON((WXHICON)hIcon);
+          return TRUE;
+      }
+    }
+  }
+
+  // no such file type or no value or incorrect icon entry
+  return FALSE;
+}
+
+bool GetFileTypeDescription(wxString *pDesc, const wxString& strFileType)
+{
+  wxCHECK( !strFileType.IsEmpty(), FALSE );
+
+  // suppress possible error messages
+  wxLogNull nolog;
+  wxRegKey key(wxRegKey::HKCR, strFileType);
+
+  if ( key.Open() ) {
+    if ( key.QueryValue("", *pDesc) )  // it's the default value of the key
+      return TRUE;
+  }
+
+  // no such file type or no value
+  return FALSE;
+}