]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/platinfo.h
A better fix for wxHash{Map,Set} with g++ 4.7.
[wxWidgets.git] / include / wx / platinfo.h
index 54a3af870c7773fa412243331994baf43f549734..39a5099be0d7070c8f57f06ffb6a5c8d180b0d3f 100644 (file)
@@ -6,7 +6,7 @@
 // Created:     07.07.2006 (based on wxToolkitInfo)
 // RCS-ID:      $Id$
 // Copyright:   (c) 2006 Francesco Montorsi
-// License:     wxWindows license
+// Licence:     wxWindows licence
 ///////////////////////////////////////////////////////////////////////////////
 
 #ifndef _WX_PLATINFO_H_
@@ -15,7 +15,7 @@
 #include "wx/string.h"
 
 // ----------------------------------------------------------------------------
-// wxPlatformInfo
+// wxPlatformInfo enums & structs
 // ----------------------------------------------------------------------------
 
 // VERY IMPORTANT: when changing these enum values, also change the relative
@@ -72,14 +72,14 @@ enum wxPortId
     wxPORT_MSW      = 1 << 1,       // wxMSW, native toolkit is Windows API
     wxPORT_MOTIF    = 1 << 2,       // wxMotif, using [Open]Motif or Lesstif
     wxPORT_GTK      = 1 << 3,       // wxGTK, using GTK+ 1.x, 2.x, GPE or Maemo
-    wxPORT_MGL      = 1 << 4,       // wxMGL, using wxUniversal
+    wxPORT_DFB      = 1 << 4,       // wxDFB, using wxUniversal
     wxPORT_X11      = 1 << 5,       // wxX11, using wxUniversal
-    wxPORT_OS2      = 1 << 6,       // wxOS2, using OS/2 Presentation Manager
-    wxPORT_MAC      = 1 << 7,       // wxMac, using Carbon or Classic Mac API
+    wxPORT_PM       = 1 << 6,       // wxOS2, using OS/2 Presentation Manager
+    wxPORT_OS2      = wxPORT_PM,    // wxOS2, using OS/2 Presentation Manager
+    wxPORT_MAC      = 1 << 7,       // wxOSX (former wxMac), using Cocoa, Carbon or iPhone API
+    wxPORT_OSX      = wxPORT_MAC,   // wxOSX, using Cocoa, Carbon or iPhone API
     wxPORT_COCOA    = 1 << 8,       // wxCocoa, using Cocoa NextStep/Mac API
-    wxPORT_WINCE    = 1 << 9,       // wxWinCE, toolkit is WinCE SDK API
-    wxPORT_PALMOS   = 1 << 10,      // wxPalmOS, toolkit is PalmOS API
-    wxPORT_DFB      = 1 << 11       // wxDFB, using wxUniversal
+    wxPORT_WINCE    = 1 << 9        // wxWinCE, toolkit is WinCE SDK API
 };
 
 // architecture of the operating system
@@ -108,6 +108,31 @@ enum wxEndianness
     wxENDIAN_MAX
 };
 
+// informations about a linux distro returned by the lsb_release utility
+struct wxLinuxDistributionInfo
+{
+    wxString Id;
+    wxString Release;
+    wxString CodeName;
+    wxString Description;
+
+    bool operator==(const wxLinuxDistributionInfo& ldi) const
+    {
+        return Id == ldi.Id &&
+               Release == ldi.Release &&
+               CodeName == ldi.CodeName &&
+               Description == ldi.Description;
+    }
+
+    bool operator!=(const wxLinuxDistributionInfo& ldi) const
+    { return !(*this == ldi); }
+};
+
+
+// ----------------------------------------------------------------------------
+// wxPlatformInfo
+// ----------------------------------------------------------------------------
+
 // Information about the toolkit that the app is running under and some basic
 // platform and architecture info
 class WXDLLIMPEXP_BASE wxPlatformInfo
@@ -129,6 +154,11 @@ public:
     bool operator!=(const wxPlatformInfo &t) const
         { return !(*this == t); }
 
+    // Gets a wxPlatformInfo already initialized with the values for
+    // the currently running platform.
+    static const wxPlatformInfo& Get();
+
+
 
     // string -> enum conversions
     // ---------------------------------
@@ -150,6 +180,7 @@ public:
     static wxString GetArchName(wxArchitecture arch);
     static wxString GetEndiannessName(wxEndianness end);
 
+
     // getters
     // -----------------
 
@@ -158,16 +189,35 @@ public:
     int GetOSMinorVersion() const
         { return m_osVersionMinor; }
 
