X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/a6c65e881e42bfed000fbcac31ac8c1db2729152..9869c26285dc51d13607cddaa04f65ce983653a5:/include/wx/unix/mimetype.h diff --git a/include/wx/unix/mimetype.h b/include/wx/unix/mimetype.h index 28407b23b6..df76534aa5 100644 --- a/include/wx/unix/mimetype.h +++ b/include/wx/unix/mimetype.h @@ -1,42 +1,38 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: unix/mimetype.h +// Name: wx/unix/mimetype.h // Purpose: classes and functions to manage MIME types // Author: Vadim Zeitlin // Modified by: // 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) ///////////////////////////////////////////////////////////////////////////// #ifndef _MIMETYPE_IMPL_H #define _MIMETYPE_IMPL_H - -#ifdef __GNUG__ -#pragma interface "mimetype.h" -#endif - #include "wx/mimetype.h" -#if (wxUSE_FILE && wxUSE_TEXTFILE) +#if wxUSE_MIMETYPE -class MailCapEntry; -class wxMimeTypeIconHandler; +class wxMimeTypeCommands; -WX_DEFINE_ARRAY(wxMimeTypeIconHandler *, ArrayIconHandlers); -WX_DEFINE_ARRAY(MailCapEntry *, ArrayTypeEntries); +WX_DEFINE_ARRAY_PTR(wxMimeTypeCommands *, wxMimeCommandsArray); // this is the real wxMimeTypesManager for Unix -class WXDLLEXPORT wxMimeTypesManagerImpl +class WXDLLIMPEXP_BASE wxMimeTypesManagerImpl { public: // ctor and dtor wxMimeTypesManagerImpl(); - ~wxMimeTypesManagerImpl(); + virtual ~wxMimeTypesManagerImpl(); // load all data into memory - done when it is needed for the first time - void Initialize(); + void Initialize(int mailcapStyles = wxMAILCAP_ALL, + const wxString& extraDir = wxEmptyString); + + // and delete the data here + void ClearData(); // implement containing class functions wxFileType *GetFileTypeFromExtension(const wxString& ext); @@ -44,9 +40,6 @@ public: size_t EnumAllFileTypes(wxArrayString& mimetypes); - bool ReadMailcap(const wxString& filename, bool fallback = FALSE); - bool ReadMimeTypes(const wxString& filename); - void AddFallback(const wxFileTypeInfo& filetype); // add information about the given mimetype @@ -61,89 +54,120 @@ public: // add a new record to the user .mailcap/.mime.types files wxFileType *Associate(const wxFileTypeInfo& ftInfo); + // remove association + bool Unassociate(wxFileType *ft); // accessors // get the string containing space separated extensions for the given // file type wxString GetExtension(size_t index) { return m_aExtensions[index]; } - // get the array of icon handlers - static ArrayIconHandlers& GetIconHandlers(); - -private: - void InitIfNeeded() - { - if ( !m_initialized ) { - // set the flag first to prevent recursion - m_initialized = TRUE; - Initialize(); - } - } +protected: + void InitIfNeeded(); wxArrayString m_aTypes, // MIME types m_aDescriptions, // descriptions (just some text) - m_aExtensions; // space separated list of extensions - ArrayTypeEntries m_aEntries; // commands and tests for this file type + m_aExtensions, // space separated list of extensions + m_aIcons; // Icon filenames + + // verb=command pairs for this file type + wxMimeCommandsArray m_aEntries; // are we initialized? bool m_initialized; - // head of the linked list of the icon handlers - static ArrayIconHandlers ms_iconHandlers; + wxString GetCommand(const wxString &verb, size_t nIndex) const; + + // Read XDG *.desktop file + void LoadXDGApp(const wxString& filename); + // Scan XDG directory + void LoadXDGAppsFilesFromDir(const wxString& dirname); + + // Load XDG globs files + void LoadXDGGlobs(const wxString& filename); + + // functions used to do associations + virtual int AddToMimeData(const wxString& strType, + const wxString& strIcon, + wxMimeTypeCommands *entry, + const wxArrayString& strExtensions, + const wxString& strDesc, + bool replaceExisting = true); + virtual bool DoAssociation(const wxString& strType, + const wxString& strIcon, + wxMimeTypeCommands *entry, + const wxArrayString& strExtensions, + const wxString& strDesc); // give it access to m_aXXX variables - friend class WXDLLEXPORT wxFileTypeImpl; + friend class WXDLLIMPEXP_FWD_BASE wxFileTypeImpl; }; - - -class WXDLLEXPORT wxFileTypeImpl +class WXDLLIMPEXP_BASE wxFileTypeImpl { public: // initialization functions + // this is used to construct a list of mimetypes which match; + // if built with GetFileTypeFromMimetype index 0 has the exact match and + // index 1 the type / * match + // if built with GetFileTypeFromExtension, index 0 has the mimetype for + // the first extension found, index 1 for the second and so on + void Init(wxMimeTypesManagerImpl *manager, size_t index) { m_manager = manager; m_index.Add(index); } // accessors bool GetExtensions(wxArrayString& extensions); bool GetMimeType(wxString *mimeType) const - { *mimeType = m_manager->m_aTypes[m_index[0]]; return TRUE; } + { *mimeType = m_manager->m_aTypes[m_index[0]]; return true; } bool GetMimeTypes(wxArrayString& mimeTypes) const; - bool GetIcon(wxIcon *icon) const; + bool GetIcon(wxIconLocation *iconLoc) const; + bool GetDescription(wxString *desc) const - { *desc = m_manager->m_aDescriptions[m_index[0]]; return TRUE; } + { *desc = m_manager->m_aDescriptions[m_index[0]]; return true; } bool GetOpenCommand(wxString *openCmd, const wxFileType::MessageParameters& params) const { - return GetExpandedCommand(openCmd, params, TRUE); + *openCmd = GetExpandedCommand(wxT("open"), params); + return (! openCmd -> IsEmpty() ); } bool GetPrintCommand(wxString *printCmd, const wxFileType::MessageParameters& params) const { - return GetExpandedCommand(printCmd, params, FALSE); + *printCmd = GetExpandedCommand(wxT("print"), params); + return (! printCmd -> IsEmpty() ); } + // return the number of commands defined for this file type, 0 if none + size_t GetAllCommands(wxArrayString *verbs, wxArrayString *commands, + const wxFileType::MessageParameters& params) const; + + // remove the record for this file type - bool Unassociate(); + // probably a mistake to come here, use wxMimeTypesManager.Unassociate (ft) instead + bool Unassociate(wxFileType *ft) + { + return m_manager->Unassociate(ft); + } -private: - // get the entry which passes the test (may return NULL) - MailCapEntry *GetEntry(const wxFileType::MessageParameters& params) const; + // set an arbitrary command, ask confirmation if it already exists and + // overwriteprompt is TRUE + bool SetCommand(const wxString& cmd, const wxString& verb, bool overwriteprompt = true); + bool SetDefaultIcon(const wxString& strIcon = wxEmptyString, int index = 0); - // choose the correct entry to use and expand the command - bool GetExpandedCommand(wxString *expandedCmd, - const wxFileType::MessageParameters& params, - bool open) const; +private: + wxString + GetExpandedCommand(const wxString & verb, + const wxFileType::MessageParameters& params) const; wxMimeTypesManagerImpl *m_manager; wxArrayInt m_index; // in the wxMimeTypesManagerImpl arrays }; -#endif - // wxUSE_FILE +#endif // wxUSE_MIMETYPE + +#endif // _MIMETYPE_IMPL_H -#endif - //_MIMETYPE_IMPL_H