]> git.saurik.com Git - wxWidgets.git/blob - src/gtk/gnome/gvfs.cpp
wxDL_XXX macros and dynamic loading cleanup:
[wxWidgets.git] / src / gtk / gnome / gvfs.cpp
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: src/gtk/gnome/gvfs.cpp
3 // Author: Robert Roebling
4 // Purpose: Implement GNOME VFS support
5 // Created: 03/17/06
6 // RCS-ID: $Id$
7 // Copyright: Robert Roebling
8 // Licence: wxWindows Licence
9 /////////////////////////////////////////////////////////////////////////////
10
11 // For compilers that support precompilation, includes "wx/wx.h".
12 #include "wx/wxprec.h"
13
14 #ifdef __BORLANDC__
15 #pragma hdrstop
16 #endif
17
18 #if wxUSE_MIMETYPE && wxUSE_LIBGNOMEVFS
19
20 #include "wx/gtk/gnome/gvfs.h"
21
22 #ifndef WX_PRECOMP
23 #include "wx/log.h"
24 #include "wx/module.h"
25 #endif
26
27 #include "wx/mimetype.h"
28 #include "wx/dynlib.h"
29
30 #include <libgnomevfs/gnome-vfs-mime-handlers.h>
31
32 #include "wx/link.h"
33 wxFORCE_LINK_THIS_MODULE(gnome_vfs)
34
35 //----------------------------------------------------------------------------
36 // wxGnomeVFSLibrary
37 //----------------------------------------------------------------------------
38
39 class wxGnomeVFSLibrary
40 {
41 public:
42 wxGnomeVFSLibrary();
43 ~wxGnomeVFSLibrary();
44
45 private:
46 bool IsOk();
47 bool InitializeMethods();
48
49 wxDynamicLibrary m_libGnomeVFS;
50
51 // only true if we successfully loaded the library above
52 //
53 // don't rename this field, it's used by wxDL_XXX macros internally
54 bool m_ok;
55
56 public:
57 wxDL_METHOD_DEFINE( gboolean, gnome_vfs_init,
58 (), (), FALSE )
59 wxDL_METHOD_DEFINE( void, gnome_vfs_shutdown,
60 (), (), /**/ )
61
62 wxDL_METHOD_DEFINE( GnomeVFSResult, gnome_vfs_mime_set_icon,
63 (const char *mime_type, const char *filename), (mime_type, filename), GNOME_VFS_OK )
64 };
65
66 wxGnomeVFSLibrary::wxGnomeVFSLibrary()
67 {
68 wxLogNull log;
69
70 m_libGnomeVFS.Load("libgnomevfs-2.so.0");
71 m_ok = m_libGnomeVFS.IsLoaded() && InitializeMethods();
72 }
73
74 wxGnomeVFSLibrary::~wxGnomeVFSLibrary()
75 {
76 }
77
78 bool wxGnomeVFSLibrary::IsOk()
79 {
80 return m_ok;
81 }
82
83 bool wxGnomeVFSLibrary::InitializeMethods()
84 {
85 wxDL_METHOD_LOAD( m_libGnomeVFS, gnome_vfs_init )
86 wxDL_METHOD_LOAD( m_libGnomeVFS, gnome_vfs_shutdown )
87
88 return true;
89 }
90
91 static wxGnomeVFSLibrary* gs_lgvfs = NULL;
92
93 //----------------------------------------------------------------------------
94 // wxGnomeVFSMimeTypesManagerFactory
95 //----------------------------------------------------------------------------
96
97 wxMimeTypesManagerImpl *wxGnomeVFSMimeTypesManagerFactory::CreateMimeTypesManagerImpl()
98 {
99 return new wxGnomeVFSMimeTypesManagerImpl;
100 }
101
102
103 //----------------------------------------------------------------------------
104 // wxGnomeVFSMimeTypesManagerImpl
105 //----------------------------------------------------------------------------
106
107 bool wxGnomeVFSMimeTypesManagerImpl::DoAssociation(const wxString& strType,
108 const wxString& strIcon,
109 wxMimeTypeCommands *entry,
110 const wxArrayString& strExtensions,
111 const wxString& strDesc)
112 {
113 int nIndex = AddToMimeData(strType, strIcon, entry, strExtensions, strDesc, true);
114
115 if ( nIndex == wxNOT_FOUND )
116 return false;
117
118 if (m_mailcapStylesInited & wxMAILCAP_GNOME)
119 {
120 // User modificationt to the MIME database
121 // are not supported :-)
122 }
123
124 return false;
125 }
126
127 //----------------------------------------------------------------------------
128 // wxGnomeVFSModule
129 //----------------------------------------------------------------------------
130
131 class wxGnomeVFSModule: public wxModule
132 {
133 public:
134 wxGnomeVFSModule() {}
135 bool OnInit();
136 void OnExit();
137
138 private:
139 DECLARE_DYNAMIC_CLASS(wxGnomeVFSModule)
140 };
141
142 bool wxGnomeVFSModule::OnInit()
143 {
144 gs_lgvfs = new wxGnomeVFSLibrary;
145 if (gs_lgvfs->IsOk())
146 {
147 if (gs_lgvfs->gnome_vfs_init())
148 wxMimeTypesManagerFactory::Set( new wxGnomeVFSMimeTypesManagerFactory );
149 }
150 return true;
151 }
152
153 void wxGnomeVFSModule::OnExit()
154 {
155 if (gs_lgvfs->IsOk())
156 gs_lgvfs->gnome_vfs_shutdown();
157
158 delete gs_lgvfs;
159 }
160
161 IMPLEMENT_DYNAMIC_CLASS(wxGnomeVFSModule, wxModule)
162
163 #endif // wxUSE_LIBGNOMEVFS && wxUSE_MIMETYPE