Check for empty page location to avoid crash in lack of selected book (solves bug #1121381).

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@32955 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Włodzimierz Skiba
2005-03-21 16:09:04 +00:00
parent 4ed30bab75
commit baa1771049

View File

@@ -125,6 +125,22 @@ class wxHtmlHelpHtmlWindow : public wxHtmlWindow
m_Frame->NotifyPageChanged(); m_Frame->NotifyPageChanged();
} }
// Returns full location with anchor (helper)
static wxString GetOpenedPageWithAnchor(wxHtmlWindow *win)
{
if(!win)
return wxEmptyString;
wxString an = win->GetOpenedAnchor();
wxString pg = win->GetOpenedPage();
if(!an.empty())
{
pg << wxT("#");
pg << an;
}
return pg;
}
private: private:
wxHtmlHelpFrame *m_Frame; wxHtmlHelpFrame *m_Frame;
@@ -682,7 +698,7 @@ void wxHtmlHelpFrame::SetTitleFormat(const wxString& format)
bool wxHtmlHelpFrame::Display(const wxString& x) bool wxHtmlHelpFrame::Display(const wxString& x)
{ {
wxString url = m_Data->FindPageByName(x); wxString url = m_Data->FindPageByName(x);
if (!url.IsEmpty()) if (!url.empty())
{ {
m_HtmlWin->LoadPage(url); m_HtmlWin->LoadPage(url);
NotifyPageChanged(); NotifyPageChanged();
@@ -695,7 +711,7 @@ bool wxHtmlHelpFrame::Display(const wxString& x)
bool wxHtmlHelpFrame::Display(const int id) bool wxHtmlHelpFrame::Display(const int id)
{ {
wxString url = m_Data->FindPageById(id); wxString url = m_Data->FindPageById(id);
if (!url.IsEmpty()) if (!url.empty())
{ {
m_HtmlWin->LoadPage(url); m_HtmlWin->LoadPage(url);
NotifyPageChanged(); NotifyPageChanged();
@@ -725,7 +741,7 @@ bool wxHtmlHelpFrame::DisplayContents()
if (m_Data->GetBookRecArray().GetCount() > 0) if (m_Data->GetBookRecArray().GetCount() > 0)
{ {
wxHtmlBookRecord& book = m_Data->GetBookRecArray()[0]; wxHtmlBookRecord& book = m_Data->GetBookRecArray()[0];
if (!book.GetStart().IsEmpty()) if (!book.GetStart().empty())
m_HtmlWin->LoadPage(book.GetFullPath(book.GetStart())); m_HtmlWin->LoadPage(book.GetFullPath(book.GetStart()));
} }
@@ -751,7 +767,7 @@ bool wxHtmlHelpFrame::DisplayIndex()
if (m_Data->GetBookRecArray().GetCount() > 0) if (m_Data->GetBookRecArray().GetCount() > 0)
{ {
wxHtmlBookRecord& book = m_Data->GetBookRecArray()[0]; wxHtmlBookRecord& book = m_Data->GetBookRecArray()[0];
if (!book.GetStart().IsEmpty()) if (!book.GetStart().empty())
m_HtmlWin->LoadPage(book.GetFullPath(book.GetStart())); m_HtmlWin->LoadPage(book.GetFullPath(book.GetStart()));
} }
@@ -1353,12 +1369,11 @@ void wxHtmlHelpFrame::NotifyPageChanged()
{ {
if (m_UpdateContents && m_PagesHash) if (m_UpdateContents && m_PagesHash)
{ {
wxString an = m_HtmlWin->GetOpenedAnchor(); wxString page = wxHtmlHelpHtmlWindow::GetOpenedPageWithAnchor(m_HtmlWin);
wxHtmlHelpHashData *ha; wxHtmlHelpHashData *ha = NULL;
if (an.IsEmpty()) if (!page.empty())
ha = (wxHtmlHelpHashData*) m_PagesHash->Get(m_HtmlWin->GetOpenedPage()); ha = (wxHtmlHelpHashData*) m_PagesHash->Get(page);
else
ha = (wxHtmlHelpHashData*) m_PagesHash->Get(m_HtmlWin->GetOpenedPage() + wxT("#") + an);
if (ha) if (ha)
{ {
bool olduc = m_UpdateContents; bool olduc = m_UpdateContents;
@@ -1408,12 +1423,10 @@ void wxHtmlHelpFrame::OnToolbar(wxCommandEvent& event)
case wxID_HTML_UP : case wxID_HTML_UP :
if (m_PagesHash) if (m_PagesHash)
{ {
wxString an = m_HtmlWin->GetOpenedAnchor(); wxString page = wxHtmlHelpHtmlWindow::GetOpenedPageWithAnchor(m_HtmlWin);
wxHtmlHelpHashData *ha; wxHtmlHelpHashData *ha = NULL;
if (an.IsEmpty()) if (!page.empty())
ha = (wxHtmlHelpHashData*) m_PagesHash->Get(m_HtmlWin->GetOpenedPage()); ha = (wxHtmlHelpHashData*) m_PagesHash->Get(page);
else
ha = (wxHtmlHelpHashData*) m_PagesHash->Get(m_HtmlWin->GetOpenedPage() + wxT("#") + an);
if (ha && ha->m_Index > 0) if (ha && ha->m_Index > 0)
{ {
const wxHtmlHelpDataItem& it = m_Data->GetContentsArray()[ha->m_Index - 1]; const wxHtmlHelpDataItem& it = m_Data->GetContentsArray()[ha->m_Index - 1];
@@ -1429,12 +1442,10 @@ void wxHtmlHelpFrame::OnToolbar(wxCommandEvent& event)
case wxID_HTML_UPNODE : case wxID_HTML_UPNODE :
if (m_PagesHash) if (m_PagesHash)
{ {
wxString an = m_HtmlWin->GetOpenedAnchor(); wxString page = wxHtmlHelpHtmlWindow::GetOpenedPageWithAnchor(m_HtmlWin);
wxHtmlHelpHashData *ha; wxHtmlHelpHashData *ha = NULL;
if (an.IsEmpty()) if (!page.empty())
ha = (wxHtmlHelpHashData*) m_PagesHash->Get(m_HtmlWin->GetOpenedPage()); ha = (wxHtmlHelpHashData*) m_PagesHash->Get(page);
else
ha = (wxHtmlHelpHashData*) m_PagesHash->Get(m_HtmlWin->GetOpenedPage() + wxT("#") + an);
if (ha && ha->m_Index > 0) if (ha && ha->m_Index > 0)
{ {
int level = int level =
@@ -1463,21 +1474,17 @@ void wxHtmlHelpFrame::OnToolbar(wxCommandEvent& event)
case wxID_HTML_DOWN : case wxID_HTML_DOWN :
if (m_PagesHash) if (m_PagesHash)
{ {
wxString an = m_HtmlWin->GetOpenedAnchor(); wxString page = wxHtmlHelpHtmlWindow::GetOpenedPageWithAnchor(m_HtmlWin);
wxString adr; wxHtmlHelpHashData *ha = NULL;
wxHtmlHelpHashData *ha; if (!page.empty())
ha = (wxHtmlHelpHashData*) m_PagesHash->Get(page);
if (an.IsEmpty()) adr = m_HtmlWin->GetOpenedPage();
else adr = m_HtmlWin->GetOpenedPage() + wxT("#") + an;
ha = (wxHtmlHelpHashData*) m_PagesHash->Get(adr);
const wxHtmlHelpDataItems& contents = m_Data->GetContentsArray(); const wxHtmlHelpDataItems& contents = m_Data->GetContentsArray();
if (ha && ha->m_Index < (int)contents.size() - 1) if (ha && ha->m_Index < (int)contents.size() - 1)
{ {
size_t idx = ha->m_Index + 1; size_t idx = ha->m_Index + 1;
while (contents[idx].GetFullPath() == adr) idx++; while (contents[idx].GetFullPath() == page) idx++;
if (!contents[idx].page.empty()) if (!contents[idx].page.empty())
{ {
@@ -1576,7 +1583,7 @@ void wxHtmlHelpFrame::OnToolbar(wxCommandEvent& event)
filemask, filemask,
wxOPEN | wxFILE_MUST_EXIST, wxOPEN | wxFILE_MUST_EXIST,
this); this);
if (!s.IsEmpty()) if (!s.empty())
{ {
wxString ext = s.Right(4).Lower(); wxString ext = s.Right(4).Lower();
if (ext == _T(".zip") || ext == _T(".htb") || if (ext == _T(".zip") || ext == _T(".htb") ||