]> git.saurik.com Git - wxWidgets.git/commitdiff
1. changed AddSharedProcessor to AddGlobalProcessor
authorVáclav Slavík <vslavik@fastmail.fm>
Fri, 4 May 2001 23:54:01 +0000 (23:54 +0000)
committerVáclav Slavík <vslavik@fastmail.fm>
Fri, 4 May 2001 23:54:01 +0000 (23:54 +0000)
2. Added wxHtmlProcessor::Enable and IsEnabled
3. fixed fatal bug in wxHtmlWindow::Add[Global]Processor

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@10000 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/html/htmlproc.h
include/wx/html/htmlwin.h
src/html/htmlwin.cpp

index fecd1562c6360680a8c55e6bf3bdd2aca2efe78c..8b3906b527dcacb95017be665aa852fb99482f03 100644 (file)
@@ -40,7 +40,7 @@ class WXDLLEXPORT wxHtmlProcessor : public wxObject
     DECLARE_ABSTRACT_CLASS(wxHtmlProcessor)
 
 public:
-    wxHtmlProcessor() : wxObject() {}
+    wxHtmlProcessor() : wxObject(), m_enabled(TRUE) {}
     virtual ~wxHtmlProcessor() {}
 
     // Process input text and return processed result
@@ -49,6 +49,14 @@ public:
     // Return priority value of this processor. The higher, the sooner
     // is the processor applied to the text.
     virtual int GetPriority() const { return wxHTML_PRIORITY_DONTCARE; }
+    
+    // Enable/disable the processor. wxHtmlWindow won't use a disabled 
+    // processor even if it is in its processors queue.
+    virtual void Enable(bool enable = TRUE) { m_enabled = enable; }
+    bool IsEnabled() const { return m_enabled; }
+    
+protected:
+    bool m_enabled;
 };
 
 #endif // wxUSE_HTML
index c88745ae04036c0d1d234c132b86ca62f556a5fd..2bf22cd0cc8d5563f165f9340c45208eea7b1280 100644 (file)
@@ -133,7 +133,7 @@ public:
     // Adds HTML processor to this instance of wxHtmlWindow:
     void AddProcessor(wxHtmlProcessor *processor);
     // Adds HTML processor to wxHtmlWindow class as whole:
-    static void AddSharedProcessor(wxHtmlProcessor *processor);
+    static void AddGlobalProcessor(wxHtmlProcessor *processor);
 
 protected:
     // Scrolls to anchor of this name. (Anchor is #news
@@ -212,7 +212,7 @@ private:
 
     // html processors array:
     wxHtmlProcessorList *m_Processors;
-    static wxHtmlProcessorList *m_SharedProcessors;
+    static wxHtmlProcessorList *m_GlobalProcessors;    
 
     DECLARE_EVENT_TABLE()
 };
index 7f5fe924d2201b239749fa13932dda6ff16a15ec..9c7264d6e8d675021c2fa95b237882b4535b8e39 100644 (file)
@@ -141,27 +141,32 @@ bool wxHtmlWindow::SetPage(const wxString& source)
     wxString newsrc(source);
 
     // pass HTML through registered processors:
-    if (m_Processors || m_SharedProcessors)
+    if (m_Processors || m_GlobalProcessors)
     {
-        wxHtmlProcessorList::Node *nodeL, *nodeS;
-        int prL, prS;
+        wxHtmlProcessorList::Node *nodeL, *nodeG;
+        int prL, prG;
 
         nodeL = (m_Processors) ? m_Processors->GetFirst() : NULL;
-        nodeS = (m_SharedProcessors) ? m_SharedProcessors->GetFirst() : NULL;
-
-        while (nodeL || nodeS)
+        nodeG = (m_GlobalProcessors) ? m_GlobalProcessors->GetFirst() : NULL;
+
+        // VS: there are two lists, global and local, both of them sorted by
+        //     priority. Since we have to go through _both_ lists with 
+        //     decreasing priority, we "merge-sort" the lists on-line by
+        //     processing that one of the two heads that has higher priority
+        //     in every iteration
+        while (nodeL || nodeG)
         {
             prL = (nodeL) ? nodeL->GetData()->GetPriority() : -1;
-            prS = (nodeS) ? nodeS->GetData()->GetPriority() : -1;
-            if (prL > prS)
+            prG = (nodeG) ? nodeG->GetData()->GetPriority() : -1;
+            if (prL > prG)
             {
                 newsrc = nodeL->GetData()->Process(newsrc);
                 nodeL = nodeL->GetNext();
             }
-            else // prL <= prS
+            else // prL <= prG
             {
-                newsrc = nodeS->GetData()->Process(newsrc);
-                nodeS = nodeS->GetNext();
+                newsrc = nodeG->GetData()->Process(newsrc);
+                nodeG = nodeG->GetNext();
             }
         }
     }
