]> git.saurik.com Git - wxWidgets.git/commitdiff
fixed static members
authorVáclav Slavík <vslavik@fastmail.fm>
Sun, 25 Jul 1999 12:21:23 +0000 (12:21 +0000)
committerVáclav Slavík <vslavik@fastmail.fm>
Sun, 25 Jul 1999 12:21:23 +0000 (12:21 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@3131 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/filesys.h
include/wx/html/htmlwin.h
src/common/filesys.cpp
src/html/htmlwin.cpp

index 15182beef3a7bb2a254f2d9f194d5bdfed8241c7..d381956e296cfede16675884fde2da9eae4e5cb4 100644 (file)
@@ -116,10 +116,16 @@ class WXDLLEXPORT wxFileSystemHandler : public wxObject
                 // 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)
 };
 
 
index 351e000d0c49aa5de44d7bc569121ce7df13ea77..553f49112ed3d5e553931fbe839398f906e3145c 100644 (file)
@@ -109,7 +109,7 @@ class WXDLLEXPORT wxHtmlWindow : public wxScrolledWindow
 
         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;
@@ -189,6 +189,9 @@ class WXDLLEXPORT wxHtmlWindow : public wxScrolledWindow
         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);
@@ -206,6 +209,9 @@ class WXDLLEXPORT wxHtmlWindow : public wxScrolledWindow
         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()
 };
index 38b29efa3c5020bdc3c2a0d0fab101356a1342ee..068024fa6a43e66046804c33dea82b06160d411f 100644 (file)
 
 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)
@@ -53,7 +59,8 @@ 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;
 }
@@ -279,7 +286,10 @@ class wxFileSystemModule : public wxModule
             wxFileSystem::AddHandler(new wxLocalFSHandler);
             return TRUE;
         }
-        virtual void OnExit() {}
+        virtual void OnExit() 
+       {
+           wxFileSystemHandler::CleanUpStatics();
+       }
 };
 
 IMPLEMENT_DYNAMIC_CLASS(wxFileSystemModule, wxModule)
@@ -287,3 +297,5 @@ IMPLEMENT_DYNAMIC_CLASS(wxFileSystemModule, wxModule)
 #endif 
   // (wxUSE_FS_INET || wxUSE_FS_ZIP) && wxUSE_STREAMS
 
+
+
index 493d0c35d606073c1c4e198350a3c8e99a3dde20..b98f5fed9a0bc78dca109d90a3f5e14eda8278ff 100644 (file)
@@ -195,7 +195,10 @@ bool wxHtmlWindow::LoadPage(const wxString& location)
                 }
                 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);
@@ -377,7 +380,15 @@ void wxHtmlWindow::HistoryClear()
 
 
 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)
 {
@@ -525,6 +536,21 @@ END_EVENT_TABLE()
 
 
 
+// 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)
+