%% options copyright owner = Dirk Krause copyright year = 2011-xxxx license = bsd %% header /** Application class for dkwxtrace. */ class DkWxTraceApp : public wxApp { protected: /** Helper object. */ DkWxAppHelper *pHelper; /** Help controller. */ DkWxHelpController *helpController; protected: /** Show error message if not sufficient memory available. */ void ShowMemoryErrorMessage(void); public: /** Initialize application. */ virtual bool OnInit(); /** Clean up after running. */ virtual int OnExit(); }; DECLARE_APP(DkWxTraceApp) %% module #include "dkwxtrace.h" $!trace-include /** Implementation of DkWxTraceApp. */ IMPLEMENT_APP(DkWxTraceApp) /** Default texts, replace by localized texts if available. */ wxChar const * const defaultTexts[] = { $!string-table macro=wxT # # 0: Program name # wxdkct # # 1: Application group name # dktools # # 2: Software vendor name # Dirk Krause # # 3: Menu: File # &File # # 4: Menu: Help # &Help # # 5: Menu: File / Exit # E&xit Alt-X # # 6: Menu: Help / About # &About... Alt-A # # 7: Tip text for menu entry File / Exit # Exit the program # # 8: Tip text for menu entry Help / About # Show version information # # 9: Menu Help / Contents # &Contents F1 # # 10: Menu tool tip: Show online help contents # Show online help contents # # 11: Label text: Directory # Directory: # # 12: Menu text: Choose Directory # &Directory Alt-D # # 13: Menu tool tip: Choose source directory # Choose source directory # # 14: Menu text: Setup # &Setup Alt-S # # 15: Menu tool tip: Set conversion options # Set conversion options # # 16 Label text: yes, to stdout # yes, to stdout # # 17: Toolbar button text: Directory # Directory # # 18: Toolbar button text: Options # Options # # 19: Toolbar button text: Run # Run # # 20: Toolbar button text: Exit # Exit # # 21: Toolbar button tooltip: Choose directory # Choose directory # # 22: Toolbar button tooltip: Set options. # Set options # # 23: Toolbar button tooltip: Run conversion # Run conversion # # 24: Toolbar button tooltip: Exit the application # Exit the application # # 25: Current directory. # . # # 26: Button text: OK # OK # # 27: Button text: Cancel # Cancel # # 28: Button tool tip for OK button. # Close dialog and apply settings # # 29: Button tool tip for cancel button. # Close dialog and discard settings # # 30: Dialog title: Options # Options # # 31: Checkbox label: Use make mode # Use make mode # # 32: Checkbox tool tip: Run conversions only if necessary. # Run conversions only if necessary. # # 33: Static box title: General options # General options # # 34: Static box title: Output # Output # # 35: Checkbox label: Line numbers # Line numbers # # 36: Static box title: Debug # Debug # # 37: Checkbox label: Create debug output # Create debug output # # 38: Checkbox label: Debug to standard output # Debug to standard output # # 39: Checkbox label: Include timestamp # Include timestamp # # 40: Checkbox label: Use trace keyword # Use "trace" keyword # # 41: Checkbox label: Wide character support # Wide-character support # # 42: Checkbox tool tip: Create line number directives # Create line number directives # # 43: Checkbox tool tip: Generate code for debug messages # Generate code for trace/debug messages # # 44: Checkbox tool tip: Write trace/debug messages to standard output # Write trace/debug messages to standard output # # 45: Checkbox tool tip: Include a timestamp into debug messages # Include a timestamp into trace/debug messages # # 46: Checkbox tool tip: Include "trace" keyword into debug messages # Include the "trace" keyword into debug messages # # 47: Checkbox tool tip: Add support for TRACE_WIDE # Add support for TRACE_WIDE (debug messages in wide characters) # # 48: Dialog title: Conversion progress # Conversion progress # # 49: File name (empty string) # # # 50: Button text: Cancel # Cancel # # 51: Button tool tip: Abort conversion after finishing current file # Abort conversion after finishing current file # # 52: Notification text: Cancel command scheduled... Wait, please! # Cancel command scheduled... Wait, please! # # 53: Directory dialog title: Choose directory # Choose directory # # 54: Message text: Directory: # Directory: # # 55: Message text: Destination files up to date. # Destination files up to date. # # 56: Message text: Processing succeeded. # Processing succeeded. # # 57: Message text:Processing failed! # Processing failed! # # 58: Error: Can not handle directory name! # ERROR: Can not handle directory name! # # 59/60: Error: Failed to open directory "..."! # ERROR: Failed to open directory " "! # # 61/62: Error: File name is not plain ASCII text: "..."! # ERROR: File name is not plain ASCII text: " "! # # 63: Error: Not enough memory! # ERROR: Not enough memory (RAM/swap space)! # # 64: Menu item: Run # &Run Alt-R # # 65: Menut tool tip: Start conversion # Start conversion # # 66: About dialog box title. # About wxdkct # # 67: Empty text (initial status text). # # # 68: Run result: Processing succeeded # Processing succeeded # # 69: Run result: Warnings occured # Warnings occured # # 70: Run result: Errors occured # Errors occured # # 71: ERROR: Automatic run cancelled due to errors. # Automatic run cancelled due to errors! # # 72: Autorun result: Processing succeeded, application will exit. # Processing succeeded, application will exit. # # 73: Newline # \n # # 74: This program uses libraries from the following projects: # This program uses libraries from the following projects:\n # # 75: See # See:\n # # 76-93: Special character candidates for splint. # @ ^ ° ! " § $ % & ? ~ \# | , ; . : _ # # 94-95: Comments for splint # Comments for splint Write comments for splint # # 96: Choose comment character for splint # Choose the comment character for splint # # 97 98 Check box: Portable debug code and tool tip # Portable debug code Produce portable code for trace messages $!end }; /** Constant texts, not localized. */ static wxChar const * const wxdkct_nl_wx[] = { $!string-table macro=wxT Error Not enough memory (RAM)! $!end }; /** Application group name. */ static dkChar const dkwxtraceapp_groupname[] = { dkT("dktools") }; /** String table file name. */ static dkChar const dkwxtrace_string_table_name[] = { dkT("wxdkct.str") }; /** Help file for use on Windows systems. */ static wxChar const dkwxtrace_chm_helpfile[] = { wxT("wxdkct.chm") }; /** Help file for use on non-Windows systems. */ static wxChar const dkwxtrace_htb_helpfile[] = { wxT("wxdkct.htb") }; bool DkWxTraceApp::OnInit() { bool back = false; wxChar const * const *localizedTexts = defaultTexts; dkChar const * const *msg = NULL; DkWxTraceFrame *frame = NULL; wxPNGHandler *phPng = NULL; wxXPMHandler *phXpm = NULL; wxICOHandler *phIco = NULL; wxZipFSHandler *phZipFs = NULL; /* Initialize elements. */ pHelper = NULL; helpController = NULL; /* Create application helper. */ pHelper = new DkWxAppHelper(argv[0], defaultTexts[2], dkwxtraceapp_groupname); if (NULL == pHelper) { ShowMemoryErrorMessage(); goto finished; } if (!(pHelper->checkSetup())) { goto finished; } /* Get message texts. */ msg = dk3app_messages( pHelper->getApp(), dkct_str_get_string_table_file_name(), (dkChar const **)dkct_str_get_message_texts() ); if (NULL == msg) { ShowMemoryErrorMessage(); goto finished; } localizedTexts = pHelper->getStringTable(defaultTexts, dkwxtrace_string_table_name); if (NULL == localizedTexts) { ShowMemoryErrorMessage(); goto finished; } /* Initialize image handlers and zip fs handler. */ 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; } /* Get help controller. */ helpController = new DkWxHelpController(pHelper,dkwxtrace_chm_helpfile,dkwxtrace_htb_helpfile); if (NULL == helpController) { ShowMemoryErrorMessage(); goto finished; } /* Create main frame. */ frame = new DkWxTraceFrame( defaultTexts[0], localizedTexts, msg, pHelper, DkWxTrace_MainWindow, helpController, argc, argv ); if (NULL == frame) { ShowMemoryErrorMessage(); goto finished; } /* Show frame and indicate success. */ frame->Show(); frame->restorePosition(); back = true; /* Clean up on errors. */ finished: if (!(back)) { if (NULL != helpController) { delete(helpController); helpController = NULL; } if (NULL != pHelper) { delete(pHelper); pHelper = NULL; } } return back; } int DkWxTraceApp::OnExit() { int back = 0; /* Release elements. */ if(helpController) { delete(helpController); helpController = NULL; } if(pHelper) { delete(pHelper); pHelper = NULL; } return back; } void DkWxTraceApp::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 = wxdkct_nl_wx[0]; } if (NULL == s_text) { s_text = wxdkct_nl_wx[1]; } wxMessageBox(s_text, s_title, (wxOK | wxCENTRE | wxICON_ERROR)); }