X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/7c0720183f5c78d0f0f99a5935b8ec4e953b4fef..93bfd481b7f2f0fec50dd79fcab52374aa59ebbb:/src/common/utilscmn.cpp diff --git a/src/common/utilscmn.cpp b/src/common/utilscmn.cpp index 190855940f..6c7f69d3b9 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 -#ifdef __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,24 @@ 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 +} + +void wxUsleep(unsigned long milliseconds) +{ + wxMilliSleep(milliseconds); } const wxChar *wxGetInstallPrefix() @@ -292,6 +297,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 +352,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 +365,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 +378,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 +391,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 +486,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(); @@ -496,12 +505,14 @@ static long wxDoExecuteWithCapture(const wxString& command, } } -#endif // wxUSE_STREAMS +#else + wxUnusedVar(output); + wxUnusedVar(error); +#endif // wxUSE_STREAMS/!wxUSE_STREAMS delete process; return rc; -#endif // IO redirection supported } long wxExecute(const wxString& command, wxArrayString& output) @@ -530,7 +541,7 @@ bool wxYieldIfNeeded() return wxTheApp && wxTheApp->Yield(TRUE); } -#endif // __WXBASE__ +#endif // wxUSE_BASE // ============================================================================ // GUI-only functions from now on @@ -538,6 +549,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 +584,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 +700,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 +729,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 +755,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 ) @@ -749,10 +788,18 @@ int wxMessageBox(const wxString& message, const wxString& caption, long style, wxString wxGetTextFromUser(const wxString& message, const wxString& caption, const wxString& defaultValue, wxWindow *parent, - int x, int y, bool WXUNUSED(centre) ) + wxCoord x, wxCoord y, bool centre ) { wxString str; - wxTextEntryDialog dialog(parent, message, caption, defaultValue, wxOK|wxCANCEL, wxPoint(x, y)); + long style = wxTextEntryDialogStyle; + + if (centre) + style |= wxCENTRE; + else + style &= ~wxCENTRE; + + wxTextEntryDialog dialog(parent, message, caption, defaultValue, style, wxPoint(x, y)); + if (dialog.ShowModal() == wxID_OK) { str = dialog.GetValue(); @@ -825,20 +872,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 +879,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 +890,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 +916,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();