#ifndef WX_PRECOMP
#include "wx/app.h"
+ #include "wx/module.h"
#endif
#include "wx/tipwin.h"
-#include "wx/module.h"
#include "wx/cshelp.h"
+#if wxUSE_MS_HTML_HELP
+ #include "wx/msw/helpchm.h" // for ShowContextHelpPopup
+ #include "wx/utils.h" // for wxGetMousePosition()
+#endif
+
// ----------------------------------------------------------------------------
// wxContextHelpEvtHandler private class
// ----------------------------------------------------------------------------
//// Data
wxContextHelp* m_contextHelp;
- DECLARE_NO_COPY_CLASS(wxContextHelpEvtHandler)
+ wxDECLARE_NO_COPY_CLASS(wxContextHelpEvtHandler);
};
// ============================================================================
wxCursor oldCursor = win->GetCursor();
win->SetCursor(cursor);
-#ifdef __WXMSW__
- // wxSetCursor(cursor);
+#ifdef __WXMAC__
+ wxSetCursor(cursor);
#endif
m_status = false;
win->SetCursor(oldCursor);
+#ifdef __WXMAC__
+ wxSetCursor(wxNullCursor);
+#endif
+
if (m_status)
{
wxPoint pt;
// 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,
- wxHelpEvent::Origin_HelpButton);
- helpEvent.SetEventObject(subjectOfHelp);
+ wxCHECK_MSG( win, false, wxT("win parameter can't be NULL") );
- eventProcessed = win->GetEventHandler()->ProcessEvent(helpEvent);
+ wxHelpEvent helpEvent(wxEVT_HELP, win->GetId(), pt,
+ wxHelpEvent::Origin_HelpButton);
+ helpEvent.SetEventObject(win);
- // 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;
+ return win->GetEventHandler()->ProcessEvent(helpEvent);
}
// ----------------------------------------------------------------------------
long style)
#if defined(__WXPM__)
: wxBitmapButton(parent, id, wxBitmap(wxCSQUERY_BITMAP
- ,wxBITMAP_TYPE_RESOURCE
+ ,wxBITMAP_TYPE_BMP_RESOURCE
),
pos, size, style)
#else
// wxHelpProvider
// ----------------------------------------------------------------------------
-wxHelpProvider *wxHelpProvider::ms_helpProvider = (wxHelpProvider *)NULL;
+wxHelpProvider *wxHelpProvider::ms_helpProvider = NULL;
// trivial implementation of some methods which we don't want to make pure
// virtual for convenience
if ( m_helptextAtPoint != wxDefaultPosition ||
m_helptextOrigin != wxHelpEvent::Origin_Unknown )
{
- wxCHECK_MSG( window, wxEmptyString, _T("window must not be NULL") );
+ wxCHECK_MSG( window, wxEmptyString, wxT("window must not be NULL") );
wxPoint pt = m_helptextAtPoint;
wxHelpEvent::Origin origin = m_helptextOrigin;
bool wxSimpleHelpProvider::ShowHelp(wxWindowBase *window)
{
-#if wxUSE_TIPWINDOW
- static wxTipWindow* s_tipWindow = NULL;
-
- if (s_tipWindow)
- {
- // Prevent s_tipWindow being nulled in OnIdle,
- // thereby removing the chance for the window to be closed by ShowHelp
- s_tipWindow->SetTipWindowPtr(NULL);
- s_tipWindow->Close();
- }
- s_tipWindow = NULL;
+#if wxUSE_MS_HTML_HELP || wxUSE_TIPWINDOW
+#if wxUSE_MS_HTML_HELP
+ // m_helptextAtPoint will be reset by GetHelpTextMaybeAtPoint(), stash it
+ const wxPoint posTooltip = m_helptextAtPoint;
+#endif // wxUSE_MS_HTML_HELP
const wxString text = GetHelpTextMaybeAtPoint(window);
+
if ( !text.empty() )
{
- s_tipWindow = new wxTipWindow((wxWindow *)window, text,
- 100, &s_tipWindow);
+ // use the native help popup style if it's available
+#if wxUSE_MS_HTML_HELP
+ if ( !wxCHMHelpController::ShowContextHelpPopup
+ (
+ text,
+ posTooltip,
+ (wxWindow *)window
+ ) )
+#endif // wxUSE_MS_HTML_HELP
+ {
+#if wxUSE_TIPWINDOW
+ static wxTipWindow* s_tipWindow = NULL;
+
+ if ( s_tipWindow )
+ {
+ // Prevent s_tipWindow being nulled in OnIdle, thereby removing
+ // the chance for the window to be closed by ShowHelp
+ s_tipWindow->SetTipWindowPtr(NULL);
+ s_tipWindow->Close();
+ }
+
+ s_tipWindow = new wxTipWindow((wxWindow *)window, text,
+ 100, &s_tipWindow);
+#else // !wxUSE_TIPWINDOW
+ // we tried wxCHMHelpController but it failed and we don't have
+ // wxTipWindow to fall back on, so
+ return false;
+#endif // wxUSE_TIPWINDOW
+ }
return true;
}
-#else
+#else // !wxUSE_MS_HTML_HELP && !wxUSE_TIPWINDOW
wxUnusedVar(window);
-#endif // wxUSE_TIPWINDOW
+#endif // wxUSE_MS_HTML_HELP || wxUSE_TIPWINDOW
return false;
}
// Convenience function for turning context id into wxString
wxString wxContextId(int id)
{
- return wxString::Format(_T("%d"), id);
+ return wxString::Format(wxT("%d"), id);
}
// ----------------------------------------------------------------------------