X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/33ac7e6f01acbac1cff0ad400d8ea7f0bfd0a62f..cc402e6431b66a8eb7d567caa55a1bece42902b7:/src/common/mimecmn.cpp diff --git a/src/common/mimecmn.cpp b/src/common/mimecmn.cpp index 3ddea52b66..e04e17bc47 100644 --- a/src/common/mimecmn.cpp +++ b/src/common/mimecmn.cpp @@ -7,7 +7,7 @@ // Created: 23.09.98 // RCS-ID: $Id$ // Copyright: (c) 1998 Vadim Zeitlin -// Licence: wxWindows license (part of wxExtra library) +// Licence: wxWindows licence (part of wxExtra library) ///////////////////////////////////////////////////////////////////////////// // ============================================================================ @@ -24,25 +24,21 @@ // for compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" -#include "wx/module.h" #ifdef __BORLANDC__ - #pragma hdrstop + #pragma hdrstop #endif -#ifndef WX_PRECOMP - #include "wx/defs.h" -#endif +#if wxUSE_MIMETYPE #ifndef WX_PRECOMP #include "wx/string.h" - #if wxUSE_GUI - #include "wx/icon.h" - #endif #endif //WX_PRECOMP +#include "wx/module.h" #include "wx/log.h" #include "wx/file.h" +#include "wx/iconloc.h" #include "wx/intl.h" #include "wx/dynarray.h" #include "wx/confbase.h" @@ -57,8 +53,9 @@ #include "wx/msw/mimetype.h" #elif defined(__WXMAC__) #include "wx/mac/mimetype.h" -#elif defined(__WXPM__) +#elif defined(__WXPM__) || defined (__EMX__) #include "wx/os2/mimetype.h" + #undef __UNIX__ #else // Unix #include "wx/unix/mimetype.h" #endif @@ -71,10 +68,10 @@ // wxFileTypeInfo // ---------------------------------------------------------------------------- -wxFileTypeInfo::wxFileTypeInfo(const char *mimeType, - const char *openCmd, - const char *printCmd, - const char *desc, +wxFileTypeInfo::wxFileTypeInfo(const wxChar *mimeType, + const wxChar *openCmd, + const wxChar *printCmd, + const wxChar *desc, ...) : m_mimeType(mimeType), m_openCmd(openCmd), @@ -86,7 +83,7 @@ wxFileTypeInfo::wxFileTypeInfo(const char *mimeType, for ( ;; ) { - const char *ext = va_arg(argptr, const char *); + const wxChar *ext = va_arg(argptr, const wxChar *); if ( !ext ) { // NULL terminates the list @@ -266,33 +263,41 @@ bool wxFileType::GetMimeTypes(wxArrayString& mimeTypes) const return m_impl->GetMimeTypes(mimeTypes); } -bool wxFileType::GetIcon(wxIcon *icon, - wxString *iconFile, - int *iconIndex) const +bool wxFileType::GetIcon(wxIconLocation *iconLoc) const { if ( m_info ) { - if ( iconFile ) - *iconFile = m_info->GetIconFile(); - if ( iconIndex ) - *iconIndex = m_info->GetIconIndex(); - -#if wxUSE_GUI - if ( icon && !m_info->GetIconFile().empty() ) + if ( iconLoc ) { - // FIXME: what about the index? - icon->LoadFile(m_info->GetIconFile()); + iconLoc->SetFileName(m_info->GetIconFile()); +#ifdef __WXMSW__ + iconLoc->SetIndex(m_info->GetIconIndex()); +#endif // __WXMSW__ } -#endif // wxUSE_GUI return TRUE; } -#if defined(__WXMSW__) || defined(__UNIX__) - return m_impl->GetIcon(icon, iconFile, iconIndex); -#else - return m_impl->GetIcon(icon); -#endif + return m_impl->GetIcon(iconLoc); +} + +bool +wxFileType::GetIcon(wxIconLocation *iconloc, + const MessageParameters& params) const +{ + if ( !GetIcon(iconloc) ) + { + return false; + } + + // we may have "%s" in the icon location string, at least under Windows, so + // expand this + if ( iconloc ) + { + iconloc->SetFileName(ExpandCommand(iconloc->GetFileName(), params)); + } + + return true; } bool wxFileType::GetDescription(wxString *desc) const @@ -325,6 +330,18 @@ wxFileType::GetOpenCommand(wxString *openCmd, return m_impl->GetOpenCommand(openCmd, params); } +wxString wxFileType::GetOpenCommand(const wxString& filename) const +{ + wxString cmd; + if ( !GetOpenCommand(&cmd, filename) ) + { + // return empty string to indicate an error + cmd.clear(); + } + + return cmd; +} + bool wxFileType::GetPrintCommand(wxString *printCmd, const wxFileType::MessageParameters& params) const @@ -411,7 +428,7 @@ bool wxFileType::SetDefaultIcon(const wxString& cmd, int index) // VZ: should we do this? // chris elliott : only makes sense in MS windows if ( sTmp.empty() ) - GetOpenCommand(&sTmp, wxFileType::MessageParameters("", "")); + GetOpenCommand(&sTmp, wxFileType::MessageParameters(wxT(""), wxT(""))); #endif wxCHECK_MSG( !sTmp.empty(), FALSE, _T("need the icon file") ); @@ -471,7 +488,7 @@ wxMimeTypesManager::~wxMimeTypesManager() bool wxMimeTypesManager::Unassociate(wxFileType *ft) { -#if defined(__UNIX__) +#if defined(__UNIX__) && !defined(__CYGWIN__) && !defined(__WINE__) return m_impl->Unassociate(ft); #else return ft->Unassociate(); @@ -522,11 +539,11 @@ wxMimeTypesManager::GetFileTypeFromMimeType(const wxString& mimeType) EnsureImpl(); wxFileType *ft = m_impl->GetFileTypeFromMimeType(mimeType); - if ( ft ) { + if ( !ft ) { // check the fallbacks // - // TODO linear search is potentially slow, perhaps we should use a sorted - // array? + // TODO linear search is potentially slow, perhaps we should use a + // sorted array? size_t count = m_fallbacks.GetCount(); for ( size_t n = 0; n < count; n++ ) { if ( wxMimeTypesManager::IsOfType(mimeType, @@ -581,7 +598,7 @@ size_t wxMimeTypesManager::EnumAllFileTypes(wxArrayString& mimetypes) void wxMimeTypesManager::Initialize(int mcapStyle, const wxString& sExtraDir) { -#ifdef __UNIX__ +#if defined(__UNIX__) && !defined(__CYGWIN__) && !defined(__WINE__) EnsureImpl(); m_impl->Initialize(mcapStyle, sExtraDir); @@ -594,7 +611,7 @@ void wxMimeTypesManager::Initialize(int mcapStyle, // and this function clears all the data from the manager void wxMimeTypesManager::ClearData() { -#ifdef __UNIX__ +#if defined(__UNIX__) && !defined(__CYGWIN__) && !defined(__WINE__) EnsureImpl(); m_impl->ClearData(); @@ -623,6 +640,7 @@ public: { delete gs_mimeTypesManager.m_impl; gs_mimeTypesManager.m_impl = NULL; + gs_mimeTypesManager.m_fallbacks.Clear(); } } @@ -630,3 +648,5 @@ public: }; IMPLEMENT_DYNAMIC_CLASS(wxMimeTypeCmnModule, wxModule) + +#endif // wxUSE_MIMETYPE