]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/defs.h
fixed a design flaw in wxFontMapper that prevented automatic creation of wxConfig...
[wxWidgets.git] / include / wx / defs.h
index 9ac82a237ac3d6621f190e73ba92e53f4e8ee97a..ae282dcf5eb6ffd0d097ab17729ffc1f5e80f797 100644 (file)
 // compiler and OS identification
 // ----------------------------------------------------------------------------
 
+// first define Windows symbols if they're not defined on the command line: we
+// can autodetect everything we need if _WIN32 is defined
+#if defined(_WIN32) || defined(WIN32) || defined(__NT__)
+    #ifndef __WXMSW__
+        #define __WXMSW__
+    #endif
+
+    #ifndef __WIN32__
+        #define __WIN32__
+    #endif
+
+    // Win95 means Win95-style UI, i.e. Win9x/NT 4+
+    #if !defined(__WIN95__) && defined(WINVER) && (WINVER >= 0x0400)
+        #define __WIN95__
+    #endif
+#endif // Win32
+
+#ifdef __WXWINE__
+    #ifndef __WIN32__
+        #define __WIN32__
+    #endif
+    #ifndef __WIN95__
+        #define __WIN95__
+    #endif
+    #ifndef STRICT
+        #define STRICT
+    #endif
+#endif // WINE
+
+#if defined(TWIN32) && !defined(__TWIN32__)
+    #define __TWIN32__
+#endif // Twin32
+
+#include "wx/setup.h"
+
+// old C++ headers (like <iostream.h>) declare classes in the global namespace
+// while the new, standard ones (like <iostream>) do it in std:: namespace
+//
+// using this macro allows constuctions like "wxSTD iostream" to work in
+// either case
+#if !wxUSE_IOSTREAMH
+ #define wxSTD std::
+#else
+ #define wxSTD
+#endif
+
+// just in case they were defined in setup.h
+#ifdef PACKAGE
+#undef PACKAGE
+#endif
+
+#ifdef VERSION
+#undef VERSION
+#endif
+
 // OS: first test for generic Unix defines, then for particular flavours and
 //     finally for Unix-like systems
-#if defined(__unix) || defined(__unix__) || defined(____SVR4____) || \
-    defined(__LINUX__) || defined(__sgi) || \
+#if defined(__UNIX__) || defined(__unix) || defined(__unix__) || \
+    defined(____SVR4____) || defined(__LINUX__) || defined(__sgi) || \
     defined(__hpux) || defined(sun) || defined(__SUN__) || defined(_AIX) || \
     defined(__EMX__) || defined(__VMS) || defined(__BEOS__)
 
         #endif
     #endif // Sun
 
-#elif defined(applec) || defined(THINK_C) || ( defined( __MWERKS__ ) && !defined(__INTEL__) )
-        // MacOS
+    #ifdef __EMX__
+        #define OS2EMX_PLAIN_CHAR
+    #endif
+
+    // define __HPUX__ for HP-UX where standard macro is __hpux
+    #if defined(__hpux) && !defined(__HPUX__)
+        #define __HPUX__
+    #endif // HP-UX
+
+    #if defined(__APPLE__)
+        // MacOS X
+        #ifndef __WXMAC__
+            #define __WXMAC__
+        #endif
+        #ifndef __WXMAC_X__
+            // This define really should not be necessary since __WXMAC__
+            // combined with __UNIX__ is sufficient to differentiate
+            // Classic Mac OS from Mac OS X. However, some code has been
+            // added to workaround defects(?) in the bundled gcc compiler
+            // and these corrections are identified by __WXMAC_X__
+            #define __WXMAC_X__
+        #endif
+
+        #include <Carbon/Carbon.h>
+    #endif // __APPLE__
+#elif defined(applec) || \
+      defined(THINK_C) || \
+      (defined(__MWERKS__) && !defined(__INTEL__))
+      // MacOS
+#elif defined(__WXMAC__) && defined(__APPLE__)
+    // MacOS X
+    #define __UNIX_LIKE__
+
+    #ifndef __WXMAC__
+        #define __WXMAC__
+    #endif
+    #ifndef __WXMAC_X__
+        // This define really should not be necessary since __WXMAC__
+        // combined with __UNIX__ is sufficient to differentiate
+        // Classic Mac OS from Mac OS X. However, some code has been
+        // added to workaround defects(?) in the bundled gcc compiler
+        // and these corrections are identified by __WXMAC_X__
+        #define __WXMAC_X__
+    #endif
+
+    #include <Carbon/Carbon.h>
 #elif defined(__OS2__)
     #if defined(__IBMCPP__)
         #define __VISAGEAVER__ __IBMCPP__
     #endif
 
     // Place other OS/2 compiler environment defines here
-    #define LINKAGEMODE _Optlink
+    #if defined(__VISAGECPP__)
+        // VisualAge is the only thing that understands _Optlink
+        #define LINKAGEMODE _Optlink
+    #endif
+    #define wxSIZE_T_IS_UINT
 #else   // Windows
     #ifndef __WINDOWS__
         #define __WINDOWS__
     #endif  // Windows
 
+    // to be changed for Win64!
+    #ifndef __WIN32__
+        #define __WIN16__
+    #endif
+
     // define another standard symbol for Microsoft Visual C++: the standard one
     // (_MSC_VER) is also defined by Metrowerks compiler
     #if defined(_MSC_VER) && !defined(__MWERKS__)
     #elif defined(__BCPLUSPLUS__) && !defined(__BORLANDC__)
         #define __BORLANDC__
       #elif defined(__WATCOMC__)
-    //#define __WATCOMC__
     #elif defined(__SC__)
         #define __SYMANTECC__
     #endif  // compiler
+
+    // size_t is the same as unsigned int for all Windows compilers we know,
+    // so define it if it hadn't been done by configure yet
+    #if !defined(wxSIZE_T_IS_UINT) && !defined(wxSIZE_T_IS_ULONG)
+        #define wxSIZE_T_IS_UINT
+    #endif
 #endif  // OS
 
+// if we're on a Unix system but didn't use configure (so that setup.h didn't
+// define __UNIX__), do define __UNIX__ now
+#if !defined(__UNIX__) && defined(__UNIX_LIKE__)
+    #define __UNIX__
+#endif // Unix
+
 // LINKAGEMODE mode is empty for everyting except OS/2
 #ifndef LINKAGEMODE
     #define LINKAGEMODE
 #   pragma warning(disable:4100)    // unreferenced formal parameter
 #   pragma warning(disable:4511)    // copy ctor couldn't be generated
 #   pragma warning(disable:4512)    // operator=() couldn't be generated
-#   pragma warning(disable:4699)    // Using precompiled header
+#   pragma warning(disable:4699)    // using precompiled header
 #   pragma warning(disable:4134)    // conversion between pointers to members of same class
