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