/* Copyright (C) 2015-2020, Dirk Krause SPDX-License-Identifier: BSD-3-Clause */ /* WARNING: This file was generated by the dkct program (see http://dktools.sourceforge.net/ for details). Changes you make here will be lost if dkct is run again! You should modify the original source and run dkct on it. Original source: Dk4WxHelpController.cpt */ /** @file Dk4WxHelpController.cpp The Dk4WxHelpController module. */ #line 170 "Dk4WxHelpController.cpt" #include "dk4conf.h" #include "dk4strd.h" #include "dk4strx.h" #include "dk4fs.h" #include "dk4mem.h" #include "dk4mpl.h" #include "Dk4WxHelpController.h" #line 182 "Dk4WxHelpController.cpt" /** Constant text fragments used by module. */ static const wxChar * const dk4wxhc_kw_def[] = { /* 0 */ wxT("Help file not found"), /* 1 */ wxT("The file containing online help text was not found on your computer!"), NULL #line 192 "Dk4WxHelpController.cpt" }; /** Pointer type, defined to calculate dk4wxhc_kw_def array size. */ typedef const wxChar *PTR_CWXC; /** Number of array elements in dk4wxhc_kw_def. */ static const size_t sz_dk4wxhc_kw_def = sizeof(dk4wxhc_kw_def) / sizeof(PTR_CWXC); Dk4WxHelpController::Dk4WxHelpController() #ifdef __WXMSW__ #else : oHelpController(wxHF_DEFAULT_STYLE | wxHF_MERGE_BOOKS) #endif { pAppHelp = NULL; pdksShortFileName = NULL; bLoaded = false; bFileFound = false; } Dk4WxHelpController::~Dk4WxHelpController() { dk4mem_release(pdksShortFileName); pAppHelp = NULL; bLoaded = false; bFileFound = false; } bool Dk4WxHelpController::Initialize( Dk4WxApplicationHelper *ahptr, #ifdef __WXMSW__ const dkChar *chmName, #else const dkChar * WXUNUSED(chmName), #endif #ifdef __WXMSW__ const dkChar * WXUNUSED(htbName) #else const dkChar *htbName #endif ) { const dkChar *fn = NULL; bool back = false; #ifdef __WXMSW__ fn = chmName; #else fn = htbName; #endif if ((NULL != ahptr) && (NULL != fn)) { pAppHelp = ahptr; bLoaded = false; bFileFound = false; pdksShortFileName = dk4str_dup(fn, NULL); if (NULL != pdksShortFileName) { back = true; } else { /* ERROR: Memory */ ShowErrorMessage(6, 7); } } else { /* ERROR: Illegal arguments to function */ ShowErrorMessage(6, 8); } return back; } void Dk4WxHelpController::Cleanup(void) { { wxCriticalSectionLocker lock(csProtect); dk4mem_release(pdksShortFileName); pAppHelp = NULL; bLoaded = false; bFileFound = false; } } void Dk4WxHelpController::AttemptToLoadFile(void) { wxChar fnb[DK4_MAX_PATH]; size_t szfnb = DK4_SIZEOF(fnb,wxChar); if (!bLoaded) { bLoaded = true; if ((NULL != pAppHelp) && (NULL != pdksShortFileName)) { if (pAppHelp->FindHelpFile(fnb, szfnb, pdksShortFileName)) { bFileFound = true; #ifdef __WXMSW__ oHelpController.Initialize(fnb); #else oHelpController.AddBook(fnb); #endif } } } } void Dk4WxHelpController::ShowErrorMessage(size_t i_title, size_t i_text) { const wxChar *strTitle = NULL; const wxChar *strText = NULL; { wxCriticalSectionLocker lock(csProtect); if (NULL != pAppHelp) { strTitle = pAppHelp->GetBasicString(i_title); strText = pAppHelp->GetBasicString(i_text); } } if (NULL == strTitle) { if (i_title < sz_dk4wxhc_kw_def) { strTitle = dk4wxhc_kw_def[i_title]; } } if (NULL == strText) { if (i_text < sz_dk4wxhc_kw_def) { strText = dk4wxhc_kw_def[i_text]; } } wxMessageBox(strText, strTitle, (wxOK | wxCENTRE | wxICON_ERROR)); } void Dk4WxHelpController::DisplayContents() { bool canOpenHelp = false; { wxCriticalSectionLocker lock(csProtect); AttemptToLoadFile(); if (bLoaded) { if (bFileFound) { canOpenHelp = true; } } } if (canOpenHelp) { oHelpController.DisplayContents(); } else { ShowErrorMessage(); } } void Dk4WxHelpController::DisplaySection(wxString const & name) { bool canOpenHelp = false; { wxCriticalSectionLocker lock(csProtect); AttemptToLoadFile(); if (bLoaded) { if (bFileFound) { canOpenHelp = true; } } } if (canOpenHelp) { oHelpController.DisplaySection(name); } else { ShowErrorMessage(); } } void Dk4WxHelpController::DisplaySection(int number) { bool canOpenHelp = false; { wxCriticalSectionLocker lock(csProtect); AttemptToLoadFile(); if (bLoaded) { if (bFileFound) { canOpenHelp = true; } } } if (canOpenHelp) { oHelpController.DisplaySection(number); } else { ShowErrorMessage(); } }