1 /////////////////////////////////////////////////////////////////////////////
2 // Name:        wx/msw/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 35650 2005-09-23 12:56:45Z MR $
8 // Copyright:   (c) 1998 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr>
9 // Licence:     wxWindows licence (part of wxExtra library)
10 /////////////////////////////////////////////////////////////////////////////
11 
12 #ifndef _MIMETYPE_IMPL_H
13 #define _MIMETYPE_IMPL_H
14 
15 #include "wx/defs.h"
16 
17 #if wxUSE_MIMETYPE
18 
19 #include "wx/mimetype.h"
20 
21 // ----------------------------------------------------------------------------
22 // wxFileTypeImpl is the MSW version of wxFileType, this is a private class
23 // and is never used directly by the application
24 // ----------------------------------------------------------------------------
25 
26 class WXDLLIMPEXP_BASE wxFileTypeImpl
27 {
28 public:
29     // ctor
wxFileTypeImpl()30     wxFileTypeImpl() { }
31 
32     // one of these Init() function must be called (ctor can't take any
33     // arguments because it's common)
34 
35         // initialize us with our file type name and extension - in this case
36         // we will read all other data from the registry
37     void Init(const wxString& strFileType, const wxString& ext);
38 
39     // implement accessor functions
40     bool GetExtensions(wxArrayString& extensions);
41     bool GetMimeType(wxString *mimeType) const;
42     bool GetMimeTypes(wxArrayString& mimeTypes) const;
43     bool GetIcon(wxIconLocation *iconLoc) const;
44     bool GetDescription(wxString *desc) const;
45     bool GetOpenCommand(wxString *openCmd,
46                         const wxFileType::MessageParameters& params) const;
47     bool GetPrintCommand(wxString *printCmd,
48                          const wxFileType::MessageParameters& params) const;
49 
50     size_t GetAllCommands(wxArrayString * verbs, wxArrayString * commands,
51                           const wxFileType::MessageParameters& params) const;
52 
53     bool Unassociate();
54 
55     // set an arbitrary command, ask confirmation if it already exists and
56     // overwriteprompt is true
57     bool SetCommand(const wxString& cmd,
58                     const wxString& verb,
59                     bool overwriteprompt = true);
60 
61     bool SetDefaultIcon(const wxString& cmd = wxEmptyString, int index = 0);
62 
63     // this is called  by Associate
64     bool SetDescription (const wxString& desc);
65 
66 private:
67     // helper function: reads the command corresponding to the specified verb
68     // from the registry (returns an empty string if not found)
69     wxString GetCommand(const wxChar *verb) const;
70 
71     // get the registry path for the given verb
72     wxString GetVerbPath(const wxString& verb) const;
73 
74     // check that the registry key for our extension exists, create it if it
75     // doesn't, return false if this failed
76     bool EnsureExtKeyExists();
77 
78     wxString m_strFileType,         // may be empty
79              m_ext;
80 
81     // these methods are not publicly accessible (as wxMimeTypesManager
82     // doesn't know about them), and should only be called by Unassociate
83 
84     bool RemoveOpenCommand();
85     bool RemoveCommand(const wxString& verb);
86     bool RemoveMimeType();
87     bool RemoveDefaultIcon();
88     bool RemoveDescription();
89 };
90 
91 class WXDLLIMPEXP_BASE wxMimeTypesManagerImpl
92 {
93 public:
94     // nothing to do here, we don't load any data but just go and fetch it from
95     // the registry when asked for
wxMimeTypesManagerImpl()96     wxMimeTypesManagerImpl() { }
97 
98     // implement containing class functions
99     wxFileType *GetFileTypeFromExtension(const wxString& ext);
100     wxFileType *GetOrAllocateFileTypeFromExtension(const wxString& ext);
101     wxFileType *GetFileTypeFromMimeType(const wxString& mimeType);
102 
103     size_t EnumAllFileTypes(wxArrayString& mimetypes);
104 
105     // this are NOPs under Windows
106     bool ReadMailcap(const wxString& WXUNUSED(filename), bool WXUNUSED(fallback) = true)
107         { return true; }
ReadMimeTypes(const wxString & WXUNUSED (filename))108     bool ReadMimeTypes(const wxString& WXUNUSED(filename))
109         { return true; }
110 
111     // create a new filetype association
112     wxFileType *Associate(const wxFileTypeInfo& ftInfo);
113 
114     // create a new filetype with the given name and extension
115     wxFileType *CreateFileType(const wxString& filetype, const wxString& ext);
116 };
117 
118 #endif // wxUSE_MIMETYPE
119 
120 #endif
121   //_MIMETYPE_IMPL_H
122 
123