X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/a6c65e881e42bfed000fbcac31ac8c1db2729152..cc5bd48eff6f3a12b6066179d1b00d6404c9d921:/include/wx/unix/mimetype.h diff --git a/include/wx/unix/mimetype.h b/include/wx/unix/mimetype.h index 28407b23b6..e4d925c0fe 100644 --- a/include/wx/unix/mimetype.h +++ b/include/wx/unix/mimetype.h @@ -1,31 +1,24 @@ ///////////////////////////////////////////////////////////////////////////// -// 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 @@ -33,10 +26,14 @@ class WXDLLEXPORT 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); @@ -61,35 +58,86 @@ 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; + // keep track of the files we had already loaded (this is a bitwise OR of + // wxMailcapStyle values) + int m_mailcapStylesInited; + + wxString GetCommand(const wxString &verb, size_t nIndex) const; + + // read Gnome files + void LoadGnomeDataFromKeyFile(const wxString& filename, + const wxArrayString& dirs); + void LoadGnomeMimeTypesFromMimeFile(const wxString& filename); + void LoadGnomeMimeFilesFromDir(const wxString& dirbase, + const wxArrayString& dirs); + void GetGnomeMimeInfo(const wxString& sExtraDir); + + // read KDE + void LoadKDELinksForMimeSubtype(const wxString& dirbase, + const wxString& subdir, + const wxString& filename, + const wxArrayString& icondirs); + void LoadKDELinksForMimeType(const wxString& dirbase, + const wxString& subdir, + const wxArrayString& icondirs); + void LoadKDELinkFilesFromDir(const wxString& dirbase, + const wxArrayString& icondirs); + void LoadKDEApp(const wxString& filename); + void LoadKDEAppsFilesFromDir(const wxString& dirname); + void GetKDEMimeInfo(const wxString& sExtraDir); + + // write KDE + bool WriteKDEMimeFile(int index, bool delete_index); + bool CheckKDEDirsExist(const wxString & sOK, const wxString& sTest); + + //read write Netscape and MetaMail formats + void GetMimeInfo (const wxString& sExtraDir); + bool WriteToMailCap (int index, bool delete_index); + bool WriteToMimeTypes (int index, bool delete_index); + bool WriteToNSMimeTypes (int index, bool delete_index); + + // ReadMailcap() helper + bool ProcessOtherMailcapField(struct MailcapLineData& data, + const wxString& curField); + + // 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); + + virtual bool WriteMimeInfo(int nIndex, bool delete_mime ); // give it access to m_aXXX variables friend class WXDLLEXPORT wxFileTypeImpl; @@ -101,6 +149,12 @@ class WXDLLEXPORT 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); } @@ -109,41 +163,53 @@ public: bool GetMimeType(wxString *mimeType) const { *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; } 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