From 412868125383196d472cdf13be7548b219df07d9 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Sun, 23 Aug 1998 22:21:47 +0000 Subject: [PATCH] minor fixes git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@629 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- src/msw/regconf.cpp | 25 +++++++++------ src/msw/registry.cpp | 73 +++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 85 insertions(+), 13 deletions(-) diff --git a/src/msw/regconf.cpp b/src/msw/regconf.cpp index 991e334f5b..9b6bdf0962 100644 --- a/src/msw/regconf.cpp +++ b/src/msw/regconf.cpp @@ -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; } diff --git a/src/msw/registry.cpp b/src/msw/registry.cpp index bf05ac6648..8523ad2989 100644 --- a/src/msw/registry.cpp +++ b/src/msw/registry.cpp @@ -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: , + // 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; +}