+#   pragma warning(disable:4710)    // function not inlined
 #ifndef WIN32
 #   pragma warning(disable:4135)    // conversion between different integral types
 #   pragma warning(disable:4769)    // assignment of near pointer to long integer
 #endif
 #endif // __VISUALC__
 
+// suppress some Watcom C++ warnings
+#ifdef __WATCOMC__
+#   pragma warning 849 9                       // Disable 'virtual function hidden'
+#   pragma warning 549 9                       // Disable 'operand contains compiler generated information'
+#endif // __VISUALC__
+
 // suppress some Salford C++ warnings
 #ifdef __SALFORDC__
 #   pragma suppress 353             // Possible nested comments
 #endif // VC++ 1.5
 
 // Digital Unix C++ compiler only defines this symbol for .cxx and .hxx files,
-// so define it ourselves
+// so define it ourselves (newer versions do it for all files, though, and
+// don't allow it to be redefined)
 #ifdef __DECCXX
-#ifndef __VMS
-define __cplusplus
-#endif
+    #if !defined(__VMS) && !defined(__cplusplus)
+        #define __cplusplus
+    #endif
 #endif // __DECCXX
 
 // Resolves linking problems under HP-UX
     #define va_list __gnuc_va_list
 #endif // HP-UX
 
-// Mingw32 gcc-2.95 uses new windows headers which are more ms-like
-// we are setting this define because of the complex check
-// using NORLANDER as Cygwin may follow. (header author is Anders Norlander)
-#if defined(__MINGW32__) && ((__GNUC__>2) ||((__GNUC__==2) && (__GNUC_MINOR__>=95)))
-#ifndef wxUSE_NORLANDER_HEADERS
-#   define wxUSE_NORLANDER_HEADERS 1
-#endif
-#endif
-
-// "old" GNUWIN32 is the one without Norlander's headers: it lacks the standard
-// Win32 headers and we define the used stuff ourselves for it in
-// wx/msw/gnuwin32/extra.h
-#if defined(__GNUWIN32__) && !wxUSE_NORLANDER_HEADERS
-    #define __GNUWIN32_OLD__
+// This macro can be used to check that the version of mingw32 compiler is
+// at least maj.min
+#if defined( __GNUWIN32__ ) || defined( __MINGW32__ ) || defined( __CYGWIN__ )
+    #include "wx/msw/gccpriv.h"
+#else
+    #undef wxCHECK_W32API_VERSION
+    #define wxCHECK_W32API_VERSION(maj, min) (0)
 #endif
 
-//////////////////////////////////////////////////////////////////////////////////
-// Currently Only MS-Windows/NT, XView and Motif are supported
-//
 #if defined(__HPUX__) && !defined(__WXGTK__)
     #ifndef __WXMOTIF__
         #define __WXMOTIF__
     #define __X__
 #endif
 
-#ifdef __WXMSW__
-// wxWindows checks for WIN32, not __WIN32__
-#if ((defined(WIN32) || defined(__NT__)) && !defined(__WIN32__) && !defined(__WXSTUBS__))
-#define __WIN32__
-#endif
-
-#ifdef __WXWINE__
-  #ifndef __WIN32__
-    #define __WIN32__
-  #endif
-  #ifndef __WIN95__
-    #define __WIN95__
-  #endif
-  #ifndef STRICT
-    #define STRICT
-  #endif
-#endif
-
-#ifndef __WIN32__
-#define __WIN16__
-#endif
-
-#if !defined(__WIN95__) && (WINVER >= 0x0400)
-#define __WIN95__
-#endif
-
-#if defined(TWIN32) && !defined(__TWIN32__)
-#define __TWIN32__
-#endif
-
-#endif // wxMSW
-
 // Make sure the environment is set correctly
 #if defined(__WXMSW__) && defined(__X__)
     #error "Target can't be both X and Windows"
 #elif !defined(__WXMOTIF__) && !defined(__WXMSW__) && !defined(__WXGTK__) && \
       !defined(__WXPM__) && !defined(__WXMAC__) && !defined(__X__) && \
-      !defined(__WXQT__) && !defined(__WXSTUBS__) && wxUSE_GUI
-    #error "No Target! Use -D[__WXMOTIF__|__WXGTK__|__WXMSW__|__WXMAC__|__WXQT__|__WXPM__|__WXSTUBS__]"
+      !defined(__WXQT__) && !defined(__WXMGL__) && wxUSE_GUI
+    #ifdef __UNIX__
+        #error "No Target! You should use wx-config program for compilation flags!"
+    #else // !Unix
+        #error "No Target! You should use supplied makefiles for compilation!"
+    #endif // Unix/!Unix
 #endif
 
-// ----------------------------------------------------------------------------
-// wxWindows options
-// ----------------------------------------------------------------------------
-
-#include <stddef.h>
-
-#include "wx/setup.h"
-
-// just in case they were defined in setup.h
-#undef PACKAGE
-#undef VERSION
-
-// this has to be done after including setup.h which might
-// define __HPUX__ 1 itself
-#if defined(__hpux) && !defined(__HPUX__)
-    #define __HPUX__
-#endif // HP-UX
-
-// if we're on a Unix system but didn't use configure (so that setup.h didn't
-// define __UNIX__), do define __UNIX__ now
-#if !defined(__UNIX__) && defined(__UNIX_LIKE__)
-    #define __UNIX__
-#endif // Unix
-
 #include "wx/version.h"
 
 // ----------------------------------------------------------------------------
 // compatibility code
 #if !wxUSE_GUI
     #undef WXWIN_COMPATIBILITY_2
+    #undef WXWIN_COMPATIBILITY_2_2
+
     #define WXWIN_COMPATIBILITY_2 0
+    #define WXWIN_COMPATIBILITY_2_2 0
 #endif // !GUI
 
 // ============================================================================
@@ -328,15 +396,24 @@ typedef int wxWindowID;
 // portable calling conventions macros
 // ----------------------------------------------------------------------------
 
-// wxCALLBACK should be used for the functions which are called back by
-// Windows (such as compare function for wxListCtrl)
-#if defined(__WIN32__)
-    #if defined(__MINGW32__) || defined(__GNUWIN32__)
-        #define wxCALLBACK __attribute__((stdcall))
+// stdcall is used for all functions called by Windows under Windows
+#ifdef __WINDOWS__
+    #if defined(__GNUWIN32__)
+        #define wxSTDCALL __attribute__((stdcall))
     #else
         // both VC++ and Borland understand this
-        #define wxCALLBACK _stdcall
+        #define wxSTDCALL _stdcall
     #endif
+
+#else // Win
+    // no such stupidness under Unix
+    #define wxSTDCALL
+#endif // platform
+
+// wxCALLBACK should be used for the functions which are called back by
+// Windows (such as compare function for wxListCtrl)
+#if defined(__WIN32__) && !defined(__WXMICROWIN__)
+    #define wxCALLBACK wxSTDCALL
 #else
     // no stdcall under Unix nor Win16
     #define wxCALLBACK
