home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / wxos2240.zip / wxWindows-2.4.0 / include / wx / unix / mimetype.h < prev    next >
C/C++ Source or Header  |  2002-08-31  |  8KB  |  230 lines

  1. /////////////////////////////////////////////////////////////////////////////
  2. // Name:        wx/unix/mimetype.h
  3. // Purpose:     classes and functions to manage MIME types
  4. // Author:      Vadim Zeitlin
  5. // Modified by:
  6. // Created:     23.09.98
  7. // RCS-ID:      $Id: mimetype.h,v 1.8 2002/08/31 11:29:13 GD Exp $
  8. // Copyright:   (c) 1998 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr>
  9. // Licence:     wxWindows license (part of wxExtra library)
  10. /////////////////////////////////////////////////////////////////////////////
  11.  
  12. #ifndef _MIMETYPE_IMPL_H
  13. #define _MIMETYPE_IMPL_H
  14.  
  15. #if defined(__GNUG__) && !defined(__APPLE__)
  16. #pragma interface "mimetype.h"
  17. #endif
  18.  
  19. #include "wx/mimetype.h"
  20.  
  21. #if (wxUSE_FILE && wxUSE_TEXTFILE)
  22.  
  23. class wxMimeTypeCommands;
  24.  
  25. WX_DEFINE_ARRAY(wxMimeTypeCommands *, wxMimeCommandsArray);
  26.  
  27. // this is the real wxMimeTypesManager for Unix
  28. class WXDLLEXPORT wxMimeTypesManagerImpl
  29. {
  30. public:
  31.     // ctor and dtor
  32.     wxMimeTypesManagerImpl();
  33.     ~wxMimeTypesManagerImpl();
  34.  
  35.     // load all data into memory - done when it is needed for the first time
  36.     void Initialize(int mailcapStyles = wxMAILCAP_STANDARD,
  37.                     const wxString& extraDir = wxEmptyString);
  38.  
  39.     // and delete the data here
  40.     void ClearData();
  41.  
  42.     // implement containing class functions
  43.     wxFileType *GetFileTypeFromExtension(const wxString& ext);
  44.     wxFileType *GetFileTypeFromMimeType(const wxString& mimeType);
  45.  
  46.     size_t EnumAllFileTypes(wxArrayString& mimetypes);
  47.  
  48.     bool ReadMailcap(const wxString& filename, bool fallback = FALSE);
  49.     bool ReadMimeTypes(const wxString& filename);
  50.  
  51.     void AddFallback(const wxFileTypeInfo& filetype);
  52.  
  53.     // add information about the given mimetype
  54.     void AddMimeTypeInfo(const wxString& mimetype,
  55.                          const wxString& extensions,
  56.                          const wxString& description);
  57.     void AddMailcapInfo(const wxString& strType,
  58.                         const wxString& strOpenCmd,
  59.                         const wxString& strPrintCmd,
  60.                         const wxString& strTest,
  61.                         const wxString& strDesc);
  62.  
  63.     // add a new record to the user .mailcap/.mime.types files
  64.     wxFileType *Associate(const wxFileTypeInfo& ftInfo);
  65.     // remove association
  66.     bool Unassociate(wxFileType *ft);
  67.  
  68.     // accessors
  69.         // get the string containing space separated extensions for the given
  70.         // file type
  71.     wxString GetExtension(size_t index) { return m_aExtensions[index]; }
  72.  
  73. private:
  74.     void InitIfNeeded()
  75.     {
  76.         if ( !m_initialized ) {
  77.             // set the flag first to prevent recursion
  78.             m_initialized = TRUE;
  79.             Initialize();
  80.         }
  81.     }
  82.  
  83.     wxArrayString m_aTypes,         // MIME types
  84.                   m_aDescriptions,  // descriptions (just some text)
  85.                   m_aExtensions,    // space separated list of extensions
  86.                   m_aIcons;         // Icon filenames
  87.  
  88.     // verb=command pairs for this file type
  89.     wxMimeCommandsArray m_aEntries;
  90.  
  91.     // are we initialized?
  92.     bool m_initialized;
  93.  
  94.     // keep track of the files we had already loaded (this is a bitwise OR of
  95.     // wxMailcapStyle values)
  96.     int m_mailcapStylesInited;
  97.  
  98.     wxString GetCommand(const wxString &verb, size_t nIndex) const;
  99.  
  100.     // read Gnome files
  101.     void LoadGnomeDataFromKeyFile(const wxString& filename);
  102.     void LoadGnomeMimeTypesFromMimeFile(const wxString& filename);
  103.     void LoadGnomeMimeFilesFromDir(const wxString& dirbase);
  104.     void GetGnomeMimeInfo(const wxString& sExtraDir);
  105.  
  106.     // write gnome files
  107.     bool CheckGnomeDirsExist();
  108.     bool WriteGnomeKeyFile(int index, bool delete_index);
  109.     bool WriteGnomeMimeFile(int index, bool delete_index);
  110.  
  111.     // read KDE
  112.     void LoadKDELinksForMimeSubtype(const wxString& dirbase,
  113.                                     const wxString& subdir,
  114.                                     const wxString& filename,
  115.                                     const wxArrayString& icondirs);
  116.     void LoadKDELinksForMimeType(const wxString& dirbase,
  117.                                  const wxString& subdir,
  118.                                  const wxArrayString& icondirs);
  119.     void LoadKDELinkFilesFromDir(const wxString& dirbase,
  120.                                  const wxArrayString& icondirs);
  121.     void GetKDEMimeInfo(const wxString& sExtraDir);
  122.  
  123.     // write KDE
  124.     bool WriteKDEMimeFile(int index, bool delete_index);
  125.     bool CheckKDEDirsExist(const wxString & sOK, const wxString& sTest);
  126.  
  127.     //read write Netscape and MetaMail formats
  128.     void GetMimeInfo (const wxString& sExtraDir);
  129.     bool WriteToMailCap (int index, bool delete_index);
  130.     bool WriteToMimeTypes (int index, bool delete_index);
  131.     bool WriteToNSMimeTypes (int index, bool delete_index);
  132.  
  133.     // ReadMailcap() helper
  134.     bool ProcessOtherMailcapField(struct MailcapLineData& data,
  135.                                   const wxString& curField);
  136.  
  137.     // functions used to do associations
  138.  
  139.     int AddToMimeData(const wxString& strType,
  140.                       const wxString& strIcon,
  141.                       wxMimeTypeCommands *entry,
  142.                       const wxArrayString& strExtensions,
  143.                       const wxString& strDesc,
  144.                       bool replaceExisting = TRUE);
  145.  
  146.     bool DoAssociation(const wxString& strType,
  147.                        const wxString& strIcon,
  148.                        wxMimeTypeCommands *entry,
  149.                        const wxArrayString& strExtensions,
  150.                        const wxString& strDesc);
  151.  
  152.     bool WriteMimeInfo(int nIndex, bool delete_mime );
  153.  
  154.     // give it access to m_aXXX variables
  155.     friend class WXDLLEXPORT wxFileTypeImpl;
  156. };
  157.  
  158.  
  159.  
  160. class WXDLLEXPORT wxFileTypeImpl
  161. {
  162. public:
  163.     // initialization functions
  164.     // this is used to construct a list of mimetypes which match;
  165.     // if built with GetFileTypeFromMimetype index 0 has the exact match and
  166.     // index 1 the type / * match
  167.     // if built with GetFileTypeFromExtension, index 0 has the mimetype for
  168.     // the first extension found, index 1 for the second and so on
  169.  
  170.     void Init(wxMimeTypesManagerImpl *manager, size_t index)
  171.         { m_manager = manager; m_index.Add(index); }
  172.  
  173.     // accessors
  174.     bool GetExtensions(wxArrayString& extensions);
  175.     bool GetMimeType(wxString *mimeType) const
  176.         { *mimeType = m_manager->m_aTypes[m_index[0]]; return TRUE; }
  177.     bool GetMimeTypes(wxArrayString& mimeTypes) const;
  178.     bool GetIcon(wxIcon *icon, wxString *iconFile = NULL,
  179.                  int *iconIndex = NULL) const;
  180.  
  181.     bool GetDescription(wxString *desc) const
  182.         { *desc = m_manager->m_aDescriptions[m_index[0]]; return TRUE; }
  183.  
  184.     bool GetOpenCommand(wxString *openCmd,
  185.                         const wxFileType::MessageParameters& params) const
  186.     {
  187.         *openCmd = GetExpandedCommand(wxT("open"), params);
  188.         return (! openCmd -> IsEmpty() );
  189.     }
  190.  
  191.     bool GetPrintCommand(wxString *printCmd,
  192.                          const wxFileType::MessageParameters& params) const
  193.     {
  194.         *printCmd = GetExpandedCommand(wxT("print"), params);
  195.         return (! printCmd -> IsEmpty() );
  196.     }
  197.  
  198.         // return the number of commands defined for this file type, 0 if none
  199.     size_t GetAllCommands(wxArrayString *verbs, wxArrayString *commands,
  200.                           const wxFileType::MessageParameters& params) const;
  201.  
  202.  
  203.     // remove the record for this file type
  204.     // probably a mistake to come here, use wxMimeTypesManager.Unassociate (ft) instead
  205.     bool Unassociate(wxFileType *ft)
  206.     {
  207.         return m_manager->Unassociate(ft);
  208.     }
  209.  
  210.     // set an arbitrary command, ask confirmation if it already exists and
  211.     // overwriteprompt is TRUE
  212.     bool SetCommand(const wxString& cmd, const wxString& verb, bool overwriteprompt = TRUE);
  213.     bool SetDefaultIcon(const wxString& strIcon = wxEmptyString, int index = 0);
  214.  
  215. private:
  216.     wxString
  217.     GetExpandedCommand(const wxString & verb,
  218.                        const wxFileType::MessageParameters& params) const;
  219.  
  220.     wxMimeTypesManagerImpl *m_manager;
  221.     wxArrayInt              m_index; // in the wxMimeTypesManagerImpl arrays
  222. };
  223.  
  224. #endif
  225.   // wxUSE_FILE
  226.  
  227. #endif
  228.   //_MIMETYPE_IMPL_H
  229.  
  230.