Files
wxWidgets/src/gtk/gnome/gvfs.cpp
2007-01-15 01:26:05 +00:00

182 lines
4.5 KiB
C++

/////////////////////////////////////////////////////////////////////////////
// Name: src/gtk/gnome/gvfs.cpp
// Author: Robert Roebling
// Purpose: Implement GNOME VFS support
// Created: 03/17/06
// RCS-ID: $Id$
// Copyright: Robert Roebling
// Licence: wxWindows Licence
/////////////////////////////////////////////////////////////////////////////
// For compilers that support precompilation, includes "wx/wx.h".
#include "wx/wxprec.h"
#ifdef __BORLANDC__
#pragma hdrstop
#endif
#if wxUSE_MIMETYPE && wxUSE_LIBGNOMEVFS
#include "wx/gtk/gnome/gvfs.h"
#ifndef WX_PRECOMP
#include "wx/log.h"
#include "wx/module.h"
#endif
#include "wx/mimetype.h"
#include "wx/dynlib.h"
#include <libgnomevfs/gnome-vfs-mime-handlers.h>
#include "wx/link.h"
wxFORCE_LINK_THIS_MODULE(gnome_vfs)
//----------------------------------------------------------------------------
// wxGnomeVFSLibrary
//----------------------------------------------------------------------------
#define wxDL_METHOD_DEFINE( rettype, name, args, shortargs, defret ) \
typedef rettype (* name ## Type) args ; \
name ## Type pfn_ ## name; \
rettype name args \
{ if (m_ok) return pfn_ ## name shortargs ; return defret; }
#define wxDL_METHOD_LOAD( lib, name, success ) \
pfn_ ## name = (name ## Type) lib->GetSymbol( wxT(#name), &success ); \
if (!success) return;
class wxGnomeVFSLibrary
{
public:
wxGnomeVFSLibrary();
~wxGnomeVFSLibrary();
bool IsOk();
void InitializeMethods();
private:
bool m_ok;
wxDynamicLibrary *m_gnome_vfs_lib;
public:
wxDL_METHOD_DEFINE( gboolean, gnome_vfs_init,
(), (), FALSE )
wxDL_METHOD_DEFINE( void, gnome_vfs_shutdown,
(), (), /**/ )
wxDL_METHOD_DEFINE( GnomeVFSResult, gnome_vfs_mime_set_icon,
(const char *mime_type, const char *filename), (mime_type, filename), GNOME_VFS_OK )
};
wxGnomeVFSLibrary::wxGnomeVFSLibrary()
{
m_gnome_vfs_lib = NULL;
wxLogNull log;
m_gnome_vfs_lib = new wxDynamicLibrary( wxT("libgnomevfs-2.so.0") );
m_ok = m_gnome_vfs_lib->IsLoaded();
if (!m_ok) return;
InitializeMethods();
}
wxGnomeVFSLibrary::~wxGnomeVFSLibrary()
{
if (m_gnome_vfs_lib)
delete m_gnome_vfs_lib;
}
bool wxGnomeVFSLibrary::IsOk()
{
return m_ok;
}
void wxGnomeVFSLibrary::InitializeMethods()
{
m_ok = false;
bool success;
wxDL_METHOD_LOAD( m_gnome_vfs_lib, gnome_vfs_init, success )
wxDL_METHOD_LOAD( m_gnome_vfs_lib, gnome_vfs_shutdown, success )
m_ok = true;
}
static wxGnomeVFSLibrary* gs_lgvfs = NULL;
//----------------------------------------------------------------------------
// wxGnomeVFSMimeTypesManagerFactory
//----------------------------------------------------------------------------
wxMimeTypesManagerImpl *wxGnomeVFSMimeTypesManagerFactory::CreateMimeTypesManagerImpl()
{
return new wxGnomeVFSMimeTypesManagerImpl;
}
//----------------------------------------------------------------------------
// wxGnomeVFSMimeTypesManagerImpl
//----------------------------------------------------------------------------
bool wxGnomeVFSMimeTypesManagerImpl::DoAssociation(const wxString& strType,
const wxString& strIcon,
wxMimeTypeCommands *entry,
const wxArrayString& strExtensions,
const wxString& strDesc)
{
int nIndex = AddToMimeData(strType, strIcon, entry, strExtensions, strDesc, true);
if ( nIndex == wxNOT_FOUND )
return false;
if (m_mailcapStylesInited & wxMAILCAP_GNOME)
{
// User modificationt to the MIME database
// are not supported :-)
}
return false;
}
//----------------------------------------------------------------------------
// wxGnomeVFSModule
//----------------------------------------------------------------------------
class wxGnomeVFSModule: public wxModule
{
public:
wxGnomeVFSModule() {}
bool OnInit();
void OnExit();
private:
DECLARE_DYNAMIC_CLASS(wxGnomeVFSModule)
};
bool wxGnomeVFSModule::OnInit()
{
gs_lgvfs = new wxGnomeVFSLibrary;
if (gs_lgvfs->IsOk())
{
if (gs_lgvfs->gnome_vfs_init())
wxMimeTypesManagerFactory::Set( new wxGnomeVFSMimeTypesManagerFactory );
}
return true;
}
void wxGnomeVFSModule::OnExit()
{
if (gs_lgvfs->IsOk())
gs_lgvfs->gnome_vfs_shutdown();
delete gs_lgvfs;
}
IMPLEMENT_DYNAMIC_CLASS(wxGnomeVFSModule, wxModule)
#endif
// wxUSE_LIBGNOMEVS
// wxUSE_MIMETYPE