@@ -361,50 +438,61 @@ typedef int wxWindowID;
 
 #if defined(__WXMSW__)
 
-// _declspec works in BC++ 5 and later, as well as VC++
-#if defined(__VISUALC__) || defined(__BORLANDC__)
-
+// __declspec works in BC++ 5 and later, Watcom C++ 11.0 and later as well as VC++ and gcc
+#if defined(__VISUALC__) || defined(__BORLANDC__) || defined(__GNUC__) || defined(__WATCOMC__)
 #  ifdef WXMAKINGDLL
-#    define WXDLLEXPORT _declspec( dllexport )
-#    define WXDLLEXPORT_DATA(type) _declspec( dllexport ) type
+#    define WXDLLEXPORT __declspec( dllexport )
+#    define WXDLLEXPORT_DATA(type) __declspec( dllexport ) type
 #    define WXDLLEXPORT_CTORFN
 #  elif defined(WXUSINGDLL)
-#    define WXDLLEXPORT _declspec( dllimport )
-#    define WXDLLEXPORT_DATA(type) _declspec( dllimport ) type
+#    define WXDLLEXPORT __declspec( dllimport )
+#    define WXDLLEXPORT_DATA(type) __declspec( dllimport ) type
 #    define WXDLLEXPORT_CTORFN
 #  else
 #    define WXDLLEXPORT
 #    define WXDLLEXPORT_DATA(type) type
 #    define WXDLLEXPORT_CTORFN
 #  endif
+#else
+#    define WXDLLEXPORT
+#    define WXDLLEXPORT_DATA(type) type
+#    define WXDLLEXPORT_CTORFN
+#endif
 
 #elif defined(__WXPM__)
 
-#  ifdef WXMAKINGDLL
-#    define WXDLLEXPORT _Export
-#    define WXDLLEXPORT_DATA(type) _Export type
-#    define WXDLLEXPORT_CTORFN
-#  elif defined(WXUSINGDLL)
-#    define WXDLLEXPORT _Export
-#    define WXDLLEXPORT_DATA(type) _Export type
-#    define WXDLLEXPORT_CTORFN
+#  if (!(defined(__VISAGECPP__) && (__IBMCPP__ < 400 || __IBMC__ < 400 )))
+
+#    ifdef WXMAKINGDLL
+#      define WXDLLEXPORT _Export
+#      define WXDLLEXPORT_DATA(type) _Export type
+#      define WXDLLEXPORT_CTORFN
+#    elif defined(WXUSINGDLL)
+#      define WXDLLEXPORT _Export
+#      define WXDLLEXPORT_DATA(type) _Export type
+#      define WXDLLEXPORT_CTORFN
+#    else
+#      define WXDLLEXPORT
+#      define WXDLLEXPORT_DATA(type) type
+#      define WXDLLEXPORT_CTORFN
+#    endif
+
 #  else
+
 #    define WXDLLEXPORT
 #    define WXDLLEXPORT_DATA(type) type
 #    define WXDLLEXPORT_CTORFN
+
 #  endif
 
-#else
+#else  // !(MSW or OS2)
+
 #  define WXDLLEXPORT
 #  define WXDLLEXPORT_DATA(type) type
 #  define WXDLLEXPORT_CTORFN
+
 #endif
 
-#else // !Windows
-#  define WXDLLEXPORT
-#  define WXDLLEXPORT_DATA(type) type
-#  define WXDLLEXPORT_CTORFN
-#endif // Win/!Win
 
 // For ostream, istream ofstream
 #if defined(__BORLANDC__) && defined( _RTLDLL )
@@ -413,16 +501,27 @@ typedef int wxWindowID;
 #  define WXDLLIMPORT
 #endif
 
+#ifdef __cplusplus
 class WXDLLEXPORT wxObject;
 class WXDLLEXPORT wxEvent;
+#endif
 
  /** symbolic constant used by all Find()-like functions returning positive
       integer on success as failure indicator */
 #define wxNOT_FOUND       (-1)
 
 // ----------------------------------------------------------------------------
-/** @name Very common macros */
+// Very common macros
 // ----------------------------------------------------------------------------
+
+// everybody gets the assert and other debug macros
+#ifdef __cplusplus
+#include "wx/debug.h"
+#endif
+
+// NULL declaration
+#include <stddef.h>
+
 //@{
 /// delete pointer if it is not NULL and NULL it afterwards
 // (checking that it's !NULL before passing it to delete is just a
@@ -454,10 +553,6 @@ class WXDLLEXPORT wxEvent;
 /// size of statically declared array
 #define WXSIZEOF(array)   (sizeof(array)/sizeof(array[0]))
 
-// Use of these suppresses some compiler warnings
-WXDLLEXPORT_DATA(extern const bool) wxTrue;
-WXDLLEXPORT_DATA(extern const bool) wxFalse;
-
 // ----------------------------------------------------------------------------
 // compiler specific settings
 // ----------------------------------------------------------------------------
@@ -484,13 +579,19 @@ WXDLLEXPORT_DATA(extern const bool) wxFalse;
 // where should i put this? we need to make sure of this as it breaks
 // the <iostream> code.
 #if !wxUSE_IOSTREAMH && defined(__WXDEBUG__)
-#ifndef __MWERKS__
-#undef __WXDEBUG__
-#endif
+#  ifndef __MWERKS__
+// #undef __WXDEBUG__
+#    ifdef wxUSE_DEBUG_NEW_ALWAYS
+#    undef wxUSE_DEBUG_NEW_ALWAYS
+#    define wxUSE_DEBUG_NEW_ALWAYS 0
+#    endif
+#  endif
 #endif
 
 // Callback function type definition
+#ifdef __cplusplus
 typedef void (*wxFunction) (wxObject&, wxEvent&);
+#endif
 
 // ----------------------------------------------------------------------------
 // OS mnemonics -- Identify the running OS (useful for Windows)
@@ -524,7 +625,8 @@ enum
     wxMGL_X,                  // MGL on X
     wxMGL_WIN32,              // MGL on Win32
     wxMGL_OS2,                // MGL on OS/2
-    wxWINDOWS_OS2             // Native OS/2 PM
+    wxWINDOWS_OS2,            // Native OS/2 PM
+    wxUNIX                    // wxBase under Unix
 };
 
 // ----------------------------------------------------------------------------
@@ -606,9 +708,9 @@ enum
 
 typedef float wxFloat32 ;
 #if defined( __WXMAC__ )  && defined (__MWERKS__)
-    typedef short double       wxFloat64;
+    typedef short double wxFloat64;
 #else
