]> git.saurik.com Git - wxWidgets.git/blobdiff - src/os2/mimetype.cpp
Fix for crash when opening empty node
[wxWidgets.git] / src / os2 / mimetype.cpp
index 28ba45db1fb581d316b7a0b4b224a26050ee1506..69cec9db89ceb3007d522783d54d89670e0feb26 100644 (file)
@@ -1,34 +1,40 @@
 /////////////////////////////////////////////////////////////////////////////
-// Name:        common/mimetype.cpp
+// Name:        src/os2/mimetype.cpp
 // Purpose:     classes and functions to manage MIME types
 // Author:      David Webster
 // Modified by:
 // Created:     01.21.00
 // RCS-ID:      $Id$
 // Copyright:   Adopted from msw port --(c) 1998 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr>
-// Licence:     wxWindows license (part of wxExtra library)
+// Licence:     wxWindows licence (part of wxExtra library)
 /////////////////////////////////////////////////////////////////////////////
 
+// For compilers that support precompilation, includes "wx.h".
+#include "wx/wxprec.h"
+
+#if wxUSE_MIMETYPE
+
+#include "wx/os2/mimetype.h"
+
+#ifndef WX_PRECOMP
+    #include "wx/dynarray.h"
+    #include "wx/string.h"
+    #include "wx/intl.h"
+    #include "wx/log.h"
+    #if wxUSE_GUI
+        #include "wx/icon.h"
+    #endif
+#endif //WX_PRECOMP
+
 #define INCL_DOS
 #define INCL_GPI
 #define INCL_WIN
 #include <os2.h>
 
-#ifndef WX_PRECOMP
-  #include "wx/string.h"
-  #if wxUSE_GUI
-    #include "wx/icon.h"
-  #endif
-#endif //WX_PRECOMP
-
-#include "wx/log.h"
 #include "wx/file.h"
-#include "wx/intl.h"
-#include "wx/dynarray.h"
+#include "wx/iconloc.h"
 #include "wx/confbase.h"
 
-#include "wx/os2/mimetype.h"
-
 // other standard headers
 #include <ctype.h>
 
@@ -59,7 +65,7 @@ class WXDLLEXPORT wxIcon;
 // location, uses it, so it isn't likely to change
 static const wxChar *MIME_DATABASE_KEY = wxT("MIME\\Database\\Content Type\\");
 
-wxString wxFileTypeImpl::GetCommand(const wxChar *verb) const
+wxString wxFileTypeImpl::GetCommand(const wxChar *WXUNUSED(verb)) const
 {
 // TODO: OS/2 doesn't have a registry but uses Prf
 /*
@@ -91,7 +97,7 @@ wxString wxFileTypeImpl::GetCommand(const wxChar *verb) const
             // NB: we don't make any attempt to verify that the string is valid,
             //     i.e. doesn't contain %2, or second %1 or .... But we do make
             //     sure that we return a string with _exactly_ one '%s'!
-            bool foundFilename = FALSE;
+            bool foundFilename = false;
             size_t len = command.Len();
             for ( size_t n = 0; (n < len) && !foundFilename; n++ ) {
                 if ( command[n] == wxT('%') &&
@@ -101,7 +107,7 @@ wxString wxFileTypeImpl::GetCommand(const wxChar *verb) const
                     // replace it with '%s'
                     command[n + 1] = wxT('s');
 
-                    foundFilename = TRUE;
+                    foundFilename = true;
                 }
             }
 
@@ -162,7 +168,7 @@ wxFileTypeImpl::GetOpenCommand(wxString *openCmd,
 
     *openCmd = wxFileType::ExpandCommand(cmd, params);
 
-    return !openCmd->IsEmpty();
+    return !openCmd->empty();
 }
 
 bool
@@ -180,7 +186,7 @@ wxFileTypeImpl::GetPrintCommand(wxString *printCmd,
 
     *printCmd = wxFileType::ExpandCommand(cmd, params);
 
-    return !printCmd->IsEmpty();
+    return !printCmd->empty();
 }
 
 // TODO this function is half implemented
@@ -189,19 +195,19 @@ bool wxFileTypeImpl::GetExtensions(wxArrayString& extensions)
     if ( m_info ) {
         extensions = m_info->GetExtensions();
 
-        return TRUE;
+        return true;
     }
-    else if ( m_ext.IsEmpty() ) {
+    else if ( m_ext.empty() ) {
         // the only way to get the list of extensions from the file type is to
         // scan through all extensions in the registry - too slow...
-        return FALSE;
+        return false;
     }
     else {
         extensions.Empty();
         extensions.Add(m_ext);
 
         // it's a lie too, we don't return _all_ extensions...
-        return TRUE;
+        return true;
     }
 }
 
@@ -211,7 +217,7 @@ bool wxFileTypeImpl::GetMimeType(wxString *mimeType) const
         // we already have it
         *mimeType = m_info->GetMimeType();
 
-        return TRUE;
+        return true;
     }
 
     // suppress possible error messages
@@ -220,21 +226,34 @@ bool wxFileTypeImpl::GetMimeType(wxString *mimeType) const
 /*
     wxRegKey key(wxRegKey::HKCR, wxT(".") + m_ext);
     if ( key.Open() && key.QueryValue(wxT("Content Type"), *mimeType) ) {
-        return TRUE;
+        return true;
     }
     else {
-        return FALSE;
+        return false;
     }
 */
-  return FALSE;
+    return false;
+}
+
+bool wxFileTypeImpl::GetMimeTypes(wxArrayString& mimeTypes) const
+{
+    wxString s;
+
+    if (GetMimeType(&s))
+    {
+        mimeTypes.Clear();
+        mimeTypes.Add(s);
+        return true;
+    }
+    else
+        return false;
 }
 
