X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/230c90774f48fd3ba9a9f1c3af5354fbad94843f..cd7d36c065d638f48cff0845a43e35b9ed1e25f6:/src/common/utilscmn.cpp diff --git a/src/common/utilscmn.cpp b/src/common/utilscmn.cpp index b79b0847e1..318fce96b1 100644 --- a/src/common/utilscmn.cpp +++ b/src/common/utilscmn.cpp @@ -72,7 +72,6 @@ #include "wx/colordlg.h" #include "wx/fontdlg.h" #include "wx/notebook.h" - #include "wx/frame.h" #include "wx/statusbr.h" #endif // wxUSE_GUI @@ -97,6 +96,7 @@ #if defined(__WXMSW__) #include "wx/msw/private.h" #include "wx/msw/registry.h" + #include // needed for SHELLEXECUTEINFO #endif #if wxUSE_BASE @@ -287,83 +287,136 @@ wxString wxGetDataDir() return dir; } -int wxGetOsVersion(int *verMaj, int *verMin) +bool wxIsPlatformLittleEndian() { - // we want this function to work even if there is no wxApp - wxConsoleAppTraits traitsConsole; - wxAppTraits *traits = wxTheApp ? wxTheApp->GetTraits() : NULL; - if ( ! traits ) - traits = &traitsConsole; + // Are we little or big endian? This method is from Harbison & Steele. + union + { + long l; + char c[sizeof(long)]; + } u; + u.l = 1; - wxToolkitInfo& info = traits->GetToolkitInfo(); - if ( verMaj ) - *verMaj = info.versionMajor; - if ( verMin ) - *verMin = info.versionMinor; - return info.os; + return u.c[0] == 1; } + /* * Class to make it easier to specify platform-dependent values */ wxArrayInt* wxPlatform::sm_customPlatforms = NULL; -wxPlatform& wxPlatform::Is(int platform, long value) +void wxPlatform::Copy(const wxPlatform& platform) +{ + m_longValue = platform.m_longValue; + m_doubleValue = platform.m_doubleValue; + m_stringValue = platform.m_stringValue; +} + +wxPlatform wxPlatform::If(int platform, long value) +{ + if (Is(platform)) + return wxPlatform(value); + else + return wxPlatform(); +} + +wxPlatform wxPlatform::IfNot(int platform, long value) +{ + if (!Is(platform)) + return wxPlatform(value); + else + return wxPlatform(); +} + +wxPlatform& wxPlatform::ElseIf(int platform, long value) { - if (wxPlatformIs(platform)) + if (Is(platform)) m_longValue = value; return *this; } -wxPlatform& wxPlatform::IsNot(int platform, long value) +wxPlatform& wxPlatform::ElseIfNot(int platform, long value) { - if (!wxPlatformIs(platform)) + if (!Is(platform)) m_longValue = value; return *this; } -wxPlatform& wxPlatform::Is(int platform, double value) +wxPlatform wxPlatform::If(int platform, double value) { - if (wxPlatformIs(platform)) + if (Is(platform)) + return wxPlatform(value); + else + return wxPlatform(); +} + +wxPlatform wxPlatform::IfNot(int platform, double value) +{ + if (!Is(platform)) + return wxPlatform(value); + else + return wxPlatform(); +} + +wxPlatform& wxPlatform::ElseIf(int platform, double value) +{ + if (Is(platform)) m_doubleValue = value; return *this; } -wxPlatform& wxPlatform::IsNot(int platform, double value) +wxPlatform& wxPlatform::ElseIfNot(int platform, double value) { - if (!wxPlatformIs(platform)) + if (!Is(platform)) m_doubleValue = value; return *this; } -wxPlatform& wxPlatform::Is(int platform, const wxString& value) +wxPlatform wxPlatform::If(int platform, const wxString& value) +{ + if (Is(platform)) + return wxPlatform(value); + else + return wxPlatform(); +} + +wxPlatform wxPlatform::IfNot(int platform, const wxString& value) { - if (wxPlatformIs(platform)) + if (!Is(platform)) + return wxPlatform(value); + else + return wxPlatform(); +} + +wxPlatform& wxPlatform::ElseIf(int platform, const wxString& value) +{ + if (Is(platform)) m_stringValue = value; return *this; } -wxPlatform& wxPlatform::IsNot(int platform, const wxString& value) +wxPlatform& wxPlatform::ElseIfNot(int platform, const wxString& value) { - if (!wxPlatformIs(platform)) + if (!Is(platform)) m_stringValue = value; return *this; } -wxPlatform& wxPlatform::Default(long value) +wxPlatform& wxPlatform::Else(long value) { m_longValue = value; return *this; } -wxPlatform& wxPlatform::Default(double value) +wxPlatform& wxPlatform::Else(double value) { m_doubleValue = value; return *this; } -wxPlatform& wxPlatform::Default(const wxString& value) +wxPlatform& wxPlatform::Else(const wxString& value) { m_stringValue = value; return *this; @@ -384,50 +437,62 @@ void wxPlatform::ClearPlatforms() /// Function for testing current platform -bool wxPlatform::PlatformIs(int platform) +bool wxPlatform::Is(int platform) { #ifdef __WXMSW__ - if (platform == wxMSW) + if (platform == wxOS_WINDOWS) return true; #endif #ifdef __WXWINCE__ - if (platform == wxWinCE) + if (platform == wxOS_WINDOWS_CE) return true; #endif + +#if 0 + +// FIXME: wxWinPocketPC and wxWinSmartPhone are unknown symbols + #if defined(__WXWINCE__) && defined(__POCKETPC__) if (platform == wxWinPocketPC) return true; #endif #if defined(__WXWINCE__) && defined(__SMARTPHONE__) - if (platform == wxWinSmartphone) + if (platform == wxWinSmartPhone) return true; #endif + +#endif + #ifdef __WXGTK__ - if (platform == wxGTK) + if (platform == wxPORT_GTK) return true; #endif #ifdef __WXMAC__ - if (platform == wxMac) + if (platform == wxPORT_MAC) return true; #endif #ifdef __WXX11__ - if (platform == wxX11) + if (platform == wxPORT_X11) return true; #endif #ifdef __UNIX__ - if (platform == wxUnix) + if (platform == wxOS_UNIX) return true; #endif #ifdef __WXMGL__ - if (platform == wxMGL) + if (platform == wxPORT_MGL) + return true; +#endif +#ifdef __OS2__ + if (platform == wxOS_OS2) return true; #endif -#ifdef __WXOS2__ - if (platform == wxOS2) +#ifdef __WXPM__ + if (platform == wxPORT_PM) return true; #endif -#ifdef __WXCOCA__ - if (platform == wxCocoa) +#ifdef __WXCOCOA__ + if (platform == wxPORT_MAC) return true; #endif @@ -751,8 +816,8 @@ bool wxLaunchDefaultBrowser(const wxString& urlOrig, int flags) #elif defined(__WXMAC__) OSStatus err; ICInstance inst; - SInt32 startSel; - SInt32 endSel; + long int startSel; + long int endSel; err = ICStart(&inst, 'STKA'); // put your app creator code here if (err == noErr) @@ -764,7 +829,7 @@ bool wxLaunchDefaultBrowser(const wxString& urlOrig, int flags) { ConstStr255Param hint = 0; startSel = 0; - endSel = url.Length(); + endSel = url.length(); err = ICLaunchURL(inst, hint, url.fn_str(), endSel, &startSel, &endSel); if (err != noErr) wxLogDebug(wxT("ICLaunchURL error %d"), (int) err); @@ -859,15 +924,18 @@ wxRegisterId (long id) wxCurrentId = id + 1; } -#if wxUSE_MENUS - // ---------------------------------------------------------------------------- // Menu accelerators related functions // ---------------------------------------------------------------------------- wxChar *wxStripMenuCodes(const wxChar *in, wxChar *out) { +#if wxUSE_MENUS wxString s = wxMenuItem::GetLabelFromText(in); +#else + wxString str(in); + wxString s = wxStripMenuCodes(str); +#endif // wxUSE_MENUS if ( out ) { // go smash their buffer if it's not big enough - I love char * params @@ -883,8 +951,10 @@ wxChar *wxStripMenuCodes(const wxChar *in, wxChar *out) return out; } -wxString wxStripMenuCodes(const wxString& in) +wxString wxStripMenuCodes(const wxString& in, int flags) { + wxASSERT_MSG( flags, _T("this is useless to call without any flags") ); + wxString out; size_t len = in.length(); @@ -893,7 +963,7 @@ wxString wxStripMenuCodes(const wxString& in) for ( size_t n = 0; n < len; n++ ) { wxChar ch = in[n]; - if ( ch == _T('&') ) + if ( (flags & wxStrip_Mnemonics) && ch == _T('&') ) { // skip it, it is used to introduce the accel char (or to quote // itself in which case it should still be skipped): note that it @@ -908,7 +978,7 @@ wxString wxStripMenuCodes(const wxString& in) ch = in[n]; } } - else if ( ch == _T('\t') ) + else if ( (flags & wxStrip_Accel) && ch == _T('\t') ) { // everything after TAB is accel string, exit the loop break; @@ -920,8 +990,6 @@ wxString wxStripMenuCodes(const wxString& in) return out; } -#endif // wxUSE_MENUS - // ---------------------------------------------------------------------------- // Window search functions // ---------------------------------------------------------------------------- @@ -956,12 +1024,12 @@ int wxFindMenuItemId (wxFrame * frame, const wxString& menuString, const wxString& itemString) { #if wxUSE_MENUS - wxMenuBar *menuBar = frame->GetMenuBar (); - if ( menuBar ) - return menuBar->FindMenuItem (menuString, itemString); + wxMenuBar *menuBar = frame->GetMenuBar (); + if ( menuBar ) + return menuBar->FindMenuItem (menuString, itemString); #endif // wxUSE_MENUS - return wxNOT_FOUND; + return wxNOT_FOUND; } // Try to find the deepest child that contains 'pt'. @@ -1003,16 +1071,16 @@ wxWindow* wxFindWindowAtPoint(wxWindow* win, const wxPoint& pt) wxPoint pos = win->GetPosition(); wxSize sz = win->GetSize(); - if (win->GetParent()) + if ( !win->IsTopLevel() && win->GetParent() ) { pos = win->GetParent()->ClientToScreen(pos); } wxRect rect(pos, sz); - if (rect.Inside(pt)) + if (rect.Contains(pt)) return win; - else - return NULL; + + return NULL; } wxWindow* wxGenericFindWindowAtPoint(const wxPoint& pt) @@ -1138,7 +1206,7 @@ wxColour wxGetColourFromUser(wxWindow *parent, const wxColour& colInit, const wx wxColour colRet; wxColourDialog dialog(parent, &data); - if (!caption.IsEmpty()) + if (!caption.empty()) dialog.SetTitle(caption); if ( dialog.ShowModal() == wxID_OK ) { @@ -1163,7 +1231,7 @@ wxFont wxGetFontFromUser(wxWindow *parent, const wxFont& fontInit, const wxStrin wxFont fontRet; wxFontDialog dialog(parent, data); - if (!caption.IsEmpty()) + if (!caption.empty()) dialog.SetTitle(caption); if ( dialog.ShowModal() == wxID_OK ) {