+{
+}
+
+void wxContextHelpButton::OnContextHelp(wxCommandEvent& WXUNUSED(event))
+{
+ wxContextHelp contextHelp(GetParent());
+}
+
+// ----------------------------------------------------------------------------
+// wxHelpProvider
+// ----------------------------------------------------------------------------
+
+wxHelpProvider *wxHelpProvider::ms_helpProvider = (wxHelpProvider *)NULL;
+
+// trivial implementation of some methods which we don't want to make pure
+// virtual for convenience
+
+void wxHelpProvider::AddHelp(wxWindowBase * WXUNUSED(window),
+ const wxString& WXUNUSED(text))
+{
+}
+
+void wxHelpProvider::AddHelp(wxWindowID WXUNUSED(id),
+ const wxString& WXUNUSED(text))
+{
+}
+
+// removes the association
+void wxHelpProvider::RemoveHelp(wxWindowBase* WXUNUSED(window))
+{
+}
+
+wxHelpProvider::~wxHelpProvider()
+{
+}
+
+// ----------------------------------------------------------------------------
+// wxSimpleHelpProvider
+// ----------------------------------------------------------------------------
+
+#define WINHASH_KEY(w) wxPtrToUInt(w)
+
+wxString wxSimpleHelpProvider::GetHelp(const wxWindowBase *window)
+{
+ wxSimpleHelpProviderHashMap::iterator it = m_hashWindows.find(WINHASH_KEY(window));
+
+ if ( it == m_hashWindows.end() )
+ {
+ it = m_hashIds.find(window->GetId());
+ if ( it == m_hashIds.end() )
+ return wxEmptyString;
+ }
+
+ return it->second;
+}
+
+void wxSimpleHelpProvider::AddHelp(wxWindowBase *window, const wxString& text)
+{
+ m_hashWindows.erase(WINHASH_KEY(window));
+ m_hashWindows[WINHASH_KEY(window)] = text;
+}
+
+void wxSimpleHelpProvider::AddHelp(wxWindowID id, const wxString& text)
+{
+ wxSimpleHelpProviderHashMap::key_type key = (wxSimpleHelpProviderHashMap::key_type)id;
+ m_hashIds.erase(key);
+ m_hashIds[key] = text;
+}
+
+// removes the association
+void wxSimpleHelpProvider::RemoveHelp(wxWindowBase* window)
+{
+ m_hashWindows.erase(WINHASH_KEY(window));
+}
+
+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;
+
+ wxString text = GetHelp(window);
+ if ( !text.empty() )
+ {
+ s_tipWindow = new wxTipWindow((wxWindow *)window, text, 100, & s_tipWindow);
+
+ return true;
+ }
+#else
+ wxUnusedVar(window);
+#endif // wxUSE_TIPWINDOW
+
+ 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);
+
+ }