%% options copyright owner = Dirk Krause copyright year = 2011-xxxx SPDX-License-Identifier: BSD-3-Clause %% header #include #include #include #ifdef __BORLANDC__ #pragma hdrstop #endif #ifndef WX_PRECOMP #include #endif #include #include #include #include #include /** Help controller covering both chm and htb help files. */ class DkWxHelpController { private: /** Application helper, used to find the help files. */ DkWxAppHelper *appHelper; /** Flag: Help file was found. */ bool bFileFound; #ifdef __WXMSW__ /** Use CHM help controller on Windows systems. */ wxCHMHelpController hc; #else /** Use HTML help controller on all other systems. */ wxHtmlHelpController hc; #endif public: /** Constructor. @param ah Application helper. @param chmName Short file name of chm file, without leading directory. @param htbName Short file name of htb file, without leading directory. */ DkWxHelpController( DkWxAppHelper *ah, wxChar const *chmName, wxChar const *htbName ); /** Open help system. @param wxf Parent frame. */ void openHelp(wxFrame *wxf); /** Open a help section specified by name. @param wxf Parent frame. @param name Section name. */ void openHelpSectionByName(wxFrame *wxf, wxString const & name); /** Open a help section specified by number. @param wxf Parent frame. @param number Section number (context ID). */ void openHelpSectionByNumber(wxFrame *wxf, int number); }; %% module #include "dk3all.h" #include "DkWxAppHelper.h" #include "DkWxHelpController.h" #include "dk3wxs.h" $!trace-include DkWxHelpController::DkWxHelpController( DkWxAppHelper *ah, #ifdef __WXMSW__ wxChar const *chmName, #else wxChar const * WXUNUSED(chmName), #endif #ifdef __WXMSW__ wxChar const * WXUNUSED(htbName) #else wxChar const *htbName #endif ) #ifdef __WXMSW__ #else : hc(wxHF_DEFAULT_STYLE | wxHF_MERGE_BOOKS) #endif { wxChar fnb[DK3_MAX_PATH]; appHelper = ah; bFileFound = false; $? "+ DkWxHelpController::DkWxHelpController" #ifdef __WXMSW__ $? ". Windows variant" if((appHelper) && (chmName)) { if(appHelper->findDataFile(chmName, fnb, DK3_SIZEOF(fnb,wxChar))) { hc.Initialize(fnb); bFileFound = true; } } #else wxArchiveFSHandler *zfsh = NULL; $? ". UNIX variant" if((ah) && (htbName)) { if(appHelper->findDataFile(htbName, fnb, DK3_SIZEOF(fnb,wxChar))) { zfsh = new wxArchiveFSHandler(); if(zfsh) { wxFileSystem::AddHandler(zfsh); /* CLANG STATIC ANALYSIS COMPLAINS ABOUT A POTENTIAL MEMORY LEAK, because zfsh is set using the new operator but there is no matching delete. The handler object is deleted from within wxFileSystem destructor, there is no memory leak. */ hc.AddBook(fnb); bFileFound = true; } } } #endif $? "- DkWxHelpController::DkWxHelpController" } void DkWxHelpController::openHelp(wxFrame *wxf) { wxChar const *titleString; wxChar const *msgString; $? "+ DkWxHelpController::openHelp" if(bFileFound) { hc.DisplayContents(); } else { if(appHelper) { titleString = appHelper->getBasicString(3); msgString = appHelper->getBasicString(10); wxMessageBox(msgString, titleString, wxOK, wxf); } } $? "- DkWxHelpController::openHelp" } void DkWxHelpController::openHelpSectionByName(wxFrame *wxf, wxString const & name) { wxChar const *titleString; wxChar const *msgString; $? "+ DkWxHelpController::openHelpSectionByName" if (bFileFound) { hc.DisplaySection(name); } else { if (appHelper) { titleString = appHelper->getBasicString(3); msgString = appHelper->getBasicString(10); wxMessageBox(msgString, titleString, wxOK, wxf); } } $? "- DkWxHelpController::openHelpSectionByName" } void DkWxHelpController::openHelpSectionByNumber(wxFrame *wxf, int number) { wxChar const *titleString; wxChar const *msgString; $? "+ DkWxHelpController::openHelpSectionByNumber" if (bFileFound) { hc.DisplaySection(number); } else { titleString = appHelper->getBasicString(3); msgString = appHelper->getBasicString(10); wxMessageBox(msgString, titleString, wxOK, wxf); } $? "- DkWxHelpController::openHelpSectionByNumber" }