]> git.saurik.com Git - wxWidgets.git/commitdiff
added new wxHF_xxxx contants to control wxHtmlHelpFrame's appearance (book icons...
authorVáclav Slavík <vslavik@fastmail.fm>
Sat, 5 May 2001 18:05:57 +0000 (18:05 +0000)
committerVáclav Slavík <vslavik@fastmail.fm>
Sat, 5 May 2001 18:05:57 +0000 (18:05 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@10006 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

docs/latex/wx/hthelpct.tex
docs/latex/wx/hthlpfrm.tex
include/wx/html/helpctrl.h
include/wx/html/helpfrm.h
src/html/helpctrl.cpp
src/html/helpfrm.cpp

index fdc46abd1a3cb1811664774f8bfc9c1e0b9cc12e..4111abf3f3fdd20e8b8bfc21d59f4ea6128e09e8 100644 (file)
@@ -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}}
index 4d6f1871090172b28792b76d7193e6615b11110b..abdcb74baf07a84a90e97c3fc4b3b07b53141c8a 100644 (file)
@@ -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}
 
index 14b004dd7af7ae6f038ab5af760f2146ccf0bd92..f31e41f874089ee476b2765005f6f0dbff9655be 100644 (file)
 #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);
index a15cd0419c7b0e7d67623b9c6d9a1d2890132776..d8c4e83b1330e2d865b98d19210b0ad1b1b882a9 100644 (file)
 
 
 // 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()
 };
index 72c82d2773e841d5444c153f29e70624a24f43c4..c527460761e314a5adc37f7a4c8082ac9c772701 100644 (file)
@@ -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
index dc55c65ec84e19483330a0b3a6719bf8900347bb..504dd005bda50ed3301c77dd5b9991decd96466a 100644 (file)
@@ -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));
-        m_PagesHash->Put(it->GetFullPath(),
-                           new wxHtmlHelpHashData(i, roots[it->m_Level + 1]));
-
+        // 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_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;
+            }
         }
-           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]);
 }