%% options copyright owner = Dirk Krause copyright year = 2019-xxxx SPDX-License-Identifier: BSD-3-Clause %% header /** @file WxdkdrawApp.h The WxdkdrawApp class. */ /** Application class, derived from wxApp, one instance per program. */ class WxdkdrawApp : public wxApp { protected: /** Helper object. */ Dk4WxApplicationHelper *pAh; /** Controller fr online help. */ #if 1 Dk4WxHelpController *pHc; #endif /* __CHANGE__ 009: Add further members here. */ protected: /** Show error message if there is not enough 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. */ #if wxCHECK_VERSION(3,0,0) wxDECLARE_APP(WxdkdrawApp); #else DECLARE_APP(WxdkdrawApp) #endif /* vim: set ai sw=4 ts=4 : */ %% module #include "wxdkdraw.h" #ifndef WXDKDRAWAPPH_INCLUDED #include "WxdkdrawApp.h" #endif #ifndef WXDKDRAWFRAME_H_INCLUDED #include "WxdkdrawFrame.h" #endif $!trace-include /** Localized wxChar texts. */ static wxChar const * wxdkdraw_texts[] = { $!string-table macro=wxT # # 0: Menu "File" # File # # 1: Menu item "File/Quit" # Quit # # 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: Initial status text # Initializing... # # 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-17 Texts for mouse key messages and cursor position # L: M: R: X: Y: # # 18 Title text # wxdkdraw - Draw for LaTeX # # 19 Used in about dialog box (trailing space) # part of DK tools and libraries, version # # 20-21 Menu item text and tip for File / New # New Create new empty drawing # # 22-23 Menu item text and tip for File / Open # Open Open a file # # 24-25 Menu item text and tip for File / Save # Save Save drawing to file # # 26-27 Menu item text and tip for File / Save as # Save as... Save drawing to new file name # # 28 Menu name Add # Add # # 29-30 Menu item text and tip Add / Polyline # Polyline Add polyline # # 31-32 Menu item text and tip Add / Polygon # Polygon Add polygon # # 33-34 Menu item text and tip Add / Rectangle # Rectangle Add rectangular box # # 35-36 Menu item text and tip Add / Box # Box Add box with rounded corners # # 37-38 Menu item text and tip Add / Circle # Circle Add circle # # 39-40 Menu item text and tip Add / Ellipse # Ellipse Add ellipse # # 41-42 Menu item text and tip Add / Open approximated spline # Open approximated spline Add open approximated spline # # 43-44 Menu item text and tip Add / Closed approximated spline # Closed approximated spline Add closed approximated spline # # 45-46 Menu item text and tip Add / Open interpolated spline # Open interpolated spline Add open interpolated spline # # 47-48 Menu item text and tip Add / Closed interpolated spline # Closed interpolated spline Add closed interpolated spline # # 49-50 Menu item text and tip Add / Connector dot # Connector dot Add dot indicating a connection # # 51-52 Menu item text and tip Add / Pin dot # Pin dot Add dot indicating a pin # # 53-54 Menu item text and tip Add / Text label # Text label Add text label # # 55-56 Menu item text and tip Add / Image # Image Add bitmap image (PNG/JPEG/TIFF/NetPBM) # # 57-58 Menu item text and tip Add / Library element # Library element Add library element from file # # 59 Menu name Edit # Edit # # 60-61 Menu item text and tip Edit / Copy object # Copy object Copy object # # 62-63 Menu item text and tip Edit / Move object # Move object Move object # # 64-65 Menu item text and tip Edit / Delete object # Delete object Delete object # # 66-67 Menu item text and tip Edit / Move point # Move point Move one point of an object # # 68-69 Menu item text and tip Edit / Add point # Add Point Add point to polyline/polygon/spline object # # 70-71 Menu item text and tip Edit / Remove point # Remove point Remove point from polyline/polygon/spline object # # 72-73 Menu item text and tip Edit / Details # Details Edit object details # # 74-75 Menu item text and tip Edit / Group # Group Group objects # # 76-77 Menu item text and tip Edit / Ungroup # Ungroup Resolve group of objects # # 78-79 Menu item text and tip Edit / Flip horizontally # Flip horizontally Flip object(s) horizontally # # 80-81 Menu item text and tip Edit / Flip vertically # Flip vertically Flip object(s) vertically # # 82-83 Menu item text and tip Edit / Drawing size # Drawing size Change drawing size # # 84 Menu name View # View # # 85 Menu name Zoom # Zoom # # 86-87 Menu item text and tip View / Zoom / In # In Zoom in # # 88-89 Menu item text and tip View / Zoom / Out # Out Zoom out # # 90-91 Menu item text and tip View / Zoom / Reset # Reset Reset zoom to original size # # 92 Menu name Layer # Layer # # 93-94 Menu item text and tip View / Layer / Activate all # Activate all Activate all layers # # 95-96 Menu item text and tip View / Layer / Layer manager # Layer manager Show layer manager # # 97-98 Menu item text and tip View / Center view # Center view Place center of drawing in center of control # # 99-119 Button tip texts # Open file Save file Copy object Move object Delete object Move point Object details Group objects, select one by one Resolve group Flip horizontally Flip vertically Add point Remove point Drawing size Zoom in Zoom out Reset zoom Show grid Grid unit: in or cm Snap grid intervals per optical grid interval Placement help # # 120-136 # Polyline Polygon Rectangular box Rounded box Circle Ellipse Open arc Closed arc Open approximated spline Closed approximated spline Open interpolated spline Closed interpolated spline Connection dot Pin dot Text label Library element Image # # 137-140 Markers above controls # Layer: Line: Fill: Text: # # 141-155 Tips for controls in bottom bar # Layer number Line and text colour Line width (multiples of the base line width) Line style Line cap style Line join style Arrowhead forward Arrowhead backward Fill colour Fill style LaTeX LaTeX special text Text alignment Font name Font size # # 156-157 Units for grid # in cm # # 158-159 Grid base # 4 5 # # 160 Checkbox label Grid # Grid # # 161 Checkbox label PH # PH # # 162 Tool tip for button Select object # Select object # # 163-167 Tool tip for further buttons for grouping # to open interpolated spline Group objects, select by region Select one by one Convert object to open interpolated spline Select by region # # 168-169 Title and text to save drawing # Save drawing? Drawing contains unsaved modifications.\nSave drawing to file? # # 170 Marker for modified drawing # * # # 171 Dialog title # Save drawing # # 172 File types # WXD files (*.wxd)|*.wxd # # 173 Dialog title # Group # # 174-186 Status texts for selection candidates # Text Polyline Open spline Open arc Polygon Closed spline Closed arc Circle Ellipse Box Image Filled dot White dot # # 187-199 Status text while modifying objects # Modify text Modify polyline Modify open spline Modify open arc Modify polygon Modify closed spline Modify closed arc Modify circle Modify ellipse Modify box Modify image Modify filled dot Modify white dot # # 200-201 Mouse button hint # Unselect object Select object # # 202-207 Error message parts # NOT SAVED! The file was not saved!\nFailed to open file for writing. The file was not saved!\nError in write operation. The file was not saved!\nString " " too long. The file was not saved!\nString was too long. # # 208-210 Error message parts # The file was not saved!\nFailed to recode string" "! The file was not saved!\nFailed to recode string. # # 211-213 Error message parts # The file was not saved!\nFailed to recode file name" "! The file was not saved!\nFailed to recode file name. # # 214 # The file was not saved!\nAn object contains an empty string. # # 215 # The file was not saved! # # 216-224 Line style dialog # Line style Solid Dashed line Dotted line Dash dot line Dash dot dot line Dash dot dot dot line Cancel Keep line style # # 225-231 Style length dialog # Style length Style length: Dash length in multiples of the line length OK Use style length as specified Cancel Discard input # # 232-237 Line join dialog # Line join Mitered Rounded Beveled Cancel Leave line join as is # # 238-244 Miter limit dialog # Miter limit Limit: Choose miter limit value OK Use choosen value Cancel Discard input # # 245-250 Line cap dialog # Line cap Butted Rounded Projecting Cancel Leave line cap as is # # 251-253 Arrow type dialog # Arrow type Cancel Leave arrow type as is # # 254-262 Arrow size dialog # Arrow size Length: Width: Specify arrow length in multiples of the line width Specify arrow width in multiples of the line width OK Cancel Use settings from dialog Discard settings from dialog # # 263-289 Fill style dialog # Fill style No fill Pure colour fill 30 degree diagonal lines to the left 30 degree diagonal lines to the right 30 degree diagonal crosshatch 45 degree diagonal lines to the left 45 degree diagonal lines to the right 45 degree diagonal crosshatch Horizontal bricks Vertical bricks Horizontal lines Vertical lines Horizontal/vertical crosshatch Horizontal shingles skewed to the right Horizontal shingles skewed to the left Vertical shingles skewed to one side Vertical shingles skewed to the other side Large fish scales Small fish scales Circles Hexagons Octagons Horizontal tire treads Vertical tire treads Cancel Leave fill style unchanged # # 290-295 Text align dialog # Text align Left Centered Right Cancel Leave text align unchanged # # 296-333 Text font dialog # Text font Cancel Leave text font as is Times Roman Times Italic Times Bold Times Bold Italic Avantgarde Book Avantgarde Book Oblique Avantgarde Book Demi Avantgarde Book Demi Oblique Bookman Light Bookman Light Italic Bookman Demi Bookman Demi Italic Courier Courier Oblique Courier Bold Courier Bold Oblique Helvetica Helvetica Oblique Helvetica Bold Helvetica Bold Oblique Helvetica Narrow Helvetica Narrow Oblique Helvetica Narrow Bold Helvetica Narrow Bold Oblique New Century Schoolbook Roman New Century Schoolbook Italic New Century Schoolbook Bold New Century Schoolbook Bold Italic Palatino Roman Palatino Italic Palatino Bold Palatino Bild Italic Symbol Zapf Chancery Zapf Dingbats # # 334-338 Layer manager dialog # Layers OK Cancel Use settings from dialog Discard settings from dialog # # 339 Dialog title to open drawing # Open drawing # # 340-341 Status text to delete object # Delete object Cancel deletion # # 342-344 Status texts to move object # Move object Place object Cancel move # # 345-346 Error message for failed memory allocation # Error: Memory A memory allocation failed!\nInsufficient memory (RAM/swap space)! # # 347-348 Error message for invalid placement # Error: Invalid placement The selected placement would result in numeric overflow for coordinates! # # 349-350 Error with no detailed information # Error An error occured.\nUnfortunately no detail information is available! # # 351-364 Font selection dialog. # Font family: Times AvantGarde Bookman Courier Helvetica HelveticaNarrow NewCenturySchlbk Palatino Symbol ZapfChancery ZapfDingbats bold / demi italic / oblique # # 365-367 Font selection OK button # OK Use font configured in dialog Choose font family # # 368-369 Information, no layers used # No layers are in use at this time. No layers in use # # 370-372 Copy operation # Copy object Place object Cancel copy # # 373-376 Polyline and polygon creation. # First point Add point Cancel Finish # # 377-379 Rectangle and box creation. # First point Opposite point Cancel # # 380-384 Circle creation # Center point Circle point Cancel Finish BB corner point # # 385-388 Arc creation # Open arc Add open arc Closed arc Add closed arc # # 389-393 Arc creation # Start point Intermediate point End point Cancel Finished # # 394-395 Dot creation # Place dot Finished # # 396-402 Label texts for text input dialog. # Export text: Screen text: Enter text to export Enter text to show on screen Text input Create/modify text object Skip text object creation/modification # # 403-404 Text label creation # Place text label Finish # # 405-408 Adding image # Image corner Opposite corner Skip adding image Finished # # 409 Dialog box title "Choose image" # Choose image # # 410 # Choose library element # # 411-412 Adding library element # Place element Skip adding element # # 413-415 Point move mode, snap or relative # Point move mode snap rel # # 416-417 Texts for rotation spin control # Rot: Text or ellipse rotation in degree # # 418-421 Texts for point move operation # Select point Place point Skip point move Move object point # # 422-427 Texts for spline s modification # Spline s value s: OK Modify s value Cancel Close dialog, discard input # # 428 Slider tool tip # Choose s value # # 429-430 Texts in spline s value modification dialog # Spline s value 0 # # 431-433 Mouse button texts for point deletion # Delete point Skip point deletion Delete spline, polyline or polygon point # # 434-438 Status and mouse button texts for point adding # Add point to polyline, polygon or spline Add point Place point Finish point adding Skip point # # 439-441 Status and mouse button texts for drawing size change (s) # Select corner Finish size change Change drawing size # # 442-443 Status and mouse button texts for drawing size change (p) # Place corner Skip size change # # 444-446 Status and mouse button texts for object flipping # Flip object(s) Flip object Finish flipping # # 447-452 Status and mouse button texts for grouping objects # Select object Unselect object Finish group Skip grouping Finish grouping Group objects one by one # # 453-455 Status and mouse button texts for ungrouping objects # Ungroup objects Ungroup Finish ungrouping # # 456-457 Status and mouse button texts for grouping by box # Corner point Group objects by region # # 458-460 Status and mouse button texts for detail modification # Modify object details Modify object Finish details # # 461 Dialog box title for image options # Image options # # 462-475 texts for image options dialog # RGB to gray: Choose RGB to gray conversion method Keep aspect ratio Keep image aspect ratio, eventually leaving space unused Use alpha channel Use opacity data from alpha channel to mix foreground and background Image interpolation Allow image interpolation DCT data Allow direct re-use of DCT encoded data from JPEG files Image interpolation for DCT data Allow image interpolation also for directly re-used DCT encoded data Enforce background Enforce use of background specified in WXD file # # 476-479 Texts for OK and Cancel button of image options dialog # OK Cancel Use options configured in this dialog Discard settings from dialog # # 480-493 RGB to gray conversion method names # Default method Luminance (default coefficients) Luminance (shorter coefficients) Fast Faster Luminance (alternative coefficients) Average Desaturation Minimum decomposition Medium decomposition Maximum decomposition Red Green Blue # # 494-498 Texts for dot details # Dot options Diameter: Diameter in multiples of the base line width Line width: Line width in mulitples of the base line width # # 499-502 Text for box options (radius) # Box options in cm Radius: # # 503-504 Error message about numeric overflow in radius calculation # Numeric overflow Numeric overflow in radius calculation! # # 505-506 Error message, failed to read file # Read file failed Failed to read file: # # 507-508 # Open file failed Failed to open file! # # 509-510 # Mouse outside Mouse position outside usable coordinates range! # # 511-512 # Text missing Empty export text is not allowed! # # 513-514 # File name missing An empty file name string was returned by selection dialog! # # 515-516 # No coordinates Failed to obtain coordinates from object! # # 517-518 # No coordinates Failed to set coordinates on object! # # 519-520 # Numeric overflow Numeric overflow in coordinates calculation! # # 521-522 # Grouping failed Failed to move an object into a group! # # 523-524 # Ungrouping failed Failed to remove an object from group! # # 525-526 # Radius calculation failed Box is too small to calculate a corner radius! # # 527-528 # BUG New point out of index range! # # 529-530 # Too many points Only 65535 point allowed for spline, polygon, or polyline! # # 531 Status text: Ready # Ready # # 532-534 Delete region # Delete region Cancel region Select region # # 535-544 Conversions # Convert to polygon to polyline to closed interpolated spline to closed arc to open arc to closed approximated spline to open approximated spline to white filled dot to simple dot # # 545-553 Conversion tool tips # Convert object to polygon Convert object to polyline Convert object to closed interpolated spline Convert object to closed arc Convert object to open arc Convert object to closed approximated spline Convert object to open approximated spline Convert object to white filled dot Convert object to simple dot # # 554-555 Conversion mouse button labels # Convert object Skip conversion # # 556-557 Message box text for failed conversion # Conversion failed Object is unsuitable for conversion! # # 558-559 Message box text if output directory too long # Directory too long Output file directory too long! # # 560-561 Message box text if failed to find current working directory # Current directory Failed to find current working directory! # # 562-563 Message box output file name is too long # File name too long Output file name is too long! # # 564-565 Messagae box, failed to find output directory. # Output directory Failed to find output directory name! # # 566-569 Menu item and tip texts for 90 degree rotations # Rotate left Rotate object 90 degree to the left Rotate right Rotate object 90 degree to the right # # 570-571 Status texts # Rotate left Rotate right # # 572-573 Mouse button texts # Rotate object Finish rotating # # 574 Dialog box title for box details # Box details # # 575-595 Details for error message # \nNo detailed information available. \nNot enough memory available! \nExpected number of text parts not found! \nConversion of text part to number failed! \nText label recoding failed! \nFile name recoding failed! \nInvalid arguments passed to reader function (bug)! \nFile format version information missing! \nBounding box information missing! \nNot a wxdkdraw file! \nFile format version too new, can not handle it! \nObject start line expected! \nObject details line expected! \nReader in unsupported state (bug)! \nUnsupported object type or subtype! \nNumeric overflow in coordinates conversion or calculation! \nNo open group to close here! \nToo few points specified! \nEmpty image file name! \nImage file name too long! \nBox does not span an area! # # 596-598 Information about line numbers... # \nLine , text part . # # 599-600 Information message box title and text. # Drawing modified Corrections were applied to the drawing. # # 601 Options menu # Options # # 602-603 Reset options # Reset all options Reset all options to default values # # 604-605 Confirmation dialog box # Are you sure? Do you really want to reset all options to default values? # # 606-610 Menu items # Colours Reset Reset colour to default Modify Modify colour # # 611-619 Colours to modify # Border Background Grid Placement help Highlight Copy Highlight Move Highlight Delete Highlight Group Missing image # # 620-624 Menu item, tool tip and mouse hints to modify spline point s # Modify s Modify spline point s value Modify s Finish modifications Modify spline point s value # # 625-626 Menu item and tool tip for new objects. # New objects Set defaults for new objects # # 627-629 Dialog title and contents, defaults for new objects # New objects defaults Filled dots White filled dots # # 630-631 Menu item and tool tip for screen representation options # Screen representation Modify screen representation options # # 632-634 X-spline options # Splines Bezier segments per X-spline sub-segment Specify number of Bezier segments to use for each X-spline sub-segment # # 635 Dialog title # Screen representation options # # 636-638 Option use exact text fonts # Texts Exact fonts Attempt to use exact fonts for non-LaTeX text # # 639-641 Option reduce point markup for point operations # Point add / delete / move / modify operations Reduce markup size Reduce point markup for point related operations # # 642 Hint for export text # Export text (required): # # 643-646 # Open arc Add open arc Closed arc Add closed arc $!end }; /** Non-localized wxChar texts. */ static wxChar const * wxdkdraw_nl_wx[] = { $!string-table macro=wxT # # 0: Program name. # wxdkdraw # # 1: Program version. # 1.0.0 # # 2: Copyright owner name. # Dirk Krause # # 3: Software vendor name. # DKrause # # 4: Resource name of Windows icon # aaaaa # # 5: UNUSED (previously chm help file name) # # # 6: UNUSED (previously non-Windows htb help file name) # # # 7: Space # # # 8: Newline # \n # # 9 10 11 12 13 14 15: List of libraries used. # DK tools, wxWidgets, libpng, libjpeg, libtiff, zlib. http://sourceforge.net/p/dktools/wiki/Home/ 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)! # # 18 Default value for the zoom factor (max zoom out) # 0.0078125 # # 19 Empty string # # # 20 30 spaces as initial text for text controls to set size. # # # # $!end }; /** Non-localized dkChar texts. */ static dkChar const * wxdkdraw_nl_dk[] = { $!string-table macro=dkT # # 0: Program group name. # dktools # # 1: String table name. # wxdkdraw.str # # 2: CHM help file name # wxdkdraw.chm # # 3: HTB help file name # wxdkdraw.htb $!end }; /** Implementation of the wxApp functionality. */ #if wxCHECK_VERSION(3,0,0) wxIMPLEMENT_APP(WxdkdrawApp); #else IMPLEMENT_APP(WxdkdrawApp) #endif bool WxdkdrawApp::OnInit() { WxdkdrawFrame *frame = NULL; wxChar const * const *localizedTexts = NULL; wxPNGHandler *phPng = NULL; wxXPMHandler *phXpm = NULL; wxICOHandler *phIco = NULL; wxArchiveFSHandler *phArchiveFS = NULL; bool back = false; $? "+ WxdkdrawApp::OnInit" /* Initialize members. */ pAh = NULL; #if 1 pHc = NULL; #endif /* __CHANGE__ 009: Initialize further members here. */ /* Set up helper object. */ pAh = new Dk4WxApplicationHelper(); if (NULL == pAh) { ShowMemoryErrorMessage(); goto finished; } if (!(pAh->Initialize(argv[0], wxdkdraw_nl_wx[3], wxdkdraw_nl_dk[0]))) { 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; } /* CLANG STATIC ANALYSIS COMPLAINS ABOUT A POTENTIAL MEMORY LEAK, because phArchiveFs is not released. This is a false positive as phArchiveFs is passed to wxFileSystem and managed by the wxWidgets library. */ phArchiveFS = new wxArchiveFSHandler(); if (NULL != phArchiveFS) { wxFileSystem::AddHandler(phArchiveFS); } else { ShowMemoryErrorMessage(); goto finished; } /* Set up help controller. */ #if 1 pHc = new Dk4WxHelpController(); if (NULL == pHc) { ShowMemoryErrorMessage(); goto finished; } if (!(pHc->Initialize(pAh, wxdkdraw_nl_dk[2], wxdkdraw_nl_dk[3]))) { goto finished; } #endif /* Attempt to obtain localized texts in users preferred language. */ localizedTexts = pAh->GetStringTable(wxdkdraw_nl_dk[1], wxdkdraw_texts); if(!(localizedTexts)) { localizedTexts = wxdkdraw_texts; } /* Create and show frame. */ frame = new WxdkdrawFrame( WxdkdrawFrame::ID_FRAME, pAh, #if 1 pHc, #else NULL, #endif argc, argv, localizedTexts, wxdkdraw_nl_wx, wxdkdraw_nl_dk ); if(!(frame)) { ShowMemoryErrorMessage(); goto finished; } /* Show frame, restore position and indicate success. */ frame->RestorePosition(); frame->Connect( wxID_ANY, wxEVT_IDLE, wxIdleEventHandler(WxdkdrawFrame::OnIdle) ); frame->Show(); back = true; /* Release resources if initialization failed. */ finished: if(!(back)) { #if 1 if (NULL != pHc) { pHc->Cleanup(); delete(pHc); pHc = NULL; } #endif if (NULL != pAh) { pAh->Cleanup(); delete(pAh); pAh = NULL; } } $? "- WxdkdrawApp::OnInit %d", (back ? 1 : 0) return back; } int WxdkdrawApp::OnExit() { int back = 0; $? "+ WxdkdrawApp::OnExit" /* __CHANGE__ 009: Release resources allocated by further members. */ /* Release resources. */ #if 1 if (NULL != pHc) { pHc->Cleanup(); delete(pHc); pHc = NULL; } #endif if (NULL != pAh) { pAh->Cleanup(); delete(pAh); pAh = NULL; } /* __CHANGE__ 010: Set exit status code. */ $? "- WxdkdrawApp::OnExit %d", back return back; } void WxdkdrawApp::ShowMemoryErrorMessage(void) { const wxChar *s_title = NULL; const wxChar *s_text = NULL; if (NULL != pAh) { s_title = pAh->GetBasicString(6); s_text = pAh->GetBasicString(7); } if (NULL == s_title) { s_title = wxdkdraw_nl_wx[16]; } if (NULL == s_text) { s_text = wxdkdraw_nl_wx[17]; } wxMessageBox(s_text, s_title, (wxOK | wxCENTRE | wxICON_ERROR)); } /* vim: set ai sw=4 ts=4 : */