%% options copyright owner = Dirk Krause copyright year = 2012-xxxx license = bsd %% header /** Application class for the wximgsz program. */ class DkWxImgszApp : public wxApp { protected: /** Application helper. */ DkWxAppHelper *pHelper; /** Controller for online-help. */ DkWxHelpController *pHelpController; protected: /** Show error message if there is not sufficient memory available. */ void ShowMemoryErrorMessage(void); public: /** Initialize application. @return True on success (can run), false on error (abort). */ virtual bool OnInit(); /** Clean up after running. @return Exit status code. */ virtual int OnExit(); }; DECLARE_APP(DkWxImgszApp) %% module #include "wximgsz.h" $!trace-include IMPLEMENT_APP(DkWxImgszApp) /** Application group name. */ static dkChar const wximgsz_group_name[] = { dkT("dktools") }; /** File name for string table. */ static dkChar const wximgsz_string_table_name[] = { dkT("wximgsz.str") }; /** Help file name on Windows. */ static wxChar const wximgsz_chm_helpfile[] = { wxT("wximgsz.chm") }; /** Help file name for other platforms. */ static wxChar const wximgsz_htb_helpfile[] = { wxT("wximgsz.htb") }; /** Default texts to use if no localized texts are found. */ static wxChar const * const wximgsz_default_texts[] = { $!string-table macro=wxT # # 0 Program name. # wximgsz # # 1 Menu name: File # File # # 2 Menu item: File => Exit # Exit # # 3 Data grid column head: Width # Width # # 4 Data grid column head: Height # Height # # 5 Data grid column head: Factor # Factor # # 6 Label text: Original image # Original image # # 7 Label text: Results # Results # # 8 Label text: Width: # Width: # # 9 Label text: Height: # Height: # # 10 Label text: Intended change # Intended change # # 11 Label text: Action: # Action: # # 12 Choice: Decrease image # Decrease image # # 13 Choice: Width range # Width range # # 14 Choice: Height range # Height range # # 15 Label: Minimum: # Minimum: # # 16 Label: Maximum: # Maximum: # # 17 Button label: Run # >>> # # 18 Empty text for initial status # # # 19 Tooltip: Exit the application # Exit the application # # 20 Tooltip: Specify original image width # Enter original image width (positive integer number). # # 21 Tooltip: Specify original image height # Enter original image height (positive integer number). # # 22 Tooltip: Choose type of modification # Choose modification action. # # 23 Tooltip: Specify intended minimum for image width or height # Inter intended minimum for image width or height (positive integer number). # # 24 Tooltip: Specify intended maximum for image width or height # Enter intended maximum for image width or height (positive integer number). # # 25 Tooltip: Calculate new image sizes # Calculate new image sizes. # # 26 Spaces to initialize text fields # # # 27 Menu: Help # Help # # 28 Menu item: Contents # Contents # # 29 Menu item: About # About... # # 30 Menu tip: Open table of contents # Open table of contents # # 31 Menu tip: Show version number dialog box # Show version number dialog box # # 32 Error message title: Incorrect input # Incorrect input # # 33 Error message text: Please enter a postivie integer number. # Please enter a positive integer number. # # 34 Status message: No results found! # No results found! # # 35 # About wximgsz # # 36 Indicator for best quality # ++ # # 37 Indicator for good quality # + # # 38 Menu: Extras # Extras # # 39 Menu item: Options # Options # # 40 Tip: Set options # Set options # # 41 Dialog box title: Options # Options # # 42 Checkbox text: Choose background color by scale factor quality # Background colour for scale factor # # 43 Tooltip text: Indicate scale factor quality by background colour. # Indicate scale factor quality by background colour (otherwise in extra column). # # 44 Button: OK # OK # # 45 Button: Cancel # Cancel # # 46 Tool tip text: Apply settings and exit dialog. # Apply settings and exit dialog. # # 47 Tool tip text: Skip settings and exit dialog. # Skip settings and exit dialog. # # 48 # Choose input bitmap image to open # # 49 # Open Alt-O # # 50 # Retrieve dimensions from bitmap image file. # # 51 # Failed to load image file!\nFile probably damaged or not a supported image type. # # 52 # Failed to load image! # # 53 # \n # # 54 # This program uses libraries from the following projects:\n # # 55 # See:\n $!end }; /** Constant texts, not localized. */ static wxChar const * const wximgsz_nl_wx[] = { $!string-table macro=wxT Error Not enough memory (RAM)! $!end }; bool DkWxImgszApp::OnInit() { wxChar const * const *lt = NULL; /* Localized texts. */ DkWxImgszFrame *frame = NULL; wxZipFSHandler *phZipFs = NULL; bool back = false; $!trace-init wximgsz.deb /* Initialize elements. */ pHelper = NULL; pHelpController = NULL; /* Get elements. */ pHelper = new DkWxAppHelper(argv[0], wximgsz_default_texts[0], wximgsz_group_name); if (NULL == pHelper) { ShowMemoryErrorMessage(); goto finished; } if (!(pHelper->checkSetup())) { goto finished; } lt = pHelper->getStringTable(wximgsz_default_texts, wximgsz_string_table_name); if (NULL == lt) { ShowMemoryErrorMessage(); goto finished; } /* Add image and zip fs handler. */ wxInitAllImageHandlers(); phZipFs = new wxZipFSHandler(); if (NULL != phZipFs) { wxFileSystem::AddHandler(phZipFs); } else { ShowMemoryErrorMessage(); goto finished; } /* Get help controller */ pHelpController = new DkWxHelpController(pHelper, wximgsz_chm_helpfile, wximgsz_htb_helpfile); if (NULL == pHelpController) { ShowMemoryErrorMessage(); goto finished; } /* Create frame. */ frame = new DkWxImgszFrame( wximgsz_default_texts[0], lt, pHelper, pHelpController, DkWxImgsz_MainWindow, argc, argv ); if (NULL == frame) { ShowMemoryErrorMessage(); goto finished; } /* Show frame and indicate success. */ frame->Show(); frame->restorePosition(); back = true; finished: if (!(back)) { if (NULL != pHelpController) { delete(pHelpController); pHelpController = NULL; } if (NULL != pHelper) { delete(pHelper); pHelper = NULL; } } return back; } int DkWxImgszApp::OnExit() { int back = 0; if(pHelpController) { delete(pHelpController); pHelpController = NULL; } if(pHelper) { delete(pHelper); pHelper = NULL; } $!trace-end return back; } void DkWxImgszApp::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 = wximgsz_nl_wx[0]; } if (NULL == s_text) { s_text = wximgsz_nl_wx[1]; } wxMessageBox(s_text, s_title, (wxOK | wxCENTRE | wxICON_ERROR)); }