/////////////////////////////////////////////////////////////////////////////
-// Name: common/mimecmn.cpp
+// Name: src/common/mimecmn.cpp
// Purpose: classes and functions to manage MIME types
// Author: Vadim Zeitlin
// Modified by:
// headers
// ----------------------------------------------------------------------------
-#ifdef __GNUG__
- #pragma implementation "mimetypebase.h"
-#endif
-
// for compilers that support precompilation, includes "wx.h".
#include "wx/wxprec.h"
#if wxUSE_MIMETYPE
+#include "wx/mimetype.h"
+
#ifndef WX_PRECOMP
- #include "wx/string.h"
+ #include "wx/dynarray.h"
+ #include "wx/string.h"
+ #include "wx/intl.h"
+ #include "wx/log.h"
+ #include "wx/module.h"
#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"
-#include "wx/mimetype.h"
-
// other standard headers
#include <ctype.h>
#elif defined(__WXPM__) || defined (__EMX__)
#include "wx/os2/mimetype.h"
#undef __UNIX__
+#elif defined(__DOS__)
+ #include "wx/msdos/mimetype.h"
#else // Unix
#include "wx/unix/mimetype.h"
#endif
// common classes
// ============================================================================
+// ----------------------------------------------------------------------------
+// wxMimeTypeCommands
+// ----------------------------------------------------------------------------
+
+void
+wxMimeTypeCommands::AddOrReplaceVerb(const wxString& verb, const wxString& cmd)
+{
+ int n = m_verbs.Index(verb, false /* ignore case */);
+ if ( n == wxNOT_FOUND )
+ {
+ m_verbs.Add(verb);
+ m_commands.Add(cmd);
+ }
+ else
+ {
+ m_commands[n] = cmd;
+ }
+}
+
+wxString
+wxMimeTypeCommands::GetCommandForVerb(const wxString& verb, size_t *idx) const
+{
+ wxString s;
+
+ int n = m_verbs.Index(verb);
+ if ( n != wxNOT_FOUND )
+ {
+ s = m_commands[(size_t)n];
+ if ( idx )
+ *idx = n;
+ }
+ else if ( idx )
+ {
+ // different from any valid index
+ *idx = (size_t)-1;
+ }
+
+ return s;
+}
+
+wxString wxMimeTypeCommands::GetVerbCmd(size_t n) const
+{
+ return m_verbs[n] + wxT('=') + m_commands[n];
+}
+
// ----------------------------------------------------------------------------
// wxFileTypeInfo
// ----------------------------------------------------------------------------
for ( ;; )
{
+ // icc gives this warning in its own va_arg() macro, argh
+#ifdef __INTELC__
+ #pragma warning(push)
+ #pragma warning(disable: 1684)
+#endif
+
const wxChar *ext = va_arg(argptr, const wxChar *);
+
+#ifdef __INTELC__
+ #pragma warning(pop)
+#endif
if ( !ext )
{
// NULL terminates the list
}
#include "wx/arrimpl.cpp"
-WX_DEFINE_OBJARRAY(wxArrayFileTypeInfo);
+WX_DEFINE_OBJARRAY(wxArrayFileTypeInfo)
// ============================================================================
// implementation of the wrapper classes
// 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()
+ if ( !hasFilename && !str.empty()
#ifdef __UNIX__
&& !str.StartsWith(_T("test "))
#endif // Unix
#endif
}
-bool wxFileType::SetCommand(const wxString& cmd, const wxString& verb,
-bool overwriteprompt)
+bool wxFileType::SetCommand(const wxString& cmd,
+ const wxString& verb,
+ bool overwriteprompt)
{
#if defined (__WXMSW__) || defined(__UNIX__)
return m_impl->SetCommand(cmd, verb, overwriteprompt);
#else
+ wxUnusedVar(cmd);
+ wxUnusedVar(verb);
+ wxUnusedVar(overwriteprompt);
wxFAIL_MSG(_T("not implemented"));
return false;
#endif
// VZ: should we do this?
// chris elliott : only makes sense in MS windows
if ( sTmp.empty() )
- GetOpenCommand(&sTmp, wxFileType::MessageParameters(wxT(""), wxT("")));
+ GetOpenCommand(&sTmp, wxFileType::MessageParameters(wxEmptyString, wxEmptyString));
#endif
wxCHECK_MSG( !sTmp.empty(), false, _T("need the icon file") );
#if defined (__WXMSW__) || defined(__UNIX__)
return m_impl->SetDefaultIcon (cmd, index);
#else
+ wxUnusedVar(index);
wxFAIL_MSG(_T("not implemented"));
-
return false;
#endif
}
+// ----------------------------------------------------------------------------
+// wxMimeTypesManagerFactory
+// ----------------------------------------------------------------------------
+
+wxMimeTypesManagerFactory *wxMimeTypesManagerFactory::m_factory = NULL;
+
+/* static */
+void wxMimeTypesManagerFactory::Set(wxMimeTypesManagerFactory *factory)
+{
+ delete m_factory;
+
+ m_factory = factory;
+}
+
+/* static */
+wxMimeTypesManagerFactory *wxMimeTypesManagerFactory::Get()
+{
+ if ( !m_factory )
+ m_factory = new wxMimeTypesManagerFactory;
+
+ return m_factory;
+}
+
+wxMimeTypesManagerImpl *wxMimeTypesManagerFactory::CreateMimeTypesManagerImpl()
+{
+ return new wxMimeTypesManagerImpl;
+}
// ----------------------------------------------------------------------------
// wxMimeTypesManager
void wxMimeTypesManager::EnsureImpl()
{
if ( !m_impl )
- m_impl = new wxMimeTypesManagerImpl;
+ m_impl = wxMimeTypesManagerFactory::Get()->CreateMimeTypesManagerImpl();
}
bool wxMimeTypesManager::IsOfType(const wxString& mimeType,
bool wxMimeTypesManager::Unassociate(wxFileType *ft)
{
+ EnsureImpl();
+
#if defined(__UNIX__) && !defined(__CYGWIN__) && !defined(__WINE__)
return m_impl->Unassociate(ft);
#else
#if defined(__WXMSW__) || defined(__UNIX__)
return m_impl->Associate(ftInfo);
#else // other platforms
+ wxUnusedVar(ftInfo);
wxFAIL_MSG( _T("not implemented") ); // TODO
return NULL;
#endif // platforms
{
public:
wxMimeTypeCmnModule() : wxModule() { }
+
virtual bool OnInit() { return true; }
virtual void OnExit()
{
- // this avoids false memory leak allerts:
+ wxMimeTypesManagerFactory::Set(NULL);
+
if ( gs_mimeTypesManager.m_impl != NULL )
{
delete gs_mimeTypesManager.m_impl;