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