%% options copyright owner = Dirk Krause copyright year = 2019-xxxx SPDX-License-Identifier: BSD-3-Clause %% header /** @file WximgszApp.h The WximgszApp class. */ /** Application class, derived from wxApp, one instance per program. */ class WximgszApp : public wxApp { protected: /** Helper object. */ Dk4WxApplicationHelper *pAh; /** Controller fr online help. */ Dk4WxHelpController *pHc; /* __CHANGE__ 009: Add further members here. */ protected: /** Show error message if there is not enough 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. */ DECLARE_APP(WximgszApp) /* vim: set ai sw=4 ts=4 : */ %% module #include "wximgsz.h" $!trace-include /** Localized wxChar texts. */ static wxChar const * wximgsz_texts[] = { $!string-table macro=wxT # # 0: Menu "File" # File # # 1: Menu item "File/Quit" # 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. # Input # # 14-15 Input label for width and height # Width: Height: # # 16-17 Tooltips for spin controls. # Enter original image width Enter original image height # # 18 Group label # Change # # 19-20 Label and tooltip to select operation # Operation: Select the intended operation # # 21-23 Operation choices # Downscale Width range Height range # # 24-27 Range input labels and tooltips # Minimum: Maximum: Enter range minimum Enter range maximum # # 28 Group label results # Results # # 29 Tip for run button # Run # # 30-33 Table heads # Width Height Factor # # 34-36 Quality markers # + ++ # # 37 Marker for fraction # / # # 38-39 Dialog box for restrictions # Too many results Too many output rows, output limited. # # 40-41 Text and tool tip for file open # Open Open bitmap image file and retrieve dimensions # # 42 Dialog title # Open image file # # 43-44 Error message box title and text. # Open image failed Failed to open image! # # 45-48 Error message box texts # No such file:\n" "! Insufficient permissions to file:\n" "! # # 49-50 Error: Not a supported file type # Not a supported file type:\n" "! $!end }; /** Non-localized wxChar texts. */ static wxChar const * wximgsz_nl_wx[] = { $!string-table macro=wxT # # 0: Program name. __CHANGE__ 004: Correct program name. # wximgsz # # 1: Program version. __CHANGE__ 005: Correct program version. # 1.0.0 # # 2: Copyright owner name. __CHANGE__ 001: Correct copyright owner name. # Dirk Krause # # 3: Software vendor name. __CHANGE__ 007: Correct software vendor name # if necessary. Must be one # string without spaces. # DKrause # # 4: Resource name of Windows icon # aaaaa # # 5: UNUSED (previously Windows chm help file name) # # # 6: UNUSED (previously non-Windows htb help file name) # # # 7: Space # # # 8: Newline # \n # # 9 10 11 12 13 14 15: List of libraries used. # DK tools, wxWidgets, libpng, libjpeg, libtiff, zlib. http://sourceforge.net/p/dktools/wiki/Home/ http://www.wxwidgets.org http://www.libpng.org/pub/png/libpng.html http://www.ijg.org http://www.remotesensing.org/libtiff http://www.zlib.net # # 16 17 # Error Not enough memory (RAM)! # # # $!end }; /** Non-localized dkChar texts. */ static dkChar const * wximgsz_nl_dk[] = { $!string-table macro=dkT # # 0: Program group name. __CHANGE__ 006: Correct program group name. # dktools # # 1: String table name. # wximgsz.str # # 2: CHM help file name # wximgsz.chm # # 3: HTB help file name # wximgsz.htb $!end }; /** Implementation of the wxApp functionality. */ IMPLEMENT_APP(WximgszApp) bool WximgszApp::OnInit() { WximgszFrame *frame = NULL; wxChar const * const *localizedTexts = NULL; #if !(wxCHECK_VERSION(3,0,0)) wxPNGHandler *phPng = NULL; wxJPEGHandler *phJpg = NULL; wxTIFFHandler *phTiff = NULL; wxPNMHandler *phPnm = NULL; wxXPMHandler *phXpm = NULL; wxICOHandler *phIco = NULL; wxGIFHandler *phGif = NULL; wxPCXHandler *phPcx = NULL; wxTGAHandler *phTga = NULL; wxIFFHandler *phIff = NULL; wxCURHandler *phCur = NULL; wxANIHandler *phAni = NULL; #endif wxArchiveFSHandler *phArchiveFS = NULL; bool back = false; $? "+ WximgszApp::OnInit" /* Initialize members. */ pAh = NULL; pHc = NULL; /* __CHANGE__ 009: Initialize further members here. */ /* Set up helper object. */ pAh = new Dk4WxApplicationHelper(); if (NULL == pAh) { ShowMemoryErrorMessage(); goto finished; } if (!(pAh->Initialize(argv[0], wximgsz_nl_wx[3], wximgsz_nl_dk[0]))) { goto finished; } #if wxCHECK_VERSION(3,0,0) wxInitAllImageHandlers(); #else /* Add image and file system handlers for online help. */ phPng = new wxPNGHandler(); if (NULL != phPng) { wxImage::AddHandler(phPng); } else { ShowMemoryErrorMessage(); goto finished; } phJpg = new wxJPEGHandler(); if (NULL != phJpg) { wxImage::AddHandler(phJpg); } else { ShowMemoryErrorMessage(); goto finished; } phTiff = new wxTIFFHandler(); if (NULL != phTiff) { wxImage::AddHandler(phTiff); } else { ShowMemoryErrorMessage(); goto finished; } phPnm = new wxPNMHandler(); if (NULL != phPnm) { wxImage::AddHandler(phPnm); } else { ShowMemoryErrorMessage(); goto finished; } phXpm = new wxXPMHandler(); if (NULL != phXpm) { wxImage::AddHandler(phXpm); } else { ShowMemoryErrorMessage(); goto finished; } phIco = new wxICOHandler(); if (NULL != phIco) { wxImage::AddHandler(phIco); } else { ShowMemoryErrorMessage(); goto finished; } phGif = new wxGIFHandler(); if (NULL != phGif) { wxImage::AddHandler(phGif); } else { ShowMemoryErrorMessage(); goto finished; } phPcx = new wxPCXHandler(); if (NULL != phPcx) { wxImage::AddHandler(phPcx); } else { ShowMemoryErrorMessage(); goto finished; } phTga = new wxTGAHandler(); if (NULL != phTga) { wxImage::AddHandler(phTga); } else { ShowMemoryErrorMessage(); goto finished; } phIff = new wxIFFHandler(); if (NULL != phIff) { wxImage::AddHandler(phIff); } else { ShowMemoryErrorMessage(); goto finished; } phCur = new wxCURHandler(); if (NULL != phCur) { wxImage::AddHandler(phCur); } else { ShowMemoryErrorMessage(); goto finished; } phAni = new wxANIHandler(); if (NULL != phAni) { wxImage::AddHandler(phAni); } else { ShowMemoryErrorMessage(); goto finished; } #endif phArchiveFS = new wxArchiveFSHandler(); if (NULL != phArchiveFS) { wxFileSystem::AddHandler(phArchiveFS); } else { ShowMemoryErrorMessage(); goto finished; } /* Set up help controller. */ pHc = new Dk4WxHelpController(); if (NULL == pHc) { ShowMemoryErrorMessage(); goto finished; } if (!(pHc->Initialize(pAh, wximgsz_nl_dk[2], wximgsz_nl_dk[3]))) { goto finished; } /* Attempt to obtain localized texts in users preferred language. */ localizedTexts = pAh->GetStringTable(wximgsz_nl_dk[1], wximgsz_texts); if(!(localizedTexts)) { localizedTexts = wximgsz_texts; } /* Create and show frame. */ frame = new WximgszFrame( WximgszFrame::ID_FRAME, pAh, pHc, argc, argv, localizedTexts, wximgsz_nl_wx, wximgsz_nl_dk ); if(!(frame)) { ShowMemoryErrorMessage(); goto finished; } /* Show frame, restore position and indicate success. */ frame->RestorePosition(); frame->Show(); frame->ActivateIdleProcessing(); back = true; /* Release resources if initialization failed. */ finished: if(!(back)) { if (NULL != pHc) { pHc->Cleanup(); delete(pHc); pHc = NULL; } if (NULL != pAh) { pAh->Cleanup(); delete(pAh); pAh = NULL; } } $? "- WximgszApp::OnInit %d", (back ? 1 : 0) return back; } int WximgszApp::OnExit() { int back = 0; $? "+ WximgszApp::OnExit" /* __CHANGE__ 009: 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; } /* __CHANGE__ 010: Set exit status code. */ $? "- WximgszApp::OnExit %d", back return back; } void WximgszApp::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 = wximgsz_nl_wx[16]; } if (NULL == s_text) { s_text = wximgsz_nl_wx[17]; } wxMessageBox(s_text, s_title, (wxOK | wxCENTRE | wxICON_ERROR)); } /* vim: set ai sw=4 ts=4 : */