// Returns MIME type of the file - w/o need to open it
// (default behaviour is that it returns type based on extension)
+ public:
+ static void CleanUpStatics();
+ // deletes static members (m_MimeMng). It can be called
+ // as many times as you wish because m_MimeMng is created
+ // on demand
+
private:
- static wxMimeTypesManager m_MimeMng;
+ static wxMimeTypesManager *m_MimeMng;
// MIME manager
- // (it's static and thus shared by all instances and derived classes)
+ // (it's static and thus shared by all instances and derived classes)
};
static wxList m_Filters;
// list of HTML filters
- static wxHtmlFilterPlainText m_DefaultFilter;
+ static wxHtmlFilter *m_DefaultFilter;
// this filter is used when no filter is able to read some file
HtmlHistoryArray m_History;
virtual void OnLinkClicked(const wxString& link);
// called when users clicked on hypertext link. Default behavior is to
// call LoadPage(loc)
+
+ static void CleanUpStatics();
+ // cleans static variables
protected:
bool ScrollToAnchor(const wxString& anchor);
void OnMouseEvent(wxMouseEvent& event);
void OnIdle(wxIdleEvent& event);
void OnKeyDown(wxKeyEvent& event);
+
+ virtual wxHtmlFilter *GetDefaultFilter() {return new wxHtmlFilterPlainText;}
+ // returns new filter (will be stored into m_DefaultFilter variable)
DECLARE_EVENT_TABLE()
};
IMPLEMENT_ABSTRACT_CLASS(wxFileSystemHandler, wxObject)
-wxMimeTypesManager wxFileSystemHandler::m_MimeMng;
+wxMimeTypesManager *wxFileSystemHandler::m_MimeMng = NULL;
+
+void wxFileSystemHandler::CleanUpStatics()
+{
+ if (m_MimeMng) delete m_MimeMng;
+ m_MimeMng = NULL;
+}
wxString wxFileSystemHandler::GetMimeTypeFromExt(const wxString& location)
if (c == _T('.')) {ext = loc.Right(l2-i-1); break;}
if ((c == _T('/')) || (c == _T('\\')) || (c == _T(':'))) {return wxEmptyString;}
}
- ft = m_MimeMng.GetFileTypeFromExtension(ext);
+ if (m_MimeMng == NULL) m_MimeMng = new wxMimeTypesManager;
+ ft = m_MimeMng -> GetFileTypeFromExtension(ext);
if (ft && (ft -> GetMimeType(&mime))) return mime;
else return wxEmptyString;
}
wxFileSystem::AddHandler(new wxLocalFSHandler);
return TRUE;
}
- virtual void OnExit() {}
+ virtual void OnExit()
+ {
+ wxFileSystemHandler::CleanUpStatics();
+ }
};
IMPLEMENT_DYNAMIC_CLASS(wxFileSystemModule, wxModule)
#endif
// (wxUSE_FS_INET || wxUSE_FS_ZIP) && wxUSE_STREAMS
+
+
}
node = node -> GetNext();
}
- if (src == wxEmptyString) src = m_DefaultFilter.ReadFile(*f);
+ if (src == wxEmptyString) {
+ if (m_DefaultFilter == NULL) m_DefaultFilter = GetDefaultFilter();
+ src = m_DefaultFilter -> ReadFile(*f);
+ }
m_FS -> ChangePathTo(f -> GetLocation());
rt_val = SetPage(src);
wxList wxHtmlWindow::m_Filters;
-wxHtmlFilterPlainText wxHtmlWindow::m_DefaultFilter;
+wxHtmlFilter *wxHtmlWindow::m_DefaultFilter = NULL;
+
+void wxHtmlWindow::CleanUpStatics()
+{
+ if (m_DefaultFilter) delete m_DefaultFilter;
+ m_DefaultFilter = NULL;
+}
+
+
void wxHtmlWindow::AddFilter(wxHtmlFilter *filter)
{
+// A module to allow initialization/cleanup
+// without calling these functions from app.cpp or from
+// the user's application.
+
+class wxHtmlWinModule: public wxModule
+{
+DECLARE_DYNAMIC_CLASS(wxHtmlWinModule)
+public:
+ wxHtmlWinModule() : wxModule() {}
+ bool OnInit() { return TRUE; }
+ void OnExit() { wxHtmlWindow::CleanUpStatics(); }
+};
+
+IMPLEMENT_DYNAMIC_CLASS(wxHtmlWinModule, wxModule)
+