]> git.saurik.com Git - wxWidgets.git/blobdiff - src/html/helpfrm.cpp
fixed array tests compilation and a bug in obj array test
[wxWidgets.git] / src / html / helpfrm.cpp
index 78ca55abb0251f3c9aeb855391e015032e8d9836..8333e379bece25afb96666c6ffa227192160c1c3 100644 (file)
@@ -28,7 +28,6 @@
     #include "wx/log.h"
 
     #include "wx/object.h"
-    #include "wx/layout.h"
     #include "wx/sizer.h"
 
     #include "wx/bmpbuttn.h"
@@ -38,6 +37,7 @@
 
 #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"
 #include "wx/fontenum.h"
 #include "wx/stream.h"
 #include "wx/filedlg.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
-
+#include "wx/artprov.h"
 
 // what is considered "small index"?
 #define INDEX_IS_SMALL 100
@@ -206,6 +185,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;
@@ -248,21 +228,22 @@ bool wxHtmlHelpFrame::Create(wxWindow* parent, wxWindowID id,
     m_hfStyle = style;
 
     wxImageList *ContentsImageList = new wxImageList(16, 16);
-    ContentsImageList->Add(wxICON(wbook));
-    ContentsImageList->Add(wxICON(wfolder));
-    ContentsImageList->Add(wxICON(wpage));
-    ContentsImageList->Add(wxICON(whlproot));
+    ContentsImageList->Add(wxArtProvider::GetIcon(wxART_HELP_BOOK, wxART_HELP_BROWSER));
+    ContentsImageList->Add(wxArtProvider::GetIcon(wxART_HELP_FOLDER, wxART_HELP_BROWSER));
+    ContentsImageList->Add(wxArtProvider::GetIcon(wxART_HELP_PAGE, wxART_HELP_BROWSER));
 
     // Do the config in two steps. We read the HtmlWindow customization after we
     // create the window.
     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);
 
-    SetIcon(wxICON(whelp));
+    SetIcon(wxArtProvider::GetIcon(wxART_FRAME_ICON, wxART_HELP_BROWSER));
 
     int notebook_page = 0;
 
@@ -279,6 +260,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
@@ -286,8 +269,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
@@ -296,226 +287,161 @@ 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);
+        wxWindow *dummy = new wxPanel(m_NavigNotebook, wxID_HTML_INDEXPAGE);
+        wxSizer *topsizer = new wxBoxSizer(wxVERTICAL);
+        
+        topsizer->Add(0, 10);
+        
+        dummy->SetAutoLayout(TRUE);
+        dummy->SetSizer(topsizer);
 
-        if (style & wxHF_BOOKMARKS)
+        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
-
-            wxLayoutConstraints *b3 = new wxLayoutConstraints;
-            m_Bookmarks = new wxComboBox(dummy, wxID_HTML_BOOKMARKSLIST, wxEmptyString,
-                                         wxDefaultPosition, wxDefaultSize, 0, NULL, wxCB_READONLY | wxCB_SORT);
+            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,
-#ifdef __WXMAC__
-       wxSUNKEN_BORDER|wxTR_MAC_BUTTONS|wxTR_NO_LINES|wxTR_ROW_LINES );
-#else
-       wxSUNKEN_BORDER|wxTR_HAS_BUTTONS );
-#endif
-            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, 
+                                 wxArtProvider::GetBitmap(wxART_ADD_BOOKMARK, 
+                                                          wxART_HELP_BROWSER));
+            bmpbt2 = new wxBitmapButton(dummy, wxID_HTML_BOOKMARKSREMOVE, 
+                                 wxArtProvider::GetBitmap(wxART_DEL_BOOKMARK, 
+                                                          wxART_HELP_BROWSER));
+#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, wxALIGN_CENTRE_VERTICAL | wxRIGHT, 5);
+            sizer->Add(bmpbt1, 0, wxALIGN_CENTRE_VERTICAL | wxRIGHT, 2);
+            sizer->Add(bmpbt2, 0, wxALIGN_CENTRE_VERTICAL, 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);
@@ -526,6 +452,7 @@ bool wxHtmlHelpFrame::Create(wxWindow* parent, wxWindowID id,
             m_Splitter->Initialize(m_HtmlWin);
         }
     }
+    
     return TRUE;
 }
 
