+ m_HtmlWin->HistoryForward();
+ NotifyPageChanged();
+ break;
+
+ case wxID_HTML_UP :
+ if (m_PagesHash)
+ {
+ wxString an = m_HtmlWin->GetOpenedAnchor();
+ wxHtmlHelpHashData *ha;
+ if (an.IsEmpty())
+ ha = (wxHtmlHelpHashData*) m_PagesHash->Get(m_HtmlWin->GetOpenedPage());
+ else
+ ha = (wxHtmlHelpHashData*) m_PagesHash->Get(m_HtmlWin->GetOpenedPage() + wxT("#") + an);
+ if (ha && ha->m_Index > 0)
+ {
+ wxHtmlContentsItem *it = m_Data->GetContents() + (ha->m_Index - 1);
+ if (it->m_Page[0] != 0)
+ {
+ m_HtmlWin->LoadPage(it->GetFullPath());
+ NotifyPageChanged();
+ }
+ }
+ }
+ break;
+
+ case wxID_HTML_UPNODE :
+ if (m_PagesHash)
+ {
+ wxString an = m_HtmlWin->GetOpenedAnchor();
+ wxHtmlHelpHashData *ha;
+ if (an.IsEmpty())
+ ha = (wxHtmlHelpHashData*) m_PagesHash->Get(m_HtmlWin->GetOpenedPage());
+ else
+ ha = (wxHtmlHelpHashData*) m_PagesHash->Get(m_HtmlWin->GetOpenedPage() + wxT("#") + an);
+ if (ha && ha->m_Index > 0)
+ {
+ int level = m_Data->GetContents()[ha->m_Index].m_Level - 1;
+ wxHtmlContentsItem *it;
+ int ind = ha->m_Index - 1;
+
+ it = m_Data->GetContents() + ind;
+ while (ind >= 0 && it->m_Level != level) ind--, it--;
+ if (ind >= 0)
+ {
+ if (it->m_Page[0] != 0)
+ {
+ m_HtmlWin->LoadPage(it->GetFullPath());
+ NotifyPageChanged();
+ }
+ }
+ }
+ }
+ break;
+
+ case wxID_HTML_DOWN :
+ if (m_PagesHash)
+ {
+ wxString an = m_HtmlWin->GetOpenedAnchor();
+ wxString adr;
+ wxHtmlHelpHashData *ha;
+
+ if (an.IsEmpty()) adr = m_HtmlWin->GetOpenedPage();
+ else adr = m_HtmlWin->GetOpenedPage() + wxT("#") + an;
+
+ ha = (wxHtmlHelpHashData*) m_PagesHash->Get(adr);
+
+ if (ha && ha->m_Index < m_Data->GetContentsCnt() - 1)
+ {
+ wxHtmlContentsItem *it = m_Data->GetContents() + (ha->m_Index + 1);
+
+ while (it->GetFullPath() == adr) it++;
+
+ if (it->m_Page[0] != 0)
+ {
+ m_HtmlWin->LoadPage(it->GetFullPath());
+ NotifyPageChanged();
+ }
+ }
+ }