-// ============================================================================
-// global public functions
-// ============================================================================
-
-bool GetExtensionFromMimeType(wxString *pExt, const wxString& strMimeType)
-{
- // @@@ VZ: I don't know of any official documentation which mentions this
- // location, but as a matter of fact IE uses it, so why not we?
- static const char *szMimeDbase = "MIME\\Database\\Content Type\\";
-
- wxString strKey = szMimeDbase;
- strKey << strMimeType;
-
- // suppress possible error messages
- wxLogNull nolog;
- wxRegKey key(wxRegKey::HKCR, strKey);
- if ( key.Open() ) {
- if ( key.QueryValue("Extension", *pExt) )
- return TRUE;
- }
-
- // no such MIME type or no extension for it
- return FALSE;
-}
-
-bool GetMimeTypeFromExtension(wxString *pMimeType, const wxString& strExt)
-{
- wxCHECK( !strExt.IsEmpty(), FALSE );
-
- // add the leading point if necessary
- wxString str;
- if ( strExt[0] != '.' ) {
- str = '.';
- }
- str << strExt;
-
- // suppress possible error messages
- wxLogNull nolog;
- wxRegKey key(wxRegKey::HKCR, str);
- if ( key.Open() ) {
- if ( key.QueryValue("Content Type", *pMimeType) )
- return TRUE;
- }
-
- // no such extension or no content-type
- return FALSE;
-}
-
-bool GetFileTypeFromExtension(wxString *pFileType, const wxString& strExt)
-{
- wxCHECK( !strExt.IsEmpty(), FALSE );
-
- // add the leading point if necessary
- wxString str;
- if ( strExt[0] != '.' ) {
- str = '.';
- }
- str << strExt;
-
- // suppress possible error messages
- wxLogNull nolog;
- wxRegKey key(wxRegKey::HKCR, str);
- 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;
-}
-
-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;
-}
-