-    typedef double                     wxFloat64;
+    typedef double wxFloat64;
 #endif
 
 #if defined( __WXMAC__ )  && !defined( __POWERPC__ )
@@ -638,30 +740,30 @@ typedef float wxFloat32 ;
 #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 ) ) ;}
+    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 wxUINT16_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 wxUINT32_SWAP_ALWAYS(wxInt32 value)
-               = { 0xE158, 0x4840, 0xE158 };
+    #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
@@ -766,7 +868,10 @@ enum wxAlignment
     wxALIGN_CENTRE_VERTICAL   = wxALIGN_CENTER_VERTICAL,
 
     wxALIGN_CENTER            = (wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL),
-    wxALIGN_CENTRE            = wxALIGN_CENTER
+    wxALIGN_CENTRE            = wxALIGN_CENTER,
+
+    // a mask to extract alignment from the combination of flags
+    wxALIGN_MASK              = 0x0f00
 };
 
 enum wxStretch
@@ -775,7 +880,27 @@ enum wxStretch
     wxSHRINK                  = 0x1000,
     wxGROW                    = 0x2000,
     wxEXPAND                  = wxGROW,
-    wxSHAPED                  = 0x4000
+    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
 };
 
 // ----------------------------------------------------------------------------
@@ -802,43 +927,72 @@ enum wxStretch
 #define wxHSCROLL               0x40000000
 #define wxCAPTION               0x20000000
 
-// New styles
-#define wxDOUBLE_BORDER         0x10000000
-#define wxSUNKEN_BORDER         0x08000000
-#define wxRAISED_BORDER         0x04000000
-#define wxBORDER                0x02000000
-#define wxSIMPLE_BORDER         wxBORDER
-#define wxSTATIC_BORDER         0x01000000
-#define wxTRANSPARENT_WINDOW    0x00100000
-#define wxNO_BORDER             0x00200000
-
-#define wxUSER_COLOURS          0x00800000
-                                 // Override CTL3D etc. control colour processing to
-                                 // allow own background colour
-                                 // OBSOLETE - use wxNO_3D instead
+// New styles (border styles are now in their own enum)
+#define wxDOUBLE_BORDER         wxBORDER_DOUBLE
+#define wxSUNKEN_BORDER         wxBORDER_SUNKEN
+#define wxRAISED_BORDER         wxBORDER_RAISED
+#define wxBORDER                wxBORDER_SIMPLE
+#define wxSIMPLE_BORDER         wxBORDER_SIMPLE
+#define wxSTATIC_BORDER         wxBORDER_STATIC
+#define wxNO_BORDER             wxBORDER_NONE
+
+// Override CTL3D etc. control colour processing to allow own background
+// colour.
+// Override CTL3D or native 3D styles for children
 #define wxNO_3D                 0x00800000
-                                 // Override CTL3D or native 3D styles for children
+
+// OBSOLETE - use wxNO_3D instead
+#define wxUSER_COLOURS          wxNO_3D
+
+// wxALWAYS_SHOW_SB: instead of hiding the scrollbar when it is not needed,
+// disable it - but still show (see also wxLB_ALWAYS_SB style)
+//
+// NB: as this style is only supported by wxUniversal so far as it doesn't use
+//     wxUSER_COLOURS/wxNO_3D, we reuse the same style value
+#define wxALWAYS_SHOW_SB        0x00800000
+
+// Clip children when painting, which reduces flicker in e.g. frames and
+// splitter windows, but can't be used in a panel where a static box must be
+// 'transparent' (panel paints the background for it)
 #define wxCLIP_CHILDREN         0x00400000
-                                 // Clip children when painting, which reduces flicker in
-                                 // e.g. frames and splitter windows, but can't be used in
-                                 // a panel where a static box must be 'transparent' (panel
-                                 // paints the background for it)
 
-// Add this style to a panel to get tab traversal working
-// outside of dialogs.
+// Note we're reusing the wxCAPTION style because we won't need captions
+// for subwindows/controls
+#define wxCLIP_SIBLINGS         0x20000000
+
+#define wxTRANSPARENT_WINDOW    0x00100000
+
+// Add this style to a panel to get tab traversal working outside of dialogs
+// (on by default for wxPanel, wxDialog, wxScrolledWindow)
 #define wxTAB_TRAVERSAL         0x00080000
 
 // Add this style if the control wants to get all keyboard messages (under
 // Windows, it won't normally get the dialog navigation key events)
 #define wxWANTS_CHARS           0x00040000
 
-// Make window retained (mostly Motif, I think)
+// Make window retained (mostly Motif, I think) -- obsolete (VZ)?
 #define wxRETAINED              0x00020000
 #define wxBACKINGSTORE          wxRETAINED
 
+// set this flag to create a special popup window: it will be always shown on
+// top of other windows, will capture the mouse and will be dismissed when the
+// mouse is clicked outside of it or if it loses focus in any other way
+#define wxPOPUP_WINDOW          0x00020000
+
 // don't invalidate the whole window (resulting in a PAINT event) when the
 // window is resized (currently, makes sense for wxMSW only)
 #define wxNO_FULL_REPAINT_ON_RESIZE 0x00010000
+
+/*
+ * Extra window style flags (use wxWS_EX prefix to make it clear that they
+ * should be passed to wxWindow::SetExtraStyle(), not SetWindowStyle())
+ */
+
+// by default, TransferDataTo/FromWindow() only work on direct children of the
+// window (compatible behaviour), set this flag to make them recursively
+// descend into all subwindows
+#define wxWS_EX_VALIDATE_RECURSIVELY    0x00000001
+
 /*
  * wxFrame/wxDialog style flags
  */
@@ -846,33 +1000,55 @@ enum wxStretch
 #define wxICONIZE               0x4000
 #define wxMINIMIZE              wxICONIZE
 #define wxMAXIMIZE              0x2000
-#define wxTHICK_FRAME           0x1000
+// free value: 0x1000
 #define wxSYSTEM_MENU           0x0800
 #define wxMINIMIZE_BOX          0x0400
 #define wxMAXIMIZE_BOX          0x0200
 #define wxTINY_CAPTION_HORIZ    0x0100
 #define wxTINY_CAPTION_VERT     0x0080
-#define wxRESIZE_BOX            wxMAXIMIZE_BOX
 #define wxRESIZE_BORDER         0x0040
+
+#define wxDIALOG_NO_PARENT      0x0001  // Don't make owned by apps top window
+#define wxFRAME_NO_TASKBAR      0x0002  // No taskbar button (MSW only)
+#define wxFRAME_TOOL_WINDOW     0x0004  // No taskbar button, no system menu
+
+// deprecated versions defined for compatibility reasons
+#define wxRESIZE_BOX            wxMAXIMIZE_BOX
+#define wxTHICK_FRAME           wxRESIZE_BORDER
+
+// obsolete styles, unused any more
 #define wxDIALOG_MODAL          0x0020
 #define wxDIALOG_MODELESS       0x0000