-bool wxFileTypeImpl::GetIcon(wxIcon *icon) const
+bool wxFileTypeImpl::GetIcon(wxIconLocation *WXUNUSED(iconLoc)) const
 {
-#if wxUSE_GUI
     if ( m_info ) {
         // we don't have icons in the fallback resources
-        return FALSE;
+        return false;
     }
 
     wxString strIconKey;
@@ -249,7 +268,7 @@ bool wxFileTypeImpl::GetIcon(wxIcon *icon) const
     if ( key.Open() ) {
         wxString strIcon;
         // it's the default value of the key
-        if ( key.QueryValue(wxT(""), strIcon) ) {
+        if ( key.QueryValue(wxEmptyString, strIcon) ) {
             // 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 '%'
@@ -258,33 +277,25 @@ bool wxFileTypeImpl::GetIcon(wxIcon *icon) const
 
             // index may be omitted, in which case BeforeLast(',') is empty and
             // AfterLast(',') is the whole string
-            if ( strFullPath.IsEmpty() ) {
+            if ( strFullPath.empty() ) {
                 strFullPath = strIndex;
                 strIndex = wxT("0");
             }
 
-            wxString strExpPath = wxExpandEnvVars(strFullPath);
-            int nIndex = wxAtoi(strIndex);
+            if ( iconLoc )
+            {
+                iconLoc->SetFileName(wxExpandEnvVars(strFullPath));
 
-            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(wxT("incorrect registry entry '%s': no such icon."),
-                               key.GetName().c_str());
-                    break;
-
-                default:
-                    icon->SetHICON((WXHICON)hIcon);
-                    return TRUE;
+                iconLoc->SetIndex(wxAtoi(strIndex));
             }
+
+            return true;
         }
     }
 
     // no such file type or no value or incorrect icon entry
 */
-#endif // wxUSE_GUI
-    return FALSE;
+    return false;
 }
 
 bool wxFileTypeImpl::GetDescription(wxString *desc) const
@@ -293,7 +304,7 @@ bool wxFileTypeImpl::GetDescription(wxString *desc) const
         // we already have it
         *desc = m_info->GetDescription();
 
-        return TRUE;
+        return true;
     }
 
     // suppress possible error messages
@@ -305,11 +316,11 @@ bool wxFileTypeImpl::GetDescription(wxString *desc) const
     if ( key.Open() ) {
         // it's the default value of the key
         if ( key.QueryValue(wxT(""), *desc) ) {
-            return TRUE;
+            return true;
         }
     }
 */
-    return FALSE;
+    return false;
 }
 
 // extension -> file type
@@ -326,7 +337,7 @@ wxMimeTypesManagerImpl::GetFileTypeFromExtension(const wxString& ext)
     // suppress possible error messages
     wxLogNull nolog;
 
-    bool knownExtension = FALSE;
+    bool knownExtension = false;
 
     wxString strFileType;
 // TODO:
@@ -345,7 +356,7 @@ wxMimeTypesManagerImpl::GetFileTypeFromExtension(const wxString& ext)
             // this extension doesn't have a filetype, but it's known to the
             // system and may be has some other useful keys (open command or
             // content-type), so still return a file type object for it
-            knownExtension = TRUE;
+            knownExtension = true;
         }
     }
 */
@@ -414,7 +425,7 @@ wxMimeTypesManagerImpl::GetFileTypeFromMimeType(const wxString& mimeType)
     return NULL;
 }
 
-size_t wxMimeTypesManagerImpl::EnumAllFileTypes(wxArrayString& mimetypes)
+size_t wxMimeTypesManagerImpl::EnumAllFileTypes(wxArrayString& WXUNUSED(mimetypes))
 {
     // enumerate all keys under MIME_DATABASE_KEY
 // TODO:
@@ -436,3 +447,4 @@ size_t wxMimeTypesManagerImpl::EnumAllFileTypes(wxArrayString& mimetypes)
   return 0;
 }
 
+#endif //wxUSE_MIMETYPE