@@ -198,15 +203,17 @@ bool wxHtmlWindow::LoadPage(const wxString& location)
     wxYield(); Refresh(FALSE);
 
     m_tmpCanDrawLocks++;
-    if (m_HistoryOn && (m_HistoryPos != -1)) // store scroll position into history item
+    if (m_HistoryOn && (m_HistoryPos != -1)) 
     {
+        // store scroll position into history item:
         int x, y;
         ViewStart(&x, &y);
         (*m_History)[m_HistoryPos].SetPos(y);
     }
 
-    if (location[0] == wxT('#')) // local anchor
+    if (location[0] == wxT('#')) 
     {
+        // local anchor:
         wxString anch = location.Mid(1) /*1 to end*/;
         m_tmpCanDrawLocks--;
         rt_val = ScrollToAnchor(anch);
@@ -535,28 +542,30 @@ void wxHtmlWindow::AddProcessor(wxHtmlProcessor *processor)
         if (processor->GetPriority() > node->GetData()->GetPriority())
         {
             m_Processors->Insert(node, processor);
-            break;
+            return;
         }
     }
+    m_Processors->Append(processor);
 }
 
-/*static */ void wxHtmlWindow::AddSharedProcessor(wxHtmlProcessor *processor)
+/*static */ void wxHtmlWindow::AddGlobalProcessor(wxHtmlProcessor *processor)
 {
-    if (!m_SharedProcessors)
+    if (!m_GlobalProcessors)
     {
-        m_SharedProcessors = new wxHtmlProcessorList;
-        m_SharedProcessors->DeleteContents(TRUE);
+        m_GlobalProcessors = new wxHtmlProcessorList;
+        m_GlobalProcessors->DeleteContents(TRUE);
     }
     wxHtmlProcessorList::Node *node;
-
-    for (node = m_SharedProcessors->GetFirst(); node; node = node->GetNext())
+    
+    for (node = m_GlobalProcessors->GetFirst(); node; node = node->GetNext())
     {
         if (processor->GetPriority() > node->GetData()->GetPriority())
         {
-            m_SharedProcessors->Insert(node, processor);
-            break;
+            m_GlobalProcessors->Insert(node, processor);
+            return;
         }
     }
+    m_GlobalProcessors->Append(processor);
 }
 
 
@@ -565,7 +574,7 @@ wxList wxHtmlWindow::m_Filters;
 wxHtmlFilter *wxHtmlWindow::m_DefaultFilter = NULL;
 wxCursor *wxHtmlWindow::s_cur_hand = NULL;
 wxCursor *wxHtmlWindow::s_cur_arrow = NULL;
-wxHtmlProcessorList *wxHtmlWindow::m_SharedProcessors = NULL;
+wxHtmlProcessorList *wxHtmlWindow::m_GlobalProcessors = NULL;
 
 void wxHtmlWindow::CleanUpStatics()
 {
@@ -573,10 +582,8 @@ void wxHtmlWindow::CleanUpStatics()
     m_DefaultFilter = NULL;
     m_Filters.DeleteContents(TRUE);
     m_Filters.Clear();
-
-    delete m_SharedProcessors;
-    m_SharedProcessors = NULL;
-
+    delete m_GlobalProcessors;
+    m_GlobalProcessors = NULL;
     delete s_cur_hand;
     delete s_cur_arrow;
 }