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) 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

View File

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

View File

@ -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;
} }