X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/518b5d2ffbaf7422195537a5512e791be4497591..7fd43a44d6a319aecdda30763fb91b69938836f9:/src/common/utilscmn.cpp diff --git a/src/common/utilscmn.cpp b/src/common/utilscmn.cpp index f15e7f0bbd..f6cec3461c 100644 --- a/src/common/utilscmn.cpp +++ b/src/common/utilscmn.cpp @@ -71,7 +71,14 @@ #define _MAXPATHLEN 500 -extern char *wxBuffer; +extern wxChar *wxBuffer; + +// ---------------------------------------------------------------------------- +// private functions +// ---------------------------------------------------------------------------- + +static wxWindow *wxFindWindowByLabel1(const wxString& title, wxWindow * parent); +static wxWindow *wxFindWindowByName1 (const wxString& title, wxWindow * parent); #ifdef __WXMAC__ int strcasecmp(const char *str_1, const char *str_2) @@ -251,48 +258,47 @@ StringToLong (char *s, long *number) *number = strtol (s, (char **) NULL, 10); } -char * +wxChar * IntToString (int number) { - static char buf[20]; + static wxChar buf[20]; - sprintf (buf, "%d", number); + wxSprintf (buf, _T("%d"), number); return buf; } -char * +wxChar * LongToString (long number) { - static char buf[20]; + static wxChar buf[20]; - sprintf (buf, "%ld", number); + wxSprintf (buf, _T("%ld"), number); return buf; } // Array used in DecToHex conversion routine. -static char hexArray[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', - 'C', 'D', 'E', 'F' }; +static wxChar hexArray[] = _T("0123456789ABCDEF"); // Convert 2-digit hex number to decimal int wxHexToDec(const wxString& buf) { int firstDigit, secondDigit; - if (buf.GetChar(0) >= 'A') - firstDigit = buf.GetChar(0) - 'A' + 10; + if (buf.GetChar(0) >= _T('A')) + firstDigit = buf.GetChar(0) - _T('A') + 10; else - firstDigit = buf.GetChar(0) - '0'; + firstDigit = buf.GetChar(0) - _T('0'); - if (buf.GetChar(1) >= 'A') - secondDigit = buf.GetChar(1) - 'A' + 10; + if (buf.GetChar(1) >= _T('A')) + secondDigit = buf.GetChar(1) - _T('A') + 10; else - secondDigit = buf.GetChar(1) - '0'; + secondDigit = buf.GetChar(1) - _T('0'); return firstDigit * 16 + secondDigit; } // Convert decimal integer to 2-character hex string -void wxDecToHex(int dec, char *buf) +void wxDecToHex(int dec, wxChar *buf) { int firstDigit = (int)(dec/16.0); int secondDigit = (int)(dec - (firstDigit*16.0)); @@ -304,7 +310,7 @@ void wxDecToHex(int dec, char *buf) // Convert decimal integer to 2-character hex string wxString wxDecToHex(int dec) { - char buf[3]; + wxChar buf[3]; wxDecToHex(dec, buf); return wxString(buf); } @@ -359,28 +365,6 @@ wxString wxNow( void ) return wxString(date); } -/* Get Full RFC822 style email address */ -bool -wxGetEmailAddress (char *address, int maxSize) -{ - char host[65]; - char user[65]; - - if (wxGetHostName(host, 64) == FALSE) - return FALSE; - if (wxGetUserId(user, 64) == FALSE) - return FALSE; - - char tmp[130]; - strcpy(tmp, user); - strcat(tmp, "@"); - strcat(tmp, host); - - strncpy(address, tmp, maxSize - 1); - address[maxSize-1] = '\0'; - return TRUE; -} - /* * Strip out any menu codes */ @@ -422,8 +406,8 @@ char *wxStripMenuCodes (char *in, char *out) wxString wxStripMenuCodes(const wxString& str) { - char *buf = new char[str.Length() + 1]; - wxStripMenuCodes((char*) (const char*) str, buf); + wxChar *buf = new wxChar[str.Length() + 1]; + wxStripMenuCodes(WXSTRINGCAST str, buf); wxString str1(buf); delete[] buf; return str1; @@ -440,53 +424,54 @@ wxString wxStripMenuCodes(const wxString& str) * */ -static wxWindow *wxFindWindowByLabel1 (const wxString& title, wxWindow * parent); - wxWindow * wxFindWindowByLabel (const wxString& title, wxWindow * parent) { - if (parent) + if (parent) { - return wxFindWindowByLabel1 (title, parent); + return wxFindWindowByLabel1(title, parent); } - else + else { - for (wxNode * node = wxTopLevelWindows.First (); node; node = node->Next ()) + for ( wxWindowList::Node * node = wxTopLevelWindows.GetFirst(); + node; + node = node->GetNext() ) { - wxWindow *win = (wxWindow *) node->Data (); - wxWindow *retwin = wxFindWindowByLabel1 (title, win); - if (retwin) - return retwin; + wxWindow *win = node->GetData(); + wxWindow *retwin = wxFindWindowByLabel1 (title, win); + if (retwin) + return retwin; } // for() } - return (wxWindow *) NULL; + return (wxWindow *) NULL; } // Recursive static wxWindow * wxFindWindowByLabel1 (const wxString& title, wxWindow * parent) { - if (parent) + if (parent) { - if (parent->GetLabel() == title) - return parent; + if (parent->GetLabel() == title) + return parent; } - if (parent) + if (parent) { - for (wxNode * node = parent->GetChildren().First (); node; node = node->Next ()) + for ( wxNode * node = parent->GetChildren().GetFirst(); + node; + node = node->GetNext() ) { - wxWindow *win = (wxWindow *) node->Data (); - wxWindow *retwin = wxFindWindowByLabel1 (title, win); - if (retwin) - return retwin; - } // for() + wxWindow *win = (wxWindow *)node->GetData(); + wxWindow *retwin = wxFindWindowByLabel1 (title, win); + if (retwin) + return retwin; + } } - return (wxWindow *) NULL; // Not found - + return (wxWindow *) NULL; // Not found } /* @@ -495,28 +480,29 @@ wxFindWindowByLabel1 (const wxString& title, wxWindow * parent) * */ -static wxWindow *wxFindWindowByName1 (const wxString& title, wxWindow * parent); - wxWindow * wxFindWindowByName (const wxString& title, wxWindow * parent) { - if (parent) + if (parent) { - return wxFindWindowByName1 (title, parent); + return wxFindWindowByName1 (title, parent); } - else + else { - for (wxNode * node = wxTopLevelWindows.First (); node; node = node->Next ()) + for ( wxWindowList::Node * node = wxTopLevelWindows.GetFirst(); + node; + node = node->GetNext() ) { - wxWindow *win = (wxWindow *) node->Data (); - wxWindow *retwin = wxFindWindowByName1 (title, win); - if (retwin) - return retwin; - } // for() + wxWindow *win = node->GetData(); + wxWindow *retwin = wxFindWindowByName1 (title, win); + if (retwin) + return retwin; + } } - // Failed? Try by label instead. - return wxFindWindowByLabel(title, parent); + + // Failed? Try by label instead. + return wxFindWindowByLabel(title, parent); } // Recursive @@ -748,6 +734,29 @@ whereami(name) #endif + +// Yield to other apps/messages and disable user input +bool wxSafeYield(wxWindow *win) +{ + wxWindowList::Node *node; + for ( node = wxTopLevelWindows.GetFirst(); node; node = node->GetNext() ) + { + node->GetData()->Enable(FALSE); + } + + // always enable ourselves + if ( win ) + win->Enable(TRUE); + bool rc = wxYield(); + + for ( node = wxTopLevelWindows.GetFirst(); node; node = node->GetNext() ) + { + node->GetData()->Enable(TRUE); + } + + return rc; +} + /* * N.B. these convenience functions must be separate from msgdlgg.cpp, textdlgg.cpp * since otherwise the generic code may be pulled in unnecessarily. @@ -801,37 +810,81 @@ int isascii( int c ) } #endif -bool wxGetUserId(wxString& buf) +// ---------------------------------------------------------------------------- +// network and user id functions +// ---------------------------------------------------------------------------- + +// Get Full RFC822 style email address +bool wxGetEmailAddress(wxChar *address, int maxSize) { - bool success = wxGetUserId(wxBuffer, 500); - if (success) - { - buf = wxBuffer; - return TRUE; - } - else + wxString email = wxGetEmailAddress(); + if ( !email ) return FALSE; + + wxStrncpy(address, email, maxSize - 1); + address[maxSize - 1] = _T('\0'); + + return TRUE; } -bool wxGetUserName(wxString& buf) +wxString wxGetEmailAddress() { - bool success = wxGetUserName(wxBuffer, 500); - if (success) + wxString email; + + wxString host = wxGetHostName(); + if ( !!host ) { - buf = wxBuffer; - return TRUE; + wxString user = wxGetUserId(); + if ( !!user ) + { + wxString email(user); + email << _T('@') << host; + } } - else - return FALSE; + + return email; } -bool wxGetHostName(wxString& buf) +wxString wxGetUserId() +{ + static const int maxLoginLen = 256; // FIXME arbitrary number + + wxString buf; + bool ok = wxGetUserId(buf.GetWriteBuf(maxLoginLen), maxLoginLen); + buf.UngetWriteBuf(); + + if ( !ok ) + buf.Empty(); + + return buf; +} + +wxString wxGetUserName() +{ + static const int maxUserNameLen = 1024; // FIXME arbitrary number + + wxString buf; + bool ok = wxGetUserName(buf.GetWriteBuf(maxUserNameLen), maxUserNameLen); + buf.UngetWriteBuf(); + + if ( !ok ) + buf.Empty(); + + return buf; +} + +wxString wxGetHostName() { static const size_t hostnameSize = 257; + + wxString buf; bool ok = wxGetHostName(buf.GetWriteBuf(hostnameSize), hostnameSize); buf.UngetWriteBuf(); - return ok; + if ( !ok ) + buf.Empty(); + + return buf; }