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 // RCS-ID:      $Id: platinfo.h 41807 2006-10-09 15:58:56Z VZ $
8 // Copyright:   (c) 2006 Francesco Montorsi
9 // License:     wxWindows license
10 ///////////////////////////////////////////////////////////////////////////////
11 
12 #ifndef _WX_PLATINFO_H_
13 #define _WX_PLATINFO_H_
14 
15 #include "wx/string.h"
16 
17 // ----------------------------------------------------------------------------
18 // wxPlatformInfo
19 // ----------------------------------------------------------------------------
20 
21 // VERY IMPORTANT: when changing these enum values, also change the relative
22 //                 string tables in src/common/platinfo.cpp
23 
24 
25 // families & sub-families of operating systems
26 enum wxOperatingSystemId
27 {
28     wxOS_UNKNOWN = 0,                 // returned on error
29 
30     wxOS_MAC_OS         = 1 << 0,     // Apple Mac OS 8/9/X with Mac paths
31     wxOS_MAC_OSX_DARWIN = 1 << 1,     // Apple Mac OS X with Unix paths
32     wxOS_MAC = wxOS_MAC_OS|wxOS_MAC_OSX_DARWIN,
33 
34     wxOS_WINDOWS_9X     = 1 << 2,     // Windows 9x family (95/98/ME)
35     wxOS_WINDOWS_NT     = 1 << 3,     // Windows NT family (NT/2000/XP)
36     wxOS_WINDOWS_MICRO  = 1 << 4,     // MicroWindows
37     wxOS_WINDOWS_CE     = 1 << 5,     // Windows CE (Window Mobile)
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     wxOS_UNIX = wxOS_UNIX_LINUX     |
51                 wxOS_UNIX_FREEBSD   |
52                 wxOS_UNIX_OPENBSD   |
53                 wxOS_UNIX_NETBSD    |
54                 wxOS_UNIX_SOLARIS   |
55                 wxOS_UNIX_AIX       |
56                 wxOS_UNIX_HPUX,
57 
58     // 1<<13 and 1<<14 available for other Unix flavours
59 
60     wxOS_DOS            = 1 << 15,      // Microsoft DOS
61     wxOS_OS2            = 1 << 16       // OS/2
62 };
63 
64 // list of wxWidgets ports - some of them can be used with more than
65 // a single toolkit.
66 enum wxPortId
67 {
68     wxPORT_UNKNOWN  = 0,            // returned on error
69 
70     wxPORT_BASE     = 1 << 0,       // wxBase, no native toolkit used
71 
72     wxPORT_MSW      = 1 << 1,       // wxMSW, native toolkit is Windows API
73     wxPORT_MOTIF    = 1 << 2,       // wxMotif, using [Open]Motif or Lesstif
74     wxPORT_GTK      = 1 << 3,       // wxGTK, using GTK+ 1.x, 2.x, GPE or Maemo
75     wxPORT_MGL      = 1 << 4,       // wxMGL, using wxUniversal
76     wxPORT_X11      = 1 << 5,       // wxX11, using wxUniversal
77     wxPORT_PM       = 1 << 6,       // wxOS2, using OS/2 Presentation Manager
78     wxPORT_OS2      = wxPORT_PM,    // wxOS2, using OS/2 Presentation Manager
79     wxPORT_MAC      = 1 << 7,       // wxMac, using Carbon or Classic Mac API
80     wxPORT_COCOA    = 1 << 8,       // wxCocoa, using Cocoa NextStep/Mac API
81     wxPORT_WINCE    = 1 << 9,       // wxWinCE, toolkit is WinCE SDK API
82     wxPORT_PALMOS   = 1 << 10,      // wxPalmOS, toolkit is PalmOS API
83     wxPORT_DFB      = 1 << 11       // wxDFB, using wxUniversal
84 };
85 
86 // architecture of the operating system
87 // (regardless of the build environment of wxWidgets library - see
88 // wxIsPlatform64bit documentation for more info)
89 enum wxArchitecture
90 {
91     wxARCH_INVALID = -1,        // returned on error
92 
93     wxARCH_32,                  // 32 bit
94     wxARCH_64,
95 
96     wxARCH_MAX
97 };
98 
99 
100 // endian-ness of the machine
101 enum wxEndianness
102 {
103     wxENDIAN_INVALID = -1,      // returned on error
104 
105     wxENDIAN_BIG,               // 4321
106     wxENDIAN_LITTLE,            // 1234
107     wxENDIAN_PDP,               // 3412
108 
109     wxENDIAN_MAX
110 };
111 
112 // Information about the toolkit that the app is running under and some basic
113 // platform and architecture info
114 class WXDLLIMPEXP_BASE wxPlatformInfo
115 {
116 public:
117     wxPlatformInfo();
118     wxPlatformInfo(wxPortId pid,
119                    int tkMajor = -1, int tkMinor = -1,
120                    wxOperatingSystemId id = wxOS_UNKNOWN,
121                    int osMajor = -1, int osMinor = -1,
122                    wxArchitecture arch = wxARCH_INVALID,
123                    wxEndianness endian = wxENDIAN_INVALID,
124                    bool usingUniversal = false);
125 
126     // default copy ctor, assignment operator and dtor are ok
127 
128     bool operator==(const wxPlatformInfo &t) const;
129 
130     bool operator!=(const wxPlatformInfo &t) const
131         { return !(*this == t); }
132 
133     // Gets a wxPlatformInfo already initialized with the values for
134     // the currently running platform.
135     static const wxPlatformInfo& Get();
136 
137 
138 
139     // string -> enum conversions
140     // ---------------------------------
141 
142     static wxOperatingSystemId GetOperatingSystemId(const wxString &name);
143     static wxPortId GetPortId(const wxString &portname);
144 
145     static wxArchitecture GetArch(const wxString &arch);
146     static wxEndianness GetEndianness(const wxString &end);
147 
148     // enum -> string conversions
149     // ---------------------------------
150 
151     static wxString GetOperatingSystemFamilyName(wxOperatingSystemId os);
152     static wxString GetOperatingSystemIdName(wxOperatingSystemId os);
153     static wxString GetPortIdName(wxPortId port, bool usingUniversal);
154     static wxString GetPortIdShortName(wxPortId port, bool usingUniversal);
155 
156     static wxString GetArchName(wxArchitecture arch);
157     static wxString GetEndiannessName(wxEndianness end);
158 
159     // getters
160     // -----------------
161 
GetOSMajorVersion()162     int GetOSMajorVersion() const
163         { return m_osVersionMajor; }
GetOSMinorVersion()164     int GetOSMinorVersion() const
165         { return m_osVersionMinor; }
166 
167     // return true if the OS version >= major.minor
CheckOSVersion(int major,int minor)168     bool CheckOSVersion(int major, int minor) const
169     {
170         return DoCheckVersion(GetOSMajorVersion(),
171                               GetOSMinorVersion(),
172                               major,
173                               minor);
174     }
175 
GetToolkitMajorVersion()176     int GetToolkitMajorVersion() const
177         { return m_tkVersionMajor; }
GetToolkitMinorVersion()178     int GetToolkitMinorVersion() const
179         { return m_tkVersionMinor; }
180 
CheckToolkitVersion(int major,int minor)181     bool CheckToolkitVersion(int major, int minor) const
182     {
183         return DoCheckVersion(GetToolkitMajorVersion(),
184                               GetToolkitMinorVersion(),
185                               major,
186                               minor);
187     }
188 
IsUsingUniversalWidgets()189     bool IsUsingUniversalWidgets() const
190         { return m_usingUniversal; }
191 
GetOperatingSystemId()192     wxOperatingSystemId GetOperatingSystemId() const
193         { return m_os; }
GetPortId()194     wxPortId GetPortId() const
195         { return m_port; }
GetArchitecture()196     wxArchitecture GetArchitecture() const
197         { return m_arch; }
GetEndianness()198     wxEndianness GetEndianness() const
199         { return m_endian; }
200 
201 
202     // string getters
203     // -----------------
204 
GetOperatingSystemFamilyName()205     wxString GetOperatingSystemFamilyName() const
206         { return GetOperatingSystemFamilyName(m_os); }
GetOperatingSystemIdName()207     wxString GetOperatingSystemIdName() const
208         { return GetOperatingSystemIdName(m_os); }
GetPortIdName()209     wxString GetPortIdName() const
210         { return GetPortIdName(m_port, m_usingUniversal); }
GetPortIdShortName()211     wxString GetPortIdShortName() const
212         { return GetPortIdShortName(m_port, m_usingUniversal); }
GetArchName()213     wxString GetArchName() const
214         { return GetArchName(m_arch); }
GetEndiannessName()215     wxString GetEndiannessName() const
216         { return GetEndiannessName(m_endian); }
217 
218     // setters
219     // -----------------
220 
SetOSVersion(int major,int minor)221     void SetOSVersion(int major, int minor)
222         { m_osVersionMajor=major; m_osVersionMinor=minor; }
SetToolkitVersion(int major,int minor)223     void SetToolkitVersion(int major, int minor)
224         { m_tkVersionMajor=major; m_tkVersionMinor=minor; }
225 
SetOperatingSystemId(wxOperatingSystemId n)226     void SetOperatingSystemId(wxOperatingSystemId n)
227         { m_os = n; }
SetPortId(wxPortId n)228     void SetPortId(wxPortId n)
229         { m_port = n; }
SetArchitecture(wxArchitecture n)230     void SetArchitecture(wxArchitecture n)
231         { m_arch = n; }
SetEndianness(wxEndianness n)232     void SetEndianness(wxEndianness n)
233         { m_endian = n; }
234 
235     // miscellaneous
236     // -----------------
237 
IsOk()238     bool IsOk() const
239     {
240         return m_osVersionMajor != -1 && m_osVersionMinor != -1 &&
241                m_os != wxOS_UNKNOWN &&
242                m_tkVersionMajor != -1 && m_tkVersionMinor != -1 &&
243                m_port != wxPORT_UNKNOWN &&
244                m_arch != wxARCH_INVALID && m_endian != wxENDIAN_INVALID;
245     }
246 
247 
248 protected:
DoCheckVersion(int majorCur,int minorCur,int major,int minor)249     static bool DoCheckVersion(int majorCur, int minorCur, int major, int minor)
250     {
251         return majorCur > major || (majorCur == major && minorCur >= minor);
252     }
253 
254     void InitForCurrentPlatform();
255 
256 
257     // OS stuff
258     // -----------------
259 
260     // Version of the OS; valid if m_os != wxOS_UNKNOWN
261     // (-1 means not initialized yet).
262     int m_osVersionMajor,
263         m_osVersionMinor;
264 
265     // Operating system ID.
266     wxOperatingSystemId m_os;
267 
268 
269     // toolkit
270     // -----------------
271 
272     // Version of the underlying toolkit
273     // (-1 means not initialized yet; zero means no toolkit).
274     int m_tkVersionMajor, m_tkVersionMinor;
275 
276     // name of the wxWidgets port
277     wxPortId m_port;
278 
279     // is using wxUniversal widgets?
280     bool m_usingUniversal;
281 
282 
283     // others
284     // -----------------
285 
286     // architecture of the OS
287     wxArchitecture m_arch;
288 
289     // endianness of the machine
290     wxEndianness m_endian;
291 };
292 
293 
294 #if WXWIN_COMPATIBILITY_2_6
295     #define wxUNKNOWN_PLATFORM      wxOS_UNKNOWN
296     #define wxUnix                  wxOS_UNIX
297     #define wxWin95                 wxOS_WINDOWS_9X
298     #define wxWIN95                 wxOS_WINDOWS_9X
299     #define wxWINDOWS_NT            wxOS_WINDOWS_NT
300     #define wxMSW                   wxOS_WINDOWS
301     #define wxWinCE                 wxOS_WINDOWS_CE
302     #define wxWIN32S                wxOS_WINDOWS_9X
303 
304     #define wxPalmOS                wxPORT_PALMOS
305     #define wxOS2                   wxPORT_OS2
306     #define wxMGL                   wxPORT_MGL
307     #define wxCocoa                 wxPORT_MAC
308     #define wxMac                   wxPORT_MAC
309     #define wxMotif                 wxPORT_MOTIF
310     #define wxGTK                   wxPORT_GTK
311 #endif // WXWIN_COMPATIBILITY_2_6
312 
313 #endif // _WX_PLATINFO_H_
314