%% options copyright owner = Dirk Krause copyright year = 2013-xxxx license = bsd %% header /** Application class, derived from wxApp, one instance per program. */ class DkClockApp : public wxApp { protected: /** Helper object. */ DkWxAppHelper *pHelper; /** Controller fr online help. */ DkWxHelpController *helpController; protected: /** Show error message if there is 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. */ DECLARE_APP(DkClockApp) %% module #include "wxdkclock.h" $!trace-include /** Localized wxChar texts. */ static wxChar const * wxdkclock_texts[] = { $!string-table macro=wxT # # 0: Menu "File" # File # # 1: Menu item "File/Exit" # Exit # # 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: Check box in options dialog # Alert # # 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. # Options # # 14 15: Menu item: Options # Alert Enable/disable alert, set alert time # # 16: Dialog box title # Options # # 17 18: OK button # OK Apply settings and close dialog box. # # 19 20: Cancel button # Cancel Close dialog box and discard settings # # 21: Minute # Minute: # # 22: Hour # Hour: # # 23: Tool tip "Enable or disable alert" # Enable or disable alert # # 24 25: Tool tips Choose alert time. # Choose alert time (hour) Choose alert time (minute) # # 26 27: Task bar icon popup menu entries # Restore window Exit application # # 28 29 Menu item: Hide # Hide Hide main window # # 30 Menu: Colour # Colour # # 31 32 Menu item: Normal state # Normal Clock colour in normal state # # 33 34 Menu item: Alert state # Alert Clock colour in alert state $!end }; /** Non-localized wxChar texts. */ static wxChar const * wxdkclock_nl_wx[] = { $!string-table macro=wxT # # 0: Program name. # WxDkClock # # 1: Program version. # 3.0.6 # # 2: Copyright owner name. # Dirk Krause # # 3: Software vendor name. # DKrause # # 4: Resource name of Windows icon # aaaaa # # 5: Windows chm help file name # wxdkclock.chm # # 6: non-Windows htb help file name # wxdkclock.htb # # 7: Space # # # 8: Newline # \n # # 9 10 11 12 13 14 15: List of libraries used. # DK tools, wxWidgets, libpng, libjpeg, libtiff, zlib. http://dktools.sourceforge.net 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 * wxdkclock_nl_dk[] = { $!string-table macro=dkT # # 0: Program group name. # dktools # # 1: String table name. # wxdkclock.str $!end }; /** Implementation of the wxApp functionality. */ IMPLEMENT_APP(DkClockApp) bool DkClockApp::OnInit() { DkClockFrame *frame = NULL; wxChar const * const *localizedTexts = NULL; wxPNGHandler *phPng = NULL; wxXPMHandler *phXpm = NULL; wxICOHandler *phIco = NULL; wxZipFSHandler *phZipFs = NULL; bool back = false; #if USE_WXAPP_ONINIT if(wxApp::OnInit()) { #endif $!trace-init wxdkclock.deb $? "+ DkClockApp::OnInit" /* Initialize members. */ pHelper = NULL; helpController = NULL; /* Set up helper object. */ pHelper = new DkWxAppHelper( argv[0], wxdkclock_nl_wx[3], wxdkclock_nl_dk[0] ); if(!(pHelper)) { ShowMemoryErrorMessage(); goto finished; } if(!(pHelper->checkSetup())) { goto finished; } /* Add image and file system handlers for online help. */ phPng = new wxPNGHandler(); if (NULL != phPng) { wxImage::AddHandler(phPng); } 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; } phZipFs = new wxZipFSHandler(); if (NULL != phZipFs) { wxFileSystem::AddHandler(phZipFs); } else { ShowMemoryErrorMessage(); goto finished; } localizedTexts = pHelper->getStringTable( wxdkclock_texts, wxdkclock_nl_dk[1] ); if(!(localizedTexts)) { localizedTexts = wxdkclock_texts; } /* Set up online help controller. */ helpController = new DkWxHelpController( pHelper, wxdkclock_nl_wx[5], wxdkclock_nl_wx[6] ); if(!(helpController)) { ShowMemoryErrorMessage(); goto finished; } /* Create and show frame. */ frame = new DkClockFrame( DkClockFrame_MainWindow, pHelper, helpController, argc, argv, localizedTexts, wxdkclock_nl_wx, wxdkclock_nl_dk ); if(!(frame)) { ShowMemoryErrorMessage(); goto finished; } frame->Show(); frame->restorePosition(); back = true; /* Release resources if initialization failed. */ finished: if(!(back)) { if(helpController) { delete(helpController); helpController = NULL; } if(pHelper) { delete(pHelper); pHelper = NULL; } } $? "- DkClockApp::OnInit %d", ((back) ? 1 : 0) #if USE_WXAPP_ONINIT } #endif return back; } int DkClockApp::OnExit() { int back = 0; $? "+ DkClockApp::OnExit" /* Release resources. */ if(helpController) { delete(helpController); helpController = NULL; } if(pHelper) { delete(pHelper); pHelper = NULL; } $? "- DkClockApp::OnExit %d", back $!trace-end return back; } void DkClockApp::ShowMemoryErrorMessage(void) { const wxChar *s_title = NULL; const wxChar *s_text = NULL; if (NULL != pHelper) { s_title = pHelper->getBasicString(3); s_text = pHelper->getBasicString(9); } if (NULL == s_title) { s_title = wxdkclock_nl_wx[16]; } if (NULL == s_text) { s_text = wxdkclock_nl_wx[17]; } wxMessageBox(s_text, s_title, (wxOK | wxCENTRE | wxICON_ERROR)); }