X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/a717bd116a13ce2239c40d1d2aa877300fc3351c..0d1c8f39baaaeb7a7f757091209eab471ef5dbc4:/src/common/bookctrl.cpp diff --git a/src/common/bookctrl.cpp b/src/common/bookctrl.cpp index 9b7c964e24..d1e7bcbe01 100644 --- a/src/common/bookctrl.cpp +++ b/src/common/bookctrl.cpp @@ -42,6 +42,9 @@ IMPLEMENT_ABSTRACT_CLASS(wxBookCtrlBase, wxControl) BEGIN_EVENT_TABLE(wxBookCtrlBase, wxControl) EVT_SIZE(wxBookCtrlBase::OnSize) +#if wxUSE_HELP + EVT_HELP(wxID_ANY, wxBookCtrlBase::OnHelp) +#endif // wxUSE_HELP END_EVENT_TABLE() // ---------------------------------------------------------------------------- @@ -158,6 +161,64 @@ wxSize wxBookCtrlBase::DoGetBestSize() const return best; } +#if wxUSE_HELP + +void wxBookCtrlBase::OnHelp(wxHelpEvent& event) +{ + // determine where does this even originate from to avoid redirecting it + // back to the page which generated it (resulting in an infinite loop) + + // notice that we have to check in the hard(er) way instead of just testing + // if the event object == this because the book control can have other + // subcontrols inside it (e.g. wxSpinButton in case of a notebook in wxUniv) + wxWindow *source = wxStaticCast(event.GetEventObject(), wxWindow); + while ( source && source->GetParent() != this ) + { + source = source->GetParent(); + } + + if ( source && m_pages.Index(source) == wxNOT_FOUND ) + { + // this event is for the book control itself, redirect it to the + // corresponding page + wxWindow *page = NULL; + + if ( event.GetOrigin() == wxHelpEvent::Origin_HelpButton ) + { + // show help for the page under the mouse + const int pagePos = HitTest(ScreenToClient(event.GetPosition())); + + if ( pagePos != wxNOT_FOUND) + { + page = GetPage((size_t)pagePos); + } + } + else // event from keyboard or unknown source + { + // otherwise show the current page help + page = GetCurrentPage(); + } + + if ( page ) + { + // change event object to the page to avoid infinite recursion if + // we get this event ourselves if the page doesn't handle it + event.SetEventObject(page); + + if ( page->GetEventHandler()->ProcessEvent(event) ) + { + // don't call event.Skip() + return; + } + } + } + //else: event coming from one of our pages already + + event.Skip(); +} + +#endif // wxUSE_HELP + // ---------------------------------------------------------------------------- // pages management // ---------------------------------------------------------------------------- @@ -236,6 +297,7 @@ wxRect wxBookCtrlBase::GetPageRect() const wxPoint pt; wxRect rectPage(pt, GetClientSize()); + switch ( GetWindowStyle() & wxBK_ALIGN_MASK ) { default: