X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/a6c65e881e42bfed000fbcac31ac8c1db2729152..9ac71bef070f553f4ecef2c549dba33b10422f06:/src/common/mimecmn.cpp diff --git a/src/common/mimecmn.cpp b/src/common/mimecmn.cpp index 278d3bc4af..ec2f6695a4 100644 --- a/src/common/mimecmn.cpp +++ b/src/common/mimecmn.cpp @@ -24,15 +24,18 @@ // for compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" -#include "wx/module.h" #ifdef __BORLANDC__ - #pragma hdrstop + #pragma hdrstop #endif +#if wxUSE_MIMETYPE + #ifndef WX_PRECOMP - #include "wx/defs.h" + #include "wx/module.h" #endif +// this one is needed for MSVC5 +#include "wx/module.h" #ifndef WX_PRECOMP #include "wx/string.h" @@ -55,9 +58,9 @@ // implementation classes: #if defined(__WXMSW__) #include "wx/msw/mimetype.h" -#elif defined (__WXMAC__) +#elif defined(__WXMAC__) #include "wx/mac/mimetype.h" -#elif defined (__WXPM__) +#elif defined(__WXPM__) #include "wx/os2/mimetype.h" #else // Unix #include "wx/unix/mimetype.h" @@ -99,6 +102,21 @@ wxFileTypeInfo::wxFileTypeInfo(const char *mimeType, va_end(argptr); } + +wxFileTypeInfo::wxFileTypeInfo(const wxArrayString& sArray) +{ + m_mimeType = sArray [0u]; + m_openCmd = sArray [1u]; + m_printCmd = sArray [2u]; + m_desc = sArray [3u]; + + size_t count = sArray.GetCount(); + for ( size_t i = 4; i < count; i++ ) + { + m_exts.Add(sArray[i]); + } +} + #include "wx/arrimpl.cpp" WX_DEFINE_OBJARRAY(wxArrayFileTypeInfo); @@ -182,6 +200,8 @@ wxString wxFileType::ExpandCommand(const wxString& command, // behave like this, in particular a common test is 'test -n "$DISPLAY"' // and appending "< %s" to this command makes the test fail... I don't // know of the correct solution, try to guess what we have to do. + + // test now carried out on reading file so test should never get here if ( !hasFilename && !str.IsEmpty() #ifdef __UNIX__ && !str.StartsWith(_T("test ")) @@ -207,7 +227,8 @@ wxFileType::wxFileType() wxFileType::~wxFileType() { - delete m_impl; + if ( m_impl ) + delete m_impl; } bool wxFileType::GetExtensions(wxArrayString& extensions) @@ -270,7 +291,7 @@ bool wxFileType::GetIcon(wxIcon *icon, return TRUE; } -#ifdef __WXMSW__ +#if defined(__WXMSW__) || defined(__UNIX__) return m_impl->GetIcon(icon, iconFile, iconIndex); #else return m_impl->GetIcon(icon); @@ -307,6 +328,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 @@ -333,9 +366,9 @@ size_t wxFileType::GetAllCommands(wxArrayString *verbs, if ( commands ) commands->Clear(); -#ifdef __WXMSW__ +#if defined (__WXMSW__) || defined(__UNIX__) return m_impl->GetAllCommands(verbs, commands, params); -#else // !__WXMSW__ +#else // !__WXMSW__ || Unix // we don't know how to retrieve all commands, so just try the 2 we know // about size_t count = 0; @@ -360,19 +393,53 @@ size_t wxFileType::GetAllCommands(wxArrayString *verbs, } return count; -#endif // __WXMSW__/!__WXMSW__ +#endif // __WXMSW__/| __UNIX__ } bool wxFileType::Unassociate() { -#if defined(__WXMSW__) || defined(__UNIX__) +#if defined(__WXMSW__) return m_impl->Unassociate(); +#elif defined(__UNIX__) && !defined(__WXPM__) + return m_impl->Unassociate(this); #else wxFAIL_MSG( _T("not implemented") ); // TODO return FALSE; #endif } +bool wxFileType::SetCommand(const wxString& cmd, const wxString& verb, +bool overwriteprompt) +{ +#if defined (__WXMSW__) || defined(__UNIX__) + return m_impl->SetCommand(cmd, verb, overwriteprompt); +#else + wxFAIL_MSG(_T("not implemented")); + return FALSE; +#endif +} + +bool wxFileType::SetDefaultIcon(const wxString& cmd, int index) +{ + wxString sTmp = cmd; +#ifdef __WXMSW__ + // VZ: should we do this? + // chris elliott : only makes sense in MS windows + if ( sTmp.empty() ) + GetOpenCommand(&sTmp, wxFileType::MessageParameters("", "")); +#endif + wxCHECK_MSG( !sTmp.empty(), FALSE, _T("need the icon file") ); + +#if defined (__WXMSW__) || defined(__UNIX__) + return m_impl->SetDefaultIcon (cmd, index); +#else + wxFAIL_MSG(_T("not implemented")); + + return FALSE; +#endif +} + + // ---------------------------------------------------------------------------- // wxMimeTypesManager // ---------------------------------------------------------------------------- @@ -413,15 +480,26 @@ wxMimeTypesManager::wxMimeTypesManager() wxMimeTypesManager::~wxMimeTypesManager() { - delete m_impl; + if ( m_impl ) + delete m_impl; +} + +bool wxMimeTypesManager::Unassociate(wxFileType *ft) +{ +#if defined(__UNIX__) && !defined(__WXPM__) && !defined(__CYGWIN__) + return m_impl->Unassociate(ft); +#else + return ft->Unassociate(); +#endif } + wxFileType * wxMimeTypesManager::Associate(const wxFileTypeInfo& ftInfo) { EnsureImpl(); -#if defined(__WXMSW__) || defined(__UNIX__) +#if defined(__WXMSW__) || (defined(__UNIX__) && !defined(__WXPM__)) return m_impl->Associate(ftInfo); #else // other platforms wxFAIL_MSG( _T("not implemented") ); // TODO @@ -515,6 +593,29 @@ size_t wxMimeTypesManager::EnumAllFileTypes(wxArrayString& mimetypes) return countAll; } +void wxMimeTypesManager::Initialize(int mcapStyle, + const wxString& sExtraDir) +{ +#if defined(__UNIX__) && !defined(__WXPM__) && !defined(__CYGWIN__) + EnsureImpl(); + + m_impl->Initialize(mcapStyle, sExtraDir); +#else + (void)mcapStyle; + (void)sExtraDir; +#endif // Unix +} + +// and this function clears all the data from the manager +void wxMimeTypesManager::ClearData() +{ +#if defined(__UNIX__) && !defined(__WXPM__) && !defined(__CYGWIN__) + EnsureImpl(); + + m_impl->ClearData(); +#endif // Unix +} + // ---------------------------------------------------------------------------- // global data and wxMimeTypeCmnModule // ---------------------------------------------------------------------------- @@ -537,6 +638,7 @@ public: { delete gs_mimeTypesManager.m_impl; gs_mimeTypesManager.m_impl = NULL; + gs_mimeTypesManager.m_fallbacks.Clear(); } } @@ -545,3 +647,4 @@ public: IMPLEMENT_DYNAMIC_CLASS(wxMimeTypeCmnModule, wxModule) +#endif // wxUSE_MIMETYPE