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:
parent
8513c19cba
commit
960ba969f9
@ -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
|
||||
|
@ -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()
|
||||
};
|
||||
|
@ -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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user