// 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();
}
{
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);
}
// 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;
}
#include "wx/intl.h"
#include "wx/log.h"
+#include "wx/config.h" // for wxExpandEnvVars
+
// Windows headers
/*
#define STRICT
// suppress possible error messages
wxLogNull nolog;
wxRegKey key(wxRegKey::HKCR, strKey);
- if ( key.IsOpened() ) {
+ if ( key.Open() ) {
if ( key.QueryValue("Extension", *pExt) )
return TRUE;
}
// 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;
}
// 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;
+}