X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/71d04f7ffdabd67233de114ae7b293501cdb3088..7ac05a91abea459438b8ea62074108d3daf39568:/src/html/helpfrm.cpp?ds=sidebyside diff --git a/src/html/helpfrm.cpp b/src/html/helpfrm.cpp index c10b8254c5..3bdfcd58d7 100644 --- a/src/html/helpfrm.cpp +++ b/src/html/helpfrm.cpp @@ -129,6 +129,38 @@ class wxHtmlHelpHtmlWindow : public wxHtmlWindow // wxHtmlHelpFrame //--------------------------------------------------------------------------- +// Command IDs : +enum +{ + //wxID_HTML_HELPFRAME = wxID_HIGHEST + 1, + wxID_HTML_PANEL = wxID_HIGHEST + 2, + wxID_HTML_BACK, + wxID_HTML_FORWARD, + wxID_HTML_UPNODE, + wxID_HTML_UP, + wxID_HTML_DOWN, + wxID_HTML_PRINT, + wxID_HTML_OPENFILE, + wxID_HTML_OPTIONS, + wxID_HTML_BOOKMARKSLIST, + wxID_HTML_BOOKMARKSADD, + wxID_HTML_BOOKMARKSREMOVE, + wxID_HTML_TREECTRL, + wxID_HTML_INDEXPAGE, + wxID_HTML_INDEXLIST, + wxID_HTML_INDEXTEXT, + wxID_HTML_INDEXBUTTON, + wxID_HTML_INDEXBUTTONALL, + wxID_HTML_NOTEBOOK, + wxID_HTML_SEARCHPAGE, + wxID_HTML_SEARCHTEXT, + wxID_HTML_SEARCHLIST, + wxID_HTML_SEARCHBUTTON, + wxID_HTML_SEARCHCHOICE, + wxID_HTML_COUNTINFO +}; + + IMPLEMENT_DYNAMIC_CLASS(wxHtmlHelpFrame, wxFrame) wxHtmlHelpFrame::wxHtmlHelpFrame(wxWindow* parent, wxWindowID id, const wxString& title, @@ -198,9 +230,11 @@ void wxHtmlHelpFrame::Init(wxHtmlHelpData* data) // moreover, if no contents, index or searchpage is needed, m_Splitter and // m_NavigPan will be NULL too (with m_HtmlWin directly connected to the frame) -bool wxHtmlHelpFrame::Create(wxWindow* parent, wxWindowID id, const wxString& title, - int style) +bool wxHtmlHelpFrame::Create(wxWindow* parent, wxWindowID id, + const wxString& WXUNUSED(title), int style) { + m_hfStyle = style; + wxImageList *ContentsImageList = new wxImageList(16, 16); ContentsImageList->Add(wxICON(wbook)); ContentsImageList->Add(wxICON(wfolder)); @@ -223,11 +257,11 @@ bool wxHtmlHelpFrame::Create(wxWindow* parent, wxWindowID id, const wxString& ti CreateStatusBar(); // toolbar? - if (style & (wxHF_TOOLBAR | wxHF_FLATTOOLBAR)) + if (style & (wxHF_TOOLBAR | wxHF_FLAT_TOOLBAR)) { wxToolBar *toolBar = CreateToolBar(wxNO_BORDER | wxTB_HORIZONTAL | wxTB_DOCKABLE | - (style & wxHF_FLATTOOLBAR ? wxTB_FLAT : 0)); + (style & wxHF_FLAT_TOOLBAR ? wxTB_FLAT : 0)); toolBar->SetMargins( 2, 2 ); AddToolbarButtons(toolBar, style); toolBar->Realize(); @@ -533,10 +567,10 @@ void wxHtmlHelpFrame::AddToolbarButtons(wxToolBar *toolBar, int style) FALSE, -1, -1, (wxObject *) NULL, _("Next page")); - if ((style & wxHF_PRINT) || (style & wxHF_OPENFILES)) + if ((style & wxHF_PRINT) || (style & wxHF_OPEN_FILES)) toolBar->AddSeparator(); - if (style & wxHF_OPENFILES) + if (style & wxHF_OPEN_FILES) toolBar->AddTool(wxID_HTML_OPENFILE, wopenBitmap, wxNullBitmap, FALSE, -1, -1, (wxObject *) NULL, _("Open HTML document")); @@ -605,7 +639,7 @@ bool wxHtmlHelpFrame::DisplayContents() { wxHtmlBookRecord& book = m_Data->GetBookRecArray()[0]; if (!book.GetStart().IsEmpty()) - m_HtmlWin->LoadPage(wxAddBasePath(book.GetBasePath(), book.GetStart())); + m_HtmlWin->LoadPage(book.GetFullPath(book.GetStart())); } return TRUE; } @@ -627,7 +661,7 @@ bool wxHtmlHelpFrame::DisplayIndex() { wxHtmlBookRecord& book = m_Data->GetBookRecArray()[0]; if (!book.GetStart().IsEmpty()) - m_HtmlWin->LoadPage(wxAddBasePath(book.GetBasePath(), book.GetStart())); + m_HtmlWin->LoadPage(book.GetFullPath(book.GetStart())); } return TRUE; } @@ -686,15 +720,13 @@ bool wxHtmlHelpFrame::KeywordSearch(const wxString& keyword) wxHtmlContentsItem *it = (wxHtmlContentsItem*) m_SearchList->GetClientData(0); if (it) { - m_HtmlWin->LoadPage(wxAddBasePath(it->m_Book->GetBasePath(), it->m_Page)); + m_HtmlWin->LoadPage(it->GetFullPath()); NotifyPageChanged(); } } return (foundcnt > 0); } -#define MAX_ROOTS 64 - void wxHtmlHelpFrame::CreateContents() { if (! m_ContentsBox) @@ -708,43 +740,91 @@ void wxHtmlHelpFrame::CreateContents() int cnt = m_Data->GetContentsCnt(); int i; + size_t booksCnt = m_Data->GetBookRecArray().GetCount(); wxHtmlContentsItem *it; + const int MAX_ROOTS = 64; wxTreeItemId roots[MAX_ROOTS]; - bool imaged[MAX_ROOTS]; - + // VS: this array holds information about whether we've set item icon at + // given level. This is neccessary because m_Data has flat structure + // and there's no way of recognizing if some item has subitems or not. + // We set the icon later: when we find an item with level=n, we know + // that the last item with level=n-1 was folder with subitems, so we + // set its icon accordingly + bool imaged[MAX_ROOTS]; m_ContentsBox->DeleteAllItems(); - roots[0] = m_ContentsBox->AddRoot(_("(Help)")); - m_ContentsBox->SetItemImage(roots[0], IMG_RootFolder); - m_ContentsBox->SetItemSelectedImage(roots[0], IMG_RootFolder); - imaged[0] = TRUE; - for (it = m_Data->GetContents(), i = 0; i < cnt; i++, it++) + // Don't show (Help) root if there's only one boook + if (booksCnt > 1) { - roots[it->m_Level + 1] = m_ContentsBox->AppendItem( - roots[it->m_Level], it->m_Name, IMG_Page, -1, - new wxHtmlHelpTreeItemData(i)); - m_PagesHash->Put(wxAddBasePath(it->m_Book->GetBasePath(), it->m_Page), - new wxHtmlHelpHashData(i, roots[it->m_Level + 1])); + roots[0] = m_ContentsBox->AddRoot(_("(Help)")); + m_ContentsBox->SetItemImage(roots[0], IMG_RootFolder); + m_ContentsBox->SetItemSelectedImage(roots[0], IMG_RootFolder); + imaged[0] = TRUE; + } + for (it = m_Data->GetContents(), i = 0; i < cnt; i++, it++) + { + // Handle books: if (it->m_Level == 0) - { - m_ContentsBox->SetItemBold(roots[1], TRUE); - m_ContentsBox->SetItemImage(roots[1], IMG_Book); - m_ContentsBox->SetItemSelectedImage(roots[1], IMG_Book); - imaged[1] = TRUE; + { + // special case, only one book, make it tree's root: + if (booksCnt == 1) + { + roots[0] = roots[1] = m_ContentsBox->AddRoot( + it->m_Name, IMG_Book, -1, + new wxHtmlHelpTreeItemData(i)); + imaged[0] = imaged[1] = TRUE; + m_ContentsBox->SetItemBold(roots[1], TRUE); + } + // multiple books: + else + { + if (m_hfStyle & wxHF_MERGE_BOOKS) + // VS: we don't want book nodes, books' content should + // appear under tree's root. This line will create "fake" + // record about book node so that the rest of this look + // will believe there really _is_ book node and will + // behave correctly. + roots[1] = roots[0]; + else + { + roots[1] = m_ContentsBox->AppendItem(roots[0], + it->m_Name, IMG_Book, -1, + new wxHtmlHelpTreeItemData(i)); + m_ContentsBox->SetItemBold(roots[1], TRUE); + } + imaged[1] = TRUE; + } } - else + // ...and their contents: + else + { + roots[it->m_Level + 1] = m_ContentsBox->AppendItem( + roots[it->m_Level], it->m_Name, IMG_Page, + -1, new wxHtmlHelpTreeItemData(i)); imaged[it->m_Level + 1] = FALSE; + } + m_PagesHash->Put(it->GetFullPath(), + new wxHtmlHelpHashData(i, roots[it->m_Level + 1])); + + // Set the icon for the node one level up in the hiearachy, + // unless already done (see comment above imaged[] declaration) if (!imaged[it->m_Level]) { - m_ContentsBox->SetItemImage(roots[it->m_Level], IMG_Folder); - m_ContentsBox->SetItemSelectedImage(roots[it->m_Level], IMG_Folder); + int image = IMG_Folder; + if (m_hfStyle & wxHF_ICONS_BOOK) + image = IMG_Book; + else if (m_hfStyle & wxHF_ICONS_BOOK_CHAPTER) + image = (it->m_Level == 1) ? IMG_Book : IMG_Folder; + m_ContentsBox->SetItemImage(roots[it->m_Level], image); + m_ContentsBox->SetItemSelectedImage(roots[it->m_Level], image); imaged[it->m_Level] = TRUE; } } + m_ContentsBox->Expand(roots[0]); } @@ -1000,7 +1080,7 @@ Normal face
(and underlined. Italic face. \ )); } - void OnUpdate(wxCommandEvent& event) + void OnUpdate(wxCommandEvent& WXUNUSED(event)) { UpdateTestWin(); } @@ -1114,7 +1194,7 @@ void wxHtmlHelpFrame::OnToolbar(wxCommandEvent& event) wxHtmlContentsItem *it = m_Data->GetContents() + (ha->m_Index - 1); if (it->m_Page[0] != 0) { - m_HtmlWin->LoadPage(wxAddBasePath(it->m_Book->GetBasePath(), it->m_Page)); + m_HtmlWin->LoadPage(it->GetFullPath()); NotifyPageChanged(); } } @@ -1142,7 +1222,7 @@ void wxHtmlHelpFrame::OnToolbar(wxCommandEvent& event) { if (it->m_Page[0] != 0) { - m_HtmlWin->LoadPage(wxAddBasePath(it->m_Book->GetBasePath(), it->m_Page)); + m_HtmlWin->LoadPage(it->GetFullPath()); NotifyPageChanged(); } } @@ -1166,11 +1246,11 @@ void wxHtmlHelpFrame::OnToolbar(wxCommandEvent& event) { wxHtmlContentsItem *it = m_Data->GetContents() + (ha->m_Index + 1); - while (wxAddBasePath(it->m_Book->GetBasePath(), it->m_Page) == adr) it++; + while (it->GetFullPath() == adr) it++; if (it->m_Page[0] != 0) { - m_HtmlWin->LoadPage(wxAddBasePath(it->m_Book->GetBasePath(), it->m_Page)); + m_HtmlWin->LoadPage(it->GetFullPath()); NotifyPageChanged(); } } @@ -1293,7 +1373,7 @@ void wxHtmlHelpFrame::OnContentsSel(wxTreeEvent& event) it = m_Data->GetContents() + (pg->m_Id); m_UpdateContents = FALSE; if (it->m_Page[0] != 0) - m_HtmlWin->LoadPage(wxAddBasePath(it->m_Book->GetBasePath(), it->m_Page)); + m_HtmlWin->LoadPage(it->GetFullPath()); m_UpdateContents = TRUE; } } @@ -1304,7 +1384,7 @@ void wxHtmlHelpFrame::OnIndexSel(wxCommandEvent& WXUNUSED(event)) { wxHtmlContentsItem *it = (wxHtmlContentsItem*) m_IndexList->GetClientData(m_IndexList->GetSelection()); if (it->m_Page[0] != 0) - m_HtmlWin->LoadPage(wxAddBasePath(it->m_Book->GetBasePath(), it->m_Page)); + m_HtmlWin->LoadPage(it->GetFullPath()); NotifyPageChanged(); } @@ -1321,7 +1401,8 @@ void wxHtmlHelpFrame::OnIndexFind(wxCommandEvent& event) { wxBusyCursor bcur; const wxChar *cstr = sr.c_str(); - wxChar mybuff[512], *ptr; + wxChar mybuff[512]; + wxChar *ptr; bool first = TRUE; m_IndexList->Clear(); @@ -1343,7 +1424,7 @@ void wxHtmlHelpFrame::OnIndexFind(wxCommandEvent& event) if (first) { if (index[i].m_Page[0] != 0) - m_HtmlWin->LoadPage(wxAddBasePath(index[i].m_Book->GetBasePath(), index[i].m_Page)); + m_HtmlWin->LoadPage(index[i].GetFullPath()); NotifyPageChanged(); first = FALSE; } @@ -1374,7 +1455,7 @@ void wxHtmlHelpFrame::OnIndexAll(wxCommandEvent& WXUNUSED(event)) if (first) { if (index[i].m_Page[0] != 0) - m_HtmlWin->LoadPage(wxAddBasePath(index[i].m_Book->GetBasePath(), index[i].m_Page)); + m_HtmlWin->LoadPage(index[i].GetFullPath()); NotifyPageChanged(); first = FALSE; } @@ -1392,7 +1473,7 @@ void wxHtmlHelpFrame::OnSearchSel(wxCommandEvent& WXUNUSED(event)) if (it) { if (it->m_Page[0] != 0) - m_HtmlWin->LoadPage(wxAddBasePath(it->m_Book->GetBasePath(), it->m_Page)); + m_HtmlWin->LoadPage(it->GetFullPath()); NotifyPageChanged(); } }