-// Add for normal Windows frame behaviour
-#define wxFRAME_FLOAT_ON_PARENT 0x0020
 
+// deprecated flag, don't use any more, defined for compatibility only
+#define wxFRAME_FLOAT_ON_PARENT 0
+
+// Context-sensitive help
+#define wxFRAME_EX_CONTEXTHELP  0x00000004
+#define wxDIALOG_EX_CONTEXTHELP 0x00000004
+
+/*
+ * MDI parent frame style flags
+ * Can overlap with some of the above.
+ */
+
+#define wxFRAME_NO_WINDOW_MENU  0x0100
 
 #if WXWIN_COMPATIBILITY
 #define wxDEFAULT_FRAME wxDEFAULT_FRAME_STYLE
 #endif
 
 #define wxDEFAULT_FRAME_STYLE \
-  (wxSYSTEM_MENU | wxRESIZE_BORDER | wxMINIMIZE_BOX | wxMAXIMIZE_BOX | wxTHICK_FRAME | wxSYSTEM_MENU | wxCAPTION | wxCLIP_CHILDREN)
+  (wxSYSTEM_MENU | wxRESIZE_BORDER | \
+   wxMINIMIZE_BOX | wxMAXIMIZE_BOX | \
+   wxCAPTION | wxCLIP_CHILDREN)
 
 #ifdef __WXMSW__
-#   define wxDEFAULT_DIALOG_STYLE  (wxSYSTEM_MENU|wxCAPTION|wxTHICK_FRAME)
+#   define wxDEFAULT_DIALOG_STYLE  (wxSYSTEM_MENU | wxCAPTION)
 #else
-// Under Unix, the dialogs don't have a system menu. Specifying
-// wxSYSTEM_MENU here, will make a close button appear.
-#   define wxDEFAULT_DIALOG_STYLE  (wxCAPTION|wxTHICK_FRAME)
+//  Under Unix, the dialogs don't have a system menu. Specifying wxSYSTEM_MENU
+//  here will make a close button appear.
+#   define wxDEFAULT_DIALOG_STYLE  wxCAPTION
 #endif
 
 /*
@@ -929,14 +1105,14 @@ enum wxStretch
 #define wxLB_NEEDED_SB      0x0200
 #define wxLB_ALWAYS_SB      0x0400
 #define wxLB_HSCROLL        wxHSCROLL
-
+// always show an entire number of rows
+#define wxLB_INT_HEIGHT     0x0800
 /*
  * wxTextCtrl style flags
  */
-#define wxPROCESS_ENTER     0x0004
-#define wxPASSWORD          0x0008
-#define wxTE_PROCESS_ENTER  wxPROCESS_ENTER
-#define wxTE_PASSWORD       wxPASSWORD
+// the flag bits 0x0001, 2, 4 and 8 are free but should be used only for the
+// things which don't make sense for a text control used by wxTextEntryDialog
+// because they would otherwise conflict with wxOK, wxCANCEL, wxCENTRE
 #define wxTE_READONLY       0x0010
 #define wxTE_MULTILINE      0x0020
 #define wxTE_PROCESS_TAB    0x0040
@@ -945,6 +1121,18 @@ enum wxStretch
 #define wxTE_RICH           0x0080
 #define wxTE_NO_VSCROLL     0x0100
 #define wxTE_AUTO_SCROLL    0x0200
+#define wxTE_PROCESS_ENTER  0x0400
+#define wxTE_PASSWORD       0x0800
+
+// use wxHSCROLL to not wrap text at all, wxTE_LINEWRAP to wrap it at any
+// position and wxTE_WORDWRAP to wrap at words boundary
+#define wxTE_DONTWRAP       wxHSCROLL
+#define wxTE_LINEWRAP       0x0800
+#define wxTE_WORDWRAP       0x0000  // it's just == !wxHSCROLL
+
+// deprecated synonyms
+#define wxPROCESS_ENTER     wxTE_PROCESS_ENTER
+#define wxPASSWORD          wxTE_PASSWORD
 
 /*
  * wxComboBox style flags
@@ -957,9 +1145,15 @@ enum wxStretch
 /*
  * wxRadioBox style flags
  */
+// should we number the items from left to right or from top to bottom in a 2d
+// radiobox?
+#define wxRA_LEFTTORIGHT    0x0001
+#define wxRA_TOPTOBOTTOM    0x0002
+
 // New, more intuitive names to specify majorDim argument
 #define wxRA_SPECIFY_COLS   wxHORIZONTAL
 #define wxRA_SPECIFY_ROWS   wxVERTICAL
+
 // Old names for compatibility
 #define wxRA_HORIZONTAL     wxHORIZONTAL
 #define wxRA_VERTICAL       wxVERTICAL
@@ -985,8 +1179,8 @@ enum wxStretch
 #define wxSL_VERTICAL        wxVERTICAL   // 8
 // The next one is obsolete - use scroll events instead
 #define wxSL_NOTIFY_DRAG     0x0000
-#define wxSL_AUTOTICKS       0x0010
-// #define wxSL_MANUALTICKS     0x0010
+#define wxSL_TICKS           0x0010
+#define wxSL_AUTOTICKS       wxSL_TICKS // we don't support manual ticks
 #define wxSL_LABELS          0x0020
 #define wxSL_LEFT            0x0040
 #define wxSL_TOP             0x0080
@@ -1006,6 +1200,10 @@ enum wxStretch
  */
 #define wxBU_AUTODRAW        0x0004
 #define wxBU_NOAUTODRAW      0x0000
