]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/cshelp.cpp
fix for assert when setting tooltip for a readonly combo
[wxWidgets.git] / src / common / cshelp.cpp
index c9a033d8a6e26e0fd290582b6cd09ec2c92e7364..805ada8bff46e7ac32296c4393dc8de53e731bbd 100644 (file)
 #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