%% options copyright owner = Dirk Krause copyright year = 2015-xxxx SPDX-License-Identifier: BSD-3-Clause %% header /** @file Dk4FcsApp.h The Dk4FcsApp class. */ /** Application class, derived from wxApp, one instance per program. */ class Dk4FcsApp : public wxApp { protected: /** Helper object. */ Dk4WxApplicationHelper *pAh; /** Controller fr online help. */ Dk4WxHelpController *pHc; protected: /** Show error message if not sufficient memory available. */ void ShowMemoryErrorMessage(void); public: /** Application initialization. @return true on success, false on error. */ virtual bool OnInit(); /** Application shutdown. @return 0 on success, any other value indicates an error. */ virtual int OnExit(); }; /** Declaration as the wxApp object. */ #if wxCHECK_VERSION(3,0,0) wxDECLARE_APP(Dk4FcsApp); #else DECLARE_APP(Dk4FcsApp) #endif %% module #include "dk4conf.h" #include "wxdkfcs.h" $!trace-include /** Localized wxChar texts. */ static wxChar const * wxdkfcs_texts[] = { $!string-table macro=wxT # # 0: Menu "File" # File # # 1: Menu item "File/Exit" # Quit # # 2: Tool tip text for menu item "File/Exit" # Exit the application # # 3: Menu "Help" # Help # # 4: Menu item "Help/About" # About # # 5: Tooltip text for menu item "Help/About" # Show version information # # 6: Menu item "Help/Contents" # Contents # # 7: Tooltip text for menu item "Help/Contents" # Open table of contents # # 8: Initial status text # Ready # # 9: Copyright notice. # Copyright (c) # # 10: Dialog box title "About ..." # About # # 11: This program uses the following libraries # This program uses the following libraries: # # 12: See # See: # # 13: __CHANGE__ 015: Text for dummy label, can be reused if lDummy removed. # File: # # 14 ... 20: Label MD5 # MD5 RIPEMD-160 SHA-1 SHA-224 SHA-256 SHA-384 SHA-512 # # 21: Column head # Checksum # # 22: wxFileDialog header line # Choose a file # # 23 24: Menu item File/Open # Open Open a file $!end }; /** Non-localized wxChar texts. */ static wxChar const * wxdkfcs_nl_wx[] = { $!string-table macro=wxT # # 0: Program name. # wxdkfcs # # 1: Program version. # 4.0.0 # # 2: Copyright owner name. # Dirk Krause # # 3: Software vendor name. # DKrause # # 4: Resource name of Windows icon # aaaaa # # 5: Empty string to reset table cells # # # 6: UNUSED (previously non-Windows htb help file name) # # # 7: Space # # # 8: Newline # \n # # 9 10 11 12 13 14 15 16: List of libraries used. # DK tools, wxWidgets, OpenSSL, libpng, libjpeg, libtiff, zlib. http://sourceforge.net/p/dktools/wiki/Home/ http://www.wxwidgets.org http://www.openssl.org http://www.libpng.org/pub/png/libpng.html http://www.ijg.org http://www.remotesensing.org/libtiff http://www.zlib.net # # 17 Default string for values. # FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF # # 18 - 22 OpenSSL license text. # This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/). This product includes cryptographic software written by Eric Young (eay@cryptsoft.com). This product includes software written by Tim Hudson (tjh@cryptsoft.com). # # 23 24 # Error Not enough memory (RAM)! $!end }; /** Non-localized dkChar texts. */ static dkChar const * wxdkfcs_nl_dk[] = { $!string-table macro=dkT # # 0: Program group name. # dktools # # 1: String table name. # wxdkfcs.str # # 2: CHM help file name # wxdkfcs.chm # # 3: HTB help file name # wxdkfcs.htb $!end }; /** Implementation of the wxApp functionality. */ #if wxCHECK_VERSION(3,0,0) wxIMPLEMENT_APP(Dk4FcsApp); #else IMPLEMENT_APP(Dk4FcsApp) #endif bool Dk4FcsApp::OnInit() { Dk4FcsFrame *frame = NULL; wxChar const * const *localizedTexts = NULL; wxPNGHandler *phPng = NULL; wxXPMHandler *phXpm = NULL; wxICOHandler *phIco = NULL; wxArchiveFSHandler *phArchiveFs = NULL; bool back = false; $? "+ OnInit" /* Initialize members. */ pAh = NULL; pHc = NULL; /* Initialize further members here. */ /* Set up helper object. */ pAh = new Dk4WxApplicationHelper(); if (NULL == pAh) { ShowMemoryErrorMessage(); goto finished; } if (!(pAh->Initialize(argv[0], wxdkfcs_nl_wx[3], wxdkfcs_nl_dk[0]))) { goto finished; } $? ". app helper ok" /* Add image and file system handlers for online help. */ phPng = new wxPNGHandler(); if (NULL != phPng) { wxImage::AddHandler(phPng); } else { ShowMemoryErrorMessage(); goto finished; } /* CLANG STATIC ANALYSIS COMPLAINS ABOUT A POTENTIAL MEMORY LEAK, because phPng is set using the new operator but there is no matching delete. The handler object is deleted from within wxImage destructor, there is no memory leak. */ phXpm = new wxXPMHandler(); if (NULL != phXpm) { wxImage::AddHandler(phXpm); } else { ShowMemoryErrorMessage(); goto finished; } /* CLANG STATIC ANALYSIS COMPLAINS ABOUT A POTENTIAL MEMORY LEAK, because phXpm is set using the new operator but there is no matching delete. The handler object is deleted from within wxImage destructor, there is no memory leak. */ phIco = new wxICOHandler(); if (NULL != phIco) { wxImage::AddHandler(phIco); } else { ShowMemoryErrorMessage(); goto finished; } /* CLANG STATIC ANALYSIS COMPLAINS ABOUT A POTENTIAL MEMORY LEAK, because phIco is set using the new operator but there is no matching delete. The handler object is deleted from within wxImage destructor, there is no memory leak. */ $? ". image handlers ok" phArchiveFs = new wxArchiveFSHandler(); if (NULL != phArchiveFs) { wxFileSystem::AddHandler(phArchiveFs); } else { ShowMemoryErrorMessage(); goto finished; } /* CLANG STATIC ANALYSIS COMPLAINS ABOUT A POTENTIAL MEMORY LEAK, because phArchiveFs 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. */ pHc = new Dk4WxHelpController(); if (NULL == pHc) { ShowMemoryErrorMessage(); goto finished; } if (!(pHc->Initialize(pAh, wxdkfcs_nl_dk[2], wxdkfcs_nl_dk[3]))) { goto finished; } $? ". help controller ok" localizedTexts = pAh->GetStringTable(wxdkfcs_nl_dk[1], wxdkfcs_texts); if(!(localizedTexts)) { localizedTexts = wxdkfcs_texts; } $? ". localized texts ok" /* Create and show frame. */ frame = new Dk4FcsFrame( Dk4FcsFrame_MainWindow, pAh, pHc, argc, argv, localizedTexts, wxdkfcs_nl_wx, wxdkfcs_nl_dk ); if(!(frame)) { ShowMemoryErrorMessage(); goto finished; } $? ". frame created" frame->RestorePosition(); frame->Show(); $? ". frame shown" back = true; /* Release resources if initialization failed. */ finished: if(!(back)) { $? "! errors, clean up" if (NULL != pHc) { pHc->Cleanup(); delete(pHc); pHc = NULL; } if (NULL != pAh) { pAh->Cleanup(); delete(pAh); pAh = NULL; } } $? "- OnInit %d", (int)back return back; } int Dk4FcsApp::OnExit() { int back = 0; /* Release resources allocated by further members. */ /* Release resources. */ if (NULL != pHc) { pHc->Cleanup(); delete(pHc); pHc = NULL; } if (NULL != pAh) { pAh->Cleanup(); delete(pAh); pAh = NULL; } /* Set back to exit status code. */ return back; } void Dk4FcsApp::ShowMemoryErrorMessage(void) { const wxChar *s_title = NULL; const wxChar *s_text = NULL; if (NULL != pAh) { s_title = pAh->GetBasicString(6); s_text = pAh->GetBasicString(7); } if (NULL == s_title) { s_title = wxdkfcs_nl_wx[23]; } if (NULL == s_text) { s_text = wxdkfcs_nl_wx[24]; } wxMessageBox(s_text, s_title, (wxOK | wxCENTRE | wxICON_ERROR)); }