]> git.saurik.com Git - wxWidgets.git/blame - include/wx/unix/mimetype.h
avoid a bug in Carbon headers
[wxWidgets.git] / include / wx / unix / mimetype.h
CommitLineData
7dc3cc31 1/////////////////////////////////////////////////////////////////////////////
678ebfcd 2// Name: wx/unix/mimetype.h
7dc3cc31
VS
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$
8// Copyright: (c) 1998 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr>
371a5b4e 9// Licence: wxWindows licence (part of wxExtra library)
7dc3cc31
VS
10/////////////////////////////////////////////////////////////////////////////
11
12#ifndef _MIMETYPE_IMPL_H
13#define _MIMETYPE_IMPL_H
14
12028905 15#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
7dc3cc31
VS
16#pragma interface "mimetype.h"
17#endif
18
19#include "wx/mimetype.h"
20
21#if (wxUSE_FILE && wxUSE_TEXTFILE)
22
678ebfcd 23class wxMimeTypeCommands;
7dc3cc31 24
678ebfcd 25WX_DEFINE_ARRAY(wxMimeTypeCommands *, wxMimeCommandsArray);
7dc3cc31
VS
26
27// this is the real wxMimeTypesManager for Unix
28class WXDLLEXPORT wxMimeTypesManagerImpl
29{
7dc3cc31 30public:
a6c65e88 31 // ctor and dtor
7dc3cc31 32 wxMimeTypesManagerImpl();
cf471cab 33 ~wxMimeTypesManagerImpl();
a6c65e88
VZ
34
35 // load all data into memory - done when it is needed for the first time
805f26b3 36 void Initialize(int mailcapStyles = wxMAILCAP_ALL,
2b813b73
VZ
37 const wxString& extraDir = wxEmptyString);
38
39 // and delete the data here
40 void ClearData();
7dc3cc31
VS
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
a6c65e88
VZ
63 // add a new record to the user .mailcap/.mime.types files
64 wxFileType *Associate(const wxFileTypeInfo& ftInfo);
2b813b73
VZ
65 // remove association
66 bool Unassociate(wxFileType *ft);
a6c65e88 67
7dc3cc31
VS
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
7dc3cc31 73private:
a6c65e88
VZ
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
7dc3cc31
VS
83 wxArrayString m_aTypes, // MIME types
84 m_aDescriptions, // descriptions (just some text)
2b813b73
VZ
85 m_aExtensions, // space separated list of extensions
86 m_aIcons; // Icon filenames
87
88 // verb=command pairs for this file type
678ebfcd 89 wxMimeCommandsArray m_aEntries;
7dc3cc31 90
a6c65e88
VZ
91 // are we initialized?
92 bool m_initialized;
93
2b813b73
VZ
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
805f26b3
VS
101 void LoadGnomeDataFromKeyFile(const wxString& filename,
102 const wxArrayString& dirs);
2b813b73 103 void LoadGnomeMimeTypesFromMimeFile(const wxString& filename);
805f26b3
VS
104 void LoadGnomeMimeFilesFromDir(const wxString& dirbase,
105 const wxArrayString& dirs);
2b813b73
VZ
106 void GetGnomeMimeInfo(const wxString& sExtraDir);
107
108 // write gnome files
109 bool CheckGnomeDirsExist();
110 bool WriteGnomeKeyFile(int index, bool delete_index);
111 bool WriteGnomeMimeFile(int index, bool delete_index);
112
113 // read KDE
114 void LoadKDELinksForMimeSubtype(const wxString& dirbase,
115 const wxString& subdir,
116 const wxString& filename,
117 const wxArrayString& icondirs);
118 void LoadKDELinksForMimeType(const wxString& dirbase,
119 const wxString& subdir,
120 const wxArrayString& icondirs);
121 void LoadKDELinkFilesFromDir(const wxString& dirbase,
122 const wxArrayString& icondirs);
123 void GetKDEMimeInfo(const wxString& sExtraDir);
124
125 // write KDE
126 bool WriteKDEMimeFile(int index, bool delete_index);
127 bool CheckKDEDirsExist(const wxString & sOK, const wxString& sTest);
128
129 //read write Netscape and MetaMail formats
130 void GetMimeInfo (const wxString& sExtraDir);
131 bool WriteToMailCap (int index, bool delete_index);
132 bool WriteToMimeTypes (int index, bool delete_index);
133 bool WriteToNSMimeTypes (int index, bool delete_index);
134
678ebfcd
VZ
135 // ReadMailcap() helper
136 bool ProcessOtherMailcapField(struct MailcapLineData& data,
137 const wxString& curField);
138
2b813b73
VZ
139 // functions used to do associations
140
141 int AddToMimeData(const wxString& strType,
142 const wxString& strIcon,
678ebfcd 143 wxMimeTypeCommands *entry,
2b813b73
VZ
144 const wxArrayString& strExtensions,
145 const wxString& strDesc,
146 bool replaceExisting = TRUE);
147
148 bool DoAssociation(const wxString& strType,
149 const wxString& strIcon,
678ebfcd 150 wxMimeTypeCommands *entry,
2b813b73
VZ
151 const wxArrayString& strExtensions,
152 const wxString& strDesc);
153
154 bool WriteMimeInfo(int nIndex, bool delete_mime );
a6c65e88
VZ
155
156 // give it access to m_aXXX variables
157 friend class WXDLLEXPORT wxFileTypeImpl;
7dc3cc31
VS
158};
159
4d2976ad
VS
160
161
7dc3cc31
VS
162class WXDLLEXPORT wxFileTypeImpl
163{
164public:
165 // initialization functions
2b813b73
VZ
166 // this is used to construct a list of mimetypes which match;
167 // if built with GetFileTypeFromMimetype index 0 has the exact match and
168 // index 1 the type / * match
169 // if built with GetFileTypeFromExtension, index 0 has the mimetype for
170 // the first extension found, index 1 for the second and so on
171
7dc3cc31 172 void Init(wxMimeTypesManagerImpl *manager, size_t index)
4d2976ad 173 { m_manager = manager; m_index.Add(index); }
7dc3cc31
VS
174
175 // accessors
176 bool GetExtensions(wxArrayString& extensions);
177 bool GetMimeType(wxString *mimeType) const
4d2976ad
VS
178 { *mimeType = m_manager->m_aTypes[m_index[0]]; return TRUE; }
179 bool GetMimeTypes(wxArrayString& mimeTypes) const;
da0766ab 180 bool GetIcon(wxIconLocation *iconLoc) const;
2b813b73 181
7dc3cc31 182 bool GetDescription(wxString *desc) const
4d2976ad 183 { *desc = m_manager->m_aDescriptions[m_index[0]]; return TRUE; }
7dc3cc31
VS
184
185 bool GetOpenCommand(wxString *openCmd,
186 const wxFileType::MessageParameters& params) const
187 {
2b813b73
VZ
188 *openCmd = GetExpandedCommand(wxT("open"), params);
189 return (! openCmd -> IsEmpty() );
7dc3cc31
VS
190 }
191
192 bool GetPrintCommand(wxString *printCmd,
193 const wxFileType::MessageParameters& params) const
194 {
2b813b73
VZ
195 *printCmd = GetExpandedCommand(wxT("print"), params);
196 return (! printCmd -> IsEmpty() );
7dc3cc31
VS
197 }
198
2b813b73
VZ
199 // return the number of commands defined for this file type, 0 if none
200 size_t GetAllCommands(wxArrayString *verbs, wxArrayString *commands,
201 const wxFileType::MessageParameters& params) const;
202
203
a6c65e88 204 // remove the record for this file type
2b813b73
VZ
205 // probably a mistake to come here, use wxMimeTypesManager.Unassociate (ft) instead
206 bool Unassociate(wxFileType *ft)
207 {
208 return m_manager->Unassociate(ft);
209 }
a6c65e88 210
2b813b73
VZ
211 // set an arbitrary command, ask confirmation if it already exists and
212 // overwriteprompt is TRUE
213 bool SetCommand(const wxString& cmd, const wxString& verb, bool overwriteprompt = TRUE);
214 bool SetDefaultIcon(const wxString& strIcon = wxEmptyString, int index = 0);
7dc3cc31 215
2b813b73
VZ
216private:
217 wxString
218 GetExpandedCommand(const wxString & verb,
219 const wxFileType::MessageParameters& params) const;
7dc3cc31
VS
220
221 wxMimeTypesManagerImpl *m_manager;
4d2976ad 222 wxArrayInt m_index; // in the wxMimeTypesManagerImpl arrays
7dc3cc31
VS
223};
224
7dc3cc31
VS
225#endif
226 // wxUSE_FILE
227
228#endif
229 //_MIMETYPE_IMPL_H
230