%% options copyright owner = Dirk Krause copyright year = 2011-xxxx license = bsd %% 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, wxChar const *chmName, wxChar const *htbName ) #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 wxZipFSHandler *zfsh; $? ". UNIX variant" if((ah) && (htbName)) { if(appHelper->findDataFile(htbName, fnb, DK3_SIZEOF(fnb,wxChar))) { zfsh = new wxZipFSHandler(); if(zfsh) { wxFileSystem::AddHandler(zfsh); 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" }