%% options copyright owner = Dirk Krause copyright year = 2011-xxxx license = bsd %% 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(); }; DECLARE_APP(DkWxBmepsApp) %% module #include "wxbmeps.h" $!trace-include /** Implementation of DkWxBmepsApp. */ IMPLEMENT_APP(DkWxBmepsApp) /** 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; wxZipFSHandler *phZipFs = 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; } 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,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->Show(); frame->restorePosition(); 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)); }