X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/4e1ed07b52acd24f667354df5e9dc00cfde2a132..9d5507f7a2701395e1d5c121bd877bb9066ee6ea:/src/html/helpwnd.cpp diff --git a/src/html/helpwnd.cpp b/src/html/helpwnd.cpp index 5686f0bab5..5e652bb703 100644 --- a/src/html/helpwnd.cpp +++ b/src/html/helpwnd.cpp @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: helpwnd.cpp +// Name: src/html/helpwnd.cpp // Purpose: wxHtmlHelpWindow // Notes: Based on htmlhelp.cpp, implementing a monolithic // HTML Help controller class, by Vaclav Slavik @@ -14,32 +14,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,15 +53,9 @@ #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 @@ -94,7 +93,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,53 +104,54 @@ 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(); - } + void OnLink(wxHtmlLinkEvent& ev) + { + const wxMouseEvent *e = ev.GetLinkInfo().GetEvent(); + if (e == NULL || e->LeftUp()) + m_Window->NotifyPageChanged(); - // Returns full location with anchor (helper) - static wxString GetOpenedPageWithAnchor(wxHtmlWindow *win) - { - if(!win) - return wxEmptyString; + // skip the event so that normal processing (i.e. following the link) + // is done: + ev.Skip(); + } - 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) + DECLARE_EVENT_TABLE() }; +BEGIN_EVENT_TABLE(wxHtmlHelpHtmlWindow, wxHtmlWindow) + EVT_HTML_LINK_CLICKED(wxID_ANY, wxHtmlHelpHtmlWindow::OnLink) +END_EVENT_TABLE() + //--------------------------------------------------------------------------- // wxHtmlHelpWindow::m_mergedIndex @@ -342,13 +342,13 @@ 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)); @@ -362,6 +362,14 @@ bool wxHtmlHelpWindow::Create(wxWindow* parent, wxWindowID id, wxSizer *navigSizer = NULL; +#ifdef __WXMSW__ + wxBorder htmlWindowBorder = GetDefaultBorder(); + if (htmlWindowBorder == wxBORDER_SUNKEN) + htmlWindowBorder = wxBORDER_SIMPLE; +#else + wxBorder htmlWindowBorder = wxBORDER_SIMPLE; +#endif + if (helpStyle & (wxHF_CONTENTS | wxHF_INDEX | wxHF_SEARCH)) { // traditional help controller; splitter window with html page on the @@ -370,10 +378,13 @@ bool wxHtmlHelpWindow::Create(wxWindow* parent, wxWindowID id, 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,7 +394,7 @@ 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); } @@ -394,6 +405,9 @@ bool wxHtmlHelpWindow::Create(wxWindow* parent, wxWindowID id, 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); @@ -459,6 +473,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 +516,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); @@ -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(); @@ -1201,8 +1220,8 @@ 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, _T("wxSpinCtrl"))); topsizer->Add(sizer, 0, wxLEFT|wxRIGHT|wxTOP, 10); @@ -1283,18 +1302,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 } @@ -1504,7 +1519,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; @@ -1537,7 +1554,7 @@ void wxHtmlHelpWindow::OnToolbar(wxCommandEvent& event) wxEmptyString, wxEmptyString, filemask, - wxOPEN | wxFILE_MUST_EXIST, + wxFD_OPEN | wxFD_FILE_MUST_EXIST, this); if (!s.empty()) { @@ -1584,13 +1601,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 +1676,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; @@ -1709,11 +1736,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)]); + m_HtmlWin->LoadPage(m_BookmarksPages[(size_t)idx]); NotifyPageChanged(); } }