]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/helpchm.cpp
Swap client data pointers in wxRearrangeList too.
[wxWidgets.git] / src / msw / helpchm.cpp
index 1114decbd047940c743a1a8f769d9aead4616810..cdb46e21af4f1c7f97d7439eaa40f2ec8673ad08 100644 (file)
@@ -2,7 +2,7 @@
 // Name:        src/msw/helpchm.cpp
 // Purpose:     Help system: MS HTML Help implementation
 // Author:      Julian Smart
-// Modified by:
+// Modified by: Vadim Zeitlin at 2008-03-01: refactoring, simplification
 // Created:     16/04/2000
 // RCS-ID:      $Id$
 // Copyright:   (c) Julian Smart
@@ -18,7 +18,7 @@
 
 #if wxUSE_HELP && wxUSE_MS_HTML_HELP
 
-#include "wx/filefn.h"
+#include "wx/filename.h"
 #include "wx/msw/helpchm.h"
 
 #include "wx/dynload.h"
@@ -50,7 +50,7 @@ HTMLHELP GetHtmlHelpFunction()
 
     if ( !s_htmlHelp )
     {
-        static wxDynamicLibrary s_dllHtmlHelp(_T("HHCTRL.OCX"), wxDL_VERBATIM);
+        static wxDynamicLibrary s_dllHtmlHelp(wxT("HHCTRL.OCX"), wxDL_VERBATIM);
 
         if ( !s_dllHtmlHelp.IsLoaded() )
         {
@@ -79,18 +79,6 @@ static HWND GetSuitableHWND(wxWindow *win)
     return win ? GetHwndOf(win) : ::GetDesktopWindow();
 }
 
-// wrap the real HtmlHelp() but just return false (and not crash) if it
-// couldn't be loaded
-//
-// it also takes a wxWindow instead of HWND
-static bool
-CallHtmlHelpFunction(wxWindow *win, const wxChar *str, UINT uint, DWORD dword)
-{
-    HTMLHELP htmlHelp = GetHtmlHelpFunction();
-
-    return htmlHelp &&
-           htmlHelp(GetSuitableHWND(win), str, uint, dword);
-}
 
 IMPLEMENT_DYNAMIC_CLASS(wxCHMHelpController, wxHelpControllerBase)
 
@@ -110,15 +98,23 @@ bool wxCHMHelpController::LoadFile(const wxString& file)
     return true;
 }
 
+/* static */ bool
+wxCHMHelpController::CallHtmlHelp(wxWindow *win,
+                                  const wxChar *str,
+                                  unsigned cmd,
+                                  WXWPARAM param)
+{
+    HTMLHELP htmlHelp = GetHtmlHelpFunction();
+
+    return htmlHelp && htmlHelp(GetSuitableHWND(win), str, cmd, param);
+}
+
 bool wxCHMHelpController::DisplayContents()
 {
     if (m_helpFile.IsEmpty())
         return false;
 
-    wxString str = GetValidFilename(m_helpFile);
-
-    return CallHtmlHelpFunction(GetParentWindow(),
-                                str.wx_str(), HH_DISPLAY_TOPIC, 0L);
+    return CallHtmlHelp(HH_DISPLAY_TOPIC);
 }
 
 // Use topic or HTML filename
@@ -127,15 +123,11 @@ bool wxCHMHelpController::DisplaySection(const wxString& section)
     if (m_helpFile.IsEmpty())
         return false;
 
-    wxString str = GetValidFilename(m_helpFile);
-
     // Is this an HTML file or a keyword?
     if ( section.Find(wxT(".htm")) != wxNOT_FOUND )
     {
         // interpret as a file name
-        return CallHtmlHelpFunction(GetParentWindow(),
-                                    str.wx_str(), HH_DISPLAY_TOPIC,
-                                    wxPtrToUInt(section.c_str()));
+        return CallHtmlHelp(HH_DISPLAY_TOPIC, section.wx_str());
     }
 
     return KeywordSearch(section);
@@ -147,36 +139,38 @@ bool wxCHMHelpController::DisplaySection(int section)
     if (m_helpFile.IsEmpty())
         return false;
 
-    wxString str = GetValidFilename(m_helpFile);
-
-    return CallHtmlHelpFunction(GetParentWindow(),
-                                str.wx_str(), HH_HELP_CONTEXT, (DWORD)section);
+    return CallHtmlHelp(HH_HELP_CONTEXT, section);
 }
 
