X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/f3e156efb09c5c3ab4c4490abf58f2348edb1150..4521f6c88cbefa7f13e3733d344776b795f981e4:/src/html/helpwnd.cpp?ds=inline diff --git a/src/html/helpwnd.cpp b/src/html/helpwnd.cpp index 94226cf85c..c208c756d6 100644 --- a/src/html/helpwnd.cpp +++ b/src/html/helpwnd.cpp @@ -1,10 +1,9 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: helpwin.cpp +// Name: src/html/helpwnd.cpp // Purpose: wxHtmlHelpWindow // Notes: Based on htmlhelp.cpp, implementing a monolithic // HTML Help controller class, by Vaclav Slavik // Author: Harm van der Heijden and Vaclav Slavik -// RCS-ID: $Id$ // Copyright: (c) Harm van der Heijden and Vaclav Slavik // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -14,32 +13,37 @@ #include "wx/wxprec.h" #ifdef __BORLANDC__ -#pragma hdrstop + #pragma hdrstop #endif #if wxUSE_WXHTML_HELP -#ifndef WXPRECOMP +#ifndef WX_PRECOMP + #include "wx/object.h" + #include "wx/dynarray.h" #include "wx/intl.h" #include "wx/log.h" + #if wxUSE_STREAMS + #include "wx/stream.h" + #endif - #include "wx/object.h" #include "wx/sizer.h" #include "wx/bmpbuttn.h" #include "wx/statbox.h" #include "wx/radiobox.h" -#endif // WXPRECOMP - -#ifdef __WXMAC__ #include "wx/menu.h" + #include "wx/settings.h" #include "wx/msgdlg.h" -#endif + #include "wx/textctrl.h" + #include "wx/toolbar.h" + #include "wx/choicdlg.h" + #include "wx/filedlg.h" +#endif // WX_PRECOMP #include "wx/html/helpfrm.h" #include "wx/html/helpdlg.h" #include "wx/html/helpctrl.h" -#include "wx/textctrl.h" #include "wx/notebook.h" #include "wx/imaglist.h" #include "wx/treectrl.h" @@ -48,18 +52,17 @@ #include "wx/html/htmlwin.h" #include "wx/busyinfo.h" #include "wx/progdlg.h" -#include "wx/toolbar.h" #include "wx/fontenum.h" -#include "wx/stream.h" -#include "wx/filedlg.h" #include "wx/artprov.h" #include "wx/spinctrl.h" -#include "wx/dynarray.h" -#include "wx/choicdlg.h" -#include "wx/settings.h" // what is considered "small index"? -#define INDEX_IS_SMALL 100 +#define INDEX_IS_SMALL 1000 + +// minimum width for content tree and index +// (we cannot let minimum size be determined from content, else long titles +// make the help frame unusable) +const wxCoord CONTENT_TREE_INDEX_MIN_WIDTH = 150; /* Motif defines this as a macro */ #ifdef Below @@ -94,7 +97,7 @@ class wxHtmlHelpHashData : public wxObject public: wxHtmlHelpHashData(int index, wxTreeItemId id) : wxObject() { m_Index = index; m_Id = id;} - ~wxHtmlHelpHashData() {} + virtual ~wxHtmlHelpHashData() {} int m_Index; wxTreeItemId m_Id; @@ -105,51 +108,45 @@ class wxHtmlHelpHashData : public wxObject // wxHtmlHelpHtmlWindow (private) //-------------------------------------------------------------------------- -DEFINE_EVENT_TYPE(wxEVT_COMMAND_HTMLWINDOW_URL_CLICKED) -IMPLEMENT_DYNAMIC_CLASS(wxHtmlWindowEvent, wxNotifyEvent) class wxHtmlHelpHtmlWindow : public wxHtmlWindow { - public: - wxHtmlHelpHtmlWindow(wxHtmlHelpWindow *win, wxWindow *parent) - : wxHtmlWindow(parent), m_Window(win) - { - SetStandardFonts(); - } +public: + wxHtmlHelpHtmlWindow(wxHtmlHelpWindow *win, wxWindow *parent, wxWindowID id = wxID_ANY, + const wxPoint& pos = wxDefaultPosition, const wxSize& sz = wxDefaultSize, long style = wxHW_DEFAULT_STYLE) + : wxHtmlWindow(parent, id, pos, sz, style), m_Window(win) + { + SetStandardFonts(); + } - virtual void OnLinkClicked(const wxHtmlLinkInfo& link) - { - wxHtmlWindowEvent event(wxEVT_COMMAND_HTMLWINDOW_URL_CLICKED, GetId()); - event.SetURL(link.GetHref()); - if (!ProcessEvent(event)) - { - wxHtmlWindow::OnLinkClicked(link); - } - const wxMouseEvent *e = link.GetEvent(); - if (e == NULL || e->LeftUp()) - m_Window->NotifyPageChanged(); - } + virtual bool LoadPage(const wxString& location) + { + if ( !wxHtmlWindow::LoadPage(location) ) + return false; - // Returns full location with anchor (helper) - static wxString GetOpenedPageWithAnchor(wxHtmlWindow *win) - { - if(!win) - return wxEmptyString; + m_Window->NotifyPageChanged(); + return true; + } - wxString an = win->GetOpenedAnchor(); - wxString pg = win->GetOpenedPage(); - if(!an.empty()) - { - pg << wxT("#"); - pg << an; - } - return pg; + // Returns full location with anchor (helper) + static wxString GetOpenedPageWithAnchor(wxHtmlWindow *win) + { + if(!win) + return wxEmptyString; + + wxString an = win->GetOpenedAnchor(); + wxString pg = win->GetOpenedPage(); + if(!an.empty()) + { + pg << wxT("#") << an; } + return pg; + } - private: - wxHtmlHelpWindow *m_Window; +private: + wxHtmlHelpWindow *m_Window; - DECLARE_NO_COPY_CLASS(wxHtmlHelpHtmlWindow) + wxDECLARE_NO_COPY_CLASS(wxHtmlHelpHtmlWindow); }; @@ -184,7 +181,7 @@ void wxHtmlHelpWindow::UpdateMergedIndex() for (size_t i = 0; i < len; i++) { const wxHtmlHelpDataItem& item = items[i]; - wxASSERT_MSG( item.level < 128, _T("nested index entries too deep") ); + wxASSERT_MSG( item.level < 128, wxT("nested index entries too deep") ); if (history[item.level] && history[item.level]->items[0]->name == item.name) @@ -273,8 +270,10 @@ void wxHtmlHelpWindow::Init(wxHtmlHelpData* data) m_mergedIndex = NULL; +#if wxUSE_CONFIG m_Config = NULL; m_ConfigRoot = wxEmptyString; +#endif // wxUSE_CONFIG m_Cfg.x = m_Cfg.y = wxDefaultCoord; m_Cfg.w = 700; @@ -297,7 +296,7 @@ void wxHtmlHelpWindow::Init(wxHtmlHelpData* data) m_PagesHash = NULL; m_UpdateContents = true; m_toolBar = NULL; - m_helpController = (wxHtmlHelpController*) NULL; + m_helpController = NULL; } // Create: builds the GUI components. @@ -315,21 +314,12 @@ bool wxHtmlHelpWindow::Create(wxWindow* parent, wxWindowID id, { m_hfStyle = helpStyle; - wxImageList *ContentsImageList = new wxImageList(16, 16); - ContentsImageList->Add(wxArtProvider::GetIcon(wxART_HELP_BOOK, - wxART_HELP_BROWSER, - wxSize(16, 16))); - ContentsImageList->Add(wxArtProvider::GetIcon(wxART_HELP_FOLDER, - wxART_HELP_BROWSER, - wxSize(16, 16))); - ContentsImageList->Add(wxArtProvider::GetIcon(wxART_HELP_PAGE, - wxART_HELP_BROWSER, - wxSize(16, 16))); - +#if wxUSE_CONFIG // Do the config in two steps. We read the HtmlWindow customization after we // create the window. if (m_Config) ReadCustomization(m_Config, m_ConfigRoot); +#endif // wxUSE_CONFIG wxWindow::Create(parent, id, pos, size, style, wxT("wxHtmlHelp")); @@ -342,17 +332,18 @@ bool wxHtmlHelpWindow::Create(wxWindow* parent, wxWindowID id, // The sizer for the whole top-level window. wxSizer *topWindowSizer = new wxBoxSizer(wxVERTICAL); SetSizer(topWindowSizer); - SetAutoLayout(TRUE); + SetAutoLayout(true); #if wxUSE_TOOLBAR // toolbar? if (helpStyle & (wxHF_TOOLBAR | wxHF_FLAT_TOOLBAR)) { - wxToolBar *toolBar = new wxToolBar(this, -1, wxDefaultPosition, wxDefaultSize, + wxToolBar *toolBar = new wxToolBar(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxNO_BORDER | wxTB_HORIZONTAL | wxTB_DOCKABLE | wxTB_NODIVIDER | (helpStyle & wxHF_FLAT_TOOLBAR ? wxTB_FLAT : 0)); toolBar->SetMargins( 2, 2 ); + toolBar->SetToolBitmapSize( wxSize(22,22) ); AddToolbarButtons(toolBar, helpStyle); toolBar->Realize(); topWindowSizer->Add(toolBar, 0, wxEXPAND); @@ -362,18 +353,33 @@ bool wxHtmlHelpWindow::Create(wxWindow* parent, wxWindowID id, wxSizer *navigSizer = NULL; +#ifdef __WXMSW__ + wxBorder htmlWindowBorder = wxBORDER_THEME; +#else + wxBorder htmlWindowBorder = wxBORDER_SUNKEN; +#endif + if (helpStyle & (wxHF_CONTENTS | wxHF_INDEX | wxHF_SEARCH)) { // traditional help controller; splitter window with html page on the // right and a notebook containing various pages on the left - m_Splitter = new wxSplitterWindow(this); + long splitterStyle = wxSP_3D; + // Drawing moving sash can cause problems on wxMac +#ifdef __WXMAC__ + splitterStyle = 0; // 3D style looks poor on Mac + splitterStyle |= wxSP_LIVE_UPDATE; +#endif + m_Splitter = new wxSplitterWindow(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, splitterStyle); topWindowSizer->Add(m_Splitter, 1, wxEXPAND); - m_HtmlWin = new wxHtmlHelpHtmlWindow(this, m_Splitter); + m_HtmlWin = new wxHtmlHelpHtmlWindow(this, m_Splitter, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHW_DEFAULT_STYLE|htmlWindowBorder); m_NavigPan = new wxPanel(m_Splitter, wxID_ANY); m_NavigNotebook = new wxNotebook(m_NavigPan, wxID_HTML_NOTEBOOK, wxDefaultPosition, wxDefaultSize); +#ifdef __WXMAC__ + m_NavigNotebook->SetWindowVariant(wxWINDOW_VARIANT_SMALL); +#endif navigSizer = new wxBoxSizer(wxVERTICAL); navigSizer->Add(m_NavigNotebook, 1, wxEXPAND); @@ -383,17 +389,22 @@ bool wxHtmlHelpWindow::Create(wxWindow* parent, wxWindowID id, else { // only html window, no notebook with index,contents etc - m_HtmlWin = new wxHtmlWindow(this); + m_HtmlWin = new wxHtmlWindow(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHW_DEFAULT_STYLE|htmlWindowBorder); topWindowSizer->Add(m_HtmlWin, 1, wxEXPAND); } +#if wxUSE_CONFIG if ( m_Config ) m_HtmlWin->ReadCustomization(m_Config, m_ConfigRoot); +#endif // wxUSE_CONFIG // contents tree panel? if ( helpStyle & wxHF_CONTENTS ) { wxWindow *dummy = new wxPanel(m_NavigNotebook, wxID_HTML_INDEXPAGE); +#ifdef __WXMAC__ + dummy->SetWindowVariant(wxWINDOW_VARIANT_NORMAL); +#endif wxSizer *topsizer = new wxBoxSizer(wxVERTICAL); topsizer->Add(0, 10); @@ -402,10 +413,16 @@ bool wxHtmlHelpWindow::Create(wxWindow* parent, wxWindowID id, if ( helpStyle & wxHF_BOOKMARKS ) { + long comboStyle = wxCB_READONLY; +#ifndef __WXMAC__ + // Not supported on OSX/Cocoa presently + comboStyle |= wxCB_SORT; + +#endif m_Bookmarks = new wxComboBox(dummy, wxID_HTML_BOOKMARKSLIST, wxEmptyString, wxDefaultPosition, wxDefaultSize, - 0, NULL, wxCB_READONLY | wxCB_SORT); + 0, NULL, comboStyle); m_Bookmarks->Append(_("(bookmarks)")); for (unsigned i = 0; i < m_BookmarksNames.GetCount(); i++) m_Bookmarks->Append(m_BookmarksNames[i]); @@ -434,7 +451,7 @@ bool wxHtmlHelpWindow::Create(wxWindow* parent, wxWindowID id, m_ContentsBox = new wxTreeCtrl(dummy, wxID_HTML_TREECTRL, wxDefaultPosition, wxDefaultSize, -#ifdef __WXGTK20__ +#if defined(__WXGTK20__) || defined(__WXMAC__) wxSUNKEN_BORDER | wxTR_HAS_BUTTONS | wxTR_HIDE_ROOT | wxTR_NO_LINES @@ -445,6 +462,17 @@ bool wxHtmlHelpWindow::Create(wxWindow* parent, wxWindowID id, #endif ); + wxImageList *ContentsImageList = new wxImageList(16, 16); + ContentsImageList->Add(wxArtProvider::GetIcon(wxART_HELP_BOOK, + wxART_HELP_BROWSER, + wxSize(16, 16))); + ContentsImageList->Add(wxArtProvider::GetIcon(wxART_HELP_FOLDER, + wxART_HELP_BROWSER, + wxSize(16, 16))); + ContentsImageList->Add(wxArtProvider::GetIcon(wxART_HELP_PAGE, + wxART_HELP_BROWSER, + wxSize(16, 16))); + m_ContentsBox->AssignImageList(ContentsImageList); topsizer->Add(m_ContentsBox, 1, @@ -459,6 +487,9 @@ bool wxHtmlHelpWindow::Create(wxWindow* parent, wxWindowID id, if ( helpStyle & wxHF_INDEX ) { wxWindow *dummy = new wxPanel(m_NavigNotebook, wxID_HTML_INDEXPAGE); +#ifdef __WXMAC__ + dummy->SetWindowVariant(wxWINDOW_VARIANT_NORMAL); +#endif wxSizer *topsizer = new wxBoxSizer(wxVERTICAL); dummy->SetSizer(topsizer); @@ -499,6 +530,9 @@ bool wxHtmlHelpWindow::Create(wxWindow* parent, wxWindowID id, if ( helpStyle & wxHF_SEARCH ) { wxWindow *dummy = new wxPanel(m_NavigNotebook, wxID_HTML_INDEXPAGE); +#ifdef __WXMAC__ + dummy->SetWindowVariant(wxWINDOW_VARIANT_NORMAL); +#endif wxSizer *sizer = new wxBoxSizer(wxVERTICAL); dummy->SetSizer(sizer); @@ -513,7 +547,7 @@ bool wxHtmlHelpWindow::Create(wxWindow* parent, wxWindowID id, m_SearchWholeWords = new wxCheckBox(dummy, wxID_ANY, _("Whole words only")); 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")); + m_SearchButton->SetToolTip(_("Search contents of help book(s) for all occurrences of the text you typed above")); #endif //wxUSE_TOOLTIPS m_SearchList = new wxListBox(dummy, wxID_HTML_SEARCHLIST, wxDefaultPosition, wxDefaultSize, @@ -543,9 +577,12 @@ bool wxHtmlHelpWindow::Create(wxWindow* parent, wxWindowID id, // showtime if ( m_NavigPan && m_Splitter ) { + // The panel will have its own min size which the splitter + // should respect + //if (m_NavigPan) + // m_Splitter->SetMinimumPaneSize(m_NavigPan->GetBestSize().x); + //else m_Splitter->SetMinimumPaneSize(20); - if ( m_Cfg.navig_on ) - m_Splitter->SplitVertically(m_NavigPan, m_HtmlWin, m_Cfg.sashpos); if ( m_Cfg.navig_on ) { @@ -562,7 +599,7 @@ bool wxHtmlHelpWindow::Create(wxWindow* parent, wxWindowID id, // Reduce flicker by updating the splitter pane sizes before the // frame is shown wxSizeEvent sizeEvent(GetSize(), GetId()); - ProcessEvent(sizeEvent); + GetEventHandler()->ProcessEvent(sizeEvent); if (m_Splitter) m_Splitter->UpdateSize(); @@ -572,6 +609,9 @@ bool wxHtmlHelpWindow::Create(wxWindow* parent, wxWindowID id, wxHtmlHelpWindow::~wxHtmlHelpWindow() { + if ( m_helpController ) + m_helpController->SetHelpWindow(NULL); + delete m_mergedIndex; // PopEventHandler(); // wxhtmlhelpcontroller (not any more!) @@ -620,56 +660,36 @@ void wxHtmlHelpWindow::AddToolbarButtons(wxToolBar *toolBar, int style) wxBitmap woptionsBitmap = wxArtProvider::GetBitmap(wxART_HELP_SETTINGS, wxART_TOOLBAR); - wxASSERT_MSG( (wpanelBitmap.Ok() && wbackBitmap.Ok() && - wforwardBitmap.Ok() && wupnodeBitmap.Ok() && - wupBitmap.Ok() && wdownBitmap.Ok() && - wopenBitmap.Ok() && wprintBitmap.Ok() && - woptionsBitmap.Ok()), + wxASSERT_MSG( (wpanelBitmap.IsOk() && wbackBitmap.IsOk() && + wforwardBitmap.IsOk() && wupnodeBitmap.IsOk() && + wupBitmap.IsOk() && wdownBitmap.IsOk() && + wopenBitmap.IsOk() && wprintBitmap.IsOk() && + woptionsBitmap.IsOk()), wxT("One or more HTML help frame toolbar bitmap could not be loaded.")) ; - toolBar->AddTool(wxID_HTML_PANEL, wpanelBitmap, wxNullBitmap, - false, wxDefaultCoord, wxDefaultCoord, (wxObject *) NULL, - _("Show/hide navigation panel")); - + toolBar->AddTool(wxID_HTML_PANEL, wxEmptyString, wpanelBitmap, _("Show/hide navigation panel")); toolBar->AddSeparator(); - toolBar->AddTool(wxID_HTML_BACK, wbackBitmap, wxNullBitmap, - false, wxDefaultCoord, wxDefaultCoord, (wxObject *) NULL, - _("Go back")); - toolBar->AddTool(wxID_HTML_FORWARD, wforwardBitmap, wxNullBitmap, - false, wxDefaultCoord, wxDefaultCoord, (wxObject *) NULL, - _("Go forward")); + toolBar->AddTool(wxID_HTML_BACK, wxEmptyString, wbackBitmap, _("Go back")); + toolBar->AddTool(wxID_HTML_FORWARD, wxEmptyString, wforwardBitmap, _("Go forward")); toolBar->AddSeparator(); - - toolBar->AddTool(wxID_HTML_UPNODE, wupnodeBitmap, wxNullBitmap, - false, wxDefaultCoord, wxDefaultCoord, (wxObject *) NULL, - _("Go one level up in document hierarchy")); - toolBar->AddTool(wxID_HTML_UP, wupBitmap, wxNullBitmap, - false, wxDefaultCoord, wxDefaultCoord, (wxObject *) NULL, - _("Previous page")); - toolBar->AddTool(wxID_HTML_DOWN, wdownBitmap, wxNullBitmap, - false, wxDefaultCoord, wxDefaultCoord, (wxObject *) NULL, - _("Next page")); + toolBar->AddTool(wxID_HTML_UPNODE, wxEmptyString, wupnodeBitmap, _("Go one level up in document hierarchy")); + toolBar->AddTool(wxID_HTML_UP, wxEmptyString, wupBitmap, _("Previous page")); + toolBar->AddTool(wxID_HTML_DOWN, wxEmptyString, wdownBitmap, _("Next page")); if ((style & wxHF_PRINT) || (style & wxHF_OPEN_FILES)) toolBar->AddSeparator(); if (style & wxHF_OPEN_FILES) - toolBar->AddTool(wxID_HTML_OPENFILE, wopenBitmap, wxNullBitmap, - false, wxDefaultCoord, wxDefaultCoord, (wxObject *) NULL, - _("Open HTML document")); + toolBar->AddTool(wxID_HTML_OPENFILE, wxEmptyString, wopenBitmap, _("Open HTML document")); #if wxUSE_PRINTING_ARCHITECTURE if (style & wxHF_PRINT) - toolBar->AddTool(wxID_HTML_PRINT, wprintBitmap, wxNullBitmap, - false, wxDefaultCoord, wxDefaultCoord, (wxObject *) NULL, - _("Print this page")); + toolBar->AddTool(wxID_HTML_PRINT, wxEmptyString, wprintBitmap, _("Print this page")); #endif toolBar->AddSeparator(); - toolBar->AddTool(wxID_HTML_OPTIONS, woptionsBitmap, wxNullBitmap, - false, wxDefaultCoord, wxDefaultCoord, (wxObject *) NULL, - _("Display options dialog")); + toolBar->AddTool(wxID_HTML_OPTIONS, wxEmptyString, woptionsBitmap, _("Display options dialog")); // Allow application to add custom buttons wxHtmlHelpFrame* parentFrame = wxDynamicCast(GetParent(), wxHtmlHelpFrame); @@ -688,7 +708,6 @@ bool wxHtmlHelpWindow::Display(const wxString& x) if (!url.empty()) { m_HtmlWin->LoadPage(url); - NotifyPageChanged(); return true; } @@ -701,7 +720,6 @@ bool wxHtmlHelpWindow::Display(const int id) if (!url.empty()) { m_HtmlWin->LoadPage(url); - NotifyPageChanged(); return true; } @@ -764,7 +782,6 @@ void wxHtmlHelpWindow::DisplayIndexItem(const wxHtmlHelpMergedIndexItem *it) if (!it->items[0]->page.empty()) { m_HtmlWin->LoadPage(it->items[0]->GetFullPath()); - NotifyPageChanged(); } } else @@ -795,11 +812,12 @@ void wxHtmlHelpWindow::DisplayIndexItem(const wxHtmlHelpMergedIndexItem *it) wxSingleChoiceDialog dlg(this, _("Please choose the page to display:"), _("Help Topics"), - arr, NULL, wxCHOICEDLG_STYLE & ~wxCENTRE); + arr, + (void**)NULL, // No client data + wxCHOICEDLG_STYLE & ~wxCENTRE); if (dlg.ShowModal() == wxID_OK) { m_HtmlWin->LoadPage(it->items[dlg.GetSelection()]->GetFullPath()); - NotifyPageChanged(); } } } @@ -807,6 +825,8 @@ void wxHtmlHelpWindow::DisplayIndexItem(const wxHtmlHelpMergedIndexItem *it) bool wxHtmlHelpWindow::KeywordSearch(const wxString& keyword, wxHelpSearchMode mode) { + wxCHECK_MSG( !keyword.empty(), false, "must have a non empty keyword" ); + if (mode == wxHELP_SEARCH_ALL) { if ( !(m_SearchList && @@ -874,7 +894,7 @@ bool wxHtmlHelpWindow::KeywordSearch(const wxString& keyword, } m_SearchButton->Enable(); - m_SearchText->SetSelection(0, keyword.Length()); + m_SearchText->SetSelection(0, keyword.length()); m_SearchText->SetFocus(); } else if (mode == wxHELP_SEARCH_INDEX) @@ -885,8 +905,7 @@ bool wxHtmlHelpWindow::KeywordSearch(const wxString& keyword, m_IndexButtonAll->Disable(); m_IndexText->SetValue(keyword); - wxCommandEvent dummy; - OnIndexFind(dummy); // what a hack... + DoIndexFind(); m_IndexButton->Enable(); m_IndexButtonAll->Enable(); foundcnt = m_IndexList->GetCount(); @@ -897,7 +916,7 @@ bool wxHtmlHelpWindow::KeywordSearch(const wxString& keyword, switch ( mode ) { default: - wxFAIL_MSG( _T("unknown help search mode") ); + wxFAIL_MSG( wxT("unknown help search mode") ); // fall back case wxHELP_SEARCH_ALL: @@ -907,7 +926,6 @@ bool wxHtmlHelpWindow::KeywordSearch(const wxString& keyword, if (it) { m_HtmlWin->LoadPage(it->GetFullPath()); - NotifyPageChanged(); } break; } @@ -1007,6 +1025,9 @@ void wxHtmlHelpWindow::CreateContents() imaged[it->level] = true; } } + + m_ContentsBox->SetMinSize(wxSize(CONTENT_TREE_INDEX_MIN_WIDTH, + m_ContentsBox->GetMinHeight())); } void wxHtmlHelpWindow::CreateIndex() @@ -1016,13 +1037,13 @@ void wxHtmlHelpWindow::CreateIndex() m_IndexList->Clear(); - size_t cnt = m_mergedIndex->size(); + unsigned long cnt = m_mergedIndex->size(); wxString cnttext; if (cnt > INDEX_IS_SMALL) - cnttext.Printf(_("%i of %i"), 0, cnt); + cnttext.Printf(_("%d of %lu"), 0, cnt); else - cnttext.Printf(_("%i of %i"), cnt, cnt); + cnttext.Printf(_("%lu of %lu"), cnt, cnt); m_IndexCountInfo->SetLabel(cnttext); if (cnt > INDEX_IS_SMALL) return; @@ -1030,6 +1051,9 @@ void wxHtmlHelpWindow::CreateIndex() for (size_t i = 0; i < cnt; i++) m_IndexList->Append((*m_mergedIndex)[i].name, (char*)(&(*m_mergedIndex)[i])); + + m_IndexList->SetMinSize(wxSize(CONTENT_TREE_INDEX_MIN_WIDTH, + m_IndexList->GetMinHeight())); } void wxHtmlHelpWindow::CreateSearch() @@ -1056,6 +1080,7 @@ void wxHtmlHelpWindow::RefreshLists() CreateSearch(); } +#if wxUSE_CONFIG void wxHtmlHelpWindow::ReadCustomization(wxConfigBase *cfg, const wxString& path) { wxString oldpath; @@ -1064,7 +1089,7 @@ void wxHtmlHelpWindow::ReadCustomization(wxConfigBase *cfg, const wxString& path if (path != wxEmptyString) { oldpath = cfg->GetPath(); - cfg->SetPath(_T("/") + path); + cfg->SetPath(wxT("/") + path); } m_Cfg.navig_on = cfg->Read(wxT("hcNavigPanel"), m_Cfg.navig_on) != 0; @@ -1122,7 +1147,7 @@ void wxHtmlHelpWindow::WriteCustomization(wxConfigBase *cfg, const wxString& pat if (path != wxEmptyString) { oldpath = cfg->GetPath(); - cfg->SetPath(_T("/") + path); + cfg->SetPath(wxT("/") + path); } cfg->Write(wxT("hcNavigPanel"), m_Cfg.navig_on); @@ -1161,6 +1186,7 @@ void wxHtmlHelpWindow::WriteCustomization(wxConfigBase *cfg, const wxString& pat if (path != wxEmptyString) cfg->SetPath(oldpath); } +#endif // wxUSE_CONFIG static void SetFontsToHtmlWin(wxHtmlWindow *win, const wxString& scalf, const wxString& fixf, int size) { @@ -1201,16 +1227,19 @@ public: wxSize(200, wxDefaultCoord), 0, NULL, wxCB_DROPDOWN | wxCB_READONLY)); - sizer->Add(FontSize = new wxSpinCtrl(this, wxID_ANY)); - FontSize->SetRange(2, 100); + sizer->Add(FontSize = new wxSpinCtrl(this, wxID_ANY, wxEmptyString, wxDefaultPosition, + wxDefaultSize, wxSP_ARROW_KEYS, 2, 100, 2, wxT("wxSpinCtrl"))); topsizer->Add(sizer, 0, wxLEFT|wxRIGHT|wxTOP, 10); topsizer->Add(new wxStaticText(this, wxID_ANY, _("Preview:")), 0, wxLEFT | wxTOP, 10); + + topsizer->AddSpacer(5); + topsizer->Add(TestWin = new wxHtmlWindow(this, wxID_ANY, wxDefaultPosition, wxSize(20, 150), - wxHW_SCROLLBAR_AUTO | wxSUNKEN_BORDER), - 1, wxEXPAND | wxLEFT|wxTOP|wxRIGHT, 10); + wxHW_SCROLLBAR_AUTO|wxBORDER_THEME), + 1, wxEXPAND | wxLEFT | wxRIGHT, 10); wxBoxSizer *sizer2 = new wxBoxSizer(wxHORIZONTAL); wxButton *ok; @@ -1235,25 +1264,25 @@ public: wxString content(_("font size")); - content = _T("") + content + _T(" -2
") - _T("") + content + _T(" -1
") - _T("") + content + _T(" +0
") - _T("") + content + _T(" +1
") - _T("") + content + _T(" +2
") - _T("") + content + _T(" +3
") - _T("") + content + _T(" +4
") ; + content = wxT("") + content + wxT(" -2
") + wxT("") + content + wxT(" -1
") + wxT("") + content + wxT(" +0
") + wxT("") + content + wxT(" +1
") + wxT("") + content + wxT(" +2
") + wxT("") + content + wxT(" +3
") + wxT("") + content + wxT(" +4
") ; - content = wxString( _T("
") ) + + content = wxString( wxT("
") ) + _("Normal face
and underlined. ") + _("Italic face. ") + _("Bold face. ") + _("Bold italic face.
") + content + - wxString( _T("
") ) + + wxString( wxT("") ) + _("Fixed size face.
bold italic ") + _("bold italic underlined
") + content + - _T("
"); + wxT("
"); TestWin->SetPage( content ); } @@ -1268,7 +1297,7 @@ public: } DECLARE_EVENT_TABLE() - DECLARE_NO_COPY_CLASS(wxHtmlHelpWindowOptionsDialog) + wxDECLARE_NO_COPY_CLASS(wxHtmlHelpWindowOptionsDialog); }; BEGIN_EVENT_TABLE(wxHtmlHelpWindowOptionsDialog, wxDialog) @@ -1283,18 +1312,14 @@ void wxHtmlHelpWindow::OptionsDialog() if (m_NormalFonts == NULL) { - wxFontEnumerator enu; - enu.EnumerateFacenames(); - m_NormalFonts = new wxArrayString; - *m_NormalFonts = *enu.GetFacenames(); + m_NormalFonts = new wxArrayString(wxFontEnumerator::GetFacenames()); m_NormalFonts->Sort(); // ascending sort } if (m_FixedFonts == NULL) { - wxFontEnumerator enu; - enu.EnumerateFacenames(wxFONTENCODING_SYSTEM, true /*enum fixed width only*/); - m_FixedFonts = new wxArrayString; - *m_FixedFonts = *enu.GetFacenames(); + m_FixedFonts = new wxArrayString( + wxFontEnumerator::GetFacenames(wxFONTENCODING_SYSTEM, + true /*enum fixed width only*/)); m_FixedFonts->Sort(); // ascending sort } @@ -1368,12 +1393,10 @@ void wxHtmlHelpWindow::OnToolbar(wxCommandEvent& event) { case wxID_HTML_BACK : m_HtmlWin->HistoryBack(); - NotifyPageChanged(); break; case wxID_HTML_FORWARD : m_HtmlWin->HistoryForward(); - NotifyPageChanged(); break; case wxID_HTML_UP : @@ -1389,7 +1412,6 @@ void wxHtmlHelpWindow::OnToolbar(wxCommandEvent& event) if (!it.page.empty()) { m_HtmlWin->LoadPage(it.GetFullPath()); - NotifyPageChanged(); } } } @@ -1418,10 +1440,7 @@ void wxHtmlHelpWindow::OnToolbar(wxCommandEvent& event) if (ind >= 0) { if (!it->page.empty()) - { m_HtmlWin->LoadPage(it->GetFullPath()); - NotifyPageChanged(); - } } } } @@ -1443,10 +1462,7 @@ void wxHtmlHelpWindow::OnToolbar(wxCommandEvent& event) while (contents[idx].GetFullPath() == page) idx++; if (!contents[idx].page.empty()) - { m_HtmlWin->LoadPage(contents[idx].GetFullPath()); - NotifyPageChanged(); - } } } break; @@ -1504,7 +1520,9 @@ void wxHtmlHelpWindow::OnToolbar(wxCommandEvent& event) { m_BookmarksNames.RemoveAt(pos); m_BookmarksPages.RemoveAt(pos); - m_Bookmarks->Delete(m_Bookmarks->GetSelection()); + pos = m_Bookmarks->GetSelection(); + wxASSERT_MSG( pos != wxNOT_FOUND , wxT("Unknown bookmark position") ) ; + m_Bookmarks->Delete((unsigned int)pos); } } break; @@ -1515,9 +1533,13 @@ void wxHtmlHelpWindow::OnToolbar(wxCommandEvent& event) if (m_Printer == NULL) m_Printer = new wxHtmlEasyPrinting(_("Help Printing"), this); if (!m_HtmlWin->GetOpenedPage()) + { wxLogWarning(_("Cannot print empty page.")); + } else + { m_Printer->PrintFile(m_HtmlWin->GetOpenedPage()); + } } break; #endif @@ -1531,22 +1553,22 @@ void wxHtmlHelpWindow::OnToolbar(wxCommandEvent& event) #if wxUSE_LIBMSPACK _("Compressed HTML Help file (*.chm)|*.chm|") + #endif - _("All files (*.*)|*"); + wxALL_FILES; wxString s = wxFileSelector(_("Open HTML document"), wxEmptyString, wxEmptyString, wxEmptyString, filemask, - wxOPEN | wxFILE_MUST_EXIST, + wxFD_OPEN | wxFD_FILE_MUST_EXIST, this); if (!s.empty()) { wxString ext = s.Right(4).Lower(); - if (ext == _T(".zip") || ext == _T(".htb") || + if (ext == wxT(".zip") || ext == wxT(".htb") || #if wxUSE_LIBMSPACK - ext == _T(".chm") || + ext == wxT(".chm") || #endif - ext == _T(".hhp")) + ext == wxT(".hhp")) { wxBusyCursor bcur; m_Data->AddBook(s); @@ -1584,13 +1606,18 @@ void wxHtmlHelpWindow::OnIndexSel(wxCommandEvent& WXUNUSED(event)) DisplayIndexItem(it); } -void wxHtmlHelpWindow::OnIndexFind(wxCommandEvent& event) +void wxHtmlHelpWindow::OnIndexFind(wxCommandEvent& WXUNUSED(event)) +{ + DoIndexFind(); +} + +void wxHtmlHelpWindow::DoIndexFind() { wxString sr = m_IndexText->GetLineText(0); sr.MakeLower(); if (sr == wxEmptyString) { - OnIndexAll(event); + DoIndexAll(); } else { @@ -1654,12 +1681,17 @@ void wxHtmlHelpWindow::OnIndexFind(wxCommandEvent& event) cnttext.Printf(_("%i of %i"), displ, cnt); m_IndexCountInfo->SetLabel(cnttext); - m_IndexText->SetSelection(0, sr.Length()); + m_IndexText->SetSelection(0, sr.length()); m_IndexText->SetFocus(); } } void wxHtmlHelpWindow::OnIndexAll(wxCommandEvent& WXUNUSED(event)) +{ + DoIndexAll(); +} + +void wxHtmlHelpWindow::DoIndexAll() { wxBusyCursor bcur; @@ -1695,7 +1727,6 @@ void wxHtmlHelpWindow::OnSearchSel(wxCommandEvent& WXUNUSED(event)) { if (!it->page.empty()) m_HtmlWin->LoadPage(it->GetFullPath()); - NotifyPageChanged(); } } @@ -1709,12 +1740,11 @@ void wxHtmlHelpWindow::OnSearch(wxCommandEvent& WXUNUSED(event)) void wxHtmlHelpWindow::OnBookmarksSel(wxCommandEvent& WXUNUSED(event)) { - wxString sr = m_Bookmarks->GetStringSelection(); - - if (sr != wxEmptyString && sr != _("(bookmarks)")) + wxString str = m_Bookmarks->GetStringSelection(); + int idx = m_BookmarksNames.Index(str); + if (!str.empty() && str != _("(bookmarks)") && idx != wxNOT_FOUND) { - m_HtmlWin->LoadPage(m_BookmarksPages[m_BookmarksNames.Index(sr)]); - NotifyPageChanged(); + m_HtmlWin->LoadPage(m_BookmarksPages[(size_t)idx]); } }