X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/3723b7b1d8cbeebccef4f8ad7fe3884dfca9eca6..2ec6905c69c73f908533697c770c690657f4371c:/src/common/helpbase.cpp diff --git a/src/common/helpbase.cpp b/src/common/helpbase.cpp index 8696ad47aa..94d808ac5b 100644 --- a/src/common/helpbase.cpp +++ b/src/common/helpbase.cpp @@ -25,159 +25,9 @@ #endif #include "wx/helpbase.h" -#include "wx/app.h" #if wxUSE_HELP IMPLEMENT_CLASS(wxHelpControllerBase, wxObject) -/* - * Invokes context-sensitive help - */ - -// This class exists in order to eat events until the left mouse -// button is pressed -class wxContextHelpEvtHandler: public wxEvtHandler -{ -public: - wxContextHelpEvtHandler(wxContextHelp* contextHelp) - { - m_contextHelp = contextHelp; - } - - virtual bool ProcessEvent(wxEvent& event); - -//// Data - wxContextHelp* m_contextHelp; -}; - -IMPLEMENT_DYNAMIC_CLASS(wxContextHelp, wxObject) - -wxContextHelp::wxContextHelp(wxWindow* win, bool beginHelp) -{ - m_inHelp = FALSE; - - if (beginHelp) - BeginContextHelp(win); -} - -wxContextHelp::~wxContextHelp() -{ - if (m_inHelp) - EndContextHelp(); -} - -// Begin 'context help mode' -bool wxContextHelp::BeginContextHelp(wxWindow* win) -{ - if (!win) - win = wxTheApp->GetTopWindow(); - if (!win) - return FALSE; - - wxCursor cursor(wxCURSOR_QUESTION_ARROW); - wxCursor oldCursor = win->GetCursor(); - win->SetCursor(cursor); - wxSetCursor(cursor); - - win->PushEventHandler(new wxContextHelpEvtHandler(this)); - - win->CaptureMouse(); - - EventLoop(); - - win->ReleaseMouse(); - - win->PopEventHandler(TRUE); - - win->SetCursor(oldCursor); - - if (m_status) - { - wxPoint pt; - wxWindow* winAtPtr = wxFindWindowAtPointer(pt); - if (winAtPtr) - DispatchEvent(winAtPtr, pt); - } - - return TRUE; -} - -bool wxContextHelp::EndContextHelp() -{ - m_inHelp = FALSE; - - return TRUE; -} - -bool wxContextHelp::EventLoop() -{ - m_inHelp = TRUE; - while ( m_inHelp ) - { - if (wxTheApp->Pending()) - { - wxTheApp->Dispatch(); - } - else - { - wxTheApp->ProcessIdle(); - } - } - return TRUE; -} - -bool wxContextHelpEvtHandler::ProcessEvent(wxEvent& event) -{ - switch (event.GetEventType()) - { - case wxEVT_LEFT_DOWN: - { - wxMouseEvent& mouseEvent = (wxMouseEvent&) event; - m_contextHelp->SetStatus(TRUE); - m_contextHelp->EndContextHelp(); - return TRUE; - break; - } - case wxEVT_CHAR: - case wxEVT_KEY_DOWN: - case wxEVT_ACTIVATE: - case wxEVT_MOUSE_CAPTURE_CHANGED: - { - m_contextHelp->SetStatus(FALSE); - m_contextHelp->EndContextHelp(); - return TRUE; - break; - } - case wxEVT_PAINT: - case wxEVT_ERASE_BACKGROUND: - { - event.Skip(); - return FALSE; - break; - } - } - - return TRUE; -} - -// Dispatch the help event to the relevant window -bool wxContextHelp::DispatchEvent(wxWindow* win, const wxPoint& pt) -{ - wxWindow* subjectOfHelp = win; - bool eventProcessed = FALSE; - while (subjectOfHelp && !eventProcessed) - { - wxHelpEvent helpEvent(wxEVT_HELP, subjectOfHelp->GetId(), pt) ; - helpEvent.SetEventObject(this); - eventProcessed = win->GetEventHandler()->ProcessEvent(helpEvent); - - // Go up the window hierarchy until the event is handled (or not). - // I.e. keep submitting ancestor windows until one is recognised - // by the app code that processes the ids and displays help. - subjectOfHelp = subjectOfHelp->GetParent(); - } - return eventProcessed; -} - #endif // wxUSE_HELP