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