// In fact, this class is only front-end to the FS handlers :-)
static void AddHandler(wxFileSystemHandler *handler);
+ // Removes FS handler
+ static wxFileSystemHandler* RemoveHandler(wxFileSystemHandler *handler);
+
+
// Returns true if there is a handler which can open the given location.
static bool HasHandlerForPath(const wxString& location);
m_Handlers.Insert((size_t)0, handler);
}
+wxFileSystemHandler* wxFileSystem::RemoveHandler(wxFileSystemHandler *handler)
+{
+ // if handler has already been removed (or deleted)
+ // we return NULL. This is by design in case
+ // CleanUpHandlers() is called before RemoveHandler
+ // is called, as we cannot control the order
+ // which modules are unloaded
+ if (!m_Handlers.DeleteObject(handler))
+ return NULL;
+
+ return handler;
+}
+
+
bool wxFileSystem::HasHandlerForPath(const wxString &location)
{
for ( wxList::compatibility_iterator node = m_Handlers.GetFirst();
DECLARE_DYNAMIC_CLASS(wxFileSystemModule)
public:
+ wxFileSystemModule() :
+ wxModule(),
+ m_handler(NULL)
+ {
+ }
+
virtual bool OnInit()
{
- wxFileSystem::AddHandler(new wxLocalFSHandler);
+ m_handler = new wxLocalFSHandler;
+ wxFileSystem::AddHandler(m_handler);
return true;
}
virtual void OnExit()
{
+ delete wxFileSystem::RemoveHandler(m_handler);
+
wxFileSystem::CleanUpHandlers();
}
+
+ private:
+ wxFileSystemHandler* m_handler;
+
};
IMPLEMENT_DYNAMIC_CLASS(wxFileSystemModule, wxModule)
DECLARE_DYNAMIC_CLASS(wxFileSystemInternetModule)
public:
+ wxFileSystemInternetModule() :
+ wxModule(),
+ m_handler(NULL)
+ {
+ }
+
virtual bool OnInit()
{
- wxFileSystem::AddHandler(new wxInternetFSHandler);
+ m_handler = new wxInternetFSHandler;
+ wxFileSystem::AddHandler(m_handler);
return true;
}
- virtual void OnExit() {}
+
+ virtual void OnExit()
+ {
+ delete wxFileSystem::RemoveHandler(m_handler);
+ }
+
+ private:
+ wxFileSystemHandler* m_handler;
};
IMPLEMENT_DYNAMIC_CLASS(wxFileSystemInternetModule, wxModule)