+#define wxBU_LEFT            0x0040
+#define wxBU_TOP             0x0080
+#define wxBU_RIGHT           0x0100
+#define wxBU_BOTTOM          0x0200
 
 /*
  * wxTreeCtrl flags
@@ -1018,57 +1216,33 @@ enum wxStretch
 #define wxTR_MULTIPLE        0x0020
 #define wxTR_EXTENDED        0x0040
 #define wxTR_HAS_VARIABLE_ROW_HEIGHT 0x0080
+#define wxTR_NO_LINES        0x0100
+#define wxTR_MAC_BUTTONS     0x0200
+#define wxTR_ROW_LINES       0x0400
 
 /*
- * wxListCtrl flags
- */
-#define wxLC_ICON            0x0004
-#define wxLC_SMALL_ICON      0x0008
-#define wxLC_LIST            0x0010
-#define wxLC_REPORT          0x0020
-#define wxLC_ALIGN_TOP       0x0040
-#define wxLC_ALIGN_LEFT      0x0080
-#define wxLC_AUTOARRANGE     0x0100
-#define wxLC_USER_TEXT       0x0200
-#define wxLC_EDIT_LABELS     0x0400
-#define wxLC_NO_HEADER       0x0800
-#define wxLC_NO_SORT_HEADER  0x1000
-#define wxLC_SINGLE_SEL      0x2000
-#define wxLC_SORT_ASCENDING  0x4000
-#define wxLC_SORT_DESCENDING 0x8000
-
-#define wxLC_MASK_TYPE       (wxLC_ICON | wxLC_SMALL_ICON | wxLC_LIST | wxLC_REPORT)
-#define wxLC_MASK_ALIGN      (wxLC_ALIGN_TOP | wxLC_ALIGN_LEFT)
-#define wxLC_MASK_SORT       (wxLC_SORT_ASCENDING | wxLC_SORT_DESCENDING)
-
-// Omitted because (a) too much detail (b) not enough style flags
-// #define wxLC_NO_SCROLL
-// #define wxLC_NO_LABEL_WRAP
-// #define wxLC_OWNERDRAW_FIXED
-// #define wxLC_SHOW_SEL_ALWAYS
-
-/*
- * wxSpinButton flags
+ * wxSpinButton flags.
+ * Note that a wxSpinCtrl is sometimes defined as
+ * a wxTextCtrl, and so the flags must be different
+ * from wxTextCtrl's.
  */
 #define wxSP_HORIZONTAL       wxHORIZONTAL // 4
 #define wxSP_VERTICAL         wxVERTICAL   // 8
-#define wxSP_ARROW_KEYS       0x0010
-#define wxSP_WRAP             0x0020
+#define wxSP_ARROW_KEYS       0x1000
+#define wxSP_WRAP             0x2000
 
 /*
  * wxSplitterWindow flags
  */
 #define wxSP_NOBORDER         0x0000
-#define wxSP_3D               0x0010
+#define wxSP_NOSASH           0x0010
 #define wxSP_BORDER           0x0020
 #define wxSP_PERMIT_UNSPLIT   0x0040
 #define wxSP_LIVE_UPDATE      0x0080
-
-/*
- * wxFrame extra flags
- */
-// No title on taskbar
-#define wxFRAME_TOOL_WINDOW 0x0004
+#define wxSP_3DSASH           0x0100
+#define wxSP_3DBORDER         0x0200
+#define wxSP_FULLSASH         0x0400
+#define wxSP_3D               (wxSP_3DBORDER | wxSP_3DSASH)
 
 /*
  * wxTabCtrl flags
@@ -1082,9 +1256,11 @@ enum wxStretch
  * wxNotebook flags
  */
 #define wxNB_FIXEDWIDTH       0x0010
+#define wxNB_TOP              0x0000    // default
 #define wxNB_LEFT             0x0020
 #define wxNB_RIGHT            0x0040
 #define wxNB_BOTTOM           0x0080
+#define wxNB_MULTILINE        0x0100
 
 /*
  * wxStatusBar95 flags
@@ -1096,6 +1272,11 @@ enum wxStretch
  */
 #define wxST_NO_AUTORESIZE    0x0001
 
+/*
+ * wxStaticBitmap flags
+ */
+#define wxBI_EXPAND           wxEXPAND
+
 /*
  * wxStaticLine flags
  */
@@ -1110,7 +1291,10 @@ enum wxStretch
 #define wxPD_AUTO_HIDE          0x0004
 #define wxPD_ELAPSED_TIME       0x0008
 #define wxPD_ESTIMATED_TIME     0x0010
