X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/b3c861501a451503b31c075ccb59d16b0ae01e99..29efc6e4a478652d6f59fb3f5ca7990d78a8ead4:/src/common/platinfo.cpp diff --git a/src/common/platinfo.cpp b/src/common/platinfo.cpp index df765b153a..fbb27bfd94 100644 --- a/src/common/platinfo.cpp +++ b/src/common/platinfo.cpp @@ -33,6 +33,12 @@ #include "wx/apptrait.h" +// global object +// VERY IMPORTANT: do not use the default constructor since it would +// try to init the wxPlatformInfo instance using +// gs_platInfo itself! +static wxPlatformInfo gs_platInfo(wxPORT_UNKNOWN); + // ---------------------------------------------------------------------------- // constants // ---------------------------------------------------------------------------- @@ -56,8 +62,14 @@ static const wxChar* const wxOperatingSystemIdNames[] = _T("AIX"), _T("HPUX"), + _T("Other Unix"), + _T("Other Unix"), + _T("DOS"), - _T("OS/2") + _T("OS/2"), + + _T("PalmOS"), + _T("PalmOS(Over Linux)"), }; static const wxChar* const wxPortIdNames[] = @@ -117,26 +129,8 @@ static unsigned wxGetIndexFromEnumValue(int value) wxPlatformInfo::wxPlatformInfo() { - // autodetect all informations - const wxAppTraits * const traits = wxTheApp ? wxTheApp->GetTraits() : NULL; - if ( !traits ) - { - wxFAIL_MSG( _T("failed to initialize wxPlatformInfo") ); - - m_port = wxPORT_UNKNOWN; - m_usingUniversal = false; - m_tkVersionMajor = - m_tkVersionMinor = 0; - } - else - { - m_port = traits->GetToolkitVersion(&m_tkVersionMajor, &m_tkVersionMinor); - m_usingUniversal = traits->IsUsingUniversalWidgets(); - } - - m_os = wxGetOsVersion(&m_osVersionMajor, &m_osVersionMinor); - m_endian = wxIsPlatformLittleEndian() ? wxENDIAN_LITTLE : wxENDIAN_BIG; - m_arch = wxIsPlatform64Bit() ? wxARCH_64 : wxARCH_32; + // just copy platform info for currently running platform + *this = Get(); } wxPlatformInfo::wxPlatformInfo(wxPortId pid, int tkMajor, int tkMinor, @@ -171,6 +165,45 @@ bool wxPlatformInfo::operator==(const wxPlatformInfo &t) const m_endian == t.m_endian; } +void wxPlatformInfo::InitForCurrentPlatform() +{ + // autodetect all informations + const wxAppTraits * const traits = wxTheApp ? wxTheApp->GetTraits() : NULL; + if ( !traits ) + { + wxFAIL_MSG( _T("failed to initialize wxPlatformInfo") ); + + m_port = wxPORT_UNKNOWN; + m_usingUniversal = false; + m_tkVersionMajor = + m_tkVersionMinor = 0; + } + else + { + m_port = traits->GetToolkitVersion(&m_tkVersionMajor, &m_tkVersionMinor); + m_usingUniversal = traits->IsUsingUniversalWidgets(); + } + + m_os = wxGetOsVersion(&m_osVersionMajor, &m_osVersionMinor); + m_endian = wxIsPlatformLittleEndian() ? wxENDIAN_LITTLE : wxENDIAN_BIG; + m_arch = wxIsPlatform64Bit() ? wxARCH_64 : wxARCH_32; +} + +/* static */ +const wxPlatformInfo& wxPlatformInfo::Get() +{ + static bool initialized = false; + if ( !initialized ) + { + gs_platInfo.InitForCurrentPlatform(); + initialized = true; + } + + return gs_platInfo; +} + + + // ---------------------------------------------------------------------------- // wxPlatformInfo - enum -> string conversions // ---------------------------------------------------------------------------- @@ -294,11 +327,11 @@ wxArchitecture wxPlatformInfo::GetArch(const wxString &arch) wxEndianness wxPlatformInfo::GetEndianness(const wxString& end) { - wxString endl(end.Lower()); - if ( end.StartsWith(wxT("little")) ) + const wxString endl(end.Lower()); + if ( endl.StartsWith(wxT("little")) ) return wxENDIAN_LITTLE; - if ( end.StartsWith(wxT("big")) ) + if ( endl.StartsWith(wxT("big")) ) return wxENDIAN_BIG; return wxENDIAN_INVALID;