]> git.saurik.com Git - wxWidgets.git/blobdiff - src/html/helpfrm.cpp
use wxUniv's setup
[wxWidgets.git] / src / html / helpfrm.cpp
index 504dd005bda50ed3301c77dd5b9991decd96466a..790cf520fceab4a7dd6bf42b7dc5351606328709 100644 (file)
 #pragma hdrstop
 #endif
 
-#include "wx/defs.h"
+#if wxUSE_WXHTML_HELP
 
-#if wxUSE_HTML && wxUSE_STREAMS
 #ifndef WXPRECOMP
-#include "wx/wx.h"
-#endif
+    #include "wx/intl.h"
+    #include "wx/log.h"
+
+    #include "wx/object.h"
+    #include "wx/sizer.h"
+
+    #include "wx/bmpbuttn.h"
+    #include "wx/statbox.h"
+    #include "wx/radiobox.h"
+#endif // WXPRECOMP
 
 #include "wx/html/helpfrm.h"
 #include "wx/html/helpctrl.h"
+#include "wx/textctrl.h"
 #include "wx/notebook.h"
 #include "wx/imaglist.h"
 #include "wx/treectrl.h"
 // Bitmaps:
 
 #ifndef __WXMSW__
-#include "bitmaps/wpanel.xpm"
-#include "bitmaps/wback.xpm"
-#include "bitmaps/wforward.xpm"
-#include "bitmaps/wbook.xpm"
-#include "bitmaps/woptions.xpm"
-#include "bitmaps/wfolder.xpm"
-#include "bitmaps/wpage.xpm"
-#include "bitmaps/whelp.xpm"
-#include "bitmaps/whlproot.xpm"
-#include "bitmaps/wbkadd.xpm"
-#include "bitmaps/wbkdel.xpm"
-#include "bitmaps/wup.xpm"
-#include "bitmaps/wupnode.xpm"
-#include "bitmaps/wdown.xpm"
-#include "bitmaps/wopen.xpm"
-#include "bitmaps/wprint.xpm"
-#endif
-
+    // XPM hack: make the arrays const
+    #define static static const
+
+    #include "bitmaps/wpanel.xpm"
+    #include "bitmaps/wback.xpm"
+    #include "bitmaps/wforward.xpm"
+    #include "bitmaps/wbook.xpm"
+    #include "bitmaps/woptions.xpm"
+    #include "bitmaps/wfolder.xpm"
+    #include "bitmaps/wpage.xpm"
+    #include "bitmaps/whelp.xpm"
+    #include "bitmaps/whlproot.xpm"
+    #include "bitmaps/wbkadd.xpm"
+    #include "bitmaps/wbkdel.xpm"
+    #include "bitmaps/wup.xpm"
+    #include "bitmaps/wupnode.xpm"
+    #include "bitmaps/wdown.xpm"
+    #include "bitmaps/wopen.xpm"
+    #include "bitmaps/wprint.xpm"
+
+    #undef static
+#endif // __WXMSW__
 
 // what is considered "small index"?
 #define INDEX_IS_SMALL 100
 
+/* Motif defines this as a macro */
+#ifdef Below
+#undef Below
+#endif
 
 //--------------------------------------------------------------------------
 // wxHtmlHelpTreeItemData (private)
@@ -194,6 +210,7 @@ void wxHtmlHelpFrame::Init(wxHtmlHelpData* data)
     m_IndexCountInfo = NULL;
     m_Splitter = NULL;
     m_NavigPan = NULL;
+    m_NavigNotebook = NULL;
     m_HtmlWin = NULL;
     m_Bookmarks = NULL;
     m_SearchCaseSensitive = NULL;
