X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/636773ddad93b2b9ec98c166a3a41251e52407a8..5f5183d34bbf704e3426673a080d19cf280d5a96:/src/common/utilscmn.cpp diff --git a/src/common/utilscmn.cpp b/src/common/utilscmn.cpp index f9e56b9f2b..2fd1c86901 100644 --- a/src/common/utilscmn.cpp +++ b/src/common/utilscmn.cpp @@ -17,7 +17,14 @@ // headers // ---------------------------------------------------------------------------- -#ifdef __GNUG__ +#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) && !defined(__EMX__) +// Some older compilers (such as EMX) cannot handle +// #pragma interface/implementation correctly, iff +// #pragma implementation is used in _two_ translation +// units (as created by e.g. event.cpp compiled for +// libwx_base and event.cpp compiled for libwx_gui_core). +// So we must not use those pragmas for those compilers in +// such files. #pragma implementation "utils.h" #endif @@ -29,14 +36,13 @@ #endif #ifndef WX_PRECOMP - #include "wx/defs.h" + #include "wx/app.h" #include "wx/string.h" #include "wx/utils.h" #include "wx/intl.h" #include "wx/log.h" #if wxUSE_GUI - #include "wx/app.h" #include "wx/window.h" #include "wx/frame.h" #include "wx/menu.h" @@ -50,9 +56,13 @@ #endif // wxUSE_GUI #endif // WX_PRECOMP -#ifndef __WIN16__ +#include "wx/apptrait.h" + #include "wx/process.h" #include "wx/txtstrm.h" + +#if defined(__WXWINCE__) && wxUSE_DATETIME +#include "wx/datetime.h" #endif #include @@ -74,30 +84,30 @@ #include "wx/statusbr.h" #endif // wxUSE_GUI +#ifndef __WXWINCE__ #include +#else +#include "wx/msw/wince/time.h" +#endif -#ifndef __MWERKS__ +#if !defined(__MWERKS__) && !defined(__WXWINCE__) #include #include #endif -#ifdef __SALFORDC__ - #include -#endif - #ifdef __WXMSW__ #include "wx/msw/private.h" #endif -#if 1 // def __WXBASE__ +#if wxUSE_BASE // ---------------------------------------------------------------------------- // common data // ---------------------------------------------------------------------------- #if WXWIN_COMPATIBILITY_2_2 - const wxChar *wxInternalErrorStr = wxT("wxWindows Internal Error"); - const wxChar *wxFatalErrorStr = wxT("wxWindows Fatal Error"); + const wxChar *wxInternalErrorStr = wxT("wxWidgets Internal Error"); + const wxChar *wxFatalErrorStr = wxT("wxWidgets Fatal Error"); #endif // WXWIN_COMPATIBILITY_2_2 // ============================================================================ @@ -120,33 +130,14 @@ copystring (const wxChar *s) #endif // WXWIN_COMPATIBILITY_2_4 -// Id generation -static long wxCurrentId = 100; - -long -wxNewId (void) -{ - return wxCurrentId++; -} - -long -wxGetCurrentId(void) { return wxCurrentId; } - -void -wxRegisterId (long id) -{ - if (id >= wxCurrentId) - wxCurrentId = id + 1; -} - // ---------------------------------------------------------------------------- // String <-> Number conversions (deprecated) // ---------------------------------------------------------------------------- #if WXWIN_COMPATIBILITY_2_4 -WXDLLEXPORT_DATA(const wxChar *) wxFloatToStringStr = wxT("%.2f"); -WXDLLEXPORT_DATA(const wxChar *) wxDoubleToStringStr = wxT("%.2f"); +WXDLLIMPEXP_DATA_BASE(const wxChar *) wxFloatToStringStr = wxT("%.2f"); +WXDLLIMPEXP_DATA_BASE(const wxChar *) wxDoubleToStringStr = wxT("%.2f"); void StringToFloat (const wxChar *s, float *number) @@ -260,10 +251,19 @@ wxString wxDecToHex(int dec) // Return the current date/time wxString wxNow() { +#ifdef __WXWINCE__ +#if wxUSE_DATETIME + wxDateTime now = wxDateTime::Now(); + return now.Format(); +#else + return wxEmptyString; +#endif +#else time_t now = time((time_t *) NULL); char *date = ctime(&now); date[24] = '\0'; return wxString::FromAscii(date); +#endif } const wxChar *wxGetInstallPrefix() @@ -292,6 +292,21 @@ wxString wxGetDataDir() return dir; } +int wxGetOsVersion(int *verMaj, int *verMin) +{ + // we want this function to work even if there is no wxApp + wxConsoleAppTraits traitsConsole; + wxAppTraits *traits = wxTheApp ? wxTheApp->GetTraits() : NULL; + if ( ! traits ) + traits = &traitsConsole; + + wxToolkitInfo& info = traits->GetToolkitInfo(); + if ( verMaj ) + *verMaj = info.versionMajor; + if ( verMin ) + *verMin = info.versionMinor; + return info.os; +} // ---------------------------------------------------------------------------- // network and user id functions @@ -332,8 +347,7 @@ wxString wxGetUserId() static const int maxLoginLen = 256; // FIXME arbitrary number wxString buf; - bool ok = wxGetUserId(buf.GetWriteBuf(maxLoginLen), maxLoginLen); - buf.UngetWriteBuf(); + bool ok = wxGetUserId(wxStringBuffer(buf, maxLoginLen), maxLoginLen); if ( !ok ) buf.Empty(); @@ -346,8 +360,7 @@ wxString wxGetUserName() static const int maxUserNameLen = 1024; // FIXME arbitrary number wxString buf; - bool ok = wxGetUserName(buf.GetWriteBuf(maxUserNameLen), maxUserNameLen); - buf.UngetWriteBuf(); + bool ok = wxGetUserName(wxStringBuffer(buf, maxUserNameLen), maxUserNameLen); if ( !ok ) buf.Empty(); @@ -360,9 +373,7 @@ wxString wxGetHostName() static const size_t hostnameSize = 257; wxString buf; - bool ok = wxGetHostName(buf.GetWriteBuf(hostnameSize), hostnameSize); - - buf.UngetWriteBuf(); + bool ok = wxGetHostName(wxStringBuffer(buf, hostnameSize), hostnameSize); if ( !ok ) buf.Empty(); @@ -375,9 +386,7 @@ wxString wxGetFullHostName() static const size_t hostnameSize = 257; wxString buf; - bool ok = wxGetFullHostName(buf.GetWriteBuf(hostnameSize), hostnameSize); - - buf.UngetWriteBuf(); + bool ok = wxGetFullHostName(wxStringBuffer(buf, hostnameSize), hostnameSize); if ( !ok ) buf.Empty(); @@ -472,11 +481,6 @@ static long wxDoExecuteWithCapture(const wxString& command, wxArrayString& output, wxArrayString* error) { -#ifdef __WIN16__ - wxFAIL_MSG("Sorry, this version of wxExecute not implemented on WIN16."); - - return 0; -#else // !Win16 // create a wxProcess which will capture the output wxProcess *process = new wxProcess; process->Redirect(); @@ -501,7 +505,6 @@ static long wxDoExecuteWithCapture(const wxString& command, delete process; return rc; -#endif // IO redirection supported } long wxExecute(const wxString& command, wxArrayString& output) @@ -530,7 +533,7 @@ bool wxYieldIfNeeded() return wxTheApp && wxTheApp->Yield(TRUE); } -#endif // __WXBASE__ +#endif // wxUSE_BASE // ============================================================================ // GUI-only functions from now on @@ -538,6 +541,25 @@ bool wxYieldIfNeeded() #if wxUSE_GUI +// Id generation +static long wxCurrentId = 100; + +long +wxNewId (void) +{ + return wxCurrentId++; +} + +long +wxGetCurrentId(void) { return wxCurrentId; } + +void +wxRegisterId (long id) +{ + if (id >= wxCurrentId) + wxCurrentId = id + 1; +} + #if wxUSE_MENUS // ---------------------------------------------------------------------------- @@ -554,7 +576,9 @@ wxChar *wxStripMenuCodes(const wxChar *in, wxChar *out) } else { - out = copystring(s); + // MYcopystring - for easier search... + out = new wxChar[s.length() + 1]; + wxStrcpy(out, s.c_str()); } return out; @@ -668,7 +692,7 @@ wxWindow* wxFindWindowAtPoint(wxWindow* win, const wxPoint& pt) } #endif - wxWindowList::Node *node = win->GetChildren().GetLast(); + wxWindowList::compatibility_iterator node = win->GetChildren().GetLast(); while (node) { wxWindow* child = node->GetData(); @@ -697,7 +721,7 @@ wxWindow* wxGenericFindWindowAtPoint(const wxPoint& pt) // Go backwards through the list since windows // on top are likely to have been appended most // recently. - wxWindowList::Node *node = wxTopLevelWindows.GetLast(); + wxWindowList::compatibility_iterator node = wxTopLevelWindows.GetLast(); while (node) { wxWindow* win = node->GetData(); @@ -723,7 +747,14 @@ wxWindow* wxGenericFindWindowAtPoint(const wxPoint& pt) int wxMessageBox(const wxString& message, const wxString& caption, long style, wxWindow *parent, int WXUNUSED(x), int WXUNUSED(y) ) { - wxMessageDialog dialog(parent, message, caption, style); + long decorated_style = style; + + if ( ( style & ( wxICON_EXCLAMATION | wxICON_HAND | wxICON_INFORMATION | wxICON_QUESTION ) ) == 0 ) + { + decorated_style |= ( style & wxYES ) ? wxICON_QUESTION : wxICON_INFORMATION ; + } + + wxMessageDialog dialog(parent, message, caption, decorated_style); int ans = dialog.ShowModal(); switch ( ans ) @@ -825,20 +856,6 @@ wxFont wxGetFontFromUser(wxWindow *parent, const wxFont& fontInit) } #endif // wxUSE_FONTDLG -// ---------------------------------------------------------------------------- -// missing C RTL functions (FIXME shouldn't be here at all) -// ---------------------------------------------------------------------------- - -#if defined( __MWERKS__ ) && !defined(__MACH__) -char *strdup(const char *s) -{ - return strcpy( (char*) malloc( strlen( s ) + 1 ) , s ) ; -} -int isascii( int c ) -{ - return ( c >= 0 && c < 128 ) ; -} -#endif // __MWERKS__ // ---------------------------------------------------------------------------- // wxSafeYield and supporting functions @@ -846,7 +863,7 @@ int isascii( int c ) void wxEnableTopLevelWindows(bool enable) { - wxWindowList::Node *node; + wxWindowList::compatibility_iterator node; for ( node = wxTopLevelWindows.GetFirst(); node; node = node->GetNext() ) node->GetData()->Enable(enable); } @@ -857,7 +874,7 @@ wxWindowDisabler::wxWindowDisabler(wxWindow *winToSkip) // don't reenable them later m_winDisabled = NULL; - wxWindowList::Node *node; + wxWindowList::compatibility_iterator node; for ( node = wxTopLevelWindows.GetFirst(); node; node = node->GetNext() ) { wxWindow *winTop = node->GetData(); @@ -883,7 +900,7 @@ wxWindowDisabler::wxWindowDisabler(wxWindow *winToSkip) wxWindowDisabler::~wxWindowDisabler() { - wxWindowList::Node *node; + wxWindowList::compatibility_iterator node; for ( node = wxTopLevelWindows.GetFirst(); node; node = node->GetNext() ) { wxWindow *winTop = node->GetData();