+
+// ----------------------------------------------------------------------------
+// classes used to implement context help support
+// ----------------------------------------------------------------------------
+
+// wxHelpProvider is an ABC used by the program implementing context help to
+// show the help text (or whatever: it may be HTML page or anything else) for
+// the given window.
+//
+// The current help provider must be explicitly set by the application using
+// wxHelpProvider::Set().
+class WXDLLEXPORT wxHelpProvider
+{
+public:
+    // get/set the current (application-global) help provider (Set() returns
+    // the previous one)
+    static wxHelpProvider *Set(wxHelpProvider *helpProvider)
+    {
+        wxHelpProvider *helpProviderOld = ms_helpProvider;
+        ms_helpProvider = helpProvider;
+        return helpProviderOld;
+    }
+
+    // unlike some other class, the help provider is not created on demand,
+    // this must be explicitly done by the application
+    static wxHelpProvider *Get() { return ms_helpProvider; }
+
+    // get the help string (whose interpretation is help provider dependent
+    // except that empty string always means that no help is associated with
+    // the window) for this window
+    virtual wxString GetHelp(const wxWindowBase *window) = 0;
+
+    // do show help for the given window (uses GetHelp() internally if
+    // applicable), return TRUE if it was done or FALSE if no help available
+    // for this window
+    virtual bool ShowHelp(wxWindowBase *window) = 0;
+
+    // associate the text with the given window or id: although all help
+    // providers have these functions to allow making wxWindow::SetHelpText()
+    // work, not all of them implement them
+    virtual void AddHelp(wxWindowBase *window, const wxString& text);
+
+    // this version associates the given text with all window with this id
+    // (may be used to set the same help string for all [Cancel] buttons in
+    // the application, for example)
+    virtual void AddHelp(wxWindowID id, const wxString& text);
+
+    // virtual dtor for any base class
+    virtual ~wxHelpProvider();
+
+private:
+    static wxHelpProvider *ms_helpProvider;
+};
+
+// wxSimpleHelpProvider is an implementation of wxHelpProvider which supports
+// only plain text help strings and shows the string associated with the
+// control (if any) in a tooltip
+class WXDLLEXPORT wxSimpleHelpProvider : public wxHelpProvider
+{
+public:
+    // implement wxHelpProvider methods
+    virtual wxString GetHelp(const wxWindowBase *window);
+    virtual bool ShowHelp(wxWindowBase *window);
+    virtual void AddHelp(wxWindowBase *window, const wxString& text);
+    virtual void AddHelp(wxWindowID id, const wxString& text);
+
+protected:
+    // we use 2 hashes for storing the help strings associated with windows
+    // and the ids
+    wxStringHashTable m_hashWindows,
+                     m_hashIds;
+};
+
+#endif // _WX_CSHELPH__
+