@@ -542,15 +469,24 @@ wxHtmlHelpFrame::~wxHtmlHelpFrame()
 
 void wxHtmlHelpFrame::AddToolbarButtons(wxToolBar *toolBar, int style)
 {
-    wxBitmap wpanelBitmap = wxBITMAP(wpanel);
-    wxBitmap wbackBitmap = wxBITMAP(wback);
-    wxBitmap wforwardBitmap = wxBITMAP(wforward);
-    wxBitmap wupnodeBitmap = wxBITMAP(wupnode);
-    wxBitmap wupBitmap = wxBITMAP(wup);
-    wxBitmap wdownBitmap = wxBITMAP(wdown);
-    wxBitmap wopenBitmap = wxBITMAP(wopen);
-    wxBitmap wprintBitmap = wxBITMAP(wprint);
-    wxBitmap woptionsBitmap = wxBITMAP(woptions);
+    wxBitmap wpanelBitmap = 
+        wxArtProvider::GetBitmap(wxART_HELP_SIDE_PANEL, wxART_HELP_BROWSER);
+    wxBitmap wbackBitmap = 
+        wxArtProvider::GetBitmap(wxART_GO_BACK, wxART_HELP_BROWSER);
+    wxBitmap wforwardBitmap = 
+        wxArtProvider::GetBitmap(wxART_GO_FORWARD, wxART_HELP_BROWSER);
+    wxBitmap wupnodeBitmap = 
+        wxArtProvider::GetBitmap(wxART_GO_TO_PARENT, wxART_HELP_BROWSER);
+    wxBitmap wupBitmap = 
+        wxArtProvider::GetBitmap(wxART_GO_UP, wxART_HELP_BROWSER);
+    wxBitmap wdownBitmap = 
+        wxArtProvider::GetBitmap(wxART_GO_DOWN, wxART_HELP_BROWSER);
+    wxBitmap wopenBitmap = 
+        wxArtProvider::GetBitmap(wxART_FILE_OPEN, wxART_HELP_BROWSER);
+    wxBitmap wprintBitmap = 
+        wxArtProvider::GetBitmap(wxART_PRINT, wxART_HELP_BROWSER);
+    wxBitmap woptionsBitmap = 
+        wxArtProvider::GetBitmap(wxART_HELP_SETTINGS, wxART_HELP_BROWSER);
 
     wxASSERT_MSG( (wpanelBitmap.Ok() && wbackBitmap.Ok() &&
                    wforwardBitmap.Ok() && wupnodeBitmap.Ok() &&
@@ -650,7 +586,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];
@@ -672,7 +608,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];
@@ -699,7 +635,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);
@@ -756,7 +692,6 @@ void wxHtmlHelpFrame::CreateContents()
 
     int cnt = m_Data->GetContentsCnt();
     int i;
-    size_t booksCnt = m_Data->GetBookRecArray().GetCount();
 
     wxHtmlContentsItem *it;
 
@@ -770,49 +705,30 @@ void wxHtmlHelpFrame::CreateContents()
     //     set its icon accordingly
     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)"));
+    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)
+            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[0] = roots[1] = m_ContentsBox->AddRoot(
+                roots[1] = m_ContentsBox->AppendItem(roots[0],
                                          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;
-            }
+            imaged[1] = TRUE;
         }
         // ...and their contents:
         else
@@ -840,8 +756,6 @@ void wxHtmlHelpFrame::CreateContents()
             imaged[it->m_Level] = TRUE;
         }
     }
-
-    m_ContentsBox->Expand(roots[0]);
 }
 
 
@@ -1049,11 +963,14 @@ 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(20, 150),
+                                                         wxHW_SCROLLBAR_AUTO | wxSUNKEN_BORDER),
                                 1, wxEXPAND | wxLEFT|wxTOP|wxRIGHT, 10);
 
                 sizer = new wxBoxSizer(wxHORIZONTAL);
-                sizer->Add(new wxButton(this, wxID_OK, _("OK")), 0, wxALL, 10);
+                wxButton *ok;
+                sizer->Add(ok = new wxButton(this, wxID_OK, _("OK")), 0, wxALL, 10);
+                ok->SetDefault();
                 sizer->Add(new wxButton(this, wxID_CANCEL, _("Cancel")), 0, wxALL, 10);
                 topsizer->Add(sizer, 0, wxALIGN_RIGHT);