X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/4d2976ad6b56ff1650e15f2b949c10ec92385309..e10972f6c1436a6dcd5427b4e3913bb0f398e045:/include/wx/unix/mimetype.h diff --git a/include/wx/unix/mimetype.h b/include/wx/unix/mimetype.h index 3b9bcab6cd..6600216fc1 100644 --- a/include/wx/unix/mimetype.h +++ b/include/wx/unix/mimetype.h @@ -1,41 +1,39 @@ ///////////////////////////////////////////////////////////////////////////// -// 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 { -friend class WXDLLEXPORT wxFileTypeImpl; // give it access to m_aXXX variables - public: - // ctor loads all info into memory for quicker access later on - // TODO it would be nice to load them all, but parse on demand only... + // ctor and dtor wxMimeTypesManagerImpl(); + virtual ~wxMimeTypesManagerImpl(); + + // load all data into memory - done when it is needed for the first time + 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); @@ -43,9 +41,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 @@ -58,72 +53,122 @@ public: const wxString& strTest, const wxString& strDesc); + // 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(); +protected: + void InitIfNeeded(); -private: 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 - - // head of the linked list of the icon handlers - static ArrayIconHandlers ms_iconHandlers; + 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; + + 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 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() ); } -private: - // get the entry which passes the test (may return NULL) - MailCapEntry *GetEntry(const wxFileType::MessageParameters& params) const; + // 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 + // probably a mistake to come here, use wxMimeTypesManager.Unassociate (ft) instead + bool Unassociate(wxFileType *ft) + { + return m_manager->Unassociate(ft); + } - // choose the correct entry to use and expand the command - bool GetExpandedCommand(wxString *expandedCmd, - const wxFileType::MessageParameters& params, - bool open) 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); + +private: + wxString + GetExpandedCommand(const wxString & verb, + const wxFileType::MessageParameters& params) const; wxMimeTypesManagerImpl *m_manager; wxArrayInt m_index; // in the wxMimeTypesManagerImpl arrays }; +#endif // wxUSE_MIMETYPE +#endif // _MIMETYPE_IMPL_H -#endif - // wxUSE_FILE - -#endif - //_MIMETYPE_IMPL_H