-#define wxPD_REMAINING_TIME     0x0020
+// wxGA_SMOOTH = 0x0020 may also be used with wxProgressDialog
+// NO!!! This is wxDIALOG_MODAL and will cause the progress dialog to
+// be modal. No progress will then be made at all.
+#define wxPD_REMAINING_TIME     0x0040
 
 /*
  * wxHtmlWindow flags
@@ -1167,11 +1351,6 @@ enum wxStretch
 // id for a separator line in the menu (invalid for normal item)
 #define wxID_SEPARATOR (-1)
 
-// this one is for compatibility only, don't use in new code
-#ifndef ID_SEPARATOR
-    #define ID_SEPARATOR    wxID_SEPARATOR
-#endif
-
 // Standard menu IDs
 #define wxID_LOWEST             4999
 
@@ -1225,11 +1404,47 @@ enum wxStretch
 #define wxID_MORE               5109
 #define wxID_SETUP              5110
 #define wxID_RESET              5111
+#define wxID_CONTEXT_HELP       5112
+#define wxID_YESTOALL           5113
+#define wxID_NOTOALL            5114
+#define wxID_ABORT              5115
+#define wxID_RETRY              5116
+#define wxID_IGNORE             5117
 
 // IDs used by generic file dialog (11 consecutive starting from this value)
 #define wxID_FILEDLGG           5900
 #define wxID_HIGHEST            5999
 
+// ----------------------------------------------------------------------------
+// constants
+// ----------------------------------------------------------------------------
+
+// hit test results
+enum wxHitTest
+{
+    wxHT_NOWHERE,
+
+    // scrollbar
+    wxHT_SCROLLBAR_FIRST = wxHT_NOWHERE,
+    wxHT_SCROLLBAR_ARROW_LINE_1,    // left or upper arrow to scroll by line
+    wxHT_SCROLLBAR_ARROW_LINE_2,    // right or down
+    wxHT_SCROLLBAR_ARROW_PAGE_1,    // left or upper arrow to scroll by page
+    wxHT_SCROLLBAR_ARROW_PAGE_2,    // right or down
+    wxHT_SCROLLBAR_THUMB,           // on the thumb
+    wxHT_SCROLLBAR_BAR_1,           // bar to the left/above the thumb
+    wxHT_SCROLLBAR_BAR_2,           // bar to the right/below the thumb
+    wxHT_SCROLLBAR_LAST,
+
+    // window
+    wxHT_WINDOW_OUTSIDE,            // not in this window at all
+    wxHT_WINDOW_INSIDE,             // in the client area
+    wxHT_WINDOW_VERT_SCROLLBAR,     // on the vertical scrollbar
+    wxHT_WINDOW_HORZ_SCROLLBAR,     // on the horizontal scrollbar
+    wxHT_WINDOW_CORNER,             // on the corner between 2 scrollbars
+
+    wxHT_MAX
+};
+
 // ----------------------------------------------------------------------------
 // Possible SetSize flags
 // ----------------------------------------------------------------------------
@@ -1285,6 +1500,8 @@ enum {
 
 // Brush & Pen Stippling. Note that a stippled pen cannot be dashed!!
 // Note also that stippling a Pen IS meaningfull, because a Line is
+  wxSTIPPLE_MASK_OPAQUE, //mask is used for blitting monochrome using text fore and back ground colors
+  wxSTIPPLE_MASK,        //mask is used for masking areas in the stipple bitmap (TO DO)
 // drawn with a Pen, and without any Brush -- and it can be stippled.
   wxSTIPPLE =          110,
   wxBDIAGONAL_HATCH,
@@ -1308,24 +1525,22 @@ enum {
 // Logical ops
 typedef enum
 {
-  wxCLEAR,      // 0
-  wxXOR,        // src XOR dst
-  wxINVERT,     // NOT dst
-  wxOR_REVERSE, // src OR (NOT dst)
-  wxAND_REVERSE,// src AND (NOT dst)
-  wxCOPY,       // src
-  wxAND,        // src AND dst
-  wxAND_INVERT, // (NOT src) AND dst
-  wxNO_OP,      // dst
-  wxNOR,        // (NOT src) AND (NOT dst)
-  wxEQUIV,      // (NOT src) XOR dst
-  wxSRC_INVERT, // (NOT src)
-  wxOR_INVERT,  // (NOT src) OR dst
-  wxNAND,       // (NOT src) OR (NOT dst)
-  wxOR,         // src OR dst
-  wxSET,        // 1
-  wxSRC_OR,     // source _bitmap_ OR destination
-  wxSRC_AND     // source _bitmap_ AND destination
+  wxCLEAR,        wxROP_BLACK = wxCLEAR,             wxBLIT_BLACKNESS = wxCLEAR,        // 0
+  wxXOR,          wxROP_XORPEN = wxXOR,              wxBLIT_SRCINVERT = wxXOR,          // src XOR dst
+  wxINVERT,       wxROP_NOT = wxINVERT,              wxBLIT_DSTINVERT = wxINVERT,       // NOT dst
+  wxOR_REVERSE,   wxROP_MERGEPENNOT = wxOR_REVERSE,  wxBLIT_00DD0228 = wxOR_REVERSE,    // src OR (NOT dst)
+  wxAND_REVERSE,  wxROP_MASKPENNOT = wxAND_REVERSE,  wxBLIT_SRCERASE = wxAND_REVERSE,   // src AND (NOT dst)
+  wxCOPY,         wxROP_COPYPEN = wxCOPY,            wxBLIT_SRCCOPY = wxCOPY,           // src
+  wxAND,          wxROP_MASKPEN = wxAND,             wxBLIT_SRCAND = wxAND,             // src AND dst
+  wxAND_INVERT,   wxROP_MASKNOTPEN = wxAND_INVERT,   wxBLIT_00220326 = wxAND_INVERT,    // (NOT src) AND dst
+  wxNO_OP,        wxROP_NOP = wxNO_OP,               wxBLIT_00AA0029 = wxNO_OP,         // dst
+  wxNOR,          wxROP_NOTMERGEPEN = wxNOR,         wxBLIT_NOTSRCERASE = wxNOR,        // (NOT src) AND (NOT dst)
+  wxEQUIV,        wxROP_NOTXORPEN = wxEQUIV,         wxBLIT_00990066 = wxEQUIV,         // (NOT src) XOR dst
+  wxSRC_INVERT,   wxROP_NOTCOPYPEN = wxSRC_INVERT,   wxBLIT_NOTSCRCOPY = wxSRC_INVERT,  // (NOT src)
+  wxOR_INVERT,    wxROP_MERGENOTPEN = wxOR_INVERT,   wxBLIT_MERGEPAINT = wxOR_INVERT,   // (NOT src) OR dst
+  wxNAND,         wxROP_NOTMASKPEN = wxNAND,         wxBLIT_007700E6 = wxNAND,          // (NOT src) OR (NOT dst)
+  wxOR,           wxROP_MERGEPEN = wxOR,             wxBLIT_SRCPAINT = wxOR,            // src OR dst
+  wxSET,          wxROP_WHITE = wxSET,               wxBLIT_WHITENESS = wxSET           // 1
 } form_ops_t;
 
 /* Flood styles */
@@ -1602,9 +1817,16 @@ typedef enum {
     wxPRINT_MODE_PRINTER = 3    // Send to printer
 } wxPrintMode;
 
-// ---------------------------------------------------------------------------
-// Macro to specify "All Files" on different platforms
-// ---------------------------------------------------------------------------
+// ----------------------------------------------------------------------------
+// miscellaneous
+// ----------------------------------------------------------------------------
+
+// define this macro if font handling is done using the X font names
+#if defined(__WXGTK__) || defined(__X__)
+    #define _WX_X_FONTLIKE
+#endif
+
+// macro to specify "All Files" on different platforms
 #if defined(__WXMSW__)
 #   define wxALL_FILES_PATTERN   "*.*"
 #   define wxALL_FILES           gettext_noop("All files (*.*)|*.*")
