Put wxContextHelp into cshelp.h/cpp, added wxContextHelpButton
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@8294 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -25,162 +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);
|
||||
|
||||
#ifdef __WXMSW__
|
||||
// wxSetCursor(cursor);
|
||||
#endif
|
||||
|
||||
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
|
||||
|
Reference in New Issue
Block a user