1 /////////////////////////////////////////////////////////////////////////////
2 // Name:        src/msw/helpbest.cpp
3 // Purpose:     Tries to load MS HTML Help, falls back to wxHTML upon failure
4 // Author:      Mattia Barbon
5 // Modified by:
6 // Created:     02/04/2001
7 // RCS-ID:      $Id: helpbest.cpp 39398 2006-05-28 23:07:02Z VZ $
8 // Copyright:   (c) Mattia Barbon
9 // Licence:     wxWindows licence
10 /////////////////////////////////////////////////////////////////////////////
11 
12 // For compilers that support precompilation, includes "wx.h".
13 #include "wx/wxprec.h"
14 
15 #ifdef __BORLANDC__
16 #pragma hdrstop
17 #endif
18 
19 #ifndef WX_PRECOMP
20     #include "wx/log.h"
21 #endif
22 
23 #include "wx/filefn.h"
24 
25 #if wxUSE_HELP && wxUSE_MS_HTML_HELP \
26     && wxUSE_WXHTML_HELP && !defined(__WXUNIVERSAL__)
27 
28 #include "wx/msw/helpchm.h"
29 #include "wx/html/helpctrl.h"
30 #include "wx/msw/helpbest.h"
31 
IMPLEMENT_DYNAMIC_CLASS(wxBestHelpController,wxHelpControllerBase)32 IMPLEMENT_DYNAMIC_CLASS( wxBestHelpController, wxHelpControllerBase )
33 
34 bool wxBestHelpController::Initialize( const wxString& filename )
35 {
36     // try wxCHMHelpController
37     wxCHMHelpController* chm = new wxCHMHelpController(m_parentWindow);
38 
39     m_helpControllerType = wxUseChmHelp;
40     // do not warn upon failure
41     wxLogNull dontWarnOnFailure;
42 
43     if( chm->Initialize( GetValidFilename( filename ) ) )
44     {
45         m_helpController = chm;
46         m_parentWindow = NULL;
47         return true;
48     }
49 
50     // failed
51     delete chm;
52 
53     // try wxHtmlHelpController
54     wxHtmlHelpController *
55         html = new wxHtmlHelpController(m_style, m_parentWindow);
56 
57     m_helpControllerType = wxUseHtmlHelp;
58     if( html->Initialize( GetValidFilename( filename ) ) )
59     {
60         m_helpController = html;
61         m_parentWindow = NULL;
62         return true;
63     }
64 
65     // failed
66     delete html;
67 
68     return false;
69 }
70 
GetValidFilename(const wxString & filename) const71 wxString wxBestHelpController::GetValidFilename( const wxString& filename ) const
72 {
73     wxString tmp = filename;
74     ::wxStripExtension( tmp );
75 
76     switch( m_helpControllerType )
77     {
78         case wxUseChmHelp:
79             if( ::wxFileExists( tmp + wxT(".chm") ) )
80                 return tmp + wxT(".chm");
81 
82             return filename;
83 
84         case wxUseHtmlHelp:
85             if( ::wxFileExists( tmp + wxT(".htb") ) )
86                 return tmp + wxT(".htb");
87             if( ::wxFileExists( tmp + wxT(".zip") ) )
88                 return tmp + wxT(".zip");
89             if( ::wxFileExists( tmp + wxT(".hhp") ) )
90                 return tmp + wxT(".hhp");
91 
92             return filename;
93 
94         default:
95             // we CAN'T get here
96             wxFAIL_MSG( wxT("wxBestHelpController: Must call Initialize, first!") );
97     }
98 
99     return wxEmptyString;
100 }
101 
102 #endif
103     // wxUSE_HELP && wxUSE_MS_HTML_HELP && wxUSE_WXHTML_HELP
104