@@ -1612,6 +1834,7 @@ typedef enum {
 #   define wxALL_FILES_PATTERN   "*"
 #   define wxALL_FILES           gettext_noop("All files (*)|*")
 #endif
+
 // ---------------------------------------------------------------------------
 // macros that enable wxWindows apps to be compiled in absence of the
 // sytem headers, although some platform specific types are used in the
@@ -1620,28 +1843,28 @@ typedef enum {
 
 #ifdef __WXMAC__
 
-typedef WindowPtr      WXHWND;
-typedef Handle                         WXHANDLE;
-typedef CIconHandle            WXHICON;
+typedef WindowPtr       WXHWND;
+typedef Handle          WXHANDLE;
+typedef CIconHandle     WXHICON;
 //typedef unsigned long   WXHFONT;
-typedef MenuHandle     WXHMENU;
+typedef MenuHandle      WXHMENU;
 //typedef unsigned long   WXHPEN;
 //typedef unsigned long   WXHBRUSH;
 //typedef unsigned long   WXHPALETTE;
-typedef CursHandle     WXHCURSOR;
-typedef RgnHandle      WXHRGN;
+typedef CursHandle      WXHCURSOR;
+typedef RgnHandle       WXHRGN;
 //typedef unsigned long   WXHACCEL;
 //typedef unsigned long   WXHINSTANCE;
-typedef GWorldPtr   WXHBITMAP;
+typedef GWorldPtr       WXHBITMAP;
 //typedef unsigned long   WXHIMAGELIST;
 //typedef unsigned long   WXHGLOBAL;
-typedef GrafPtr                WXHDC;
+typedef GrafPtr         WXHDC;
 typedef unsigned int    WXUINT;
 typedef unsigned long   WXDWORD;
 typedef unsigned short  WXWORD;
 //typedef unsigned int    WXWPARAM;
 //typedef long            WXLPARAM;
-typedef RGBColor               WXCOLORREF;
+typedef RGBColor        WXCOLORREF;
 //typedef void *          WXRGNDATA;
 //typedef void *          WXMSG;
 //typedef unsigned long   WXHCONV;
@@ -1651,12 +1874,26 @@ typedef RGBColor                WXCOLORREF;
 //typedef void *          WXLPCREATESTRUCT;
 typedef int (*WXFARPROC)();
 
-typedef WindowPtr           WXWindow;
-typedef ControlHandle       WXWidget;
+typedef WindowPtr       WXWindow;
+typedef ControlHandle   WXWidget;
 
 #endif
 
 #if defined(__WXMSW__) || defined(__WXPM__)
+
+// the keywords needed for WinMain() declaration
+#ifdef __WIN16__
+#  ifdef __VISUALC__
+#    define WXFAR __far
+#  else
+#    define WXFAR _far
+#  endif
+#else  // Win32
+#  ifndef WXFAR
+#    define WXFAR
+#  endif
+#endif // Win16/32
+
 // Stand-ins for Windows types or OS/2, to avoid #including all of windows.h or os2.h
 typedef unsigned long   WXHWND;
 typedef unsigned long   WXHANDLE;
@@ -1669,7 +1906,7 @@ typedef unsigned long   WXHPALETTE;
 typedef unsigned long   WXHCURSOR;
 typedef unsigned long   WXHRGN;
 typedef unsigned long   WXHACCEL;
-typedef unsigned long   WXHINSTANCE;
+typedef void WXFAR  *   WXHINSTANCE;
 typedef unsigned long   WXHBITMAP;
 typedef unsigned long   WXHIMAGELIST;
 typedef unsigned long   WXHGLOBAL;
@@ -1703,7 +1940,7 @@ typedef void *          WXLPCREATESTRUCT;
 typedef unsigned long   WXMPARAM;
 typedef unsigned long   WXMSGID;
 typedef void*           WXRESULT;
-typedef int             (*WXFARPROC)();
+//typedef int             (*WXFARPROC)();
 // some windows handles not defined by PM
 typedef unsigned long   HANDLE;
 typedef unsigned long   HICON;
@@ -1722,7 +1959,7 @@ typedef unsigned short  WORD;
 // WIN32 graphics types for OS/2 GPI
 
 // RGB under OS2 is more like a PALETTEENTRY struct under Windows so we need a real RGB def
-#define OS2RGB(r,g,b) ((DWORD ((BYTE) (r) | ((WORD) (g) << 8)) | (((DWORD)(BYTE)(b)) << 16)))
+#define OS2RGB(r,g,b) ((DWORD ((BYTE) (b) | ((WORD) (g) << 8)) | (((DWORD)(BYTE)(r)) << 16)))
 
 typedef unsigned long COLORREF;
 #define GetBValue(rgb) ((BYTE)((rgb) >> 16))
@@ -1746,10 +1983,17 @@ typedef struct tagLOGPALETTE
 } LOGPALETTE;
 #endif //__WXPM__
 
-#if defined(__GNUWIN32__) || defined(__WXWINE__)
+#if defined(__GNUWIN32__) || defined(__WXWINE__) || defined(__WXMICROWIN__)
     typedef int (*WXFARPROC)();
 #elif defined(__WIN32__)
     typedef int (__stdcall *WXFARPROC)();
+#elif defined(__WXPM__)
+#  if defined(__VISAGECPP__) && (__IBMCPP__ < 400 || __IBMC__ < 400 )
+    // VA 3.0 for some reason needs base data types when typedefing a proc proto???
+    typedef void* (_System *WXFARPROC)(unsigned long, unsigned long, void*, void*);
+#  else
+    typedef WXRESULT (_System *WXFARPROC)(WXHWND, WXMSGID, WXWPARAM, WXLPARAM);
+#  endif
 #else
     typedef int (*WXFARPROC)();
 #endif
@@ -1757,15 +2001,15 @@ typedef struct tagLOGPALETTE
 typedef WXHWND WXWidget;
 
 #if defined(__BORLANDC__) && !defined(__WIN32__)
-#ifndef LPTSTR
-#define LPTSTR LPSTR
-#endif
-#ifndef LPCTSTR
-#define LPCTSTR LPSTR
-#endif
+#  ifndef LPTSTR
+#    define LPTSTR LPSTR
+#  endif
+#  ifndef LPCTSTR
+#    define LPCTSTR LPSTR
+#  endif
 #endif
 
-#endif // MSW
+#endif // MSW or OS2
 
 #ifdef __WXMOTIF__
 /* Stand-ins for X/Xt/Motif types */
@@ -1791,6 +2035,8 @@ typedef unsigned long   Atom;  /* this might fail on a few architectures */
 
 #ifdef __WXGTK__
 /* Stand-ins for GLIB types */
+typedef char           gchar;
+typedef signed char    gint8;
 typedef int            gint;
 typedef unsigned       guint;
 typedef unsigned long  gulong;
@@ -1803,7 +2049,7 @@ typedef struct _GdkColor        GdkColor;
 typedef struct _GdkColormap     GdkColormap;
 typedef struct _GdkFont         GdkFont;
 typedef struct _GdkGC           GdkGC;
-#ifdef __WXGTK13__
+#ifdef __WXGTK20__
     typedef struct _GdkDrawable     GdkWindow;
     typedef struct _GdkDrawable     GdkBitmap;
     typedef struct _GdkDrawable     GdkPixmap;
@@ -1830,12 +2076,28 @@ typedef struct _GtkTooltips       GtkTooltips;
 typedef struct _GtkNotebook       GtkNotebook;
 typedef struct _GtkNotebookPage   GtkNotebookPage;
 typedef struct _GtkAccelGroup     GtkAccelGroup;
-typedef        struct _GtkItemFactory    GtkItemFactory;
-typedef        struct _GtkSelectionData  GtkSelectionData;
+typedef struct _GtkItemFactory    GtkItemFactory;
+typedef struct _GtkSelectionData  GtkSelectionData;
 
 typedef GtkWidget *WXWidget;
+
+#ifndef __WXGTK20__
+#define GTK_OBJECT_GET_CLASS(object) (GTK_OBJECT(object)->klass)
+#define GTK_CLASS_TYPE(klass) ((klass)->type)
+#endif
+
+#ifdef __WXGTK20__
+/* Stand-ins for Pango types */
+typedef struct _PangoContext         PangoContext;
+typedef struct _PangoLayout          PangoLayout;
+typedef struct _PangoFontDescription PangoFontDescription;
+#endif
 #endif // GTK
 
+#ifdef __WXMGL__
+typedef void *WXWidget; // FIXME_MGL - type-safe
+#endif // MGL
+
 // This is required because of clashing macros in windows.h, which may be
 // included before or after wxWindows classes, and therefore must be
 // disabled here before any significant wxWindows headers are included.
@@ -1877,7 +2139,7 @@ typedef GtkWidget *WXWidget;
 #define DECLARE_NO_COPY_CLASS(classname)        \
     private:                                    \
         classname(const classname&);            \
-        classname& operator=(const classname&)
+        classname& operator=(const classname&);
 
 #endif
     // _WX_DEFS_H_