From 576507e276a32bccda610ce0e45451e6a46e4d31 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=A1clav=20Slav=C3=ADk?= Date: Sat, 5 May 2001 18:05:57 +0000 Subject: [PATCH] added new wxHF_xxxx contants to control wxHtmlHelpFrame's appearance (book icons in contents) git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@10006 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- docs/latex/wx/hthelpct.tex | 20 ++++-- docs/latex/wx/hthlpfrm.tex | 36 +++++----- include/wx/html/helpctrl.h | 4 +- include/wx/html/helpfrm.h | 67 +++++++----------- src/html/helpctrl.cpp | 16 ----- src/html/helpfrm.cpp | 136 +++++++++++++++++++++++++++++-------- 6 files changed, 166 insertions(+), 113 deletions(-) diff --git a/docs/latex/wx/hthelpct.tex b/docs/latex/wx/hthelpct.tex index fdc46abd1a..4111abf3f3 100644 --- a/docs/latex/wx/hthelpct.tex +++ b/docs/latex/wx/hthelpct.tex @@ -51,7 +51,7 @@ wxHelpControllerBase \membersection{wxHtmlHelpController::wxHtmlHelpController}\label{wxhtmlhelpcontrollerwxhtmlhelpcontroller} -\func{}{wxHtmlHelpController}{\param{int }{style = wxHF\_DEFAULTSTYLE}} +\func{}{wxHtmlHelpController}{\param{int }{style = wxHF\_DEFAULT\_STYLE}} Constructor. @@ -61,17 +61,27 @@ Constructor. \begin{twocollist}\itemsep=0pt \twocolitem{\windowstyle{wxHF\_TOOLBAR}}{Help frame has toolbar.} -\twocolitem{\windowstyle{wxHF\_FLATTOOLBAR}}{Help frame has toolbar with flat buttons (aka coolbar).} +\twocolitem{\windowstyle{wxHF\_FLAT\_TOOLBAR}}{Help frame has toolbar with flat buttons (aka coolbar).} \twocolitem{\windowstyle{wxHF\_CONTENTS}}{Help frame has contents panel.} \twocolitem{\windowstyle{wxHF\_INDEX}}{Help frame has index panel.} \twocolitem{\windowstyle{wxHF\_SEARCH}}{Help frame has search panel.} \twocolitem{\windowstyle{wxHF\_BOOKMARKS}}{Help frame has bookmarks controls.} -\twocolitem{\windowstyle{wxHF\_OPENFILES}}{Allow user to open arbitrary HTML document.} +\twocolitem{\windowstyle{wxHF\_OPEN\_FILES}}{Allow user to open arbitrary HTML document.} \twocolitem{\windowstyle{wxHF\_PRINT}}{Toolbar contains "print" button.} +\twocolitem{\windowstyle{wxHF\_MERGE\_BOOKS}}{Contents pane does not show +book nodes. All books are merged together and appear as single book to the +user.} +\twocolitem{\windowstyle{wxHF\_ICONS\_BOOK}}{All nodes in contents pane +have a book icon. This is how Microsoft's HTML help viewer behaves.} +\twocolitem{\windowstyle{wxHF\_ICONS\_FOLDER}}{Book nodes in contents pane have +a book icon, book's sections have a folder icon. This is the default.} +\twocolitem{\windowstyle{wxHF\_ICONS\_BOOK_CHAPTER}}{Both book nodes and +nodes of top-level sections of a book (i.e. chapters) have a book icon, +all other sections (sections, subsections, ...) have a folder icon.} +\twocolitem{\windowstyle{wxHF\_DEFAULT\_STYLE}}{{\tt wxHF\_TOOLBAR | wxHF\_CONTENTS +| wxHF\_INDEX | wxHF\_SEARCH | wxHF\_BOOKMARKS | wxHF\_PRINT}} \end{twocollist} -Default value: everything but wxHF\_OPENFILES enabled. - \membersection{wxHtmlHelpController::AddBook}\label{wxhtmlhelpcontrolleraddbook} \func{bool}{AddBook}{\param{const wxString\& }{book}, \param{bool }{show\_wait\_msg}} diff --git a/docs/latex/wx/hthlpfrm.tex b/docs/latex/wx/hthlpfrm.tex index 4d6f187109..abdcb74baf 100644 --- a/docs/latex/wx/hthlpfrm.tex +++ b/docs/latex/wx/hthlpfrm.tex @@ -24,7 +24,7 @@ when you're writing your own HTML help controller. \func{}{wxHtmlHelpFrame}{\param{wxHtmlHelpData* }{data = NULL}} -\func{}{wxHtmlHelpFrame}{\param{wxWindow* }{parent}, \param{int }{wxWindowID}, \param{const wxString\& }{title = wxEmptyString}, \param{int }{style = wxHF\_DEFAULTSTYLE}, \param{wxHtmlHelpData* }{data = NULL}} +\func{}{wxHtmlHelpFrame}{\param{wxWindow* }{parent}, \param{int }{wxWindowID}, \param{const wxString\& }{title = wxEmptyString}, \param{int }{style = wxHF\_DEFAULT\_STYLE}, \param{wxHtmlHelpData* }{data = NULL}} Constructor. @@ -32,33 +32,33 @@ Constructor. \begin{twocollist}\itemsep=0pt \twocolitem{\windowstyle{wxHF\_TOOLBAR}}{Help frame has toolbar.} -\twocolitem{\windowstyle{wxHF\_FLATTOOLBAR}}{Help frame has toolbar with flat buttons (aka coolbar).} +\twocolitem{\windowstyle{wxHF\_FLAT\_TOOLBAR}}{Help frame has toolbar with flat buttons (aka coolbar).} \twocolitem{\windowstyle{wxHF\_CONTENTS}}{Help frame has contents panel.} \twocolitem{\windowstyle{wxHF\_INDEX}}{Help frame has index panel.} \twocolitem{\windowstyle{wxHF\_SEARCH}}{Help frame has search panel.} \twocolitem{\windowstyle{wxHF\_BOOKMARKS}}{Help frame has bookmarks controls.} -\twocolitem{\windowstyle{wxHF\_OPENFILES}}{Allow user to open arbitrary HTML document.} +\twocolitem{\windowstyle{wxHF\_OPEN\_FILES}}{Allow user to open arbitrary HTML document.} \twocolitem{\windowstyle{wxHF\_PRINT}}{Toolbar contains "print" button.} +\twocolitem{\windowstyle{wxHF\_MERGE\_BOOKS}}{Contents pane does not show +book nodes. All books are merged together and appear as single book to the +user.} +\twocolitem{\windowstyle{wxHF\_ICONS\_BOOK}}{All nodes in contents pane +have a book icon. This is how Microsoft's HTML help viewer behaves.} +\twocolitem{\windowstyle{wxHF\_ICONS\_FOLDER}}{Book nodes in contents pane have +a book icon, book's sections have a folder icon. This is the default.} +\twocolitem{\windowstyle{wxHF\_ICONS\_BOOK_CHAPTER}}{Both book nodes and +nodes of top-level sections of a book (i.e. chapters) have a book icon, +all other sections (sections, subsections, ...) have a folder icon.} +\twocolitem{\windowstyle{wxHF\_DEFAULT\_STYLE}}{{\tt wxHF\_TOOLBAR | wxHF\_CONTENTS +| wxHF\_INDEX | wxHF\_SEARCH | wxHF\_BOOKMARKS | wxHF\_PRINT}} \end{twocollist} \membersection{wxHtmlHelpFrame::Create}\label{wxhtmlhelpframecreate} -\func{bool}{Create}{\param{wxWindow* }{parent}, \param{wxWindowID }{id}, \param{const wxString\& }{title = wxEmptyString}, \param{int }{style = wxHF\_DEFAULTSTYLE}} +\func{bool}{Create}{\param{wxWindow* }{parent}, \param{wxWindowID }{id}, \param{const wxString\& }{title = wxEmptyString}, \param{int }{style = wxHF\_DEFAULT\_STYLE}} -Creates the frame. - -{\it style} is combination of these flags: - -\begin{twocollist}\itemsep=0pt -\twocolitem{\windowstyle{wxHF\_TOOLBAR}}{Help frame has toolbar.} -\twocolitem{\windowstyle{wxHF\_FLATTOOLBAR}}{Help frame has toolbar with flat buttons (aka coolbar).} -\twocolitem{\windowstyle{wxHF\_CONTENTS}}{Help frame has contents panel.} -\twocolitem{\windowstyle{wxHF\_INDEX}}{Help frame has index panel.} -\twocolitem{\windowstyle{wxHF\_SEARCH}}{Help frame has search panel.} -\twocolitem{\windowstyle{wxHF\_BOOKMARKS}}{Help frame has bookmarks controls.} -\twocolitem{\windowstyle{wxHF\_OPENFILES}}{Allow user to open arbitrary HTML document.} -\twocolitem{\windowstyle{wxHF\_PRINT}}{Toolbar contains "print" button.} -\end{twocollist} +Creates the frame. See \helpref{the constructor}{wxhtmlhelpframewxhtmlhelpframe} +for parameters description. \membersection{wxHtmlHelpFrame::CreateContents}\label{wxhtmlhelpframecreatecontents} diff --git a/include/wx/html/helpctrl.h b/include/wx/html/helpctrl.h index 14b004dd7a..f31e41f874 100644 --- a/include/wx/html/helpctrl.h +++ b/include/wx/html/helpctrl.h @@ -23,12 +23,14 @@ #include "wx/html/helpfrm.h" #include "wx/helpbase.h" +#define wxID_HTML_HELPFRAME (wxID_HIGHEST + 1) + class WXDLLEXPORT wxHtmlHelpController : public wxHelpControllerBase // wxEvtHandler { DECLARE_DYNAMIC_CLASS(wxHtmlHelpController) public: - wxHtmlHelpController(int style = wxHF_DEFAULTSTYLE); + wxHtmlHelpController(int style = wxHF_DEFAULT_STYLE); virtual ~wxHtmlHelpController(); void SetTitleFormat(const wxString& format); diff --git a/include/wx/html/helpfrm.h b/include/wx/html/helpfrm.h index a15cd0419c..d8c4e83b13 100644 --- a/include/wx/html/helpfrm.h +++ b/include/wx/html/helpfrm.h @@ -36,48 +36,25 @@ // style flags for the Help Frame -#define wxHF_TOOLBAR 0x0001 -#define wxHF_CONTENTS 0x0002 -#define wxHF_INDEX 0x0004 -#define wxHF_SEARCH 0x0008 -#define wxHF_BOOKMARKS 0x0010 -#define wxHF_OPENFILES 0x0020 -#define wxHF_PRINT 0x0040 -#define wxHF_FLATTOOLBAR 0x0080 -#define wxHF_DEFAULTSTYLE (wxHF_TOOLBAR | wxHF_CONTENTS | wxHF_INDEX | \ - wxHF_SEARCH | wxHF_BOOKMARKS | wxHF_PRINT) - - -// Command IDs : -enum -{ - wxID_HTML_PANEL = wxID_HIGHEST + 1, - 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, - wxID_HTML_HELPFRAME // the id of wxHtmlHelpController's helpframe -}; +#define wxHF_TOOLBAR 0x0001 +#define wxHF_CONTENTS 0x0002 +#define wxHF_INDEX 0x0004 +#define wxHF_SEARCH 0x0008 +#define wxHF_BOOKMARKS 0x0010 +#define wxHF_OPEN_FILES 0x0020 +#define wxHF_PRINT 0x0040 +#define wxHF_FLAT_TOOLBAR 0x0080 +#define wxHF_MERGE_BOOKS 0x0100 +#define wxHF_ICONS_BOOK 0x0200 +#define wxHF_ICONS_BOOK_CHAPTER 0x0400 +#define wxHF_ICONS_FOLDER 0x0000 // this is 0 since it is default +#define wxHF_DEFAULT_STYLE (wxHF_TOOLBAR | wxHF_CONTENTS | \ + wxHF_INDEX | wxHF_SEARCH | \ + wxHF_BOOKMARKS | wxHF_PRINT) +//compatibility: +#define wxHF_OPENFILES wxHF_OPEN_FILES +#define wxHF_FLATTOOLBAR wxHF_FLAT_TOOLBAR +#define wxHF_DEFAULTSTYLE wxHF_DEFAULT_STYLE struct wxHtmlHelpFrameCfg @@ -98,9 +75,9 @@ public: wxHtmlHelpFrame(wxHtmlHelpData* data = NULL) { Init(data); } wxHtmlHelpFrame(wxWindow* parent, wxWindowID wxWindowID, const wxString& title = wxEmptyString, - int style = wxHF_DEFAULTSTYLE, wxHtmlHelpData* data = NULL); + int style = wxHF_DEFAULT_STYLE, wxHtmlHelpData* data = NULL); bool Create(wxWindow* parent, wxWindowID id, const wxString& title = wxEmptyString, - int style = wxHF_DEFAULTSTYLE); + int style = wxHF_DEFAULT_STYLE); ~wxHtmlHelpFrame(); wxHtmlHelpData* GetData() { return m_Data; } @@ -241,6 +218,8 @@ protected: #endif wxHashTable *m_PagesHash; wxHelpControllerBase* m_helpController; + + int m_hfStyle; DECLARE_EVENT_TABLE() }; diff --git a/src/html/helpctrl.cpp b/src/html/helpctrl.cpp index 72c82d2773..c527460761 100644 --- a/src/html/helpctrl.cpp +++ b/src/html/helpctrl.cpp @@ -246,20 +246,4 @@ bool wxHtmlHelpController::Quit() return TRUE; } -// Sets the specified book or all books to have the given base path -void wxHtmlHelpController::SetBookBasePath(const wxString& basePath, int which) -{ - size_t i; - for (i = 0; i < m_helpData.GetBookRecArray().Count(); i++ ) - { - if (i == (size_t) which || which == -1) - { - wxHtmlBookRecord& book = m_helpData.GetBookRecArray()[i]; - book.SetBasePath(basePath); - } - if (i == (size_t) which) - return; - } -} - #endif diff --git a/src/html/helpfrm.cpp b/src/html/helpfrm.cpp index dc55c65ec8..504dd005bd 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& WXUNUSED(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& WX 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")); @@ -693,8 +727,6 @@ bool wxHtmlHelpFrame::KeywordSearch(const wxString& keyword) return (foundcnt > 0); } -#define MAX_ROOTS 64 - void wxHtmlHelpFrame::CreateContents() { if (! m_ContentsBox) @@ -708,43 +740,89 @@ 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; + + // Don't show (Help) root if there's only one boook + if (booksCnt > 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++) { - roots[it->m_Level + 1] = m_ContentsBox->AppendItem( - roots[it->m_Level], it->m_Name, IMG_Page, -1, - new wxHtmlHelpTreeItemData(i)); + // Handle books: + if (it->m_Level == 0) + { + // special case, only one book, make it tree's root: + if (booksCnt == 1) + { + roots[0] = roots[1] = m_ContentsBox->AddRoot( + it->m_Name, IMG_Page, -1, + new wxHtmlHelpTreeItemData(i)); + } + // 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; + } + } + // ...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])); - 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; - } - else - imaged[it->m_Level + 1] = FALSE; - + // 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]); }