]> git.saurik.com Git - wxWidgets.git/blobdiff - src/html/htmlwin.cpp
regenerated from templates
[wxWidgets.git] / src / html / htmlwin.cpp
index 1d84af92a4ffd103a9b6fd586d2b5244f96cf253..d6b79d5cbda3a071a30d3360a45783f29d7a7622 100644 (file)
@@ -130,7 +130,7 @@ void wxHtmlWindow::SetFonts(wxString normal_face, wxString fixed_face, const int
 
     m_Parser->SetFonts(normal_face, fixed_face, sizes);
     // fonts changed => contents invalid, so reload the page:
-    SetPage(wxT("<html><body></body></html>")); 
+    SetPage(wxT("<html><body></body></html>"));
     if (!op.IsEmpty()) LoadPage(op);
 }
 
@@ -141,27 +141,34 @@ 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);
+                if (nodeL->GetData()->IsEnabled())
+                    newsrc = nodeL->GetData()->Process(newsrc);
                 nodeL = nodeL->GetNext();
             }
-            else // prL <= prS
+            else // prL <= prG
             {
-                newsrc = nodeS->GetData()->Process(newsrc);
-                nodeS = nodeS->GetNext();
+                if (nodeG->GetData()->IsEnabled())
+                    newsrc = nodeG->GetData()->Process(newsrc);
+                nodeG = nodeG->GetNext();
             }
         }
     }
@@ -182,7 +189,7 @@ bool wxHtmlWindow::SetPage(const wxString& source)
     m_Cell->SetIndent(m_Borders, wxHTML_INDENT_ALL, wxHTML_UNITS_PIXELS);
     m_Cell->SetAlignHor(wxHTML_ALIGN_CENTER);
     CreateLayout();
-    if (m_tmpCanDrawLocks == 0) 
+    if (m_tmpCanDrawLocks == 0)
         Refresh();
     return TRUE;
 }
@@ -198,15 +205,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);
@@ -409,7 +418,7 @@ void wxHtmlWindow::ReadCustomization(wxConfigBase *cfg, wxString path)
     m_Borders = cfg->Read(wxT("wxHtmlWindow/Borders"), m_Borders);
     p_fff = cfg->Read(wxT("wxHtmlWindow/FontFaceFixed"), m_Parser->m_FontFaceFixed);
     p_ffn = cfg->Read(wxT("wxHtmlWindow/FontFaceNormal"), m_Parser->m_FontFaceNormal);
-    for (int i = 0; i < 7; i++) 
+    for (int i = 0; i < 7; i++)
     {
         tmp.Printf(wxT("wxHtmlWindow/FontsSize%i"), i);
         p_fontsizes[i] = cfg->Read(tmp, m_Parser->m_FontsSizes[i]);
@@ -436,7 +445,7 @@ void wxHtmlWindow::WriteCustomization(wxConfigBase *cfg, wxString path)
     cfg->Write(wxT("wxHtmlWindow/Borders"), (long) m_Borders);
     cfg->Write(wxT("wxHtmlWindow/FontFaceFixed"), m_Parser->m_FontFaceFixed);
     cfg->Write(wxT("wxHtmlWindow/FontFaceNormal"), m_Parser->m_FontFaceNormal);
-    for (int i = 0; i < 7; i++) 
+    for (int i = 0; i < 7; i++)
     {
         tmp.Printf(wxT("wxHtmlWindow/FontsSize%i"), i);
         cfg->Write(tmp, (long) m_Parser->m_FontsSizes[i]);
@@ -529,34 +538,36 @@ void wxHtmlWindow::AddProcessor(wxHtmlProcessor *processor)
         m_Processors->DeleteContents(TRUE);
     }
     wxHtmlProcessorList::Node *node;
-    
+
     for (node = m_Processors->GetFirst(); node; node = node->GetNext())
     {
-        if (processor->GetPriority() > node->GetData()->GetPriority()) 
+        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()) 
+        if (processor->GetPriority() > node->GetData()->GetPriority())
         {
-            m_SharedProcessors->Insert(node, processor);
-            break;
+            m_GlobalProcessors->Insert(node, processor);
+            return;
         }
     }
+    m_GlobalProcessors->Append(processor);
 }
 
 
@@ -565,7 +576,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 +584,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;
 }
@@ -696,7 +705,7 @@ void wxHtmlWindow::OnIdle(wxIdleEvent& WXUNUSED(event))
 }
 
 
-
+IMPLEMENT_ABSTRACT_CLASS(wxHtmlProcessor,wxObject)
 
 IMPLEMENT_DYNAMIC_CLASS(wxHtmlWindow,wxScrolledWindow)