-bool wxCHMHelpController::DisplayContextPopup(int contextId)
+/* static */
+bool
+wxCHMHelpController::DoDisplayTextPopup(const wxChar *text,
+                                        const wxPoint& pos,
+                                        int contextId,
+                                        wxWindow *window)
 {
-    if (m_helpFile.IsEmpty()) return false;
-
-    wxString str = GetValidFilename(m_helpFile);
-
-    // We also have to specify the popups file (default is cshelp.txt).
-    // str += wxT("::/cshelp.txt");
-
     HH_POPUP popup;
     popup.cbStruct = sizeof(popup);
     popup.hinst = (HINSTANCE) wxGetInstance();
-    popup.idString = contextId ;
-
-    GetCursorPos(& popup.pt);
-    popup.clrForeground = (COLORREF)-1;
-    popup.clrBackground = (COLORREF)-1;
-    popup.rcMargins.top = popup.rcMargins.left = popup.rcMargins.right = popup.rcMargins.bottom = -1;
+    popup.idString = contextId;
+    popup.pszText = text;
+    popup.pt.x = pos.x;
+    popup.pt.y = pos.y;
+    popup.clrForeground = ::GetSysColor(COLOR_INFOTEXT);
+    popup.clrBackground = ::GetSysColor(COLOR_INFOBK);
+    popup.rcMargins.top =
+    popup.rcMargins.left =
+    popup.rcMargins.right =
+    popup.rcMargins.bottom = -1;
     popup.pszFont = NULL;
-    popup.pszText = NULL;
 
-    return CallHtmlHelpFunction(GetParentWindow(),
-                                str.wx_str(), HH_DISPLAY_TEXT_POPUP,
-                                wxPtrToUInt(&popup));
+    return CallHtmlHelp(window, NULL, HH_DISPLAY_TEXT_POPUP, &popup);
+}
+
+bool wxCHMHelpController::DisplayContextPopup(int contextId)
+{
+    return DoDisplayTextPopup(NULL, wxGetMousePosition(), contextId,
+                              GetParentWindow());
 }
 
 bool
@@ -190,19 +184,7 @@ bool wxCHMHelpController::ShowContextHelpPopup(const wxString& text,
                                                const wxPoint& pos,
                                                wxWindow *window)
 {
-    HH_POPUP popup;
-    popup.cbStruct = sizeof(popup);
-    popup.hinst = (HINSTANCE) wxGetInstance();
-    popup.idString = 0 ;
-    popup.pt.x = pos.x; popup.pt.y = pos.y;
-    popup.clrForeground = (COLORREF)-1;
-    popup.clrBackground = (COLORREF)-1;
-    popup.rcMargins.top = popup.rcMargins.left = popup.rcMargins.right = popup.rcMargins.bottom = -1;
-    popup.pszFont = NULL;
-    popup.pszText = text.wx_str();
-
-    return CallHtmlHelpFunction(window, NULL, HH_DISPLAY_TEXT_POPUP,
-                                wxPtrToUInt(&popup));
+    return DoDisplayTextPopup(text.wx_str(), pos, 0, window);
 }
 
 bool wxCHMHelpController::DisplayBlock(long block)
@@ -216,33 +198,28 @@ bool wxCHMHelpController::KeywordSearch(const wxString& k,
     if (m_helpFile.IsEmpty())
         return false;
 
-    wxString str = GetValidFilename(m_helpFile);
-
     HH_AKLINK link;
-    link.cbStruct =     sizeof(HH_AKLINK) ;
-    link.fReserved =    FALSE ;
-    link.pszKeywords =  k.c_str() ;
-    link.pszUrl =       NULL ;
-    link.pszMsgText =   NULL ;
-    link.pszMsgTitle =  NULL ;
-    link.pszWindow =    NULL ;
-    link.fIndexOnFail = TRUE ;
-
-    return CallHtmlHelpFunction(GetParentWindow(),
-                                str.wx_str(), HH_KEYWORD_LOOKUP,
-                                wxPtrToUInt(&link));
+    link.cbStruct =     sizeof(HH_AKLINK);
+    link.fReserved =    FALSE;
+    link.pszKeywords =  k.wx_str();
+    link.pszUrl =       NULL;
+    link.pszMsgText =   NULL;
+    link.pszMsgTitle =  NULL;
+    link.pszWindow =    NULL;
+    link.fIndexOnFail = TRUE;
+
+    return CallHtmlHelp(HH_KEYWORD_LOOKUP, &link);
 }
 
 bool wxCHMHelpController::Quit()
 {
-    return CallHtmlHelpFunction(GetParentWindow(), NULL, HH_CLOSE_ALL, 0L);
+    return CallHtmlHelp(NULL, NULL, HH_CLOSE_ALL);
 }
 
-// Append extension if necessary.
-wxString wxCHMHelpController::GetValidFilename(const wxString& file) const
+wxString wxCHMHelpController::GetValidFilename() const
 {
     wxString path, name, ext;
-    wxSplitPath(file, & path, & name, & ext);
+    wxFileName::SplitPath(m_helpFile, &path, &name, &ext);
 
     wxString fullName;
     if (path.IsEmpty())