X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/bd83cb56d29385e2a87840eeb3876b976a5afc43..42b1f941b010bee7e5e82b12c1096dce094553d4:/src/common/cshelp.cpp?ds=sidebyside diff --git a/src/common/cshelp.cpp b/src/common/cshelp.cpp index c9a033d8a6..805ada8bff 100644 --- a/src/common/cshelp.cpp +++ b/src/common/cshelp.cpp @@ -31,14 +31,11 @@ #if wxUSE_HELP #ifndef WX_PRECOMP - // FIXME: temporary needed for wxSimpleHelpProvider compilation, to be - // removed later - #include "wx/intl.h" - #include "wx/msgdlg.h" #endif +#include "wx/tipwin.h" #include "wx/app.h" - +#include "wx/module.h" #include "wx/cshelp.h" // ---------------------------------------------------------------------------- @@ -122,6 +119,15 @@ bool wxContextHelp::BeginContextHelp(wxWindow* win) { wxPoint pt; wxWindow* winAtPtr = wxFindWindowAtPointer(pt); + /* + if (winAtPtr) + { + wxString msg; + msg.Printf("Picked %s (%d)", (const char*) winAtPtr->GetName(), winAtPtr->GetId()); + cout << msg << '\n'; + } + */ + if (winAtPtr) DispatchEvent(winAtPtr, pt); } @@ -307,8 +313,7 @@ bool wxSimpleHelpProvider::ShowHelp(wxWindowBase *window) wxString text = GetHelp(window); if ( !text.empty() ) { - wxMessageBox(text, _("Help"), wxICON_INFORMATION | wxOK, - (wxWindow *)window); + new wxTipWindow((wxWindow *)window, text); return TRUE; } @@ -316,4 +321,80 @@ bool wxSimpleHelpProvider::ShowHelp(wxWindowBase *window) return FALSE; } +// ---------------------------------------------------------------------------- +// wxHelpControllerHelpProvider +// ---------------------------------------------------------------------------- + +wxHelpControllerHelpProvider::wxHelpControllerHelpProvider(wxHelpControllerBase* hc) +{ + m_helpController = hc; +} + +bool wxHelpControllerHelpProvider::ShowHelp(wxWindowBase *window) +{ + wxString text = GetHelp(window); + if ( !text.empty() ) + { + if (m_helpController) + { + if (text.IsNumber()) + return m_helpController->DisplayContextPopup(wxAtoi(text)); + + // If the help controller is capable of popping up the text... + else if (m_helpController->DisplayTextPopup(text, wxGetMousePosition())) + { + return TRUE; + } + else + // ...else use the default method. + return wxSimpleHelpProvider::ShowHelp(window); + } + else + return wxSimpleHelpProvider::ShowHelp(window); + + } + + return FALSE; +} + +// Convenience function for turning context id into wxString +wxString wxContextId(int id) +{ + return wxString(IntToString(id)); +} + +// ---------------------------------------------------------------------------- +// wxHelpProviderModule: module responsible for cleaning up help provider. +// ---------------------------------------------------------------------------- + +class wxHelpProviderModule : public wxModule +{ +public: + bool OnInit(); + void OnExit(); + +private: + DECLARE_DYNAMIC_CLASS(wxHelpProviderModule) +}; + +IMPLEMENT_DYNAMIC_CLASS(wxHelpProviderModule, wxModule) + +bool wxHelpProviderModule::OnInit() +{ + // Probably we don't want to do anything by default, + // since it could pull in extra code + // wxHelpProvider::Set(new wxSimpleHelpProvider); + + return TRUE; +} + +void wxHelpProviderModule::OnExit() +{ + if (wxHelpProvider::Get()) + { + delete wxHelpProvider::Get(); + wxHelpProvider::Set(NULL); + } +} + #endif // wxUSE_HELP