+#endif
+
+// ----------------------------------------------------------------------------
+// OS mnemonics -- Identify the running OS (useful for Windows)
+// ----------------------------------------------------------------------------
+
+// Not all platforms are currently available or supported
+enum
+{
+ wxUNKNOWN_PLATFORM,
+ wxCURSES, // Text-only CURSES
+ wxXVIEW_X, // Sun's XView OpenLOOK toolkit
+ wxMOTIF_X, // OSF Motif 1.x.x
+ wxCOSE_X, // OSF Common Desktop Environment
+ wxNEXTSTEP, // NeXTStep
+ wxMAC, // Apple Mac OS 8/9/X with Mac paths
+ wxMAC_DARWIN, // Apple Mac OS X with Unix paths
+ wxBEOS, // BeOS
+ wxGTK, // GTK on X
+ wxGTK_WIN32, // GTK on Win32
+ wxGTK_OS2, // GTK on OS/2
+ wxGTK_BEOS, // GTK on BeOS
+ wxGEOS, // GEOS
+ wxOS2_PM, // OS/2 Workplace
+ wxWINDOWS, // Windows or WfW
+ wxMICROWINDOWS, // MicroWindows
+ wxPENWINDOWS, // Windows for Pen Computing
+ wxWINDOWS_NT, // Windows NT
+ wxWIN32S, // Windows 32S API
+ wxWIN95, // Windows 95
+ wxWIN386, // Watcom 32-bit supervisor modus
+ wxMGL_UNIX, // MGL with direct hardware access
+ wxMGL_X, // MGL on X
+ wxMGL_WIN32, // MGL on Win32
+ wxMGL_OS2, // MGL on OS/2
+ wxMGL_DOS, // MGL on MS-DOS
+ wxWINDOWS_OS2, // Native OS/2 PM
+ wxUNIX, // wxBase under Unix
+ wxX11 // Plain X11 and Universal widgets
+};
+
+// ----------------------------------------------------------------------------
+// standard wxWindows types
+// ----------------------------------------------------------------------------
+
+// the type for screen and DC coordinates
+
+#if wxUSE_COMPATIBLE_COORD_TYPES
+ // to ensure compatibility with 2.0, we must use long
+ #define wxCoord long
+#else // !wxUSE_COMPATIBLE_COORD_TYPES
+ #ifdef __WIN16__
+ // under Win16, int is too small, so use long to allow for bigger
+ // virtual canvases
+ typedef long wxCoord;
+ #else // !Win16
+ // other platforms we support have at least 32bit int - quite enough
+ typedef int wxCoord;
+ #endif // Win16/!Win16
+#endif // wxUSE_COMPATIBLE_COORD_TYPES/!wxUSE_COMPATIBLE_COORD_TYPES
+
+// fixed length types
+
+#define wxInt8 char signed
+#define wxUint8 char unsigned
+
+#ifdef __WINDOWS__
+ #if defined(__WIN16__)
+ #define wxInt16 int signed
+ #define wxUint16 int unsigned
+ #define wxInt32 long signed
+ #define wxUint32 long unsigned
+ #elif defined(__WIN32__)
+ #define wxInt16 short signed
+ #define wxUint16 short unsigned
+ #define wxInt32 int signed
+ #define wxUint32 int unsigned
+ #else
+ // Win64 will have different type sizes
+ #error "Please define a 32 bit type"
+ #endif
+#else // !Windows
+ // SIZEOF_XXX are defined by configure
+ #if defined(SIZEOF_INT) && (SIZEOF_INT == 4)
+ #define wxInt16 short signed
+ #define wxUint16 short unsigned
+ #define wxInt32 int signed
+ #define wxUint32 int unsigned
+ #elif defined(SIZEOF_INT) && (SIZEOF_INT == 2)
+ #define wxInt16 int signed
+ #define wxUint16 int unsigned
+ #define wxInt32 long signed
+ #define wxUint32 long unsigned
+ #else
+ // assume sizeof(int) == 4 - what else can we do
+ wxCOMPILE_TIME_ASSERT( sizeof(int) == 4, IntMustBeExactly4Bytes);
+
+ #define wxInt16 short signed
+ #define wxUint16 short unsigned
+ #define wxInt32 int signed
+ #define wxUint32 int unsigned
+ #endif
+#endif // Win/!Win
+
+#if defined(SIZEOF_LONG) && (SIZEOF_LONG == 8)
+#define wxInt64 long signed
+#define wxUint64 long unsigned
+#elif defined(SIZEOF_LONG_LONG) && (SIZEOF_LONG_LONG == 8)
+#define wxInt64 long long signed
+#define wxUint64 long long unsigned
+#else // FIXME: what else can we do here aside from implementing wxULongLong
+#define wxInt64 wxLongLong
+#define wxUint64 wxULongLong
+#endif
+
+#define wxByte wxUint8
+#define wxWord wxUint16
+
+// base floating point types
+// wxFloat32 : 32 bit IEEE float ( 1 sign , 8 exponent bits , 23 fraction bits
+// wxFloat64 : 64 bit IEEE float ( 1 sign , 11 exponent bits , 52 fraction bits
+// wxDouble : native fastest representation that has at least wxFloat64
+// precision, so use the IEEE types for storage , and this for calculations
+
+typedef float wxFloat32 ;
+#if (defined( __WXMAC__ ) || defined(__WXCOCOA__)) && defined (__MWERKS__)
+ typedef short double wxFloat64;
+#else
+ typedef double wxFloat64;
+#endif
+
+#if defined( __WXMAC__ ) && !defined( __POWERPC__ )
+ typedef long double wxDouble;
+#else
+ typedef double wxDouble ;
+#endif
+
+// ----------------------------------------------------------------------------
+// byte ordering related definition and macros
+// ----------------------------------------------------------------------------
+
+// byte sex
+
+#define wxBIG_ENDIAN 4321
+#define wxLITTLE_ENDIAN 1234
+#define wxPDP_ENDIAN 3412
+
+#ifdef WORDS_BIGENDIAN
+#define wxBYTE_ORDER wxBIG_ENDIAN
+#else
+#define wxBYTE_ORDER wxLITTLE_ENDIAN
+#endif
+
+// byte swapping
+
+#if defined (__MWERKS__) && ( (__MWERKS__ < 0x0900) || macintosh )
+// assembler versions for these
+#ifdef __POWERPC__
+ inline wxUint16 wxUINT16_SWAP_ALWAYS( wxUint16 i )
+ {return (__lhbrx( &i , 0 ) ) ;}
+ inline wxInt16 wxINT16_SWAP_ALWAYS( wxInt16 i )
+ {return (__lhbrx( &i , 0 ) ) ;}
+ inline wxUint32 wxUINT32_SWAP_ALWAYS( wxUint32 i )
+ {return (__lwbrx( &i , 0 ) ) ;}
+ inline wxInt32 wxINT32_SWAP_ALWAYS( wxInt32 i )
+ {return (__lwbrx( &i , 0 ) ) ;}
+#else
+ #pragma parameter __D0 wxUINT16_SWAP_ALWAYS(__D0)
+ pascal wxUint16 wxUINT16_SWAP_ALWAYS(wxUint16 value)
+ = { 0xE158 };
+
+ #pragma parameter __D0 wxINT16_SWAP_ALWAYS(__D0)
+ pascal wxInt16 wxINT16_SWAP_ALWAYS(wxInt16 value)
+ = { 0xE158 };
+
+ #pragma parameter __D0 wxUINT32_SWAP_ALWAYS (__D0)
+ pascal wxUint32 wxUINT32_SWAP_ALWAYS(wxUint32 value)
+ = { 0xE158, 0x4840, 0xE158 };
+
+ #pragma parameter __D0 wxINT32_SWAP_ALWAYS (__D0)
+ pascal wxInt32 wxINT32_SWAP_ALWAYS(wxInt32 value)
+ = { 0xE158, 0x4840, 0xE158 };
+
+#endif
+#else // !MWERKS
+#define wxUINT16_SWAP_ALWAYS(val) \
+ ((wxUint16) ( \
+ (((wxUint16) (val) & (wxUint16) 0x00ffU) << 8) | \
+ (((wxUint16) (val) & (wxUint16) 0xff00U) >> 8)))
+
+#define wxINT16_SWAP_ALWAYS(val) \
+ ((wxInt16) ( \
+ (((wxUint16) (val) & (wxUint16) 0x00ffU) << 8) | \
+ (((wxUint16) (val) & (wxUint16) 0xff00U) >> 8)))
+
+#define wxUINT32_SWAP_ALWAYS(val) \
+ ((wxUint32) ( \
+ (((wxUint32) (val) & (wxUint32) 0x000000ffU) << 24) | \
+ (((wxUint32) (val) & (wxUint32) 0x0000ff00U) << 8) | \
+ (((wxUint32) (val) & (wxUint32) 0x00ff0000U) >> 8) | \
+ (((wxUint32) (val) & (wxUint32) 0xff000000U) >> 24)))
+
+#define wxINT32_SWAP_ALWAYS(val) \
+ ((wxInt32) ( \
+ (((wxUint32) (val) & (wxUint32) 0x000000ffU) << 24) | \
+ (((wxUint32) (val) & (wxUint32) 0x0000ff00U) << 8) | \
+ (((wxUint32) (val) & (wxUint32) 0x00ff0000U) >> 8) | \
+ (((wxUint32) (val) & (wxUint32) 0xff000000U) >> 24)))
+#endif
+// machine specific byte swapping
+
+#if defined(SIZEOF_LONG) && (SIZEOF_LONG == 8)
+#define wxUINT64_SWAP_ALWAYS(val) \
+ ((wxUint64) ( \
+ (((wxUint64) (val) & (wxUint64) 0x00000000000000ffUL) << 56) | \
+ (((wxUint64) (val) & (wxUint64) 0x000000000000ff00UL) << 40) | \
+ (((wxUint64) (val) & (wxUint64) 0x0000000000ff0000UL) << 24) | \
+ (((wxUint64) (val) & (wxUint64) 0x00000000ff000000UL) << 8) | \
+ (((wxUint64) (val) & (wxUint64) 0x000000ff00000000UL) >> 8) | \
+ (((wxUint64) (val) & (wxUint64) 0x0000ff0000000000UL) >> 24) | \
+ (((wxUint64) (val) & (wxUint64) 0x00ff000000000000UL) >> 40) | \
+ (((wxUint64) (val) & (wxUint64) 0xff00000000000000UL) >> 56)))
+
+#define wxINT64_SWAP_ALWAYS(val) \
+ ((wxInt64) ( \
+ (((wxUint64) (val) & (wxUint64) 0x00000000000000ffUL) << 56) | \
+ (((wxUint64) (val) & (wxUint64) 0x000000000000ff00UL) << 40) | \
+ (((wxUint64) (val) & (wxUint64) 0x0000000000ff0000UL) << 24) | \
+ (((wxUint64) (val) & (wxUint64) 0x00000000ff000000UL) << 8) | \
+ (((wxUint64) (val) & (wxUint64) 0x000000ff00000000UL) >> 8) | \
+ (((wxUint64) (val) & (wxUint64) 0x0000ff0000000000UL) >> 24) | \
+ (((wxUint64) (val) & (wxUint64) 0x00ff000000000000UL) >> 40) | \
+ (((wxUint64) (val) & (wxUint64) 0xff00000000000000UL) >> 56)))
+
+#elif defined(SIZEOF_LONG_LONG) && (SIZEOF_LONG_LONG == 8)
+#define wxUINT64_SWAP_ALWAYS(val) \
+ ((wxUint64) ( \
+ (((wxUint64) (val) & (wxUint64) 0x00000000000000ffULL) << 56) | \
+ (((wxUint64) (val) & (wxUint64) 0x000000000000ff00ULL) << 40) | \
+ (((wxUint64) (val) & (wxUint64) 0x0000000000ff0000ULL) << 24) | \
+ (((wxUint64) (val) & (wxUint64) 0x00000000ff000000ULL) << 8) | \
+ (((wxUint64) (val) & (wxUint64) 0x000000ff00000000ULL) >> 8) | \
+ (((wxUint64) (val) & (wxUint64) 0x0000ff0000000000ULL) >> 24) | \
+ (((wxUint64) (val) & (wxUint64) 0x00ff000000000000ULL) >> 40) | \
+ (((wxUint64) (val) & (wxUint64) 0xff00000000000000ULL) >> 56)))
+
+#define wxINT64_SWAP_ALWAYS(val) \
+ ((wxInt64) ( \
+ (((wxUint64) (val) & (wxUint64) 0x00000000000000ffULL) << 56) | \
+ (((wxUint64) (val) & (wxUint64) 0x000000000000ff00ULL) << 40) | \
+ (((wxUint64) (val) & (wxUint64) 0x0000000000ff0000ULL) << 24) | \
+ (((wxUint64) (val) & (wxUint64) 0x00000000ff000000ULL) << 8) | \
+ (((wxUint64) (val) & (wxUint64) 0x000000ff00000000ULL) >> 8) | \
+ (((wxUint64) (val) & (wxUint64) 0x0000ff0000000000ULL) >> 24) | \
+ (((wxUint64) (val) & (wxUint64) 0x00ff000000000000ULL) >> 40) | \
+ (((wxUint64) (val) & (wxUint64) 0xff00000000000000ULL) >> 56)))
+
+#else
+#define wxUINT64_SWAP_ALWAYS(val) \
+ ((wxUint64) ( \
+ ((wxULongLong(val) & wxULongLong(0L, 0x000000ffU)) << 56) | \
+ ((wxULongLong(val) & wxULongLong(0L, 0x0000ff00U)) << 40) | \
+ ((wxULongLong(val) & wxULongLong(0L, 0x00ff0000U)) << 24) | \
+ ((wxULongLong(val) & wxULongLong(0L, 0xff000000U)) << 8) | \
+ ((wxULongLong(val) & wxULongLong(0x000000ffL, 0U)) >> 8) | \
+ ((wxULongLong(val) & wxULongLong(0x0000ff00L, 0U)) >> 24) | \
+ ((wxULongLong(val) & wxULongLong(0x00ff0000L, 0U)) >> 40) | \
+ ((wxULongLong(val) & wxULongLong(0xff000000L, 0U)) >> 56)))
+
+#define wxINT64_SWAP_ALWAYS(val) \
+ ((wxInt64) ( \
+ ((wxLongLong(val) & wxLongLong(0L, 0x000000ffU)) << 56) | \
+ ((wxLongLong(val) & wxLongLong(0L, 0x0000ff00U)) << 40) | \
+ ((wxLongLong(val) & wxLongLong(0L, 0x00ff0000U)) << 24) | \
+ ((wxLongLong(val) & wxLongLong(0L, 0xff000000U)) << 8) | \
+ ((wxLongLong(val) & wxLongLong(0x000000ffL, 0U)) >> 8) | \
+ ((wxLongLong(val) & wxLongLong(0x0000ff00L, 0U)) >> 24) | \
+ ((wxLongLong(val) & wxLongLong(0x00ff0000L, 0U)) >> 40) | \
+ ((wxLongLong(val) & wxLongLong(0xff000000L, 0U)) >> 56)))
+#endif
+
+#ifdef WORDS_BIGENDIAN
+ #define wxUINT16_SWAP_ON_BE(val) wxUINT16_SWAP_ALWAYS(val)
+ #define wxINT16_SWAP_ON_BE(val) wxINT16_SWAP_ALWAYS(val)
+ #define wxUINT16_SWAP_ON_LE(val) (val)
+ #define wxINT16_SWAP_ON_LE(val) (val)
+ #define wxUINT32_SWAP_ON_BE(val) wxUINT32_SWAP_ALWAYS(val)
+ #define wxINT32_SWAP_ON_BE(val) wxINT32_SWAP_ALWAYS(val)
+ #define wxUINT32_SWAP_ON_LE(val) (val)
+ #define wxINT32_SWAP_ON_LE(val) (val)
+ #define wxUINT64_SWAP_ON_BE(val) wxUINT64_SWAP_ALWAYS(val)
+ #define wxUINT64_SWAP_ON_LE(val) (val)
+#else
+ #define wxUINT16_SWAP_ON_LE(val) wxUINT16_SWAP_ALWAYS(val)
+ #define wxINT16_SWAP_ON_LE(val) wxINT16_SWAP_ALWAYS(val)
+ #define wxUINT16_SWAP_ON_BE(val) (val)
+ #define wxINT16_SWAP_ON_BE(val) (val)
+ #define wxUINT32_SWAP_ON_LE(val) wxUINT32_SWAP_ALWAYS(val)
+ #define wxINT32_SWAP_ON_LE(val) wxINT32_SWAP_ALWAYS(val)
+ #define wxUINT32_SWAP_ON_BE(val) (val)
+ #define wxINT32_SWAP_ON_BE(val) (val)
+ #define wxUINT64_SWAP_ON_LE(val) wxUINT64_SWAP_ALWAYS(val)
+ #define wxUINT64_SWAP_ON_BE(val) (val)
+#endif
+
+// Macros to convert from unsigned long to void pointer.
+// High order truncation occurs if the respective type is not large enough.
+#define WXPTRULONGSLICE (((wxBYTE_ORDER==wxBIG_ENDIAN)&&(sizeof(void*)==8)&&(sizeof(unsigned long)<8))?1:0)
+#define wxPtrToULong(p) (((unsigned long*)(&(p)))[WXPTRULONGSLICE])
+#define wxULongToPtr(p,n) (p=NULL,wxPtrToULong(p)=(unsigned long)(n),p)
+
+// ----------------------------------------------------------------------------
+// Geometric flags
+// ----------------------------------------------------------------------------
+
+enum wxGeometryCentre
+{
+ wxCENTRE = 0x0001,
+ wxCENTER = wxCENTRE
+};
+
+// centering into frame rather than screen (obsolete)
+#define wxCENTER_FRAME 0x0000
+// centre on screen rather than parent
+#define wxCENTRE_ON_SCREEN 0x0002
+#define wxCENTER_ON_SCREEN wxCENTRE_ON_SCREEN
+
+enum wxOrientation
+{
+ wxHORIZONTAL = 0x0004,
+ wxVERTICAL = 0x0008,
+
+ wxBOTH = (wxVERTICAL | wxHORIZONTAL)
+};
+
+enum wxDirection
+{
+ wxLEFT = 0x0010,
+ wxRIGHT = 0x0020,
+ wxUP = 0x0040,
+ wxDOWN = 0x0080,
+
+ wxTOP = wxUP,
+ wxBOTTOM = wxDOWN,
+
+ wxNORTH = wxUP,
+ wxSOUTH = wxDOWN,
+ wxWEST = wxLEFT,
+ wxEAST = wxRIGHT,
+
+ wxALL = (wxUP | wxDOWN | wxRIGHT | wxLEFT)
+};
+
+enum wxAlignment
+{
+ wxALIGN_NOT = 0x0000,
+ wxALIGN_CENTER_HORIZONTAL = 0x0100,
+ wxALIGN_CENTRE_HORIZONTAL = wxALIGN_CENTER_HORIZONTAL,
+ wxALIGN_LEFT = wxALIGN_NOT,
+ wxALIGN_TOP = wxALIGN_NOT,
+ wxALIGN_RIGHT = 0x0200,
+ wxALIGN_BOTTOM = 0x0400,
+ wxALIGN_CENTER_VERTICAL = 0x0800,
+ wxALIGN_CENTRE_VERTICAL = wxALIGN_CENTER_VERTICAL,
+
+ wxALIGN_CENTER = (wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL),
+ wxALIGN_CENTRE = wxALIGN_CENTER,
+
+ // a mask to extract alignment from the combination of flags
+ wxALIGN_MASK = 0x0f00
+};
+
+enum wxStretch
+{
+ wxSTRETCH_NOT = 0x0000,
+ wxSHRINK = 0x1000,
+ wxGROW = 0x2000,
+ wxEXPAND = wxGROW,
+ wxSHAPED = 0x4000,
+ wxADJUST_MINSIZE = 0x8000,
+ wxTILE = 0xc000
+};
+
+// border flags: the values are chosen for backwards compatibility
+enum wxBorder
+{
+ // this is different from wxBORDER_NONE as by default the controls do have
+ // border
+ wxBORDER_DEFAULT = 0,
+
+ wxBORDER_NONE = 0x00200000,
+ wxBORDER_STATIC = 0x01000000,
+ wxBORDER_SIMPLE = 0x02000000,
+ wxBORDER_RAISED = 0x04000000,
+ wxBORDER_SUNKEN = 0x08000000,
+ wxBORDER_DOUBLE = 0x10000000,
+
+ // a mask to extract border style from the combination of flags
+ wxBORDER_MASK = 0x1f200000
+};
+
+// ----------------------------------------------------------------------------
+// Window style flags
+// ----------------------------------------------------------------------------