+    // return true if the OS version >= major.minor
+    bool CheckOSVersion(int major, int minor) const
+    {
+        return DoCheckVersion(GetOSMajorVersion(),
+                              GetOSMinorVersion(),
+                              major,
+                              minor);
+    }
+
     int GetToolkitMajorVersion() const
         { return m_tkVersionMajor; }
     int GetToolkitMinorVersion() const
         { return m_tkVersionMinor; }
 
+    bool CheckToolkitVersion(int major, int minor) const
+    {
+        return DoCheckVersion(GetToolkitMajorVersion(),
+                              GetToolkitMinorVersion(),
+                              major,
+                              minor);
+    }
+
     bool IsUsingUniversalWidgets() const
         { return m_usingUniversal; }
 
     wxOperatingSystemId GetOperatingSystemId() const
         { return m_os; }
+    wxLinuxDistributionInfo GetLinuxDistributionInfo() const
+        { return m_ldi; }
     wxPortId GetPortId() const
         { return m_port; }
     wxArchitecture GetArchitecture() const
@@ -191,6 +241,16 @@ public:
         { return GetArchName(m_arch); }
     wxString GetEndiannessName() const
         { return GetEndiannessName(m_endian); }
+    wxString GetOperatingSystemDescription() const
+        { return m_osDesc; }
+    wxString GetDesktopEnvironment() const
+        { return m_desktopEnv; }
+
+    static wxString GetOperatingSystemDirectory();
+        // doesn't make sense to store inside wxPlatformInfo the OS directory,
+        // thus this function is static; note that this function simply calls
+        // wxGetOSDirectory() and is here just to make it easier for the user to
+        // find it that feature (global functions can be difficult to find in the docs)
 
     // setters
     // -----------------
@@ -201,13 +261,21 @@ public:
         { m_tkVersionMajor=major; m_tkVersionMinor=minor; }
 
     void SetOperatingSystemId(wxOperatingSystemId n)
-        { m_os=n; }
+        { m_os = n; }
+    void SetOperatingSystemDescription(const wxString& desc)
+        { m_osDesc = desc; }
     void SetPortId(wxPortId n)
-        { m_port=n; }
+        { m_port = n; }
     void SetArchitecture(wxArchitecture n)
-        { m_arch=n; }
+        { m_arch = n; }
     void SetEndianness(wxEndianness n)
-        { m_endian=n; }
+        { m_endian = n; }
+
+    void SetDesktopEnvironment(const wxString& de)
+        { m_desktopEnv = de; }
+    void SetLinuxDistributionInfo(const wxLinuxDistributionInfo& di)
+        { m_ldi = di; }
+
 
     // miscellaneous
     // -----------------
@@ -216,23 +284,46 @@ public:
     {
         return m_osVersionMajor != -1 && m_osVersionMinor != -1 &&
                m_os != wxOS_UNKNOWN &&
+               !m_osDesc.IsEmpty() &&
                m_tkVersionMajor != -1 && m_tkVersionMinor != -1 &&
                m_port != wxPORT_UNKNOWN &&
-               m_arch != wxARCH_INVALID && m_endian != wxENDIAN_INVALID;
+               m_arch != wxARCH_INVALID &&
+               m_endian != wxENDIAN_INVALID;
+
+               // do not check linux-specific info; it's ok to have them empty
     }
 
 
 protected:
+    static bool DoCheckVersion(int majorCur, int minorCur, int major, int minor)
+    {
+        return majorCur > major || (majorCur == major && minorCur >= minor);
+    }
+
+    void InitForCurrentPlatform();
+
+
     // OS stuff
     // -----------------
 
     // Version of the OS; valid if m_os != wxOS_UNKNOWN
     // (-1 means not initialized yet).
-    int m_osVersionMajor, m_osVersionMinor;
+    int m_osVersionMajor,
+        m_osVersionMinor;
 
     // Operating system ID.
     wxOperatingSystemId m_os;
 
+    // Operating system description.
+    wxString m_osDesc;
+
+
+    // linux-specific
+    // -----------------
+
+    wxString m_desktopEnv;
+    wxLinuxDistributionInfo m_ldi;
+
 
     // toolkit
     // -----------------
@@ -251,7 +342,7 @@ protected:
     // others
     // -----------------
 
-    // architecture of the OS
+    // architecture of the OS/machine
     wxArchitecture m_arch;
 
     // endianness of the machine
@@ -269,9 +360,7 @@ protected:
     #define wxWinCE                 wxOS_WINDOWS_CE
     #define wxWIN32S                wxOS_WINDOWS_9X
 
-    #define wxPalmOS                wxPORT_PALMOS
     #define wxOS2                   wxPORT_OS2
-    #define wxMGL                   wxPORT_MGL
     #define wxCocoa                 wxPORT_MAC
     #define wxMac                   wxPORT_MAC
     #define wxMotif                 wxPORT_MOTIF