1 /////////////////////////////////////////////////////////////////////////////// 2 // Name: wx/platinfo.h 3 // Purpose: declaration of the wxPlatformInfo class 4 // Author: Francesco Montorsi 5 // Modified by: 6 // Created: 07.07.2006 (based on wxToolkitInfo) 7 // Copyright: (c) 2006 Francesco Montorsi 8 // Licence: wxWindows licence 9 /////////////////////////////////////////////////////////////////////////////// 10 11 #ifndef _WX_PLATINFO_H_ 12 #define _WX_PLATINFO_H_ 13 14 #include "wx/string.h" 15 16 // ---------------------------------------------------------------------------- 17 // wxPlatformInfo enums & structs 18 // ---------------------------------------------------------------------------- 19 20 // VERY IMPORTANT: when changing these enum values, also change the relative 21 // string tables in src/common/platinfo.cpp 22 23 24 // families & sub-families of operating systems 25 enum wxOperatingSystemId 26 { 27 wxOS_UNKNOWN = 0, // returned on error 28 29 wxOS_MAC_OS = 1 << 0, // Apple Mac OS 8/9/X with Mac paths 30 wxOS_MAC_OSX_DARWIN = 1 << 1, // Apple Mac OS X with Unix paths 31 wxOS_MAC = wxOS_MAC_OS|wxOS_MAC_OSX_DARWIN, 32 33 wxOS_WINDOWS_9X = 1 << 2, // Windows 9x family (95/98/ME) 34 wxOS_WINDOWS_NT = 1 << 3, // Windows NT family (NT/2000/XP) 35 wxOS_WINDOWS_MICRO = 1 << 4, // MicroWindows 36 wxOS_WINDOWS_CE = 1 << 5, // Windows CE (Window Mobile) 37 wxOS_WINDOWS = wxOS_WINDOWS_9X | 38 wxOS_WINDOWS_NT | 39 wxOS_WINDOWS_MICRO | 40 wxOS_WINDOWS_CE, 41 42 wxOS_UNIX_LINUX = 1 << 6, // Linux 43 wxOS_UNIX_FREEBSD = 1 << 7, // FreeBSD 44 wxOS_UNIX_OPENBSD = 1 << 8, // OpenBSD 45 wxOS_UNIX_NETBSD = 1 << 9, // NetBSD 46 wxOS_UNIX_SOLARIS = 1 << 10, // SunOS 47 wxOS_UNIX_AIX = 1 << 11, // AIX 48 wxOS_UNIX_HPUX = 1 << 12, // HP/UX 49 wxOS_UNIX = wxOS_UNIX_LINUX | 50 wxOS_UNIX_FREEBSD | 51 wxOS_UNIX_OPENBSD | 52 wxOS_UNIX_NETBSD | 53 wxOS_UNIX_SOLARIS | 54 wxOS_UNIX_AIX | 55 wxOS_UNIX_HPUX, 56 57 // 1<<13 and 1<<14 available for other Unix flavours 58 59 wxOS_DOS = 1 << 15, // Microsoft DOS 60 wxOS_OS2 = 1 << 16 // OS/2 61 }; 62 63 // list of wxWidgets ports - some of them can be used with more than 64 // a single toolkit. 65 enum wxPortId 66 { 67 wxPORT_UNKNOWN = 0, // returned on error 68 69 wxPORT_BASE = 1 << 0, // wxBase, no native toolkit used 70 71 wxPORT_MSW = 1 << 1, // wxMSW, native toolkit is Windows API 72 wxPORT_MOTIF = 1 << 2, // wxMotif, using [Open]Motif or Lesstif 73 wxPORT_GTK = 1 << 3, // wxGTK, using GTK+ 1.x, 2.x, GPE or Maemo 74 wxPORT_DFB = 1 << 4, // wxDFB, using wxUniversal 75 wxPORT_X11 = 1 << 5, // wxX11, using wxUniversal 76 wxPORT_PM = 1 << 6, // wxOS2, using OS/2 Presentation Manager 77 wxPORT_OS2 = wxPORT_PM, // wxOS2, using OS/2 Presentation Manager 78 wxPORT_MAC = 1 << 7, // wxOSX (former wxMac), using Cocoa, Carbon or iPhone API 79 wxPORT_OSX = wxPORT_MAC, // wxOSX, using Cocoa, Carbon or iPhone API 80 wxPORT_COCOA = 1 << 8, // wxCocoa, using Cocoa NextStep/Mac API 81 wxPORT_WINCE = 1 << 9 // wxWinCE, toolkit is WinCE SDK API 82 }; 83 84 // architecture of the operating system 85 // (regardless of the build environment of wxWidgets library - see 86 // wxIsPlatform64bit documentation for more info) 87 enum wxArchitecture 88 { 89 wxARCH_INVALID = -1, // returned on error 90 91 wxARCH_32, // 32 bit 92 wxARCH_64, 93 94 wxARCH_MAX 95 }; 96 97 98 // endian-ness of the machine 99 enum wxEndianness 100 { 101 wxENDIAN_INVALID = -1, // returned on error 102 103 wxENDIAN_BIG, // 4321 104 wxENDIAN_LITTLE, // 1234 105 wxENDIAN_PDP, // 3412 106 107 wxENDIAN_MAX 108 }; 109 110 // informations about a linux distro returned by the lsb_release utility 111 struct wxLinuxDistributionInfo 112 { 113 wxString Id; 114 wxString Release; 115 wxString CodeName; 116 wxString Description; 117 118 bool operator==(const wxLinuxDistributionInfo& ldi) const 119 { 120 return Id == ldi.Id && 121 Release == ldi.Release && 122 CodeName == ldi.CodeName && 123 Description == ldi.Description; 124 } 125 126 bool operator!=(const wxLinuxDistributionInfo& ldi) const 127 { return !(*this == ldi); } 128 }; 129 130 131 // ---------------------------------------------------------------------------- 132 // wxPlatformInfo 133 // ---------------------------------------------------------------------------- 134 135 // Information about the toolkit that the app is running under and some basic 136 // platform and architecture info 137 class WXDLLIMPEXP_BASE wxPlatformInfo 138 { 139 public: 140 wxPlatformInfo(); 141 wxPlatformInfo(wxPortId pid, 142 int tkMajor = -1, int tkMinor = -1, 143 wxOperatingSystemId id = wxOS_UNKNOWN, 144 int osMajor = -1, int osMinor = -1, 145 wxArchitecture arch = wxARCH_INVALID, 146 wxEndianness endian = wxENDIAN_INVALID, 147 bool usingUniversal = false); 148 149 // default copy ctor, assignment operator and dtor are ok 150 151 bool operator==(const wxPlatformInfo &t) const; 152 153 bool operator!=(const wxPlatformInfo &t) const 154 { return !(*this == t); } 155 156 // Gets a wxPlatformInfo already initialized with the values for 157 // the currently running platform. 158 static const wxPlatformInfo& Get(); 159 160 161 162 // string -> enum conversions 163 // --------------------------------- 164 165 static wxOperatingSystemId GetOperatingSystemId(const wxString &name); 166 static wxPortId GetPortId(const wxString &portname); 167 168 static wxArchitecture GetArch(const wxString &arch); 169 static wxEndianness GetEndianness(const wxString &end); 170 171 // enum -> string conversions 172 // --------------------------------- 173 174 static wxString GetOperatingSystemFamilyName(wxOperatingSystemId os); 175 static wxString GetOperatingSystemIdName(wxOperatingSystemId os); 176 static wxString GetPortIdName(wxPortId port, bool usingUniversal); 177 static wxString GetPortIdShortName(wxPortId port, bool usingUniversal); 178 179 static wxString GetArchName(wxArchitecture arch); 180 static wxString GetEndiannessName(wxEndianness end); 181 182 183 // getters 184 // ----------------- 185 GetOSMajorVersion()186 int GetOSMajorVersion() const 187 { return m_osVersionMajor; } GetOSMinorVersion()188 int GetOSMinorVersion() const 189 { return m_osVersionMinor; } 190 191 // return true if the OS version >= major.minor CheckOSVersion(int major,int minor)192 bool CheckOSVersion(int major, int minor) const 193 { 194 return DoCheckVersion(GetOSMajorVersion(), 195 GetOSMinorVersion(), 196 major, 197 minor); 198 } 199 GetToolkitMajorVersion()200 int GetToolkitMajorVersion() const 201 { return m_tkVersionMajor; } GetToolkitMinorVersion()202 int GetToolkitMinorVersion() const 203 { return m_tkVersionMinor; } 204 CheckToolkitVersion(int major,int minor)205 bool CheckToolkitVersion(int major, int minor) const 206 { 207 return DoCheckVersion(GetToolkitMajorVersion(), 208 GetToolkitMinorVersion(), 209 major, 210 minor); 211 } 212 IsUsingUniversalWidgets()213 bool IsUsingUniversalWidgets() const 214 { return m_usingUniversal; } 215 GetOperatingSystemId()216 wxOperatingSystemId GetOperatingSystemId() const 217 { return m_os; } GetLinuxDistributionInfo()218 wxLinuxDistributionInfo GetLinuxDistributionInfo() const 219 { return m_ldi; } GetPortId()220 wxPortId GetPortId() const 221 { return m_port; } GetArchitecture()222 wxArchitecture GetArchitecture() const 223 { return m_arch; } GetEndianness()224 wxEndianness GetEndianness() const 225 { return m_endian; } 226 227 228 // string getters 229 // ----------------- 230 GetOperatingSystemFamilyName()231 wxString GetOperatingSystemFamilyName() const 232 { return GetOperatingSystemFamilyName(m_os); } GetOperatingSystemIdName()233 wxString GetOperatingSystemIdName() const 234 { return GetOperatingSystemIdName(m_os); } GetPortIdName()235 wxString GetPortIdName() const 236 { return GetPortIdName(m_port, m_usingUniversal); } GetPortIdShortName()237 wxString GetPortIdShortName() const 238 { return GetPortIdShortName(m_port, m_usingUniversal); } GetArchName()239 wxString GetArchName() const 240 { return GetArchName(m_arch); } GetEndiannessName()241 wxString GetEndiannessName() const 242 { return GetEndiannessName(m_endian); } GetOperatingSystemDescription()243 wxString GetOperatingSystemDescription() const 244 { return m_osDesc; } GetDesktopEnvironment()245 wxString GetDesktopEnvironment() const 246 { return m_desktopEnv; } 247 248 static wxString GetOperatingSystemDirectory(); 249 // doesn't make sense to store inside wxPlatformInfo the OS directory, 250 // thus this function is static; note that this function simply calls 251 // wxGetOSDirectory() and is here just to make it easier for the user to 252 // find it that feature (global functions can be difficult to find in the docs) 253 254 // setters 255 // ----------------- 256 SetOSVersion(int major,int minor)257 void SetOSVersion(int major, int minor) 258 { m_osVersionMajor=major; m_osVersionMinor=minor; } SetToolkitVersion(int major,int minor)259 void SetToolkitVersion(int major, int minor) 260 { m_tkVersionMajor=major; m_tkVersionMinor=minor; } 261 SetOperatingSystemId(wxOperatingSystemId n)262 void SetOperatingSystemId(wxOperatingSystemId n) 263 { m_os = n; } SetOperatingSystemDescription(const wxString & desc)264 void SetOperatingSystemDescription(const wxString& desc) 265 { m_osDesc = desc; } SetPortId(wxPortId n)266 void SetPortId(wxPortId n) 267 { m_port = n; } SetArchitecture(wxArchitecture n)268 void SetArchitecture(wxArchitecture n) 269 { m_arch = n; } SetEndianness(wxEndianness n)270 void SetEndianness(wxEndianness n) 271 { m_endian = n; } 272 SetDesktopEnvironment(const wxString & de)273 void SetDesktopEnvironment(const wxString& de) 274 { m_desktopEnv = de; } SetLinuxDistributionInfo(const wxLinuxDistributionInfo & di)275 void SetLinuxDistributionInfo(const wxLinuxDistributionInfo& di) 276 { m_ldi = di; } 277 278 279 // miscellaneous 280 // ----------------- 281 IsOk()282 bool IsOk() const 283 { 284 return m_osVersionMajor != -1 && m_osVersionMinor != -1 && 285 m_os != wxOS_UNKNOWN && 286 !m_osDesc.IsEmpty() && 287 m_tkVersionMajor != -1 && m_tkVersionMinor != -1 && 288 m_port != wxPORT_UNKNOWN && 289 m_arch != wxARCH_INVALID && 290 m_endian != wxENDIAN_INVALID; 291 292 // do not check linux-specific info; it's ok to have them empty 293 } 294 295 296 protected: DoCheckVersion(int majorCur,int minorCur,int major,int minor)297 static bool DoCheckVersion(int majorCur, int minorCur, int major, int minor) 298 { 299 return majorCur > major || (majorCur == major && minorCur >= minor); 300 } 301 302 void InitForCurrentPlatform(); 303 304 305 // OS stuff 306 // ----------------- 307 308 // Version of the OS; valid if m_os != wxOS_UNKNOWN 309 // (-1 means not initialized yet). 310 int m_osVersionMajor, 311 m_osVersionMinor; 312 313 // Operating system ID. 314 wxOperatingSystemId m_os; 315 316 // Operating system description. 317 wxString m_osDesc; 318 319 320 // linux-specific 321 // ----------------- 322 323 wxString m_desktopEnv; 324 wxLinuxDistributionInfo m_ldi; 325 326 327 // toolkit 328 // ----------------- 329 330 // Version of the underlying toolkit 331 // (-1 means not initialized yet; zero means no toolkit). 332 int m_tkVersionMajor, m_tkVersionMinor; 333 334 // name of the wxWidgets port 335 wxPortId m_port; 336 337 // is using wxUniversal widgets? 338 bool m_usingUniversal; 339 340 341 // others 342 // ----------------- 343 344 // architecture of the OS/machine 345 wxArchitecture m_arch; 346 347 // endianness of the machine 348 wxEndianness m_endian; 349 }; 350 351 352 #if WXWIN_COMPATIBILITY_2_6 353 #define wxUNKNOWN_PLATFORM wxOS_UNKNOWN 354 #define wxUnix wxOS_UNIX 355 #define wxWin95 wxOS_WINDOWS_9X 356 #define wxWIN95 wxOS_WINDOWS_9X 357 #define wxWINDOWS_NT wxOS_WINDOWS_NT 358 #define wxMSW wxOS_WINDOWS 359 #define wxWinCE wxOS_WINDOWS_CE 360 #define wxWIN32S wxOS_WINDOWS_9X 361 362 #define wxOS2 wxPORT_OS2 363 #define wxCocoa wxPORT_MAC 364 #define wxMac wxPORT_MAC 365 #define wxMotif wxPORT_MOTIF 366 #define wxGTK wxPORT_GTK 367 #endif // WXWIN_COMPATIBILITY_2_6 368 369 #endif // _WX_PLATINFO_H_ 370