X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/8e7da4267d8d6b196d5d9288344934688add68f5..af4168e2cfbeffbe3b53380471aa31e9ab63a598:/src/html/helpwnd.cpp diff --git a/src/html/helpwnd.cpp b/src/html/helpwnd.cpp index b4aafe1a76..c208c756d6 100644 --- a/src/html/helpwnd.cpp +++ b/src/html/helpwnd.cpp @@ -4,7 +4,6 @@ // 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 ///////////////////////////////////////////////////////////////////////////// @@ -58,7 +57,12 @@ #include "wx/spinctrl.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 @@ -115,15 +119,13 @@ public: SetStandardFonts(); } - void OnLink(wxHtmlLinkEvent& ev) + virtual bool LoadPage(const wxString& location) { - const wxMouseEvent *e = ev.GetLinkInfo().GetEvent(); - if (e == NULL || e->LeftUp()) - m_Window->NotifyPageChanged(); + if ( !wxHtmlWindow::LoadPage(location) ) + return false; - // skip the event so that normal processing (i.e. following the link) - // is done: - ev.Skip(); + m_Window->NotifyPageChanged(); + return true; } // Returns full location with anchor (helper) @@ -145,13 +147,8 @@ private: wxHtmlHelpWindow *m_Window; wxDECLARE_NO_COPY_CLASS(wxHtmlHelpHtmlWindow); - DECLARE_EVENT_TABLE() }; -BEGIN_EVENT_TABLE(wxHtmlHelpHtmlWindow, wxHtmlWindow) - EVT_HTML_LINK_CLICKED(wxID_ANY, wxHtmlHelpHtmlWindow::OnLink) -END_EVENT_TABLE() - //--------------------------------------------------------------------------- // wxHtmlHelpWindow::m_mergedIndex @@ -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; @@ -315,10 +314,12 @@ bool wxHtmlHelpWindow::Create(wxWindow* parent, wxWindowID id, { m_hfStyle = helpStyle; +#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")); @@ -353,11 +354,9 @@ bool wxHtmlHelpWindow::Create(wxWindow* parent, wxWindowID id, wxSizer *navigSizer = NULL; #ifdef __WXMSW__ - wxBorder htmlWindowBorder = GetDefaultBorder(); - if (htmlWindowBorder == wxBORDER_SUNKEN) - htmlWindowBorder = wxBORDER_SIMPLE; + wxBorder htmlWindowBorder = wxBORDER_THEME; #else - wxBorder htmlWindowBorder = wxBORDER_SIMPLE; + wxBorder htmlWindowBorder = wxBORDER_SUNKEN; #endif if (helpStyle & (wxHF_CONTENTS | wxHF_INDEX | wxHF_SEARCH)) @@ -367,6 +366,7 @@ bool wxHtmlHelpWindow::Create(wxWindow* parent, wxWindowID id, 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); @@ -393,8 +393,10 @@ bool wxHtmlHelpWindow::Create(wxWindow* parent, wxWindowID id, 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 ) @@ -411,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]); @@ -652,11 +660,11 @@ 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.")) ; @@ -700,7 +708,6 @@ bool wxHtmlHelpWindow::Display(const wxString& x) if (!url.empty()) { m_HtmlWin->LoadPage(url); - NotifyPageChanged(); return true; } @@ -713,7 +720,6 @@ bool wxHtmlHelpWindow::Display(const int id) if (!url.empty()) { m_HtmlWin->LoadPage(url); - NotifyPageChanged(); return true; } @@ -776,7 +782,6 @@ void wxHtmlHelpWindow::DisplayIndexItem(const wxHtmlHelpMergedIndexItem *it) if (!it->items[0]->page.empty()) { m_HtmlWin->LoadPage(it->items[0]->GetFullPath()); - NotifyPageChanged(); } } else @@ -807,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(); } } } @@ -910,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: @@ -920,7 +926,6 @@ bool wxHtmlHelpWindow::KeywordSearch(const wxString& keyword, if (it) { m_HtmlWin->LoadPage(it->GetFullPath()); - NotifyPageChanged(); } break; } @@ -1020,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() @@ -1029,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; @@ -1043,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() @@ -1069,6 +1080,7 @@ void wxHtmlHelpWindow::RefreshLists() CreateSearch(); } +#if wxUSE_CONFIG void wxHtmlHelpWindow::ReadCustomization(wxConfigBase *cfg, const wxString& path) { wxString oldpath; @@ -1077,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; @@ -1135,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); @@ -1174,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) { @@ -1215,7 +1228,7 @@ public: 0, NULL, wxCB_DROPDOWN | wxCB_READONLY)); sizer->Add(FontSize = new wxSpinCtrl(this, wxID_ANY, wxEmptyString, wxDefaultPosition, - wxDefaultSize, wxSP_ARROW_KEYS, 2, 100, 2, _T("wxSpinCtrl"))); + wxDefaultSize, wxSP_ARROW_KEYS, 2, 100, 2, wxT("wxSpinCtrl"))); topsizer->Add(sizer, 0, wxLEFT|wxRIGHT|wxTOP, 10); @@ -1251,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 ); } @@ -1380,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 : @@ -1401,7 +1412,6 @@ void wxHtmlHelpWindow::OnToolbar(wxCommandEvent& event) if (!it.page.empty()) { m_HtmlWin->LoadPage(it.GetFullPath()); - NotifyPageChanged(); } } } @@ -1430,10 +1440,7 @@ void wxHtmlHelpWindow::OnToolbar(wxCommandEvent& event) if (ind >= 0) { if (!it->page.empty()) - { m_HtmlWin->LoadPage(it->GetFullPath()); - NotifyPageChanged(); - } } } } @@ -1455,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; @@ -1529,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 @@ -1545,7 +1553,7 @@ 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, @@ -1556,11 +1564,11 @@ void wxHtmlHelpWindow::OnToolbar(wxCommandEvent& event) 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); @@ -1719,7 +1727,6 @@ void wxHtmlHelpWindow::OnSearchSel(wxCommandEvent& WXUNUSED(event)) { if (!it->page.empty()) m_HtmlWin->LoadPage(it->GetFullPath()); - NotifyPageChanged(); } } @@ -1738,7 +1745,6 @@ void wxHtmlHelpWindow::OnBookmarksSel(wxCommandEvent& WXUNUSED(event)) if (!str.empty() && str != _("(bookmarks)") && idx != wxNOT_FOUND) { m_HtmlWin->LoadPage(m_BookmarksPages[(size_t)idx]); - NotifyPageChanged(); } }