1. changed AddSharedProcessor to AddGlobalProcessor

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
This commit is contained in:
Václav Slavík 2001-05-04 23:54:01 +00:00
parent 8513c19cba
commit 960ba969f9
3 changed files with 44 additions and 29 deletions

View 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

View 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()
};

View 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;
nodeG = (m_GlobalProcessors) ? m_GlobalProcessors->GetFirst() : NULL;
while (nodeL || nodeS)
// 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;
}