@@ -230,7 +247,7 @@ 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, 
+bool wxHtmlHelpFrame::Create(wxWindow* parent, wxWindowID id,
                              const wxString& WXUNUSED(title), int style)
 {
     m_hfStyle = style;
@@ -246,7 +263,9 @@ bool wxHtmlHelpFrame::Create(wxWindow* parent, wxWindowID id,
     if (m_Config)
         ReadCustomization(m_Config, m_ConfigRoot);
 
-    wxFrame::Create(parent, id, _("Help"), wxPoint(m_Cfg.x, m_Cfg.y), wxSize(m_Cfg.w, m_Cfg.h), wxDEFAULT_FRAME_STYLE, "wxHtmlHelp");
+    wxFrame::Create(parent, id, _("Help"), 
+                    wxPoint(m_Cfg.x, m_Cfg.y), wxSize(m_Cfg.w, m_Cfg.h), 
+                    wxDEFAULT_FRAME_STYLE, wxT("wxHtmlHelp"));
 
     GetPosition(&m_Cfg.x, &m_Cfg.y);
 
@@ -267,6 +286,8 @@ bool wxHtmlHelpFrame::Create(wxWindow* parent, wxWindowID id,
         toolBar->Realize();
     }
 
+    wxSizer *navigSizer = NULL;
+
     if (style & (wxHF_CONTENTS | wxHF_INDEX | wxHF_SEARCH))
     {
         // traditional help controller; splitter window with html page on the
@@ -274,8 +295,16 @@ bool wxHtmlHelpFrame::Create(wxWindow* parent, wxWindowID id,
         m_Splitter = new wxSplitterWindow(this);
 
         m_HtmlWin = new wxHtmlHelpHtmlWindow(this, m_Splitter);
-        m_NavigPan = new wxNotebook(m_Splitter, wxID_HTML_NOTEBOOK,
-                                    wxDefaultPosition, wxDefaultSize);
+        m_NavigPan = new wxPanel(m_Splitter, -1);
+        m_NavigNotebook = new wxNotebook(m_NavigPan, wxID_HTML_NOTEBOOK,
+                                         wxDefaultPosition, wxDefaultSize);
+        wxNotebookSizer *nbs = new wxNotebookSizer(m_NavigNotebook);
+        
+        navigSizer = new wxBoxSizer(wxVERTICAL);
+        navigSizer->Add(nbs, 1, wxEXPAND);
+
+        m_NavigPan->SetAutoLayout(TRUE);
+        m_NavigPan->SetSizer(navigSizer);
     }
     else
     { // only html window, no notebook with index,contents etc
@@ -284,232 +313,172 @@ bool wxHtmlHelpFrame::Create(wxWindow* parent, wxWindowID id,
 
     m_HtmlWin->SetRelatedFrame(this, m_TitleFormat);
     m_HtmlWin->SetRelatedStatusBar(0);
-    if (m_Config)
+    if ( m_Config )
         m_HtmlWin->ReadCustomization(m_Config, m_ConfigRoot);
 
     // contents tree panel?
-    if (style & wxHF_CONTENTS)
+    if ( style & wxHF_CONTENTS )
     {
-        wxWindow *dummy = new wxPanel(m_NavigPan, wxID_HTML_INDEXPAGE);
-
-        if (style & wxHF_BOOKMARKS)
-           {
-            wxLayoutConstraints *b1 = new wxLayoutConstraints;
-            wxBitmapButton *bmpbt = new wxBitmapButton(dummy, wxID_HTML_BOOKMARKSREMOVE, wxBITMAP(wbkdel), wxDefaultPosition, wxSize(20,20));
-
-            b1->top.SameAs (dummy, wxTop, 10);
-            b1->right.SameAs (dummy, wxRight, 10);
-            b1->height.AsIs();
-            b1->width.AsIs();
-            bmpbt->SetConstraints(b1);
-
-            wxLayoutConstraints *b2 = new wxLayoutConstraints;
-            wxBitmapButton *bmpbt2 = new wxBitmapButton(dummy, wxID_HTML_BOOKMARKSADD, wxBITMAP(wbkadd), wxDefaultPosition, wxSize(20,20));
-
-            b2->top.SameAs (dummy, wxTop, 10);
-            b2->right.LeftOf (bmpbt, 2);
-            b2->height.AsIs();
-            b2->width.AsIs();
-            bmpbt2->SetConstraints(b2);
-
-#if wxUSE_TOOLTIPS
-            bmpbt->SetToolTip(_("Remove current page from bookmarks"));
-            bmpbt2->SetToolTip(_("Add current page to bookmarks"));
-#endif //wxUSE_TOOLTIPS
+        wxWindow *dummy = new wxPanel(m_NavigNotebook, wxID_HTML_INDEXPAGE);
+        wxSizer *topsizer = new wxBoxSizer(wxVERTICAL);
+        
+        topsizer->Add(0, 10);
+        
+        dummy->SetAutoLayout(TRUE);
+        dummy->SetSizer(topsizer);
 
-            wxLayoutConstraints *b3 = new wxLayoutConstraints;
-            m_Bookmarks = new wxComboBox(dummy, wxID_HTML_BOOKMARKSLIST, wxEmptyString,
-                                         wxDefaultPosition, wxDefaultSize, 0, NULL, wxCB_READONLY | wxCB_SORT);
+        if ( style & wxHF_BOOKMARKS )
+        {
+            m_Bookmarks = new wxComboBox(dummy, wxID_HTML_BOOKMARKSLIST, 
+                                         wxEmptyString,
+                                         wxDefaultPosition, wxDefaultSize, 
+                                         0, NULL, wxCB_READONLY | wxCB_SORT);
             m_Bookmarks->Append(_("(bookmarks)"));
             for (unsigned i = 0; i < m_BookmarksNames.GetCount(); i++)
                 m_Bookmarks->Append(m_BookmarksNames[i]);
             m_Bookmarks->SetSelection(0);
 
-            b3->centreY.SameAs (bmpbt2, wxCentreY);
-            b3->left.SameAs (dummy, wxLeft, 10);
-            b3->right.LeftOf (bmpbt2, 5);
-            b3->height.AsIs();
-            m_Bookmarks->SetConstraints(b3);
-
-
-            wxLayoutConstraints *b4 = new wxLayoutConstraints;
-            m_ContentsBox = new wxTreeCtrl(dummy, wxID_HTML_TREECTRL,
-                                           wxDefaultPosition, wxDefaultSize,
-                                           wxTR_HAS_BUTTONS | wxSUNKEN_BORDER);
-            m_ContentsBox->AssignImageList(ContentsImageList);
-
-            b4->top.Below (m_Bookmarks, 10);
-            b4->left.SameAs (dummy, wxLeft, 0);
-            b4->right.SameAs (dummy, wxRight, 0);
-            b4->bottom.SameAs (dummy, wxBottom, 0);
-            m_ContentsBox->SetConstraints(b4);
-
-            dummy->SetAutoLayout(TRUE);
-            dummy->Layout();
-
-            m_NavigPan->AddPage(dummy, _("Contents"));
+            wxBitmapButton *bmpbt1, *bmpbt2;
+            bmpbt1 = new wxBitmapButton(dummy, wxID_HTML_BOOKMARKSADD, 
+                                        wxBITMAP(wbkadd), 
+                                        wxDefaultPosition, wxSize(20,20));
+            bmpbt2 = new wxBitmapButton(dummy, wxID_HTML_BOOKMARKSREMOVE, 
+                                        wxBITMAP(wbkdel), 
+                                        wxDefaultPosition, wxSize(20,20));
+#if wxUSE_TOOLTIPS
+            bmpbt1->SetToolTip(_("Add current page to bookmarks"));
+            bmpbt2->SetToolTip(_("Remove current page from bookmarks"));
+#endif // wxUSE_TOOLTIPS
+
+            wxSizer *sizer = new wxBoxSizer(wxHORIZONTAL);
+            
+            sizer->Add(m_Bookmarks, 1, wxRIGHT, 5);
+            sizer->Add(bmpbt1, 0, wxRIGHT, 2);
+            sizer->Add(bmpbt2, 0, 0, 0);
+            
+            topsizer->Add(sizer, 0, wxEXPAND | wxLEFT | wxBOTTOM | wxRIGHT, 10);
         }
 
-        else
-        {
-            m_ContentsBox = new wxTreeCtrl(m_NavigPan, wxID_HTML_TREECTRL,
-                                           wxDefaultPosition, wxDefaultSize,
-                                           wxTR_HAS_BUTTONS | wxSUNKEN_BORDER);
-            m_ContentsBox->AssignImageList(ContentsImageList);
-            m_NavigPan->AddPage(m_ContentsBox, _("Contents"));
-        }
+        m_ContentsBox = new wxTreeCtrl(dummy, wxID_HTML_TREECTRL,
+                                       wxDefaultPosition, wxDefaultSize,
+                                       wxSUNKEN_BORDER | 
+                                       wxTR_HAS_BUTTONS | wxTR_HIDE_ROOT |
+                                       wxTR_LINES_AT_ROOT);
+
+        m_ContentsBox->AssignImageList(ContentsImageList);
+        
+        topsizer->Add(m_ContentsBox, 1, wxEXPAND | wxLEFT | wxBOTTOM | wxRIGHT, 2);
 
+        m_NavigNotebook->AddPage(dummy, _("Contents"));
         m_ContentsPage = notebook_page++;
     }
 
     // index listbox panel?
-    if (style & wxHF_INDEX)
+    if ( style & wxHF_INDEX )
     {
-        wxWindow *dummy = new wxPanel(m_NavigPan, wxID_HTML_INDEXPAGE);
-
-        wxLayoutConstraints *b1 = new wxLayoutConstraints;
-        m_IndexText = new wxTextCtrl(dummy, wxID_HTML_INDEXTEXT, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_PROCESS_ENTER);
-        b1->top.SameAs (dummy, wxTop, 10);
-        b1->left.SameAs (dummy, wxLeft, 10);
-        b1->right.SameAs (dummy, wxRight, 10);
-        b1->height.AsIs();
-        m_IndexText->SetConstraints(b1);
-
-        wxLayoutConstraints *b4 = new wxLayoutConstraints;
-        m_IndexButtonAll = new wxButton(dummy, wxID_HTML_INDEXBUTTONALL, _("Show all"));
-
-        b4->top.Below (m_IndexText, 10);
-        b4->right.SameAs (dummy, wxRight, 10);
-        b4->width.AsIs();
-        b4->height.AsIs();
-        m_IndexButtonAll->SetConstraints(b4);
-
-        wxLayoutConstraints *b2 = new wxLayoutConstraints;
+        wxWindow *dummy = new wxPanel(m_NavigNotebook, wxID_HTML_INDEXPAGE);       
+        wxSizer *topsizer = new wxBoxSizer(wxVERTICAL);
+
+        dummy->SetAutoLayout(TRUE);
+        dummy->SetSizer(topsizer);
+
+        m_IndexText = new wxTextCtrl(dummy, wxID_HTML_INDEXTEXT, wxEmptyString, 
+                                     wxDefaultPosition, wxDefaultSize, 
+                                     wxTE_PROCESS_ENTER);
         m_IndexButton = new wxButton(dummy, wxID_HTML_INDEXBUTTON, _("Find"));
-        b2->top.Below (m_IndexText, 10);
-        b2->right.LeftOf (m_IndexButtonAll, 10);
-        b2->width.AsIs();
-        b2->height.AsIs();
-        m_IndexButton->SetConstraints(b2);
-
-        wxLayoutConstraints *b5 = new wxLayoutConstraints;
-        m_IndexCountInfo = new wxStaticText(dummy, wxID_HTML_COUNTINFO, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxALIGN_RIGHT | wxST_NO_AUTORESIZE);
-
-        b5->top.Below (m_IndexButton, 5);
-        b5->right.SameAs (dummy, wxRight, 10);
-        b5->left.SameAs (dummy, wxLeft, 10);
-        b5->height.AsIs();
-        m_IndexCountInfo->SetConstraints(b5);
-
-        wxLayoutConstraints *b3 = new wxLayoutConstraints;
-        m_IndexList = new wxListBox(dummy, wxID_HTML_INDEXLIST, wxDefaultPosition, wxDefaultSize, 0, NULL, wxLB_SINGLE);
-        b3->top.Below (m_IndexCountInfo, 5);
-        b3->left.SameAs (dummy, wxLeft, 0);
-        b3->right.SameAs (dummy, wxRight, 0);
-        b3->bottom.SameAs (dummy, wxBottom, 0);
-        m_IndexList->SetConstraints(b3);
+        m_IndexButtonAll = new wxButton(dummy, wxID_HTML_INDEXBUTTONALL, 
+                                        _("Show all"));
+        m_IndexCountInfo = new wxStaticText(dummy, wxID_HTML_COUNTINFO, 
+                                            wxEmptyString, wxDefaultPosition,
+                                            wxDefaultSize, 
+                                            wxALIGN_RIGHT | wxST_NO_AUTORESIZE);
+        m_IndexList = new wxListBox(dummy, wxID_HTML_INDEXLIST, 
+                                    wxDefaultPosition, wxDefaultSize, 
+                                    0, NULL, wxLB_SINGLE);
 
 #if wxUSE_TOOLTIPS
-        m_IndexButtonAll->SetToolTip(_("Show all items in index"));
         m_IndexButton->SetToolTip(_("Display all index items that contain given substring. Search is case insensitive."));
+        m_IndexButtonAll->SetToolTip(_("Show all items in index"));
 #endif //wxUSE_TOOLTIPS
 
-        dummy->SetAutoLayout(TRUE);
-        dummy->Layout();
+        topsizer->Add(m_IndexText, 0, wxEXPAND | wxALL, 10);
+        wxSizer *btsizer = new wxBoxSizer(wxHORIZONTAL);
+        btsizer->Add(m_IndexButton, 0, wxRIGHT, 2);
+        btsizer->Add(m_IndexButtonAll);
+        topsizer->Add(btsizer, 0, 
+                      wxALIGN_RIGHT | wxLEFT | wxRIGHT | wxBOTTOM, 10);
+        topsizer->Add(m_IndexCountInfo, 0, wxEXPAND | wxLEFT | wxRIGHT, 2);
+        topsizer->Add(m_IndexList, 1, wxEXPAND | wxALL, 2);
 
-        m_NavigPan->AddPage(dummy, _("Index"));
+        m_NavigNotebook->AddPage(dummy, _("Index"));
         m_IndexPage = notebook_page++;
     }
 
     // search list panel?
-    if (style & wxHF_SEARCH)
+    if ( style & wxHF_SEARCH )
     {
-        wxWindow *dummy = new wxPanel(m_NavigPan, wxID_HTML_SEARCHPAGE);
-
-        wxLayoutConstraints *b1 = new wxLayoutConstraints;
-        m_SearchText = new wxTextCtrl(dummy, wxID_HTML_SEARCHTEXT, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_PROCESS_ENTER);
-        b1->top.SameAs (dummy, wxTop, 10);
-        b1->left.SameAs (dummy, wxLeft, 10);
-        b1->right.SameAs (dummy, wxRight, 10);
-        b1->height.AsIs();
-        m_SearchText->SetConstraints(b1);
-
-        wxLayoutConstraints *b4 = new wxLayoutConstraints;
-        m_SearchChoice = new wxChoice(dummy, wxID_HTML_SEARCHCHOICE, wxDefaultPosition,
-                                      wxDefaultSize);
-        b4->top.Below (m_SearchText, 10);
-        b4->left.SameAs (dummy, wxLeft, 10);
-        b4->right.SameAs (dummy, wxRight, 10);
-        b4->height.AsIs();
-        m_SearchChoice->SetConstraints(b4);
-
-        wxLayoutConstraints *b5 = new wxLayoutConstraints;
-        m_SearchCaseSensitive = new wxCheckBox(dummy, -1, _("Case sensitive"));
-        b5->top.Below (m_SearchChoice, 10);
-        b5->left.SameAs (dummy, wxLeft, 10);
-        b5->width.AsIs();
-        b5->height.AsIs ();
-        m_SearchCaseSensitive->SetConstraints(b5);
+        wxWindow *dummy = new wxPanel(m_NavigNotebook, wxID_HTML_INDEXPAGE);       
+        wxSizer *sizer = new wxBoxSizer(wxVERTICAL);
 
-        wxLayoutConstraints *b6 = new wxLayoutConstraints;
+        dummy->SetAutoLayout(TRUE);
+        dummy->SetSizer(sizer);
+
+        m_SearchText = new wxTextCtrl(dummy, wxID_HTML_SEARCHTEXT, 
+                                      wxEmptyString, 
+                                      wxDefaultPosition, wxDefaultSize, 
+                                      wxTE_PROCESS_ENTER);
+        m_SearchChoice = new wxChoice(dummy, wxID_HTML_SEARCHCHOICE, 
+                                      wxDefaultPosition, wxDefaultSize);
+        m_SearchCaseSensitive = new wxCheckBox(dummy, -1, _("Case sensitive"));
         m_SearchWholeWords = new wxCheckBox(dummy, -1, _("Whole words only"));
-        b6->top.Below (m_SearchCaseSensitive, 0);
-        b6->left.SameAs (dummy, wxLeft, 10);
-        b6->width.AsIs();
-        b6->height.AsIs ();
-        m_SearchWholeWords->SetConstraints(b6);
-
-        wxLayoutConstraints *b2 = new wxLayoutConstraints;
         m_SearchButton = new wxButton(dummy, wxID_HTML_SEARCHBUTTON, _("Search"));
 #if wxUSE_TOOLTIPS
         m_SearchButton->SetToolTip(_("Search contents of help book(s) for all occurences of the text you typed above"));
 #endif //wxUSE_TOOLTIPS
-        b2->top.Below (m_SearchWholeWords, 0);
-        b2->right.SameAs (dummy, wxRight, 10);
-        b2->width.AsIs();
-        b2->height.AsIs();
-        m_SearchButton->SetConstraints(b2);
-
-        wxLayoutConstraints *b3 = new wxLayoutConstraints;
-        m_SearchList = new wxListBox(dummy, wxID_HTML_SEARCHLIST, wxDefaultPosition, wxDefaultSize, 0, NULL, wxLB_SINGLE);
-        b3->top.Below (m_SearchButton, 10);
-        b3->left.SameAs (dummy, wxLeft, 0);
-        b3->right.SameAs (dummy, wxRight, 0);
-        b3->bottom.SameAs (dummy, wxBottom, 0);
-        m_SearchList->SetConstraints(b3);
-
-        dummy->SetAutoLayout(TRUE);
-        dummy->Layout();
-        m_NavigPan->AddPage(dummy, _("Search"));
+        m_SearchList = new wxListBox(dummy, wxID_HTML_SEARCHLIST, 
+                                     wxDefaultPosition, wxDefaultSize, 
+                                     0, NULL, wxLB_SINGLE);
+                                     
+        sizer->Add(m_SearchText, 0, wxEXPAND | wxALL, 10);
+        sizer->Add(m_SearchChoice, 0, wxEXPAND | wxLEFT | wxRIGHT | wxBOTTOM, 10);
+        sizer->Add(m_SearchCaseSensitive, 0, wxLEFT | wxRIGHT, 10);
+        sizer->Add(m_SearchWholeWords, 0, wxLEFT | wxRIGHT, 10);
+        sizer->Add(m_SearchButton, 0, wxALL | wxALIGN_RIGHT, 8);
+        sizer->Add(m_SearchList, 1, wxALL | wxEXPAND, 2);
+
+        m_NavigNotebook->AddPage(dummy, _("Search"));
         m_SearchPage = notebook_page++;
     }
+
     m_HtmlWin->Show(TRUE);
 
     RefreshLists();
 
+    if ( navigSizer )
+    {
+        navigSizer->SetSizeHints(m_NavigPan);
+        m_NavigPan->Layout();
+    }
+
     // showtime
-    if (m_NavigPan && m_Splitter)
+    if ( m_NavigPan && m_Splitter )
     {
         m_Splitter->SetMinimumPaneSize(20);
-        if (m_Cfg.navig_on)
+        if ( m_Cfg.navig_on )
             m_Splitter->SplitVertically(m_NavigPan, m_HtmlWin, m_Cfg.sashpos);
-        else
-           {
-            m_Splitter->SplitVertically(m_NavigPan, m_HtmlWin, m_Cfg.sashpos);
-            m_Splitter->Unsplit();
-        }
 
-           if (m_Cfg.navig_on)
-           {
+        if ( m_Cfg.navig_on )
+        {
             m_NavigPan->Show(TRUE);
             m_Splitter->SplitVertically(m_NavigPan, m_HtmlWin, m_Cfg.sashpos);
         }
         else
-           {
+        {
             m_NavigPan->Show(FALSE);
             m_Splitter->Initialize(m_HtmlWin);
         }
     }
+    
     return TRUE;
 }
 
@@ -634,7 +603,7 @@ bool wxHtmlHelpFrame::DisplayContents()
         m_Splitter->SplitVertically(m_NavigPan, m_HtmlWin, m_Cfg.sashpos);
         m_Cfg.navig_on = TRUE;
     }
-    m_NavigPan->SetSelection(0);
+    m_NavigNotebook->SetSelection(0);
     if (m_Data->GetBookRecArray().GetCount() > 0)
     {
         wxHtmlBookRecord& book = m_Data->GetBookRecArray()[0];
@@ -656,7 +625,7 @@ bool wxHtmlHelpFrame::DisplayIndex()
         m_HtmlWin->Show(TRUE);
         m_Splitter->SplitVertically(m_NavigPan, m_HtmlWin, m_Cfg.sashpos);
     }
-    m_NavigPan->SetSelection(1);
+    m_NavigNotebook->SetSelection(1);
     if (m_Data->GetBookRecArray().GetCount() > 0)
     {
         wxHtmlBookRecord& book = m_Data->GetBookRecArray()[0];
@@ -683,7 +652,7 @@ bool wxHtmlHelpFrame::KeywordSearch(const wxString& keyword)
         m_HtmlWin->Show(TRUE);
         m_Splitter->SplitVertically(m_NavigPan, m_HtmlWin, m_Cfg.sashpos);
     }
-    m_NavigPan->SetSelection(m_SearchPage);
+    m_NavigNotebook->SetSelection(m_SearchPage);
     m_SearchList->Clear();
     m_SearchText->SetValue(keyword);
     m_SearchButton->Enable(FALSE);
@@ -705,7 +674,7 @@ bool wxHtmlHelpFrame::KeywordSearch(const wxString& keyword)
         if (curi % 32 == 0 && progress.Update(curi) == FALSE)
             break;
         if (status.Search())
-           {
+        {
             foundstr.Printf(_("Found %i matches"), ++foundcnt);
             progress.Update(status.GetCurIndex(), foundstr);
             m_SearchList->Append(status.GetName(), status.GetContentsItem());
@@ -740,7 +709,6 @@ void wxHtmlHelpFrame::CreateContents()
 
     int cnt = m_Data->GetContentsCnt();
     int i;
-    size_t booksCnt = m_Data->GetBookRecArray().GetCount();
 
     wxHtmlContentsItem *it;
 
@@ -752,57 +720,42 @@ void wxHtmlHelpFrame::CreateContents()
     //     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]; 
+    bool imaged[MAX_ROOTS];
     m_ContentsBox->DeleteAllItems();
     
-    // 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;
-    }
+    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)
         {
-            // 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:
+            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
             {
-                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;
+                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 
+        else
         {
             roots[it->m_Level + 1] = m_ContentsBox->AppendItem(
-                                     roots[it->m_Level], it->m_Name, IMG_Page, 
+                                     roots[it->m_Level], it->m_Name, IMG_Page,
                                      -1, new wxHtmlHelpTreeItemData(i));
-               imaged[it->m_Level + 1] = FALSE;
+            imaged[it->m_Level + 1] = FALSE;
         }
 
         m_PagesHash->Put(it->GetFullPath(),
@@ -811,7 +764,7 @@ void wxHtmlHelpFrame::CreateContents()
         // 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])
-           {
+        {
             int image = IMG_Folder;
             if (m_hfStyle & wxHF_ICONS_BOOK)
                 image = IMG_Book;
@@ -899,17 +852,17 @@ void wxHtmlHelpFrame::ReadCustomization(wxConfigBase *cfg, const wxString& path)
 
         cnt = cfg->Read(wxT("hcBookmarksCnt"), 0L);
         if (cnt != 0)
-           {
+        {
             m_BookmarksNames.Clear();
             m_BookmarksPages.Clear();
             if (m_Bookmarks)
-               {
+            {
                 m_Bookmarks->Clear();
                 m_Bookmarks->Append(_("(bookmarks)"));
             }
 
             for (i = 0; i < cnt; i++)
-               {
+            {
                 val.Printf(wxT("hcBookmark_%i"), i);
                 s = cfg->Read(val);
                 m_BookmarksNames.Add(s);
@@ -957,7 +910,7 @@ void wxHtmlHelpFrame::WriteCustomization(wxConfigBase *cfg, const wxString& path
 
         cfg->Write(wxT("hcBookmarksCnt"), (long)cnt);
         for (i = 0; i < cnt; i++)
-           {
+        {
             val.Printf(wxT("hcBookmark_%i"), i);
             cfg->Write(val, m_BookmarksNames[i]);
             val.Printf(wxT("hcBookmark_%i_url"), i);
@@ -1031,7 +984,8 @@ class wxHtmlHelpFrameOptionsDialog : public wxDialog
 
                 topsizer->Add(new wxStaticText(this, -1, _("Preview:")),
                                 0, wxLEFT | wxTOP, 10);
-                topsizer->Add(TestWin = new wxHtmlWindow(this, -1, wxDefaultPosition, wxSize(-1, 150)),
+                topsizer->Add(TestWin = new wxHtmlWindow(this, -1, wxDefaultPosition, wxSize(-1, 150),
+                                                         wxHW_SCROLLBAR_AUTO | wxSUNKEN_BORDER),
                                 1, wxEXPAND | wxLEFT|wxTOP|wxRIGHT, 10);
 
                 sizer = new wxBoxSizer(wxHORIZONTAL);
@@ -1260,13 +1214,13 @@ void wxHtmlHelpFrame::OnToolbar(wxCommandEvent& event)
                 if (! (m_Splitter && m_NavigPan))
                     return ;
                 if (m_Splitter->IsSplit())
-                       {
+                {
                     m_Cfg.sashpos = m_Splitter->GetSashPosition();
                     m_Splitter->Unsplit(m_NavigPan);
                     m_Cfg.navig_on = FALSE;
                 }
-                       else
-                       {
+                else
+                {
                     m_NavigPan->Show(TRUE);
                     m_HtmlWin->Show(TRUE);
                     m_Splitter->SplitVertically(m_NavigPan, m_HtmlWin, m_Cfg.sashpos);
@@ -1287,9 +1241,9 @@ void wxHtmlHelpFrame::OnToolbar(wxCommandEvent& event)
                 item = m_HtmlWin->GetOpenedPageTitle();
                 url = m_HtmlWin->GetOpenedPage();
                 if (item == wxEmptyString)
-                           item = url.AfterLast(wxT('/'));
+                    item = url.AfterLast(wxT('/'));
                 if (m_BookmarksPages.Index(url) == wxNOT_FOUND)
-                       {
+                {
                     m_Bookmarks->Append(item);
                     m_BookmarksNames.Add(item);
                     m_BookmarksPages.Add(url);
@@ -1305,7 +1259,7 @@ void wxHtmlHelpFrame::OnToolbar(wxCommandEvent& event)
                 item = m_Bookmarks->GetStringSelection();
                 pos = m_BookmarksNames.Index(item);
                 if (pos != wxNOT_FOUND)
-                       {
+                {
                     m_BookmarksNames.Remove(pos);
                     m_BookmarksPages.Remove(pos);
                     m_Bookmarks->Delete(m_Bookmarks->GetSelection());
@@ -1400,7 +1354,7 @@ void wxHtmlHelpFrame::OnIndexFind(wxCommandEvent& event)
         wxBusyCursor bcur;
         const wxChar *cstr = sr.c_str();
         wxChar mybuff[512];
-               wxChar *ptr;
+        wxChar *ptr;
         bool first = TRUE;
 
         m_IndexList->Clear();
@@ -1416,11 +1370,11 @@ void wxHtmlHelpFrame::OnIndexFind(wxCommandEvent& event)
                 if (*ptr >= _T('A') && *ptr <= _T('Z'))
                     *ptr -= (wxChar)(_T('A') - _T('a'));
             if (wxStrstr(mybuff, cstr) != NULL)
-               {
+            {
                 m_IndexList->Append(index[i].m_Name, (char*)(index + i));
                 displ++;
                 if (first)
-                       {
+                {
                     if (index[i].m_Page[0] != 0)
                         m_HtmlWin->LoadPage(index[i].GetFullPath());
                     NotifyPageChanged();
@@ -1451,7 +1405,7 @@ void wxHtmlHelpFrame::OnIndexAll(wxCommandEvent& WXUNUSED(event))
     {
         m_IndexList->Append(index[i].m_Name, (char*)(index + i));
         if (first)
-           {
+        {
             if (index[i].m_Page[0] != 0)
                 m_HtmlWin->LoadPage(index[i].GetFullPath());
             NotifyPageChanged();
@@ -1528,4 +1482,5 @@ BEGIN_EVENT_TABLE(wxHtmlHelpFrame, wxFrame)
     EVT_CLOSE(wxHtmlHelpFrame::OnCloseWindow)
 END_EVENT_TABLE()
 
-#endif
+#endif // wxUSE_WXHTML_HELP
+