1 ///////////////////////////////////////////////////////////////////////////// 2 // Name: platinfo.h 3 // Purpose: interface of wxPlatformInfo 4 // Author: wxWidgets team 5 // Licence: wxWindows licence 6 ///////////////////////////////////////////////////////////////////////////// 7 8 9 /** 10 The following are the operating systems which are recognized by wxWidgets and 11 whose version can be detected at run-time. 12 13 The values of the constants are chosen so that they can be combined as flags; 14 this allows checking for operating system families like e.g. @c wxOS_MAC and @c wxOS_UNIX. 15 16 Note that you can obtain more detailed information about the current OS 17 version in use by checking the major and minor version numbers returned 18 by ::wxGetOsVersion() or by wxPlatformInfo::GetOSMajorVersion(), 19 wxPlatformInfo::GetOSMinorVersion(). 20 */ 21 enum wxOperatingSystemId 22 { 23 wxOS_UNKNOWN = 0, //!< returned on error 24 25 wxOS_MAC_OS = 1 << 0, //!< Apple Mac OS 8/9/X with Mac paths 26 wxOS_MAC_OSX_DARWIN = 1 << 1, //!< Apple Mac OS X with Unix paths 27 28 //! A combination of all @c wxOS_MAC_* values previously listed. 29 wxOS_MAC = wxOS_MAC_OS|wxOS_MAC_OSX_DARWIN, 30 31 wxOS_WINDOWS_9X = 1 << 2, //!< Windows 9x family (95/98/ME) 32 wxOS_WINDOWS_NT = 1 << 3, //!< Windows NT family (NT/2000/XP/Vista/7) 33 wxOS_WINDOWS_MICRO = 1 << 4, //!< MicroWindows 34 wxOS_WINDOWS_CE = 1 << 5, //!< Windows CE (Window Mobile) 35 36 //! A combination of all @c wxOS_WINDOWS_* values previously listed. 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 50 //! A combination of all @c wxOS_UNIX_* values previously listed. 51 wxOS_UNIX = wxOS_UNIX_LINUX | 52 wxOS_UNIX_FREEBSD | 53 wxOS_UNIX_OPENBSD | 54 wxOS_UNIX_NETBSD | 55 wxOS_UNIX_SOLARIS | 56 wxOS_UNIX_AIX | 57 wxOS_UNIX_HPUX, 58 59 wxOS_DOS = 1 << 15, //!< Microsoft DOS 60 wxOS_OS2 = 1 << 16 //!< OS/2 61 }; 62 63 /** 64 The list of wxWidgets ports. 65 66 Some of them can be used with more than a single (native) toolkit; 67 e.g. wxWinCE port sources can be used with smartphones, pocket PCs 68 and handheld devices SDKs. 69 */ 70 enum wxPortId 71 { 72 wxPORT_UNKNOWN = 0, //!< returned on error 73 74 wxPORT_BASE = 1 << 0, //!< wxBase, no native toolkit used 75 76 wxPORT_MSW = 1 << 1, //!< wxMSW, native toolkit is Windows API 77 wxPORT_MOTIF = 1 << 2, //!< wxMotif, using [Open]Motif or Lesstif 78 wxPORT_GTK = 1 << 3, //!< wxGTK, using GTK+ 1.x, 2.x, GPE or Maemo 79 wxPORT_DFB = 1 << 4, //!< wxDFB, using wxUniversal 80 wxPORT_X11 = 1 << 5, //!< wxX11, using wxUniversal 81 wxPORT_OS2 = 1 << 6, //!< wxOS2, using OS/2 Presentation Manager 82 wxPORT_MAC = 1 << 7, //!< wxMac, using Carbon or Classic Mac API 83 wxPORT_COCOA = 1 << 8, //!< wxCocoa, using Cocoa NextStep/Mac API 84 wxPORT_WINCE = 1 << 9 //!< wxWinCE, toolkit is WinCE SDK API 85 }; 86 87 88 /** 89 The architecture of the operating system 90 (regardless of the build environment of wxWidgets library - see ::wxIsPlatform64Bit() 91 documentation for more info). 92 */ 93 enum wxArchitecture 94 { 95 wxARCH_INVALID = -1, //!< returned on error 96 97 wxARCH_32, //!< 32 bit 98 wxARCH_64, //!< 64 bit 99 100 wxARCH_MAX 101 }; 102 103 104 /** 105 The endian-ness of the machine. 106 */ 107 enum wxEndianness 108 { 109 wxENDIAN_INVALID = -1, //!< returned on error 110 111 wxENDIAN_BIG, //!< 4321 112 wxENDIAN_LITTLE, //!< 1234 113 wxENDIAN_PDP, //!< 3412 114 115 wxENDIAN_MAX 116 }; 117 118 /** 119 A structure containing information about a Linux distribution as returned 120 by the @c lsb_release utility. 121 122 See wxGetLinuxDistributionInfo() or wxPlatformInfo::GetLinuxDistributionInfo() 123 for more info. 124 */ 125 struct wxLinuxDistributionInfo 126 { 127 wxString Id; //!< The id of the distribution; e.g. "Ubuntu" 128 wxString Release; //!< The version of the distribution; e.g. "9.04" 129 wxString CodeName; //!< The code name of the distribution; e.g. "jaunty" 130 wxString Description; //!< The description of the distribution; e.g. "Ubuntu 9.04" 131 132 bool operator==(const wxLinuxDistributionInfo& ldi) const; 133 bool operator!=(const wxLinuxDistributionInfo& ldi) const; 134 }; 135 136 137 /** 138 @class wxPlatformInfo 139 140 This class holds information about the operating system, the toolkit and the 141 basic architecture of the machine where the application is currently running. 142 143 This class does not only have @e getters for the information above, it also has 144 @e setters. This allows you to e.g. save the current platform information in a 145 data file (maybe in string form) so that when you later load it, you can easily 146 retrieve (see the static getters for string->enum conversion functions) and store 147 inside a wxPlatformInfo instance (using its setters) the signature of the system 148 which generated it. 149 150 In general however you only need to use the static Get() function and then 151 access the various information for the current platform: 152 @code 153 wxLogMessage("This application is running under %s.", 154 wxPlatformInfo::Get().GetOperatingSystemIdName()); 155 @endcode 156 157 @library{wxbase} 158 @category{cfg} 159 160 @see ::wxGetOsVersion(), wxIsPlatformLittleEndian(), wxIsPlatform64Bit(), 161 wxAppTraits, @ref group_funcmacro_networkuseros 162 */ 163 class wxPlatformInfo 164 { 165 public: 166 167 /** 168 Initializes the instance with the values corresponding to the currently 169 running platform. 170 171 This is a fast operation because it only requires to copy the values 172 internally cached for the currently running platform. 173 174 @see Get() 175 */ 176 wxPlatformInfo(); 177 178 /** 179 Initializes the object using given values. 180 */ 181 wxPlatformInfo(wxPortId pid, 182 int tkMajor = -1, 183 int tkMinor = -1, 184 wxOperatingSystemId id = wxOS_UNKNOWN, 185 int osMajor = -1, 186 int osMinor = -1, 187 wxArchitecture arch = wxARCH_INVALID, 188 wxEndianness endian = wxENDIAN_INVALID); 189 190 191 /** 192 Returns @true if the OS version is at least @c major.minor. 193 194 @see GetOSMajorVersion(), GetOSMinorVersion(), 195 CheckToolkitVersion() 196 */ 197 bool CheckOSVersion(int major, int minor) const; 198 199 /** 200 Returns @true if the toolkit version is at least @c major.minor. 201 202 @see GetToolkitMajorVersion(), 203 GetToolkitMinorVersion(), CheckOSVersion() 204 */ 205 bool CheckToolkitVersion(int major, int minor) const; 206 207 208 /** 209 Returns @true if this instance is fully initialized with valid values. 210 */ 211 bool IsOk() const; 212 213 /** 214 Returns @true if this wxPlatformInfo describes wxUniversal build. 215 */ 216 bool IsUsingUniversalWidgets() const; 217 218 /** 219 Inequality operator. Tests all class' internal variables. 220 */ 221 bool operator!=(const wxPlatformInfo& t) const; 222 223 /** 224 Equality operator. Tests all class' internal variables. 225 */ 226 bool operator==(const wxPlatformInfo& t) const; 227 228 /** 229 Returns the global wxPlatformInfo object, initialized with the values 230 for the currently running platform. 231 */ 232 static const wxPlatformInfo& Get(); 233 234 /** 235 @name Static enum getters 236 237 These getters allow for easy string-to-enumeration-value conversion. 238 */ 239 //@{ 240 241 /** 242 Converts the given string to a wxArchitecture enum value or to 243 @c wxARCH_INVALID if the given string is not a valid architecture string 244 (i.e. does not contain nor @c 32 nor @c 64 strings). 245 */ 246 static wxArchitecture GetArch(const wxString& arch); 247 248 /** 249 Converts the given string to a wxEndianness enum value or to 250 @c wxENDIAN_INVALID if the given string is not a valid endianness 251 string (i.e. does not contain nor little nor big strings). 252 */ 253 static wxEndianness GetEndianness(const wxString& end); 254 255 /** 256 Converts the given string to a wxOperatingSystemId enum value or to @c 257 wxOS_UNKNOWN if the given string is not a valid operating system name. 258 */ 259 static wxOperatingSystemId GetOperatingSystemId(const wxString& name); 260 261 /** 262 Converts the given string to a wxWidgets port ID value or to @c wxPORT_UNKNOWN 263 if the given string does not match any of the wxWidgets canonical name ports 264 ("wxGTK", "wxMSW", etc) nor any of the short wxWidgets name ports ("gtk", "msw", etc). 265 */ 266 static wxPortId GetPortId(const wxString& portname); 267 268 //@} 269 270 271 /** 272 @name Static string-form getters 273 274 These getters allow for easy enumeration-value-to-string conversion. 275 */ 276 //@{ 277 278 /** 279 Returns the name for the given wxArchitecture enumeration value. 280 */ 281 static wxString GetArchName(wxArchitecture arch); 282 283 /** 284 Returns name for the given wxEndianness enumeration value. 285 */ 286 static wxString GetEndiannessName(wxEndianness end); 287 288 /** 289 Returns the operating system family name for the given wxOperatingSystemId 290 enumeration value: @c Unix for @c wxOS_UNIX, @c Macintosh for @c wxOS_MAC, 291 @c Windows for @c wxOS_WINDOWS, @c DOS for @c wxOS_DOS, @c OS/2 for @c wxOS_OS2. 292 */ 293 static wxString GetOperatingSystemFamilyName(wxOperatingSystemId os); 294 295 /** 296 Returns the name for the given operating system ID value. 297 298 This can be a long name (e.g. <tt>Microsoft Windows NT</tt>); 299 use GetOperatingSystemFamilyName() to retrieve a short, generic name. 300 */ 301 static wxString GetOperatingSystemIdName(wxOperatingSystemId os); 302 303 /** 304 Returns the name of the given wxWidgets port ID value. 305 The @a usingUniversal argument specifies whether the port is in its native 306 or wxUniversal variant. 307 308 The returned string always starts with the "wx" prefix and is a mixed-case string. 309 */ 310 static wxString GetPortIdName(wxPortId port, bool usingUniversal); 311 312 /** 313 Returns the short name of the given wxWidgets port ID value. 314 The @a usingUniversal argument specifies whether the port is in its native 315 or wxUniversal variant. 316 317 The returned string does not start with the "wx" prefix and is always lower case. 318 */ 319 static wxString GetPortIdShortName(wxPortId port, 320 bool usingUniversal); 321 322 /** 323 Returns the operating system directory. 324 325 See wxGetOSDirectory() for more info. 326 */ 327 static wxString GetOperatingSystemDirectory(); 328 329 //@} 330 331 332 /** 333 @name Getters 334 */ 335 //@{ 336 337 /** 338 Returns the architecture ID of this wxPlatformInfo instance. 339 */ 340 wxArchitecture GetArchitecture() const; 341 342 /** 343 Returns the endianness ID of this wxPlatformInfo instance. 344 */ 345 wxEndianness GetEndianness() const; 346 347 /** 348 Returns the run-time major version of the OS associated with this 349 wxPlatformInfo instance. 350 351 @see ::wxGetOsVersion(), CheckOSVersion() 352 */ 353 int GetOSMajorVersion() const; 354 355 /** 356 Returns the run-time minor version of the OS associated with this 357 wxPlatformInfo instance. 358 359 @see ::wxGetOsVersion(), CheckOSVersion() 360 */ 361 int GetOSMinorVersion() const; 362 363 /** 364 Returns the operating system ID of this wxPlatformInfo instance. 365 366 See wxGetOsVersion() for more info. 367 */ 368 wxOperatingSystemId GetOperatingSystemId() const; 369 370 /** 371 Returns the description of the operating system of this wxPlatformInfo instance. 372 373 See wxGetOsDescription() for more info. 374 */ 375 wxString GetOperatingSystemDescription() const; 376 377 /** 378 Returns the wxWidgets port ID associated with this wxPlatformInfo instance. 379 */ 380 wxPortId GetPortId() const; 381 382 /** 383 Returns the Linux distribution info associated with this wxPlatformInfo instance. 384 385 See wxGetLinuxDistributionInfo() for more info. 386 */ 387 wxLinuxDistributionInfo GetLinuxDistributionInfo() const; 388 389 /** 390 Returns the desktop environment associated with this wxPlatformInfo instance. 391 392 See wxAppTraits::GetDesktopEnvironment() for more info. 393 */ 394 wxString GetDesktopEnvironment() const; 395 396 /** 397 Returns the run-time major version of the toolkit associated with this 398 wxPlatformInfo instance. 399 400 Note that if GetPortId() returns @c wxPORT_BASE, then this value is zero 401 (unless externally modified with SetToolkitVersion()); that is, no native 402 toolkit is in use. 403 See wxAppTraits::GetToolkitVersion() for more info. 404 405 @see CheckToolkitVersion() 406 */ 407 int GetToolkitMajorVersion() const; 408 409 /** 410 Returns the run-time minor version of the toolkit associated with this 411 wxPlatformInfo instance. 412 413 Note that if GetPortId() returns @c wxPORT_BASE, then this value is zero 414 (unless externally modified with SetToolkitVersion()); that is, no native 415 toolkit is in use. 416 See wxAppTraits::GetToolkitVersion() for more info. 417 418 @see CheckToolkitVersion() 419 */ 420 int GetToolkitMinorVersion() const; 421 422 //@} 423 424 425 /** 426 @name String-form getters 427 */ 428 //@{ 429 430 /** 431 Returns the name for the architecture of this wxPlatformInfo instance. 432 */ 433 wxString GetArchName() const; 434 435 /** 436 Returns the name for the endianness of this wxPlatformInfo instance. 437 */ 438 wxString GetEndiannessName() const; 439 440 /** 441 Returns the operating system family name of the OS associated with this 442 wxPlatformInfo instance. 443 */ 444 wxString GetOperatingSystemFamilyName() const; 445 446 /** 447 Returns the operating system name of the OS associated with this wxPlatformInfo 448 instance. 449 */ 450 wxString GetOperatingSystemIdName() const; 451 452 /** 453 Returns the name of the wxWidgets port ID associated with this wxPlatformInfo 454 instance. 455 */ 456 wxString GetPortIdName() const; 457 458 /** 459 Returns the short name of the wxWidgets port ID associated with this 460 wxPlatformInfo instance. 461 */ 462 wxString GetPortIdShortName() const; 463 464 //@} 465 466 467 468 /** 469 @name Setters 470 */ 471 //@{ 472 473 /** 474 Sets the architecture enum value associated with this wxPlatformInfo instance. 475 */ 476 void SetArchitecture(wxArchitecture n); 477 478 /** 479 Sets the endianness enum value associated with this wxPlatformInfo instance. 480 */ 481 void SetEndianness(wxEndianness n); 482 483 /** 484 Sets the version of the operating system associated with this wxPlatformInfo 485 instance. 486 */ 487 void SetOSVersion(int major, int minor); 488 489 /** 490 Sets the operating system associated with this wxPlatformInfo instance. 491 */ 492 void SetOperatingSystemId(wxOperatingSystemId n); 493 494 /** 495 Sets the wxWidgets port ID associated with this wxPlatformInfo instance. 496 */ 497 void SetPortId(wxPortId n); 498 499 /** 500 Sets the version of the toolkit associated with this wxPlatformInfo instance. 501 */ 502 void SetToolkitVersion(int major, int minor); 503 504 /** 505 Sets the operating system description associated with this wxPlatformInfo instance. 506 */ 507 void SetOperatingSystemDescription(const wxString& desc); 508 509 /** 510 Sets the desktop environment associated with this wxPlatformInfo instance. 511 */ 512 void SetDesktopEnvironment(const wxString& de); 513 514 /** 515 Sets the linux distribution info associated with this wxPlatformInfo instance. 516 */ 517 void SetLinuxDistributionInfo(const wxLinuxDistributionInfo& di); 518 519 //@} 520 }; 521 522