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)
|
DECLARE_ABSTRACT_CLASS(wxHtmlProcessor)
|
||||||
|
|
||||||
public:
|
public:
|
||||||
wxHtmlProcessor() : wxObject() {}
|
wxHtmlProcessor() : wxObject(), m_enabled(TRUE) {}
|
||||||
virtual ~wxHtmlProcessor() {}
|
virtual ~wxHtmlProcessor() {}
|
||||||
|
|
||||||
// Process input text and return processed result
|
// Process input text and return processed result
|
||||||
@ -49,6 +49,14 @@ public:
|
|||||||
// Return priority value of this processor. The higher, the sooner
|
// Return priority value of this processor. The higher, the sooner
|
||||||
// is the processor applied to the text.
|
// is the processor applied to the text.
|
||||||
virtual int GetPriority() const { return wxHTML_PRIORITY_DONTCARE; }
|
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
|
#endif // wxUSE_HTML
|
||||||
|
@ -133,7 +133,7 @@ public:
|
|||||||
// Adds HTML processor to this instance of wxHtmlWindow:
|
// Adds HTML processor to this instance of wxHtmlWindow:
|
||||||
void AddProcessor(wxHtmlProcessor *processor);
|
void AddProcessor(wxHtmlProcessor *processor);
|
||||||
// Adds HTML processor to wxHtmlWindow class as whole:
|
// Adds HTML processor to wxHtmlWindow class as whole:
|
||||||
static void AddSharedProcessor(wxHtmlProcessor *processor);
|
static void AddGlobalProcessor(wxHtmlProcessor *processor);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
// Scrolls to anchor of this name. (Anchor is #news
|
// Scrolls to anchor of this name. (Anchor is #news
|
||||||
@ -212,7 +212,7 @@ private:
|
|||||||
|
|
||||||
// html processors array:
|
// html processors array:
|
||||||
wxHtmlProcessorList *m_Processors;
|
wxHtmlProcessorList *m_Processors;
|
||||||
static wxHtmlProcessorList *m_SharedProcessors;
|
static wxHtmlProcessorList *m_GlobalProcessors;
|
||||||
|
|
||||||
DECLARE_EVENT_TABLE()
|
DECLARE_EVENT_TABLE()
|
||||||
};
|
};
|
||||||
|
@ -141,27 +141,32 @@ bool wxHtmlWindow::SetPage(const wxString& source)
|
|||||||
wxString newsrc(source);
|
wxString newsrc(source);
|
||||||
|
|
||||||
// pass HTML through registered processors:
|
// pass HTML through registered processors:
|
||||||
if (m_Processors || m_SharedProcessors)
|
if (m_Processors || m_GlobalProcessors)
|
||||||
{
|
{
|
||||||
wxHtmlProcessorList::Node *nodeL, *nodeS;
|
wxHtmlProcessorList::Node *nodeL, *nodeG;
|
||||||
int prL, prS;
|
int prL, prG;
|
||||||
|
|
||||||
nodeL = (m_Processors) ? m_Processors->GetFirst() : NULL;
|
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;
|
prL = (nodeL) ? nodeL->GetData()->GetPriority() : -1;
|
||||||
prS = (nodeS) ? nodeS->GetData()->GetPriority() : -1;
|
prG = (nodeG) ? nodeG->GetData()->GetPriority() : -1;
|
||||||
if (prL > prS)
|
if (prL > prG)
|
||||||
{
|
{
|
||||||
newsrc = nodeL->GetData()->Process(newsrc);
|
newsrc = nodeL->GetData()->Process(newsrc);
|
||||||
nodeL = nodeL->GetNext();
|
nodeL = nodeL->GetNext();
|
||||||
}
|
}
|
||||||
else // prL <= prS
|
else // prL <= prG
|
||||||
{
|
{
|
||||||
newsrc = nodeS->GetData()->Process(newsrc);
|
newsrc = nodeG->GetData()->Process(newsrc);
|
||||||
nodeS = nodeS->GetNext();
|
nodeG = nodeG->GetNext();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -198,15 +203,17 @@ bool wxHtmlWindow::LoadPage(const wxString& location)
|
|||||||
wxYield(); Refresh(FALSE);
|
wxYield(); Refresh(FALSE);
|
||||||
|
|
||||||
m_tmpCanDrawLocks++;
|
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;
|
int x, y;
|
||||||
ViewStart(&x, &y);
|
ViewStart(&x, &y);
|
||||||
(*m_History)[m_HistoryPos].SetPos(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*/;
|
wxString anch = location.Mid(1) /*1 to end*/;
|
||||||
m_tmpCanDrawLocks--;
|
m_tmpCanDrawLocks--;
|
||||||
rt_val = ScrollToAnchor(anch);
|
rt_val = ScrollToAnchor(anch);
|
||||||
@ -535,28 +542,30 @@ void wxHtmlWindow::AddProcessor(wxHtmlProcessor *processor)
|
|||||||
if (processor->GetPriority() > node->GetData()->GetPriority())
|
if (processor->GetPriority() > node->GetData()->GetPriority())
|
||||||
{
|
{
|
||||||
m_Processors->Insert(node, processor);
|
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_GlobalProcessors = new wxHtmlProcessorList;
|
||||||
m_SharedProcessors->DeleteContents(TRUE);
|
m_GlobalProcessors->DeleteContents(TRUE);
|
||||||
}
|
}
|
||||||
wxHtmlProcessorList::Node *node;
|
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);
|
m_GlobalProcessors->Insert(node, processor);
|
||||||
break;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
m_GlobalProcessors->Append(processor);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -565,7 +574,7 @@ wxList wxHtmlWindow::m_Filters;
|
|||||||
wxHtmlFilter *wxHtmlWindow::m_DefaultFilter = NULL;
|
wxHtmlFilter *wxHtmlWindow::m_DefaultFilter = NULL;
|
||||||
wxCursor *wxHtmlWindow::s_cur_hand = NULL;
|
wxCursor *wxHtmlWindow::s_cur_hand = NULL;
|
||||||
wxCursor *wxHtmlWindow::s_cur_arrow = NULL;
|
wxCursor *wxHtmlWindow::s_cur_arrow = NULL;
|
||||||
wxHtmlProcessorList *wxHtmlWindow::m_SharedProcessors = NULL;
|
wxHtmlProcessorList *wxHtmlWindow::m_GlobalProcessors = NULL;
|
||||||
|
|
||||||
void wxHtmlWindow::CleanUpStatics()
|
void wxHtmlWindow::CleanUpStatics()
|
||||||
{
|
{
|
||||||
@ -573,10 +582,8 @@ void wxHtmlWindow::CleanUpStatics()
|
|||||||
m_DefaultFilter = NULL;
|
m_DefaultFilter = NULL;
|
||||||
m_Filters.DeleteContents(TRUE);
|
m_Filters.DeleteContents(TRUE);
|
||||||
m_Filters.Clear();
|
m_Filters.Clear();
|
||||||
|
delete m_GlobalProcessors;
|
||||||
delete m_SharedProcessors;
|
m_GlobalProcessors = NULL;
|
||||||
m_SharedProcessors = NULL;
|
|
||||||
|
|
||||||
delete s_cur_hand;
|
delete s_cur_hand;
|
||||||
delete s_cur_arrow;
|
delete s_cur_arrow;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user