/* Copyright (C) 2015-2020, Dirk Krause SPDX-License-Identifier: BSD-3-Clause */ /* WARNING: This file was generated by the dkct program (see http://dktools.sourceforge.net/ for details). Changes you make here will be lost if dkct is run again! You should modify the original source and run dkct on it. Original source: Dk4WxApplicationHelper.cpt */ /** @file Dk4WxApplicationHelper.cpp The Dk4WxApplicationHelper module. */ #line 948 "Dk4WxApplicationHelper.cpt" #include "dk4conf.h" #include "Dk4WxApplicationHelper.h" #include "dk4mem.h" #include "dk4enc.h" #include "dk4strd.h" #include "dk4strx.h" #include "dk4recwx.h" #include "dk4wxpref.h" #include "dk4wxstt.h" #include "dk4hnamed.h" #include "dk4loc.h" #include "dk4user.h" #include "dk4mpl.h" #include "dk4vers.h" #include "dk4exepd.h" #include "dk4inst.h" #include "dk4pathd.h" #if DK4_SIZEOF_WXCHAR > 1 #include "dk4strw.h" #include "dk4maiwdil.h" #include "dk4maiwdbl.h" #else #include "dk4str8.h" #include "dk4mai8dil.h" #include "dk4mai8dbl.h" #endif #line 981 "Dk4WxApplicationHelper.cpt" /* ************************************************************************ */ /* * * */ /* * Type definitions. * */ /* * * */ /* ************************************************************************ */ #line 987 "Dk4WxApplicationHelper.cpt" /** Pointer to constant wxChar. */ typedef const wxChar *PCWXCHAR; /* ************************************************************************ */ /* * * */ /* * Variables. * */ /* * * */ /* ************************************************************************ */ #line 1002 "Dk4WxApplicationHelper.cpt" /** Empty string, returned for all strings not found. */ static const wxChar dk4wxah_empty_string[] = { wxT("") }; /** File name separator string */ static const dkChar dk4wxah_fnsep_str[] = { #if DK4_ON_WINDOWS dkT("\\") #else dkT("/") #endif } ; /** Texts used in error message boxes in the Initialize() function. */ static const wxChar * const dkwxah_msgb_texts[] = { /* 0 */ wxT("Initialization failed!"), /* 1 */ wxT("Not enough memory!"), /* 2 */ wxT("Failed to find current host name!"), /* 3 */ wxT("Failed to find language, region, and encoding settings!"), /* 4 */ wxT("Failed to find users login name!"), /* 5 */ wxT("Failed to find users home directory!"), /* 6 */ wxT("Failed to find executable file name!"), /* 7 */ wxT("Executable file name too long!"), /* 8 */ wxT("Illegal arguments (NULL pointers) to Initialize() function!"), NULL #line 1064 "Dk4WxApplicationHelper.cpt" }; /** Constant text keywords used by module, not localized. */ static const dkChar * const dk4wxah_kwnl_dk[] = { /* 0 */ dkT("dk4wxbase.str"), NULL #line 1077 "Dk4WxApplicationHelper.cpt" }; /** Constant text strings used by the module, not localized. */ static const char * const dk4wxah_kwnl_c8[] = { /* 0 */ "C", NULL #line 1087 "Dk4WxApplicationHelper.cpt" }; /** Final directory names for good installations. */ static const dkChar * const dk4wxah_final_directories[] = { /* 0 */ dkT("bin"), /* 1 */ dkT("sbin"), /* 2 */ dkT("libexec"), /* 3 */ dkT("lib"), NULL #line 1100 "Dk4WxApplicationHelper.cpt" }; /** New final directory names to append. */ static const dkChar * const dk4wxah_new_directories[] = { /* 0 */ dkT("etc"), /* 1 */ dkT("share"), NULL #line 1111 "Dk4WxApplicationHelper.cpt" }; /** Basic strings, replaced by localized texts later. */ static const wxChar * const dk4wxah_basic_strings[] = { /* 0 */ wxT("Help file not found"), /* 1 */ wxT("The file containing online help text was not found on your computer!"), /* 2 */ wxT("Processing in progress"), /* 3 */ wxT("Cancel"), /* 4 */ wxT("Abort current operation"), /* 5 */ wxT("Abortion scheduled, wait please!"), /* 6 */ wxT("Error"), /* 7 */ wxT("Not enough memory (RAM)!"), /* 8 */ wxT("Illegal arguments in Dk4WxHelpController constructor (bug)!"), /* 9 */ wxT("File not found"), /* 10 */ wxT("The file to display was not found!"), /* 11 */ wxT("Error"), /* 12 */ wxT("Failed to start browser or application for file\n\""), /* 13 */ wxT("\"."), /* 14 */ wxT("Yes"), /* 15 */ wxT("No"), NULL #line 1160 "Dk4WxApplicationHelper.cpt" }; /* ************************************************************************ */ /* * * */ /* * Internal tool functions, not object-oriented. * */ /* * * */ /* ************************************************************************ */ #line 1167 "Dk4WxApplicationHelper.cpt" /** Check whether a directory or file name ends in one of the names mentioned in array. @param dirname Directory name to check. @param array String array containing name ends. @return 1 on success with prefix in dirname, 0 on error. */ static int dk4wxapplicationhelper_isinsub(dkChar *dirname, const dkChar * const *array) { dkChar *p1; dkChar *p2; int cc; /* Flag: Can continue */ int back = 0; /* Function result */ #line 1185 "Dk4WxApplicationHelper.cpt" do { cc = 0; p1 = dirname; p2 = NULL; while (dkT('\0') != *p1) { if ((dkT('/') == *p1) || (dkT('\\') == *p1)) { p2 = p1; } p1++; } if (NULL != p2) { *(p2++) = dkT('\0'); cc = 1; #if DK4_HAVE_CASE_INSENSITIVE_PATHNAMES if (0 <= dk4str_array_index(array, p2, 0)) #else if (0 <= dk4str_array_index(array, p2, 1)) #endif { back = 1; cc = 0; } } else { } } while ((1 == cc) && (0 == back)); #line 1208 "Dk4WxApplicationHelper.cpt" return back; } /* ************************************************************************ */ /* * * */ /* * Constructor, destructor, initialization and cleanup. * */ /* * * */ /* ************************************************************************ */ #line 1216 "Dk4WxApplicationHelper.cpt" Dk4WxApplicationHelper::Dk4WxApplicationHelper() { /* Set all member variables to "resource not available". Real initialization is in the Initialize() method. */ #line 1225 "Dk4WxApplicationHelper.cpt" ppBasicStrings = NULL; pcwxsArgv0 = NULL; pcwxsVendor = NULL; pcdksGroup = NULL; pwxsApp = NULL; pcdksArgv0 = NULL; pdksHost = NULL; pdksLogname = NULL; pdksHome = NULL; pdksApp = NULL; pdksSysconf = NULL; pdksShare = NULL; pwxsShare = NULL; pdksLanguage = NULL; pdksRegion = NULL; sStt = NULL; iStt = NULL; sPrSys = NULL; iPrSys = NULL; sPrUser = NULL; iPrUser = NULL; nBasicStrings = 0; #if DK4_ON_WINDOWS iDkEncoding = DK4_ENCODING_WIN1252; iWxEncoding = DK4_ENCODING_WIN1252; iFiEncoding = DK4_FILE_ENCODING_WIN1252; #else iDkEncoding = DK4_ENCODING_PLAIN; iWxEncoding = DK4_ENCODING_PLAIN; iFiEncoding = DK4_FILE_ENCODING_PLAIN; #endif bActive = false; #line 1258 "Dk4WxApplicationHelper.cpt" } /* We do not need a critical section locker as Initialize() is invoked from the applications OnInit() method. At this time there is no top level window or worker thread yet. */ bool Dk4WxApplicationHelper::Initialize( const wxChar *argv0, const wxChar *vendorName, const dkChar *groupName, dk4_er_t *erp ) { dkChar labuf[DK4_MAX_PATH]; dkChar rebuf[DK4_MAX_PATH]; wxChar anbuf[DK4_MAX_PATH]; const wxChar *msgbtext = NULL; const wxChar *msgbtitle = NULL; dkChar *p1; dkChar *p2; #if DK4_ON_WINDOWS dkChar *p4; #endif size_t szrebuf = DK4_SIZEOF(rebuf,dkChar); size_t szlabuf = DK4_SIZEOF(labuf,dkChar); size_t szanbuf = DK4_SIZEOF(anbuf,wxChar); int errc = ERROR_NONE; int res; int pn; bool back = false; #line 1292 "Dk4WxApplicationHelper.cpt" /* Keep some of the arguments. */ if ((NULL == argv0) || (NULL == vendorName) || (NULL == groupName)) { errc = ERROR_ARGUMENTS; goto finished; } pcwxsArgv0 = argv0; pcwxsVendor = vendorName; pcdksGroup = groupName; #line 1302 "Dk4WxApplicationHelper.cpt" /* Some default values. */ ppBasicStrings = dk4wxah_basic_strings; nBasicStrings = DK4_SIZEOF(dk4wxah_basic_strings,PCWXCHAR) - 1; #line 1308 "Dk4WxApplicationHelper.cpt" /* Host name. */ if (0 != dk4hostname(labuf, szlabuf, NULL)) { p1 = dk4str_chr(labuf, dkT('.')); if (NULL != p1) { *p1 = dkT('\0'); } pdksHost = dk4str_dup(labuf, NULL); if (NULL == pdksHost) { errc = ERROR_MEMORY; goto finished; } } else { errc = ERROR_HOSTNAME; goto finished; } #line 1324 "Dk4WxApplicationHelper.cpt" /* Language and encoding. */ res = dk4loc_get_settings(labuf, szlabuf, rebuf, szrebuf, &iDkEncoding, erp); if (0 == res) { errc = ERROR_LANG_REG_ENC; goto finished; } #if DK4_SIZEOF_WXCHAR > 1 #if DK4_SIZEOF_WXCHAR > 2 iWxEncoding = DK4_ENCODING_32; #else iWxEncoding = DK4_ENCODING_UTF16; #endif #else switch (iDkEncoding) { case DK4_ENCODING_WIN1252 : { iWxEncoding = DK4_ENCODING_WIN1252; } break; case DK4_ENCODING_UTF8 : { iWxEncoding = DK4_ENCODING_UTF8; } break; default : { #if DK4_ON_WINDOWS iWxEncoding = DK4_ENCODING_WIN1252; #else iWxEncoding = DK4_ENCODING_PLAIN; #endif } break; } #endif switch (iDkEncoding) { case DK4_ENCODING_WIN1252 : { iFiEncoding = DK4_ENCODING_WIN1252; } break; case DK4_ENCODING_UTF8 : { iFiEncoding = DK4_ENCODING_UTF8; } break; default : { #if DK4_ON_WINDOWS iFiEncoding = DK4_ENCODING_WIN1252; #else iFiEncoding = DK4_ENCODING_PLAIN; #endif } break; } if (0 < dk4str_len(labuf)) { pdksLanguage = dk4str_dup(labuf, erp); if (NULL == pdksLanguage) { errc = ERROR_MEMORY; goto finished; } } if (0 < dk4str_len(rebuf)) { pdksRegion = dk4str_dup(rebuf, erp); if (NULL == pdksRegion) { errc = ERROR_MEMORY; goto finished; } } #line 1385 "Dk4WxApplicationHelper.cpt" /* Login name and home directory. */ res = dk4user_get_logname(labuf, szlabuf, 0, erp); if (0 == res) { errc = ERROR_LOGNAME; goto finished; } pdksLogname = dk4str_dup(labuf, erp); if (NULL == pdksLogname) { errc = ERROR_MEMORY; goto finished; } res = dk4user_get_homedir(labuf, szlabuf, 0, erp); if (0 == res) { #line 1400 "Dk4WxApplicationHelper.cpt" errc = ERROR_HOMEDIR; goto finished; } pdksHome = dk4str_dup(labuf, erp); if (NULL == pdksHome) { #line 1405 "Dk4WxApplicationHelper.cpt" errc = ERROR_MEMORY; goto finished; } #line 1409 "Dk4WxApplicationHelper.cpt" /* System configuration and data directory. */ res = dk4recwx_wxchar_to_dkchar( labuf, szlabuf, iDkEncoding, argv0, iWxEncoding, erp ); #line 1415 "Dk4WxApplicationHelper.cpt" if (0 == res) { #line 1416 "Dk4WxApplicationHelper.cpt" errc = ERROR_EXECUTABLE; goto finished; } pcdksArgv0 = dk4str_dup(labuf, erp); if (NULL == pcdksArgv0) { #line 1421 "Dk4WxApplicationHelper.cpt" errc = ERROR_MEMORY; goto finished; } res = dk4execpath( rebuf, szrebuf, ((0 != res) ? labuf : NULL), erp ); if (0 == res) { #line 1428 "Dk4WxApplicationHelper.cpt" errc = ERROR_EXECUTABLE; goto finished; } #line 1431 "Dk4WxApplicationHelper.cpt" p1 = rebuf; p2 = NULL; while (dkT('\0') != *p1) { if (dk4wxah_fnsep_str[0] == *p1) { p2 = p1; } /* We must increase this pointer. */ p1++; } if (NULL == p2) { #line 1440 "Dk4WxApplicationHelper.cpt" errc = ERROR_EXECUTABLE; goto finished; } *(p2++) = dkT('\0'); /* Binary directory in rebuf, p2 is application name */ #if DK4_ON_WINDOWS /* On Windows, strip .exe suffix. */ p4 = dk4path_get_suffix(p2, NULL); if (NULL != p4) { *p4 = dkT('\0'); } #endif pdksApp = dk4str_dup(p2, NULL); if (NULL == pdksApp) { errc = ERROR_MEMORY; goto finished; } res = dk4recwx_dkchar_to_wxchar( anbuf, szanbuf, iWxEncoding, pdksApp, iDkEncoding, NULL ); if (0 == res) { #line 1460 "Dk4WxApplicationHelper.cpt" errc = ERROR_EXECUTABLE; goto finished; } pwxsApp = dk4strx_dup(anbuf, NULL); if (NULL == pwxsApp) { errc = ERROR_MEMORY; goto finished; } /* Check whether the binary resides in one of the installation directories */ res = 0; if (0 != dk4path_is_in_subdir(rebuf, dk4inst_get_directory(4), NULL)) { res = 1; } if (0 == res) { if (0 != dk4path_is_in_subdir(rebuf, dk4inst_get_directory(5), NULL)) { res = 1; } } if (0 == res) { if (0 != dk4path_is_in_subdir(rebuf, dk4inst_get_directory(6), NULL)) { res = 1; } } if (0 == res) { if (0 != dk4path_is_in_subdir(rebuf, dk4inst_get_directory(10), NULL)) { res = 1; } } if (0 != res) { pdksSysconf = dk4str_dup(dk4inst_get_directory(1), NULL); pdksShare = dk4str_dup(dk4inst_get_directory(2), NULL); UpdateWxsShare(); if ((NULL == pdksSysconf) || (NULL == pdksShare)) { errc = ERROR_MEMORY; goto finished; } } else { dk4str_cpy_s(labuf, szlabuf, rebuf, NULL); if (0 != dk4wxapplicationhelper_isinsub(labuf, dk4wxah_final_directories)) { res = 0; if (0 != dk4str_cpy_s(rebuf, szrebuf, labuf, NULL)) { if (0 != dk4str_cat_s(rebuf, szrebuf, dk4wxah_fnsep_str, NULL)) { if (0 != dk4str_cat_s(rebuf,szrebuf,dk4wxah_new_directories[0],NULL)) { res = 1; } } } if (0 != res) { pdksSysconf = dk4str_dup(rebuf, NULL); if (NULL == pdksSysconf) { errc = ERROR_MEMORY; goto finished; } } else { errc = ERROR_EXEC_TOO_LONG; goto finished; } res = 0; if (0 != dk4str_cpy_s(rebuf, szrebuf, labuf, NULL)) { if (0 != dk4str_cat_s(rebuf, szrebuf, dk4wxah_fnsep_str, NULL)) { if (0 != dk4str_cat_s(rebuf,szrebuf,dk4wxah_new_directories[1],NULL)) { res = 1; } } } if (0 != res) { pdksShare = dk4str_dup(rebuf, NULL); UpdateWxsShare(); if (NULL == pdksShare) { errc = ERROR_MEMORY; goto finished; } } else { errc = ERROR_EXEC_TOO_LONG; goto finished; } } else { pdksSysconf = dk4str_dup(rebuf, NULL); pdksShare = dk4str_dup(rebuf, NULL); UpdateWxsShare(); if ((NULL == pdksSysconf) || (NULL == pdksShare)) { errc = ERROR_MEMORY; goto finished; } } } #line 1549 "Dk4WxApplicationHelper.cpt" /* Containers and iterators for string tables and preferences. */ sStt = dk4sto_open(NULL); if (NULL == sStt) { errc = ERROR_MEMORY; goto finished; } dk4sto_set_comp(sStt, dk4wxstt_compare, 0); iStt = dk4sto_it_open(sStt, NULL); if (NULL == iStt) { errc = ERROR_MEMORY; goto finished; } sPrSys = dk4sto_open(NULL); if (NULL == sPrSys) { errc = ERROR_MEMORY; goto finished; } dk4sto_set_comp(sPrSys, dk4wxpref_compare, 0); iPrSys = dk4sto_it_open(sPrSys, NULL); if (NULL == iPrSys) { errc = ERROR_MEMORY; goto finished; } sPrUser = dk4sto_open(NULL); if (NULL == sPrUser) { errc = ERROR_MEMORY; goto finished; } dk4sto_set_comp(sPrUser, dk4wxpref_compare, 0); iPrUser = dk4sto_it_open(sPrUser, NULL); if (NULL == iPrUser) { errc = ERROR_MEMORY; goto finished; } #line 1586 "Dk4WxApplicationHelper.cpt" /* Read preference files. */ for (pn = 0; pn <= DK4_FS_CONF_MAX; pn++) { dk4wxpref_one_pass( ((DK4_FS_CONF_SYS_MAX < pn) ? sPrUser : sPrSys), ((DK4_FS_CONF_SYS_MAX < pn) ? iPrUser : iPrSys), pdksApp, pcdksGroup, pdksLogname, pdksHost, pdksLanguage, pdksRegion, pdksHome, pdksSysconf, pdksShare, iWxEncoding, iDkEncoding, ( (DK4_ENCODING_UTF8 == iDkEncoding) ? DK4_FILE_ENCODING_UTF8 : #if DK4_ON_WINDOWS DK4_FILE_ENCODING_WIN1252 #else DK4_FILE_ENCODING_PLAIN #endif ), pn ); } #line 1617 "Dk4WxApplicationHelper.cpt" /* Localized basic strings. */ ppBasicStrings = InternalGetStringTable( dk4wxah_kwnl_dk[0], (DK4_SIZEOF(dk4wxah_basic_strings,PCWXCHAR) - 1) ); if (NULL == ppBasicStrings) { ppBasicStrings = dk4wxah_basic_strings; } nBasicStrings = Dk4WxApplicationHelper::StringTableSize(ppBasicStrings); #line 1626 "Dk4WxApplicationHelper.cpt" /* Finally mark success. */ bActive = back = true; /* Clean up if not successfully. */ finished: if (!(back)) { #line 1635 "Dk4WxApplicationHelper.cpt" switch (errc) { case ERROR_MEMORY : { #line 1637 "Dk4WxApplicationHelper.cpt" msgbtext = dkwxah_msgb_texts[1]; msgbtitle = dkwxah_msgb_texts[0]; } break; case ERROR_HOSTNAME : { #line 1641 "Dk4WxApplicationHelper.cpt" msgbtext = dkwxah_msgb_texts[2]; msgbtitle = dkwxah_msgb_texts[0]; } break; case ERROR_LANG_REG_ENC : { #line 1645 "Dk4WxApplicationHelper.cpt" msgbtext = dkwxah_msgb_texts[3]; msgbtitle = dkwxah_msgb_texts[0]; } break; case ERROR_LOGNAME : { #line 1649 "Dk4WxApplicationHelper.cpt" msgbtext = dkwxah_msgb_texts[4]; msgbtitle = dkwxah_msgb_texts[0]; } break; case ERROR_HOMEDIR : { #line 1653 "Dk4WxApplicationHelper.cpt" msgbtext = dkwxah_msgb_texts[5]; msgbtitle = dkwxah_msgb_texts[0]; } break; case ERROR_EXECUTABLE : { #line 1657 "Dk4WxApplicationHelper.cpt" msgbtext = dkwxah_msgb_texts[6]; msgbtitle = dkwxah_msgb_texts[0]; } break; case ERROR_EXEC_TOO_LONG : { #line 1661 "Dk4WxApplicationHelper.cpt" msgbtext = dkwxah_msgb_texts[7]; msgbtitle = dkwxah_msgb_texts[0]; } break; case ERROR_ARGUMENTS : { #line 1665 "Dk4WxApplicationHelper.cpt" msgbtext = dkwxah_msgb_texts[8]; msgbtitle = dkwxah_msgb_texts[0]; } break; } if ((NULL != msgbtext) && (NULL != msgbtitle)) { wxMessageBox( msgbtext, msgbtitle, (wxOK | wxCENTRE | wxICON_ERROR) ); } InternalCleanup(); } #line 1677 "Dk4WxApplicationHelper.cpt" return back; } void Dk4WxApplicationHelper::InternalCleanup(void) { dk4_wx_string_table_t *wxsttptr; dk4_wx_pref_t *pptr; #line 1688 "Dk4WxApplicationHelper.cpt" bActive = false; // Object can not longer be used. ppBasicStrings = NULL; pcwxsArgv0 = NULL; pcwxsVendor = NULL; pcdksGroup = NULL; if (NULL != sPrUser) { if (NULL != iPrUser) { dk4sto_it_reset(iPrUser); do { pptr = (dk4_wx_pref_t *)dk4sto_it_next(iPrUser); if (NULL != pptr) { dk4wxpref_close(pptr); } } while (NULL != pptr); dk4sto_it_close(iPrUser); iPrUser = NULL; } dk4sto_close(sPrUser); sPrUser = NULL; } if (NULL != sPrSys) { if (NULL != iPrSys) { dk4sto_it_reset(iPrSys); do { pptr = (dk4_wx_pref_t *)dk4sto_it_next(iPrSys); if (NULL != pptr) { dk4wxpref_close(pptr); } } while (NULL != pptr); dk4sto_it_close(iPrSys); iPrSys = NULL; } dk4sto_close(sPrSys); sPrSys = NULL; } if (NULL != sStt) { if (NULL != iStt) { dk4sto_it_reset(iStt); do { wxsttptr = (dk4_wx_string_table_t *)dk4sto_it_next(iStt); if (NULL != wxsttptr) { dk4wxstt_close(wxsttptr); } } while (NULL != wxsttptr); dk4sto_it_close(iStt); iStt = NULL; } dk4sto_close(sStt); sStt = NULL; } nBasicStrings = 0; #if 0 /* Leave these integer variables as is. */ iDkEncoding = DK4_ENCODING_PLAIN; iWxEncoding = DK4_ENCODING_PLAIN; iFiEncoding = DK4_FILE_ENCODING_PLAIN; #endif dk4mem_release(pdksRegion); dk4mem_release(pdksLanguage); dk4mem_release(pdksShare); dk4mem_release(pwxsShare); dk4mem_release(pdksSysconf); dk4mem_release(pdksApp); dk4mem_release(pdksHost); dk4mem_release(pcdksArgv0); dk4mem_release(pwxsApp); dk4mem_release(pdksLogname); dk4mem_release(pdksHome); #line 1752 "Dk4WxApplicationHelper.cpt" } void Dk4WxApplicationHelper::Cleanup(void) { #line 1760 "Dk4WxApplicationHelper.cpt" { wxCriticalSectionLocker lock(csProtect); InternalCleanup(); } #line 1765 "Dk4WxApplicationHelper.cpt" } /* We do not need a critical section locker as the destructor is invoked from the applications destructor. At this we have no more top level windows or worker threads. */ Dk4WxApplicationHelper::~Dk4WxApplicationHelper() { #line 1777 "Dk4WxApplicationHelper.cpt" InternalCleanup(); #line 1779 "Dk4WxApplicationHelper.cpt" } /* ************************************************************************ */ /* * * */ /* * Internal functions. * */ /* * These functions do not attempt synchronization. * */ /* * * */ /* ************************************************************************ */ #line 1787 "Dk4WxApplicationHelper.cpt" bool Dk4WxApplicationHelper::InternalStringToWx( wxChar *dptr, size_t dsz, const dkChar *sptr, dk4_er_t *erp ) { int res = 0; bool back = false; #line 1797 "Dk4WxApplicationHelper.cpt" res = dk4recwx_dkchar_to_wxchar(dptr,dsz,iWxEncoding,sptr,iDkEncoding,erp); if (0 != res) { back = true; } #line 1800 "Dk4WxApplicationHelper.cpt" return back; } bool Dk4WxApplicationHelper::InternalStringToDk( dkChar *dptr, size_t dsz, const wxChar *sptr, dk4_er_t *erp ) { int res = 0; bool back = false; #line 1813 "Dk4WxApplicationHelper.cpt" res = dk4recwx_wxchar_to_dkchar(dptr,dsz,iDkEncoding,sptr,iWxEncoding,erp); if (0 != res) { back = true; } #line 1816 "Dk4WxApplicationHelper.cpt" return back; } bool Dk4WxApplicationHelper::InternalFindDataFile( dkChar *fnb, size_t szfnb, dkChar const *sfn, int maxpass, bool aco ) { int passno = 0; int res = 0; bool back = false; #line 1834 "Dk4WxApplicationHelper.cpt" for (passno = 0; ((passno <= maxpass) && (!(back))); passno++) { res = dk4fs_data_one( fnb, szfnb, sfn, pdksShare, pdksHome, pdksApp, pcdksGroup, pdksLanguage, pdksRegion, passno, ((aco) ? 1 : 0), NULL ); if (0 != res) { back = true; } } #line 1843 "Dk4WxApplicationHelper.cpt" return back; } #if DK4_SIZEOF_WXCHAR != DK4_CHAR_SIZE bool Dk4WxApplicationHelper::InternalFindDataFile( wxChar *fnb, size_t szfnb, dkChar const *sfn, int maxpass, bool aco ) { dkChar buf[DK4_MAX_PATH]; size_t szbuf = DK4_SIZEOF(buf,dkChar); bool back = false; #line 1864 "Dk4WxApplicationHelper.cpt" back = InternalFindDataFile(buf, szbuf, sfn, maxpass, aco); if (back) { back = InternalStringToWx(fnb, szfnb, buf, NULL); } #line 1868 "Dk4WxApplicationHelper.cpt" return back; } #endif const wxChar * const * Dk4WxApplicationHelper::InternalGetStringTable( const dkChar *tableName, size_t tableSize ) { dkChar fnb[DK4_MAX_PATH]; dk4_er_t e1; dk4_er_t e2; const wxChar * const *back = NULL; dk4_wx_string_table_t *tabptr = NULL; dk4_stream_t *strm = NULL; size_t szfnb = DK4_SIZEOF(fnb,dkChar); #line 1889 "Dk4WxApplicationHelper.cpt" tabptr = (dk4_wx_string_table_t *)dk4sto_it_find_like(iStt, tableName, 1); if (NULL == tabptr) { if (InternalFindDataFile(fnb, szfnb, tableName, DK4_FS_DATA_MAX_SYS, 1)) { strm = dk4stream_open_file_reader(fnb, NULL); if (NULL != strm) { tabptr = dk4wxstt_open(tableName, tableSize, NULL); if (NULL != tabptr) { if (0 != dk4sto_add(sStt, tabptr, NULL)) { dk4error_init(&e1); dk4error_init(&e2); if (!dk4wxstt_apply_stream(tabptr, strm, iWxEncoding, &e1, &e2)) { dk4wxstt_shutdown(tabptr); } } else { dk4wxstt_close(tabptr); tabptr = NULL; } } dk4stream_close(strm, NULL); } } } if (NULL != tabptr) { if (tabptr->nstrings >= tableSize) { back = (const wxChar * const *)(tabptr->strings); } } #line 1916 "Dk4WxApplicationHelper.cpt" return back; } bool Dk4WxApplicationHelper::InternalSetMultiple( const wxChar * const *names, long *array, size_t sz ) { wxConfig conf(pwxsApp, pcwxsVendor); size_t i = 0; bool back = false; #line 1930 "Dk4WxApplicationHelper.cpt" if ((NULL != names) && (NULL != array) && (0 < sz)) { back = true; for (i = 0; i < sz; i++) { if (!(conf.Write(names[i], array[i]))) { back = false; } } } #line 1938 "Dk4WxApplicationHelper.cpt" return back; } bool Dk4WxApplicationHelper::InternalSetMultiple( const wxChar * const *names, int *array, size_t sz ) { wxConfig conf(pwxsApp, pcwxsVendor); size_t i = 0; bool back = false; #line 1952 "Dk4WxApplicationHelper.cpt" if ((NULL != names) && (NULL != array) && (0 < sz)) { back = true; for (i = 0; i < sz; i++) { if (!(conf.Write(names[i], array[i]))) { back = false; } } } #line 1960 "Dk4WxApplicationHelper.cpt" return back; } bool Dk4WxApplicationHelper::InternalSetMultiple( const wxChar * const *names, bool *array, size_t sz ) { wxConfig conf(pwxsApp, pcwxsVendor); size_t i = 0; bool back = false; #line 1974 "Dk4WxApplicationHelper.cpt" if ((NULL != names) && (NULL != array) && (0 < sz)) { back = true; for (i = 0; i < sz; i++) { if (!(conf.Write(names[i], array[i]))) { back = false; } } } #line 1982 "Dk4WxApplicationHelper.cpt" return back; } bool Dk4WxApplicationHelper::InternalSetMultiple( const wxChar * const *names, double *array, size_t sz ) { wxConfig conf(pwxsApp, pcwxsVendor); size_t i = 0; bool back = false; #line 1996 "Dk4WxApplicationHelper.cpt" if ((NULL != names) && (NULL != array) && (0 < sz)) { back = true; for (i = 0; i < sz; i++) { if (!(conf.Write(names[i], array[i]))) { back = false; } } } #line 2004 "Dk4WxApplicationHelper.cpt" return back; } bool Dk4WxApplicationHelper::InternalSetMultiple( const wxChar * const *names, const wxChar * const *array, size_t sz ) { wxConfig conf(pwxsApp, pcwxsVendor); size_t i = 0; bool back = false; #line 2018 "Dk4WxApplicationHelper.cpt" if ((NULL != names) && (NULL != array) && (0 < sz)) { back = true; for (i = 0; i < sz; i++) { if (!(conf.Write(names[i], array[i]))) { back = false; } } } #line 2026 "Dk4WxApplicationHelper.cpt" return back; } bool Dk4WxApplicationHelper::InternalGetMultiple( const wxChar * const *names, long *array, size_t sz ) { wxConfig conf(pwxsApp, pcwxsVendor); dk4_wx_pref_t *pptr = NULL; #if DK4_SIZEOF_WXCHAR > 1 const wchar_t *ep = NULL; #else const char *ep = NULL; #endif size_t i; long l; int res; bool back = false; #line 2048 "Dk4WxApplicationHelper.cpt" back = true; for (i = 0; i < sz; i++) { l = 0L; if (conf.Read(names[i], &l)) { array[i] = l; } else { pptr = (dk4_wx_pref_t *)dk4sto_it_find_like(iPrUser, names[i], 1); if (NULL == pptr) { pptr = (dk4_wx_pref_t *)dk4sto_it_find_like(iPrSys, names[i], 1); } if (NULL != pptr) { #if DK4_SIZEOF_WXCHAR > 1 res = dk4ma_input_wc_dec_long(&l, pptr->value, &ep, 1, NULL); #else res = dk4ma_input_c8_dec_long(&l, pptr->value, &ep, 1, NULL); #endif if (0 != res) { array[i] = l; } else { back = false; } } } } #line 2073 "Dk4WxApplicationHelper.cpt" return back; } bool Dk4WxApplicationHelper::InternalGetMultiple( const wxChar * const *names, int *array, size_t sz ) { wxConfig conf(pwxsApp, pcwxsVendor); dk4_wx_pref_t *pptr = NULL; #if DK4_SIZEOF_WXCHAR > 1 const wchar_t *ep = NULL; #else const char *ep = NULL; #endif size_t i; long l; int res; bool back = false; #line 2095 "Dk4WxApplicationHelper.cpt" back = true; for (i = 0; i < sz; i++) { l = 0L; if (conf.Read(names[i], &l)) { if (((long)(INT_MIN) <= l) && ((long)(INT_MAX) >= l)) { array[i] = (int)l; } else { back = false; } } else { pptr = (dk4_wx_pref_t *)dk4sto_it_find_like(iPrUser, names[i], 1); if (NULL == pptr) { pptr = (dk4_wx_pref_t *)dk4sto_it_find_like(iPrSys, names[i], 1); } if (NULL != pptr) { #if DK4_SIZEOF_WXCHAR > 1 res = dk4ma_input_wc_dec_long(&l, pptr->value, &ep, 1, NULL); #else res = dk4ma_input_c8_dec_long(&l, pptr->value, &ep, 1, NULL); #endif if (0 != res) { if (((long)(INT_MIN) <= l) && ((long)(INT_MAX) >= l)) { array[i] = (int)l; } else { back = false; } } else { back = false; } } } } #line 2128 "Dk4WxApplicationHelper.cpt" return back; } bool Dk4WxApplicationHelper::InternalGetMultiple( const wxChar * const *names, bool *array, size_t sz ) { wxConfig conf(pwxsApp, pcwxsVendor); dk4_wx_pref_t *pptr = NULL; size_t i; bool l; bool back = false; #line 2144 "Dk4WxApplicationHelper.cpt" back = true; for (i = 0; i < sz; i++) { l = 0L; #line 2148 "Dk4WxApplicationHelper.cpt" if (conf.Read(names[i], &l)) { array[i] = l; } else { pptr = (dk4_wx_pref_t *)dk4sto_it_find_like(iPrUser, names[i], 1); if (NULL == pptr) { pptr = (dk4_wx_pref_t *)dk4sto_it_find_like(iPrSys, names[i], 1); } if (NULL != pptr) { #line 2156 "Dk4WxApplicationHelper.cpt" #line 2157 "Dk4WxApplicationHelper.cpt" #line 2158 "Dk4WxApplicationHelper.cpt" #if DK4_SIZEOF_WXCHAR > 1 #line 2160 "Dk4WxApplicationHelper.cpt" if (0 != dk4strw_is_bool(pptr->value)) { if (0 != dk4strw_is_on(pptr->value)) { array[i] = true; #line 2163 "Dk4WxApplicationHelper.cpt" } else { array[i] = false; #line 2165 "Dk4WxApplicationHelper.cpt" } } else { #line 2167 "Dk4WxApplicationHelper.cpt" back = false; } #else #line 2171 "Dk4WxApplicationHelper.cpt" if (0 != dk4str8_is_bool(pptr->value)) { if (0 != dk4str8_is_on(pptr->value)) { array[i] = true; #line 2174 "Dk4WxApplicationHelper.cpt" } else { array[i] = false; #line 2176 "Dk4WxApplicationHelper.cpt" } } else { back = false; #line 2179 "Dk4WxApplicationHelper.cpt" } #endif } else { #line 2182 "Dk4WxApplicationHelper.cpt" } } } #line 2186 "Dk4WxApplicationHelper.cpt" return back; } bool Dk4WxApplicationHelper::InternalGetMultiple( const wxChar * const *names, double *array, size_t sz ) { wxConfig conf(pwxsApp, pcwxsVendor); dk4_wx_pref_t *pptr = NULL; #if DK4_SIZEOF_WXCHAR > 1 const wchar_t *ep = NULL; #else const char *ep = NULL; #endif #if DK4_HAVE_SETLOCALE char *oldloc = NULL; #endif double l; size_t i; int res; bool back = false; #line 2211 "Dk4WxApplicationHelper.cpt" back = true; for (i = 0; i < sz; i++) { l = 0.0; if (conf.Read(names[i], &l)) { array[i] = l; } else { pptr = (dk4_wx_pref_t *)dk4sto_it_find_like(iPrUser, names[i], 1); if (NULL == pptr) { pptr = (dk4_wx_pref_t *)dk4sto_it_find_like(iPrSys, names[i], 1); } if (NULL != pptr) { #if DK4_HAVE_SETLOCALE oldloc = setlocale(LC_NUMERIC, dk4wxah_kwnl_c8[0]); #endif #if DK4_SIZEOF_WXCHAR > 1 res = dk4ma_input_wc_double(&l, pptr->value, &ep, 1, NULL); #else res = dk4ma_input_c8_double(&l, pptr->value, &ep, 1, NULL); #endif #if DK4_HAVE_SETLOCALE if (NULL != oldloc) { setlocale(LC_NUMERIC, oldloc); } #endif if (0 != res) { array[i] = l; } else { back = false; } } } } #line 2242 "Dk4WxApplicationHelper.cpt" return back; } bool Dk4WxApplicationHelper::InternalGetMultiple( const wxChar * const *names, wxChar **array, size_t sz, bool ov ) { wxConfig conf(pwxsApp, pcwxsVendor); dk4_wx_pref_t *pptr = NULL; const wxChar *vptr = NULL; wxChar *nptr = NULL; size_t i; bool back = false; #line 2259 "Dk4WxApplicationHelper.cpt" back = true; for (i = 0; i < sz; i++) { if ((NULL == array[i]) || (ov)) { wxString value = wxEmptyString; if (conf.Read(names[i], &value)) { wxCStrData valuestrdata = value.c_str(); vptr = (wxChar const *)valuestrdata; if (NULL != vptr) { nptr = dk4strx_dup(vptr, NULL); if (NULL != nptr) { if (NULL != array[i]) { dk4mem_free(array[i]); } array[i] = nptr; } else { back = false; } } else { back = false; } } else { pptr = (dk4_wx_pref_t *)dk4sto_it_find_like(iPrUser, names[i], 1); if (NULL == pptr) { pptr = (dk4_wx_pref_t *)dk4sto_it_find_like(iPrSys, names[i], 1); } if (NULL != pptr) { nptr = dk4strx_dup(pptr->value, NULL); if (nptr) { if (NULL != array[i]) { dk4mem_free(array[i]); } array[i] = nptr; } else { back = false; } } } } } #line 2295 "Dk4WxApplicationHelper.cpt" return back; } /* ************************************************************************ */ /* * * */ /* * Public interface. * */ /* * The methods must * */ /* * (a) synchronize access attempts from multiple threads and * */ /* * (b) ensure the object is in a usable state. * */ /* * * */ /* ************************************************************************ */ #line 2306 "Dk4WxApplicationHelper.cpt" bool Dk4WxApplicationHelper::FindDataFile( dkChar *fnb, size_t szfnb, dkChar const *sfn, int maxpass, bool aco ) { bool back = false; #line 2319 "Dk4WxApplicationHelper.cpt" if ((NULL != fnb) && (NULL != sfn) && (0 < szfnb)) { wxCriticalSectionLocker lock(csProtect); if (bActive) { back = InternalFindDataFile(fnb, szfnb, sfn, maxpass, aco); } } #line 2325 "Dk4WxApplicationHelper.cpt" return back; } #if DK4_SIZEOF_WXCHAR != DK4_CHAR_SIZE bool Dk4WxApplicationHelper::FindDataFile( wxChar *fnb, size_t szfnb, dkChar const *sfn, int maxpass, bool aco ) { bool back = false; #line 2344 "Dk4WxApplicationHelper.cpt" if ((NULL != fnb) && (NULL != sfn) && (0 < szfnb)) { wxCriticalSectionLocker lock(csProtect); if (bActive) { back = InternalFindDataFile(fnb, szfnb, sfn, maxpass, aco); } } #line 2350 "Dk4WxApplicationHelper.cpt" return back; } #endif int Dk4WxApplicationHelper::GetDkEncoding(void) { int back = DK4_ENCODING_PLAIN; #line 2362 "Dk4WxApplicationHelper.cpt" #if DK4_ON_WINDOWS back = DK4_ENCODING_WIN1252; #endif { wxCriticalSectionLocker lock(csProtect); back = iDkEncoding; } #line 2369 "Dk4WxApplicationHelper.cpt" return back; } int Dk4WxApplicationHelper::GetWxEncoding(void) { int back = DK4_ENCODING_PLAIN; #line 2379 "Dk4WxApplicationHelper.cpt" #if DK4_ON_WINDOWS back = DK4_ENCODING_WIN1252; #endif { wxCriticalSectionLocker lock(csProtect); back = iWxEncoding; } #line 2386 "Dk4WxApplicationHelper.cpt" return back; } int Dk4WxApplicationHelper::GetFiEncoding(void) { int back = DK4_FILE_ENCODING_PLAIN; #line 2396 "Dk4WxApplicationHelper.cpt" #if DK4_ON_WINDOWS back = DK4_FILE_ENCODING_WIN1252; #endif { wxCriticalSectionLocker lock(csProtect); back = iFiEncoding; } #line 2403 "Dk4WxApplicationHelper.cpt" return back; } const wxChar * const * Dk4WxApplicationHelper::GetStringTable( const dkChar *tableName, const wxChar * const *defaultTable ) { const wxChar * const *back = NULL; size_t sz = 0; #line 2417 "Dk4WxApplicationHelper.cpt" if ((NULL != tableName) && (NULL != defaultTable)) { sz = Dk4WxApplicationHelper::StringTableSize(defaultTable); if (0 < sz) { wxCriticalSectionLocker lock(csProtect); if (bActive) { back = InternalGetStringTable(tableName, sz); } } } if (NULL == back) { back = defaultTable; } #line 2428 "Dk4WxApplicationHelper.cpt" return back; } const wxChar * Dk4WxApplicationHelper::GetBasicString( size_t numstr ) { const wxChar *back = NULL; #line 2440 "Dk4WxApplicationHelper.cpt" { wxCriticalSectionLocker lock(csProtect); if (bActive) { if ((NULL != ppBasicStrings) && (0 < nBasicStrings)) { if (numstr < nBasicStrings) { back = ppBasicStrings[numstr]; } } } } if (NULL == back) { if (numstr < (DK4_SIZEOF(dk4wxah_basic_strings,wxChar) - 1)) { back = dk4wxah_basic_strings[numstr]; } else { back = dk4wxah_empty_string; } } #line 2457 "Dk4WxApplicationHelper.cpt" return back; } const wxChar * const * Dk4WxApplicationHelper::GetBasicStrings( size_t *pNumBasicStrings ) { const wxChar * const *back = NULL; #line 2469 "Dk4WxApplicationHelper.cpt" { wxCriticalSectionLocker lock(csProtect); if (bActive) { back = ppBasicStrings; if (NULL != pNumBasicStrings) { *pNumBasicStrings = nBasicStrings; } } } if (NULL == back) { back = dk4wxah_basic_strings; if (NULL != pNumBasicStrings) { *pNumBasicStrings = DK4_SIZEOF(dk4wxah_basic_strings,wxChar) - 1; } } #line 2482 "Dk4WxApplicationHelper.cpt" return back; } bool Dk4WxApplicationHelper::StringToWx( wxChar *dptr, size_t dsz, const dkChar *sptr, dk4_er_t *erp ) { int res = 0; int wxe = DK4_ENCODING_PLAIN; int dke = DK4_ENCODING_PLAIN; bool back = false; #line 2497 "Dk4WxApplicationHelper.cpt" #if DK4_ON_WINDOWS wxe = dke = DK4_ENCODING_WIN1252; #endif if ((NULL != dptr) && (NULL != sptr) && (0 < dsz)) { { wxCriticalSectionLocker lock(csProtect); wxe = iWxEncoding; dke = iDkEncoding; } res = dk4recwx_dkchar_to_wxchar(dptr, dsz, wxe, sptr, dke, erp); if (0 != res) { back = true; } } #line 2509 "Dk4WxApplicationHelper.cpt" return back; } bool Dk4WxApplicationHelper::StringToDk( dkChar *dptr, size_t dsz, const wxChar *sptr, dk4_er_t *erp ) { int res = 0; int wxe = DK4_ENCODING_PLAIN; int dke = DK4_ENCODING_PLAIN; bool back = false; #line 2524 "Dk4WxApplicationHelper.cpt" #if DK4_ON_WINDOWS wxe = dke = DK4_ENCODING_WIN1252; #endif if ((NULL != dptr) && (NULL != sptr) && (0 < dsz)) { { wxCriticalSectionLocker lock(csProtect); wxe = iWxEncoding; dke = iDkEncoding; } res = dk4recwx_wxchar_to_dkchar(dptr, dsz, dke, sptr, wxe, erp); if (0 != res) { back = true; } } #line 2536 "Dk4WxApplicationHelper.cpt" return back; } bool Dk4WxApplicationHelper::StringToChar( char *dptr, size_t dsz, const wxChar *sptr, dk4_er_t *erp ) { int res = 0; int wxe = DK4_ENCODING_PLAIN; int dke = DK4_ENCODING_PLAIN; bool back = false; #if DK4_ON_WINDOWS wxe = dke = DK4_ENCODING_WIN1252; #endif if ((NULL != dptr) && (NULL != sptr) && (0 < dsz)) { { wxCriticalSectionLocker lock(csProtect); wxe = iWxEncoding; dke = iDkEncoding; } if (DK4_ENCODING_UTF8 != dke) { if (DK4_ENCODING_WIN1252 != dke) { dke = DK4_ENCODING_PLAIN; } } res = dk4recwx_wxchar_to_char(dptr, dsz, dke, sptr, wxe, erp); if (0 != res) { back = true; } } return back; } bool Dk4WxApplicationHelper::SetMultiple( const wxChar * const *names, long *array, size_t sz ) { bool back = false; #line 2579 "Dk4WxApplicationHelper.cpt" if ((NULL != names) && (NULL != array) && (0 < sz)) { wxCriticalSectionLocker lock(csProtect); if (bActive) { back = InternalSetMultiple(names, array, sz); } else { /* Object not active */ } } #line 2587 "Dk4WxApplicationHelper.cpt" return back; } bool Dk4WxApplicationHelper::SetMultiple( const wxChar * const *names, int *array, size_t sz ) { bool back = false; #line 2599 "Dk4WxApplicationHelper.cpt" if ((NULL != names) && (NULL != array) && (0 < sz)) { wxCriticalSectionLocker lock(csProtect); if (bActive) { back = InternalSetMultiple(names, array, sz); } else { /* Object not active */ } } #line 2607 "Dk4WxApplicationHelper.cpt" return back; } bool Dk4WxApplicationHelper::SetMultiple( const wxChar * const *names, bool *array, size_t sz ) { bool back = false; #line 2619 "Dk4WxApplicationHelper.cpt" if ((NULL != names) && (NULL != array) && (0 < sz)) { wxCriticalSectionLocker lock(csProtect); if (bActive) { back = InternalSetMultiple(names, array, sz); } else { /* Object not active */ } } #line 2627 "Dk4WxApplicationHelper.cpt" return back; } bool Dk4WxApplicationHelper::SetMultiple( const wxChar * const *names, double *array, size_t sz ) { bool back = false; #line 2639 "Dk4WxApplicationHelper.cpt" if ((NULL != names) && (NULL != array) && (0 < sz)) { wxCriticalSectionLocker lock(csProtect); if (bActive) { back = InternalSetMultiple(names, array, sz); } else { /* Object not active */ } } #line 2647 "Dk4WxApplicationHelper.cpt" return back; } bool Dk4WxApplicationHelper::SetMultiple( const wxChar * const *names, const wxChar * const *array, size_t sz ) { bool back = false; #line 2659 "Dk4WxApplicationHelper.cpt" if ((NULL != names) && (NULL != array) && (0 < sz)) { wxCriticalSectionLocker lock(csProtect); if (bActive) { back = InternalSetMultiple(names, array, sz); } else { /* Object not active */ } } #line 2667 "Dk4WxApplicationHelper.cpt" return back; } bool Dk4WxApplicationHelper::GetMultiple( const wxChar * const *names, long *array, size_t sz ) { bool back = false; #line 2679 "Dk4WxApplicationHelper.cpt" if ((NULL != names) && (NULL != array) && (0 < sz)) { wxCriticalSectionLocker lock(csProtect); if (bActive) { back = InternalGetMultiple(names, array, sz); } else { /* Object not active */ } } #line 2687 "Dk4WxApplicationHelper.cpt" return back; } bool Dk4WxApplicationHelper::GetMultiple( const wxChar * const *names, int *array, size_t sz ) { bool back = false; #line 2699 "Dk4WxApplicationHelper.cpt" if ((NULL != names) && (NULL != array) && (0 < sz)) { wxCriticalSectionLocker lock(csProtect); if (bActive) { back = InternalGetMultiple(names, array, sz); } else { /* Object not active */ } } #line 2707 "Dk4WxApplicationHelper.cpt" return back; } bool Dk4WxApplicationHelper::GetMultiple( const wxChar * const *names, bool *array, size_t sz ) { bool back = false; #line 2719 "Dk4WxApplicationHelper.cpt" if ((NULL != names) && (NULL != array) && (0 < sz)) { wxCriticalSectionLocker lock(csProtect); if (bActive) { back = InternalGetMultiple(names, array, sz); } else { /* Object not active */ } } #line 2727 "Dk4WxApplicationHelper.cpt" return back; } bool Dk4WxApplicationHelper::GetMultiple( const wxChar * const *names, double *array, size_t sz ) { bool back = false; #line 2739 "Dk4WxApplicationHelper.cpt" if ((NULL != names) && (NULL != array) && (0 < sz)) { wxCriticalSectionLocker lock(csProtect); if (bActive) { back = InternalGetMultiple(names, array, sz); } else { /* Object not active */ } } #line 2747 "Dk4WxApplicationHelper.cpt" return back; } bool Dk4WxApplicationHelper::GetMultiple( const wxChar * const *names, wxChar **array, size_t sz, bool ov ) { bool back = false; #line 2759 "Dk4WxApplicationHelper.cpt" if ((NULL != names) && (NULL != array) && (0 < sz)) { wxCriticalSectionLocker lock(csProtect); if (bActive) { back = InternalGetMultiple(names, array, sz, ov); } else { /* Object not active */ } } #line 2767 "Dk4WxApplicationHelper.cpt" return back; } bool Dk4WxApplicationHelper::SetString(const wxString & key, const wxString & value) { bool back = false; #line 2777 "Dk4WxApplicationHelper.cpt" { wxCriticalSectionLocker lock(csProtect); if (bActive) { wxConfig conf(pwxsApp, pcwxsVendor); back = conf.Write(key, value); } } #line 2785 "Dk4WxApplicationHelper.cpt" return back; } bool Dk4WxApplicationHelper::GetString(const wxString & key, wxString *pvalue) { bool back = false; #line 2795 "Dk4WxApplicationHelper.cpt" if (NULL != pvalue) { wxCriticalSectionLocker lock(csProtect); if (bActive) { wxConfig conf(pwxsApp, pcwxsVendor); back = conf.Read(key, pvalue); } } #line 2803 "Dk4WxApplicationHelper.cpt" return back; } /* ************************************************************************ */ /* * * */ /* * Static class functions. * */ /* * * */ /* ************************************************************************ */ #line 2811 "Dk4WxApplicationHelper.cpt" void Dk4WxApplicationHelper::CorrectPosition( int & x, int & y, int & w, int & h, bool cn ) { wxSize scsz; #line 2820 "Dk4WxApplicationHelper.cpt" scsz = wxGetDisplaySize(); if (cn) { /* Negative coordinates mean x and y not defined, center window. */ if (0 > x) { x = (scsz.x - w) / 2; } if (0 > y) { y = (scsz.y - h) / 2; } } if (scsz.x < (x + w)) { x = scsz.x - w; } if (scsz.y < (y + h)) { y = scsz.y - h; } if (0 > x) { x = 0; } if (0 > y) { y = 0; } #line 2833 "Dk4WxApplicationHelper.cpt" } void Dk4WxApplicationHelper::CorrectPosition( wxWindow & wnd, bool cn ) { int x, y, w, h; #line 2844 "Dk4WxApplicationHelper.cpt" wnd.GetPosition(&x, &y); wnd.GetSize(&w, &h); Dk4WxApplicationHelper::CorrectPosition(x, y, w, h, cn); wnd.SetSize(x, y, w, h); #line 2849 "Dk4WxApplicationHelper.cpt" } void Dk4WxApplicationHelper::ChooseChildPosition( const wxWindow & p, wxWindow & c, bool beside ) { wxSize scsz = wxGetDisplaySize(); int px = 0; int py = 0; int pw = 0; int ph = 0; int cx = 0; int cy = 0; int cw = 0; int ch = 0; bool done = false; bool findy = false; #line 2870 "Dk4WxApplicationHelper.cpt" #if 0 p.GetPosition(&px, &py); p.GetSize(&pw, &ph); #else wxRect re = p.GetScreenRect(); px = re.GetX(); py = re.GetY(); pw = re.GetWidth(); ph = re.GetHeight(); #endif c.GetSize(&cw, &ch); if (beside) { /* Attempt right side */ if (scsz.x > px + pw + cw) { cx = px + pw; done = true; findy = true; } /* Attempt bottom side */ if (!done) { if (scsz.y > py + ph + ch) { cy = py + ph; done = true; } } /* Attempt left side */ if (!done) { if (px > cw) { cx = px - cw; done = true; findy = true; } } /* Attempt top side */ if (!done) { if (py < ch) { cy = py - ch; done = true; } } if (done) { if (findy) { if (scsz.y > (py + ch)) { cy = py; } else { if (0 <= (py + ph - ch)) { cy = py + ph - ch; } else { cy = py + (ph - ch) / 2; if (scsz.y <= (cy + ch)) { cy = scsz.y - ch - 1; } if (0 > cy) { cy = 0; } } } } else { if (scsz.x > (px + cw)) { cx = px; } else { if (0 <= (px + pw - cw)) { cx = px + pw - cw; } else { cx = px + (pw - cw) / 2; if (scsz.x <= (cx + cw)) { cx = scsz.x - cw - 1; } if (0 > cx) { cx = 0; } } } } c.SetSize(cx, cy, cw, ch); } } if (!done) { cx = px + (pw - cw) / 2; cy = py + (ph - ch) / 2; Dk4WxApplicationHelper::CorrectPosition(cx, cy, cw, ch, false); c.SetSize(cx, cy, cw, ch); } #line 2954 "Dk4WxApplicationHelper.cpt" } size_t Dk4WxApplicationHelper::StringTableSize(const wxChar * const *sttptr) { size_t back = 0; #line 2963 "Dk4WxApplicationHelper.cpt" if (NULL != sttptr) { while (NULL != *(sttptr++)) { back++; } } #line 2966 "Dk4WxApplicationHelper.cpt" return back; } void Dk4WxApplicationHelper::ReleaseWxcharStringArray( wxChar **array, size_t sz, bool ea ) { wxChar **ap; #line 2978 "Dk4WxApplicationHelper.cpt" if ((NULL != array) && (0 < sz)) { ap = array; while (0 < sz--) { dk4mem_release(*array); array++; } if (ea) { dk4mem_free(ap); } } #line 2987 "Dk4WxApplicationHelper.cpt" } const dkChar * Dk4WxApplicationHelper::GetDkArgv0(void) { return ((const dkChar *)pcdksArgv0); } const dkChar * Dk4WxApplicationHelper::GetDkGroupName(void) { return(pcdksGroup); } void Dk4WxApplicationHelper::UpdateWxsShare(void) { wxChar buf[DK4_MAX_PATH]; wxChar *np; bool res; if (NULL != pdksShare) { res = InternalStringToWx(buf, DK4_SIZEOF(buf,wxChar), pdksShare, NULL); if (res) { np = dk4strx_dup(buf, NULL); if (NULL != np) { dk4mem_release(pwxsShare); pwxsShare = np; } } } } const wxChar * Dk4WxApplicationHelper::GetWxsShare(void) const { return ((wxChar const *)pwxsShare); } bool Dk4WxApplicationHelper::InternalFindHelpFile( dkChar *fnb, size_t szfnb, dkChar const *sfn ) { int passno = 0; int res = 0; bool back = false; #line 3049 "Dk4WxApplicationHelper.cpt" for (passno = 0; ((passno <= DK4_FS_DOC_MAX) && (!(back))); passno++) { res = dk4fs_doc_one( fnb, szfnb, sfn, pdksShare, pdksApp, pcdksGroup, pdksLanguage, pdksRegion, passno, NULL ); if (0 != res) { #line 3055 "Dk4WxApplicationHelper.cpt" back = true; } } #line 3059 "Dk4WxApplicationHelper.cpt" return back; } #if DK4_SIZEOF_WXCHAR != DK4_CHAR_SIZE bool Dk4WxApplicationHelper::InternalFindHelpFile( wxChar *fnb, size_t szfnb, dkChar const *sfn ) { dkChar buf[DK4_MAX_PATH]; size_t szbuf = DK4_SIZEOF(buf,dkChar); bool back = false; #line 3076 "Dk4WxApplicationHelper.cpt" back = InternalFindHelpFile(buf, szbuf, sfn); if (back) { back = InternalStringToWx(fnb, szfnb, buf, NULL); } #line 3081 "Dk4WxApplicationHelper.cpt" return back; } #endif bool Dk4WxApplicationHelper::FindHelpFile( dkChar *fnb, size_t szfnb, dkChar const *sfn ) { bool back = false; if ((NULL != fnb) && (NULL != sfn) && (0 < szfnb)) { wxCriticalSectionLocker lock(csProtect); if (bActive) { back = InternalFindHelpFile(fnb, szfnb, sfn); } } return back; } #if DK4_SIZEOF_WXCHAR != DK4_CHAR_SIZE bool Dk4WxApplicationHelper::FindHelpFile( wxChar *fnb, size_t szfnb, dkChar const *sfn ) { bool back = false; if ((NULL != fnb) && (NULL != sfn) && (0 < szfnb)) { wxCriticalSectionLocker lock(csProtect); if (bActive) { back = InternalFindHelpFile(fnb, szfnb, sfn); } } return back; } #endif /* vim: set ai sw=4 ts=4 : */