%% options copyright owner = Dirk Krause copyright year = 2011-xxxx SPDX-License-Identifier: BSD-3-Clause %% header /** Application class for wxbmeps. */ class DkWxBmepsApp : public wxApp { protected: /** Helper object. */ DkWxAppHelper *pHelper; /** Help controller. */ DkWxHelpController *helpController; protected: /** Show error message if there is not sufficient memory available. */ void ShowMemoryErrorMessage(void); public: /** Initialize application. */ virtual bool OnInit(); /** Clean up after running. */ virtual int OnExit(); }; #if wxCHECK_VERSION(3,0,0) wxDECLARE_APP(DkWxBmepsApp); #else DECLARE_APP(DkWxBmepsApp) #endif %% module #include "dk3conf.h" #include "wxbmeps.h" $!trace-include /** Implementation of DkWxBmepsApp. */ #if wxCHECK_VERSION(3,0,0) wxIMPLEMENT_APP(DkWxBmepsApp); #else IMPLEMENT_APP(DkWxBmepsApp) #endif /** Default texts, replaced by localized versions. */ wxChar const * const defaultTexts[] = { $!string-table macro=wxT # # 0: Program name # wxbmpp # # 1: Application group name # dktools # # 2: Software vendor name # Dirk Krause # # 3: Empty text. # # # 4: Toolbar button text: Directory # Directory # # 5: Toolbar button tip text: Choose the directory to process. # Choose the directory to process # # 6: Toolbar button text: Options # Options # # 7: Toolbar button tip text: Set conversion options. # Set conversion options # # 8: Toolbar button text: Run # Run # # 9: Toolbar button tip text: Run conversion # Run conversion # # 10: Toolbar button text: Exit # Exit # # 11: Toolbar button tip text: Exit the application # Exit the application # # 12: Menu text: File # &File # # 13: Menu text: Help # &Help # # 14: Menu item text: Directory # &Directory... Alt-D # # 15: Menu item tip text: Choose directory # Choose directory # # 16: Menu item text: Options # &Options Alt-O # # 17: Menu item tip text: Set conversion options # Conversion options # # 18: Menu item text: Run # &Run Alt-R # # 19: Menu item tip text: Run conversion # Run conversion # # 20: Menu item text: Exit # E&xit Alt-X # # 21: Menu item tip text: Exit the application # Exit the application # # 22: Menu item: Contents # &Contents F1 # # 23: Menu item tip text: Show table of contents # Show table of contents # # 24: Menu item text: About # &About Alt-A # # 25: Menu item tip text: Show version number # Show version number # # 26: Label text: Directory: # Directory: # # 27: Empty string to indicate no directory name available # # # 28: Empty string for initial status text # # # 29: Directory dialog title: Choose directory # Choose Directory # # 30: Autorun result: Processing succeeded, application will exit. # Processing succeeded, application will exit. # # 31: ERROR: Automatic run canceled due to errors. # Automatic run canceled due to errors! # # 32: Progress dialog title: Conversion progress # Conversion progress # # 33: Progress dialog button title: Cancel # Cancel # # 34: Progress dialog button tool tip: Abort after current file # Abort conversion after finishing current file # # 35: Notification text: Cancel command scheduled... wait, please! # Cancel command scheduled... wait, please! # # 36: Options dialog box title # Conversion Options # # 37: Options dialog box paragraph: General # General # # 38: Checkbox: Make mode # Make mode # # 39: Tool tip for checkbox make mode # Run conversion only if destination file is not up to date. # # 40: Dialog box paragraph: Output # Output # # 41: Label output format # Output format: # # 42: Output format PS # PS # # 43: Output format EPS # EPS # # 44: Output format PDF # PDF # # 45: Output format: Bounding box # Bounding Box # # 46: Label output type # Output mode: # # 47: Output mode image # Image # # 48: Output mode object # Object # # 49: Output mode document # Document # # 50: Label finishing # Finishing: # # 51: Finishing Single-side # Single-side # # 52: Finishing duplex, no tumble # Duplex (book) # # 53: Finishing duplex and tumble # Duplex (calendar) # # 54: Checkbox draft mode # Draft mode # # 55: Tool tip text for draft checkbox # Create placeholder image only # # 56: Checkbox color # Color # # 57: Tool tip text for checkbox color # Enable colored output # # 58: Paragraph output size # Output size # # 59: label resolution # Resolution: # # 60: Resolution 1 pixel = 1 point # 1px=1pt # # 61: Resolution as specified in input file # input file # # 62: Resolution as specified # as specified: # # 63: Label paper size # Paper size: # # 64: Paragraph image quality # Image quality # # 65: Checkbox image interpolation # Image interpolation # # 66: Tool tip text for checkbox image interpolation # Enable image interpolation # # 67: Checkbox image interpolation for JPEG # Image interpolation for JPEG files # # 68: Tool tip text for checkbox image interpolation for JPEG files # Enable image interpolation for JPEG files too # # 69: Paragraph transparency # Transparency # # 70: Label background color # Background color: # # 71: Checkbox Force background color # Force background color # # 72: Tool tip text for checkbox force background # Always use the specified background color, ignore background color chunks # # 73: Paragraph output format details # Output format details # # 74: Label PS level # PS level: # # 75: Label predictor # Predictor: # # 76: Predictor none # None # # 77: Predictor tiff # TIFF # # 78: Predictor sub # PNG-SUB # # 79: Predictor up # PNG-UP # # 80: Predictor average # PNG-AVERAGE # # 81: Predictor paeth # PNG-PAETH # # 82: Checkbox DSC # DSC # # 83: Tool tip text for checkbox dsc # Write DSC comments to PS output # # 84: Button text OK # OK # # 85: Tool tip for OK button # Confirm settings, leave this dialog box # # 86: Button Cancel # Cancel # # 87: Tool tip for cancel button # Discard settings, leave this dialog box # # 88: Tool tip for color viewer. # Click to change the default background color # # 89: Check box: Use DCT compressed data from JPEGs directly # Re-use JPEG DCT data # # 90: Tool tip text: Allow direct re-usse of DCT compressed data from JPEGs # Allow direct re-use of DCT compressed data from JPEG files instead of decoding and re-encoding it # # 91: Tool tip: Choose output format # Choose an output format: PS / EPS / PDF or Bounding Box # # 92: Tool tip: Choose output type # Choose an output type: Image for standalone viewing / Object for use with LaTeX / Document for print jobs or multipage images # # 93: Tool tip: Choose finishing # Choose finishing: Single-sided / Duplex like a book / Duplex like a calendar # # 94: Tool tip: Choose resolution handling # Choose resolution handling: 1 pixel = 1 PS point / Specify a resolution / Fit image to a paper size # # 95: Tool tip: Choose a paper size # Choose a paper size. Difference between A4 and a4: A4 uses the entire page without leaving a border, a4 leaves some border unused # # 96: Tool tip: Choose a PS level # Choose a PS level (2 or 3) # # 97: Tool tip: Choose a predictor for flate compression # Choose a predictor for flate compression # # 98: Tool tip: Specify a resolution in dpi # Specify the resolution in dpi # # 99: Menu item: Setup... # Setup... Alt-S # # 100: Tool tip for menu item Setup # Set conversion options # # 101: Menu item: Reset options # Reset... Alt-R # # 102: Tool tip for menu item Reset options # Reset conversion options to default values # # 103: Question: Do you really want to reset all options to default values? # Do you really want to reset all conversion options to default values? # # 104: Message box title: Reset all conversion options to default values # Are you sure? # # 105: Error: Not enough memory! # Not enough memory! # # 106/107: Message: Processing directory "..." (start). # Processing directory " " (start). # # 108/109: Message: Processing directory "..." (finished). # Processing directory " " (finished). # # 110: Newline # \n # # 111/112: Error: File name too long! # File name too long:\n" "! # # 113: Error: No file found to convert # No conversion candidate files found! # # 114/115: Message: Processing file "..." (start). # Processing file " ". # # 116/117: Message: Processing file "..." (finished). # Processing file " " (finished). # # 118/119: Error: File name "..." contains unconvertable characters! # File name " " contains unconvertable characters! # # 120: Checkbox: Reduce bits per components # Reduce bits per components # # 121: Tool tip text: Reduce bits per component if possible # Reduce bits per components if possible # # 122: About dialog box title # About wxbmpp # # 123: This program uses libraries from the following projects: # This program uses libraries from the following projects:\n # # 124: See # See: $!end }; /** Constant texts, not localized. */ static wxChar const * const wxbmpp_nl_wx[] = { $!string-table macro=wxT Error Not enough memory (RAM)! $!end }; /** Application group name. */ static dkChar const dkwxbmepsapp_groupname[] = { dkT("dktools") }; /** Name for string table file to load. */ static dkChar const dkwxbmeps_string_table_name[] = { dkT("wxbmpp.str") }; /** Help file to be used on Windows systems. */ static wxChar const dkwxbmeps_chm_helpfile[] = { wxT("wxbmpp.chm") }; /** Help file to be used on non-Windows systems. */ static wxChar const dkwxbmeps_htb_helpfile[] = { wxT("wxbmpp.htb") }; bool DkWxBmepsApp::OnInit() { bool back = false; wxChar const * const *localizedTexts = defaultTexts; dkChar const * const *msg = NULL; DkWxBmepsFrame *frame = NULL; wxPNGHandler *phPng = NULL; wxXPMHandler *phXpm = NULL; wxICOHandler *phIco = NULL; wxArchiveFSHandler *phArchFs = NULL; $!trace-init wxbmpp.deb $? "+ DkWxBmepsApp::OnInit" /* Initialize elements. */ pHelper = NULL; helpController = NULL; /* Get elements. */ pHelper = new DkWxAppHelper(argv[0],defaultTexts[2],dkwxbmepsapp_groupname); if (NULL == pHelper) { ShowMemoryErrorMessage(); goto finished; } if (!(pHelper->checkSetup())) { goto finished; } msg = dk3app_messages( pHelper->getApp(), dk3bmep_str_get_string_table_name(), (dkChar const **)dk3bmep_str_get_message_texts() ); if (NULL == msg) { ShowMemoryErrorMessage(); goto finished; } localizedTexts = pHelper->getStringTable(defaultTexts, dkwxbmeps_string_table_name); if (NULL == localizedTexts) { ShowMemoryErrorMessage(); goto finished; } /* Set image and zip fs handler 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. */ phArchFs = new wxArchiveFSHandler(); if (NULL != phArchFs) { wxFileSystem::AddHandler(phArchFs); } else { ShowMemoryErrorMessage(); goto finished; } /* CLANG STATIC ANALYSIS COMPLAINS ABOUT A POTENTIAL MEMORY LEAK, because phArchFs 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. */ /* Get help controller */ helpController = new DkWxHelpController(pHelper,dkwxbmeps_chm_helpfile,dkwxbmeps_htb_helpfile); if (NULL == helpController) { ShowMemoryErrorMessage(); goto finished; } /* Create frame. */ frame = new DkWxBmepsFrame( defaultTexts[0], localizedTexts, msg, pHelper, DkWxBmeps_MainWindow, helpController, argc, argv ); if (NULL == frame) { ShowMemoryErrorMessage(); goto finished; } /* Show frame and inidicate success. */ frame->restorePosition(); frame->Show(); back = true; /* Clean up on problems. */ finished: if (!(back)) { if (NULL != helpController) { delete(helpController); helpController = NULL; } if (NULL != pHelper) { delete(pHelper); pHelper = NULL; } } $? "- DkWxBmepsApp::OnInit %d", ((back) ? 1 : 0) return back; } int DkWxBmepsApp::OnExit() { int back = 0; $? "+ DkWxBmepsApp::OnExit" /* Release elements. */ if(helpController) { delete(helpController); helpController = NULL; } if(pHelper) { delete(pHelper); pHelper = NULL; } $? "- DkWxBmepsApp::OnExit %d", back $!trace-end return back; } void DkWxBmepsApp::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 = wxbmpp_nl_wx[0]; } if (NULL == s_text) { s_text = wxbmpp_nl_wx[1]; } wxMessageBox(s_text, s_title, (wxOK | wxCENTRE | wxICON_ERROR)); }