]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/defs.h
Added wxTreeCtrl::GetItemParent to deprecate GetParent.
[wxWidgets.git] / include / wx / defs.h
index 8cb02a12d82a446f5d4fe9ed5ce6f40c922512ae..1a8b26dc3ba088dbdfd1f74f573f51bba1f2cabe 100644 (file)
 #ifndef _WX_DEFS_H_
 #define _WX_DEFS_H_
 
-#ifdef __GNUG__
-    #pragma interface "defs.h"
+#if defined(__GNUG__) && !defined(__APPLE__)
+#pragma interface "defs.h"
 #endif
 
 // ----------------------------------------------------------------------------
 // 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
-
-#if defined(__WXMSW__) || defined(__WIN32__)
-    #if !defined(__WINDOWS__)
-        #define __WINDOWS__
-    #endif
-#endif
-
-#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
+#include "wx/platform.h"
 
-// just in case they were defined in setup.h
-#ifdef PACKAGE
-#undef PACKAGE
-#endif
-
-#ifdef VERSION
-#undef VERSION
+// 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(__WXMGL__) && !defined(__WXX11__) && 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
 
-// OS: first test for generic Unix defines, then for particular flavours and
-//     finally for Unix-like systems
-#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__)
-
-    #define __UNIX_LIKE__
-
-    // Helps SGI compilation, apparently
-    #ifdef __SGI__
-        #ifdef __GNUG__
-            #define __need_wchar_t
-        #else // !gcc
-            // Note I use the term __SGI_CC__ for both cc and CC, its not a good
-            // idea to mix gcc and cc/CC, the name mangling is different
-            #define __SGI_CC__
-        #endif // gcc/!gcc
-    #endif  // SGI
-
-    #if defined(sun) || defined(__SUN__)
-        #ifndef __GNUG__
-            #ifndef __SUNCC__
-                #define __SUNCC__
-            #endif // Sun CC
-        #endif
-    #endif // Sun
-
-    #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(__WXMAC__) && defined(__DARWIN__)
-        // Mac OS X
-
-        // Some code has been added to workaround defects(?) in the
-        // bundled gcc compiler. These corrections are identified by:
-        // __DARWIN__ for corrections necessary for Darwin (wxMac, wxMotif)
-
-        #include <Carbon/Carbon.h>
-    #endif // __WXMAC__ && __DARWIN__
-#elif defined(applec) || \
-      defined(THINK_C) || \
-      (defined(__MWERKS__) && !defined(__INTEL__))
-      // MacOS
-#elif defined(__WXMAC__) && defined(__DARWIN__)
-    // Mac OS X
-    #define __UNIX_LIKE__
-
-    // Some code has been added to workaround defects(?) in the
-    // bundled gcc compiler. These corrections are identified by:
-    // __DARWIN__ for corrections necessary for Darwin (wxMac, wxMotif)
-
-    #include <Carbon/Carbon.h>
-#elif defined(__OS2__)
-    #if defined(__IBMCPP__)
-        #define __VISAGEAVER__ __IBMCPP__
-    #endif
-    #ifndef __WXOS2__
-        #define __WXOS2__
-    #endif
-    #ifndef __WXPM__
-        #define __WXPM__
-    #endif
-
-    // Place other OS/2 compiler environment defines here
-    #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__)
-        #define __VISUALC__ _MSC_VER
-    #elif defined(__BCPLUSPLUS__) && !defined(__BORLANDC__)
-        #define __BORLANDC__
-      #elif defined(__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
-#endif // LINKAGEMODE
+// include the feature test macros
+#include "wx/features.h"
 
 // suppress some Visual C++ warnings
 #ifdef __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'
+#   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
 #   pragma suppress 571             // Virtual function hiding
 #endif // __SALFORDC__
 
-#if defined(__VISUALC__) && !defined(WIN32)
-    // VC1.5 does not have LPTSTR type
-    #define LPTSTR LPSTR
-    #define LPCTSTR LPCSTR
-#endif // VC++ 1.5
-
-// Digital Unix C++ compiler only defines this symbol for .cxx and .hxx files,
-// so define it ourselves (newer versions do it for all files, though, and
-// don't allow it to be redefined)
-#ifdef __DECCXX
-    #if !defined(__VMS) && !defined(__cplusplus)
-        #define __cplusplus
-    #endif
-#endif // __DECCXX
-
-// Resolves linking problems under HP-UX
-#if defined(__HPUX__) && defined(__GNUG__)
-    #define va_list __gnuc_va_list
-#endif // HP-UX
-
-// 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
-
-#if defined(__HPUX__) && !defined(__WXGTK__)
-    #ifndef __WXMOTIF__
-        #define __WXMOTIF__
-    #endif // __WXMOTIF__
-#endif
-
-#if defined(__WXMOTIF__)
-    #define __X__
-#endif
-
-// 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(__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
-
-#include "wx/version.h"
-
 // ----------------------------------------------------------------------------
-// compatibility defines
+// wxWindows version and compatibility defines
 // ----------------------------------------------------------------------------
 
+#include "wx/version.h"
+
 // possibility to build non GUI apps is new, so don't burden ourselves with
 // compatibility code
 #if !wxUSE_GUI
-    #undef WXWIN_COMPATIBILITY_2
-    #undef WXWIN_COMPATIBILITY_2_2
+#undef WXWIN_COMPATIBILITY_2
+#undef WXWIN_COMPATIBILITY_2_2
 
-    #define WXWIN_COMPATIBILITY_2 0
-    #define WXWIN_COMPATIBILITY_2_2 0
+#define WXWIN_COMPATIBILITY_2 0
+#define WXWIN_COMPATIBILITY_2_2 0
 #endif // !GUI
 
 // ============================================================================
 // ============================================================================
 
 // ----------------------------------------------------------------------------
-// check for native bool type and TRUE/FALSE constants
+// compiler defects workarounds
 // ----------------------------------------------------------------------------
 
-// define boolean constants if not done yet
-#ifndef TRUE
-    #define TRUE  1
+#if defined(__VISUALC__) && !defined(WIN32) && !defined(__WXWINCE__)
+    // VC1.5 does not have LPTSTR type
+#define LPTSTR  LPSTR
+#define LPCTSTR LPCSTR
+#elif defined(__BORLANDC__) && !defined(__WIN32__)
+#ifndef LPTSTR
+#define LPTSTR  LPSTR
 #endif
-
-#ifndef FALSE
-    #define FALSE 0
+#ifndef LPCTSTR
+#define LPCTSTR LPSTR
 #endif
+#endif
+
+
+/*
+   Digital Unix C++ compiler only defines this symbol for .cxx and .hxx files,
+   so define it ourselves (newer versions do it for all files, though, and
+   don't allow it to be redefined)
+ */
+#if defined(__DECCXX) && !defined(__VMS) && !defined(__cplusplus)
+#define __cplusplus
+#endif /* __DECCXX */
+
+// Resolves linking problems under HP-UX when compiling with gcc/g++
+#if defined(__HPUX__) && defined(__GNUG__)
+#define va_list __gnuc_va_list
+#endif // HP-UX
+
+// ----------------------------------------------------------------------------
+// check for native bool type and TRUE/FALSE constants
+// ----------------------------------------------------------------------------
 
 // Add more tests here for Windows compilers that already define bool
 // (under Unix, configure tests for this)
         #if (__MWERKS__ >= 0x1000) && __option(bool)
             #define HAVE_BOOL
         #endif
+    #elif defined(__APPLE__) && defined(__APPLE_CC__)
+        // Apple bundled gcc supports bool
+        #define HAVE_BOOL
     #elif defined(__VISUALC__) && (__VISUALC__ == 1020)
         // in VC++ 4.2 the bool keyword is reserved (hence can't be typedefed)
         // but not implemented, so we must #define it
     #endif // compilers
 #endif // HAVE_BOOL
 
-#if !defined(HAVE_BOOL) && !defined(bool)
+#if !defined(HAVE_BOOL) && !defined(bool) && !defined(VMS)
     // NB: of course, this doesn't replace the standard type, because, for
     //     example, overloading based on bool/int parameter doesn't work and
     //     so should be avoided in portable programs
-#ifndef VMS
-typedef unsigned int bool;
-#endif
+    typedef unsigned int bool;
 #endif // bool
 
+#ifdef __cplusplus
+    // define boolean constants: don't use true/false here as not all compilers
+    // support them but also redefine TRUE which could have been defined as 1
+    // by previous headers: this would be incorrect as our TRUE is supposed to
+    // be of type bool, just like true, not int
+    //
+    // however if the user code absolutely needs TRUE to be defined in its own
+    // way, it can predefine WX_TRUE_DEFINED to prevent the redefinition here
+    #ifdef TRUE
+        #ifndef WX_TRUE_DEFINED
+            #undef TRUE
+            #undef FALSE
+        #endif
+    #endif
+
+    #ifndef TRUE
+        #define TRUE  ((bool)1)
+        #define FALSE ((bool)0)
+    #endif
+#else // !__cplusplus
+    // the definitions above don't work for C sources
+    #ifndef TRUE
+        #define TRUE 1
+    #endif
+
+    #ifndef FALSE
+        #define FALSE 0
+    #endif
+#endif // C++/!C++
+
 typedef short int WXTYPE;
 
 // special care should be taken with this type under Windows where the real
 // window id is unsigned, so we must always do the cast before comparing them
 // (or else they would be always different!). Usign wxGetWindowId() which does
 // the cast itself is recommended. Note that this type can't be unsigned
-// because -1 is a valid (and largely used) value for window id.
+// because wxID_ANY == -1 is a valid (and largely used) value for window id.
 typedef int wxWindowID;
 
-// Macro to cut down on compiler warnings.
-#if REMOVE_UNUSED_ARG
-    #define WXUNUSED(identifier) /* identifier */
-#else  // stupid, broken compiler
-    #define WXUNUSED(identifier) identifier
-#endif
+// ----------------------------------------------------------------------------
+// other feature tests
+// ----------------------------------------------------------------------------
 
-// some arguments are only used in debug mode, but unused in release one
-#ifdef __WXDEBUG__
-    #define WXUNUSED_UNLESS_DEBUG(param)  param
+// Every ride down a slippery slope begins with a single step..
+//
+// Yes, using nested classes is indeed against our coding standards in
+// general, but there are places where you can use them to advantage
+// without totally breaking ports that cannot use them.  If you do, then
+// wrap it in this guard, but such cases should still be relatively rare.
+#ifndef __WIN16__
+    #define wxUSE_NESTED_CLASSES    1
 #else
-    #define WXUNUSED_UNLESS_DEBUG(param)  WXUNUSED(param)
+    #define wxUSE_NESTED_CLASSES    0
 #endif
 
+// check for explicit keyword support
+#ifndef HAVE_EXPLICIT
+    #if defined(__VISUALC__) && (__VISUALC__ > 1200)
+        // VC++ 6.0 has explicit (what about the earlier versions?)
+        #define HAVE_EXPLICIT
+    #elif defined(__BORLANDC__) && (__BORLANDC__ >= 0x0520)
+        // BC++ 4.52 doesn't support explicit, CBuilder 1 does
+        #define HAVE_EXPLICIT
+    #elif defined(__MWERKS__) && (__MWERKS__ >= 0x2400)
+        // Metrowerks CW6 or higher has explicit
+        #define HAVE_EXPLICIT
+    #endif
+#endif // !HAVE_EXPLICIT
+
+#ifdef HAVE_EXPLICIT
+    #define wxEXPLICIT explicit
+#else // !HAVE_EXPLICIT
+    #define wxEXPLICIT
+#endif // HAVE_EXPLICIT/!HAVE_EXPLICIT
+
 // ----------------------------------------------------------------------------
 // portable calling conventions macros
 // ----------------------------------------------------------------------------
 
 // stdcall is used for all functions called by Windows under Windows
-#ifdef __WINDOWS__
+#if defined(__WINDOWS__) && !defined(__WXWINE__)
     #if defined(__GNUWIN32__)
         #define wxSTDCALL __attribute__((stdcall))
     #else
@@ -401,6 +267,11 @@ typedef int wxWindowID;
     #define wxSTDCALL
 #endif // platform
 
+// LINKAGEMODE mode is empty for everyting except OS/2
+#ifndef LINKAGEMODE
+    #define LINKAGEMODE
+#endif // LINKAGEMODE
+
 // wxCALLBACK should be used for the functions which are called back by
 // Windows (such as compare function for wxListCtrl)
 #if defined(__WIN32__) && !defined(__WXMICROWIN__)
@@ -410,16 +281,19 @@ typedef int wxWindowID;
     #define wxCALLBACK
 #endif // platform
 
-// callling convention for the qsort(3) callback
+// generic calling convention for the extern "C" functions
 
 #if defined(__VISUALC__)
-  #define   wxCMPFUNC_CONV    _cdecl
+  #define   wxC_CALLING_CONV    _cdecl
 #elif defined(__VISAGECPP__)
-  #define   wxCMPFUNC_CONV    _Optlink
+  #define   wxC_CALLING_CONV    _Optlink
 #else   // !Visual C++
-  #define   wxCMPFUNC_CONV
+  #define   wxC_CALLING_CONV
 #endif  // compiler
 
+// callling convention for the qsort(3) callback
+#define wxCMPFUNC_CONV wxC_CALLING_CONV
+
 // compatibility :-(
 #define CMPFUNC_CONV wxCMPFUNC_CONV
 
@@ -428,62 +302,53 @@ typedef int wxWindowID;
 // ----------------------------------------------------------------------------
 
 #if defined(__WXMSW__)
-
-// __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_CTORFN
-#  elif defined(WXUSINGDLL)
-#    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
-
+    // __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__)
+        #define WXEXPORT __declspec(dllexport)
+        #define WXIMPORT __declspec(dllimport)
+    #else // compiler doesn't support __declspec()
+        #define WXEXPORT
+        #define WXIMPORT
+    #endif
 #elif defined(__WXPM__)
+    #if defined (__WATCOMC__)
+        #define WXEXPORT __declspec(dllexport)
+        // __declspec(dllimport) prepends __imp to imported symbols. We do NOT
+        // want that!
+        #define WXIMPORT
+    #elif (!(defined(__VISAGECPP__) && (__IBMCPP__ < 400 || __IBMC__ < 400 )))
+        #define WXEXPORT _Export
+        #define WXIMPORT _Export
+    #endif
+#elif defined(__WXMAC__)    
+    #ifdef __MWERKS__
+        #define WXEXPORT __declspec(export)
+        #define WXIMPORT __declspec(import)
+    #endif
+#endif
 
-#  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  // !(MSW or OS2)
-
-#  define WXDLLEXPORT
-#  define WXDLLEXPORT_DATA(type) type
-#  define WXDLLEXPORT_CTORFN
-
+// for other platforms/compilers we don't anything
+#ifndef WXEXPORT
+    #define WXEXPORT
+    #define WXIMPORT
 #endif
 
+// WXDLLEXPORT maps to export declaration when building the DLL, to import
+// declaration if using it or to nothing at all if we don't use wxWin DLL
+#ifdef WXMAKINGDLL
+    #define WXDLLEXPORT WXEXPORT
+    #define WXDLLEXPORT_DATA(type) WXEXPORT type
+    #define WXDLLEXPORT_CTORFN
+#elif defined(WXUSINGDLL)
+    #define WXDLLEXPORT WXIMPORT
+    #define WXDLLEXPORT_DATA(type) WXIMPORT type
+    #define WXDLLEXPORT_CTORFN
+#else // not making nor using DLL
+    #define WXDLLEXPORT
+    #define WXDLLEXPORT_DATA(type) type
+    #define WXDLLEXPORT_CTORFN
+#endif
 
 // For ostream, istream ofstream
 #if defined(__BORLANDC__) && defined( _RTLDLL )
@@ -497,51 +362,70 @@ class WXDLLEXPORT wxObject;
 class WXDLLEXPORT wxEvent;
 #endif
 
- /** symbolic constant used by all Find()-like functions returning positive
-      integer on success as failure indicator */
+// symbolic constant used by all Find()-like functions returning positive
+// integer on success as failure indicator
 #define wxNOT_FOUND       (-1)
 
 // ----------------------------------------------------------------------------
 // Very common macros
 // ----------------------------------------------------------------------------
 
+// Printf-like attribute definitions to obtain warnings with GNU C/C++
+#if defined(__GNUC__) && !wxUSE_UNICODE
+#  ifndef ATTRIBUTE_PRINTF
+#    define ATTRIBUTE_PRINTF(m, n) __attribute__ ((__format__ (__printf__, m, n)))
+#    define ATTRIBUTE_PRINTF_1 ATTRIBUTE_PRINTF(1, 2)
+#    define ATTRIBUTE_PRINTF_2 ATTRIBUTE_PRINTF(2, 3)
+#    define ATTRIBUTE_PRINTF_3 ATTRIBUTE_PRINTF(3, 4)
+#    define ATTRIBUTE_PRINTF_4 ATTRIBUTE_PRINTF(4, 5)
+#    define ATTRIBUTE_PRINTF_5 ATTRIBUTE_PRINTF(5, 6)
+#  endif /* ATTRIBUTE_PRINTF */
+#else
+#  ifndef ATTRIBUTE_PRINTF
+#    define ATTRIBUTE_PRINTF
+#    define ATTRIBUTE_PRINTF_1
+#    define ATTRIBUTE_PRINTF_2
+#    define ATTRIBUTE_PRINTF_3
+#    define ATTRIBUTE_PRINTF_4
+#    define ATTRIBUTE_PRINTF_5
+#  endif /* ATTRIBUTE_PRINTF */
+#endif
+
 // everybody gets the assert and other debug macros
 #ifdef __cplusplus
 #include "wx/debug.h"
 #endif
 
-// NULL declaration
+// NULL declaration: it must be defined as 0 for C++ programs (in particular,
+// it must not be defined as "(void *)0" which is standard for C but completely
+// breaks C++ code)
 #include <stddef.h>
 
-//@{
-/// delete pointer if it is not NULL and NULL it afterwards
+// Macro to cut down on compiler warnings.
+#if REMOVE_UNUSED_ARG
+    #define WXUNUSED(identifier) /* identifier */
+#else  // stupid, broken compiler
+    #define WXUNUSED(identifier) identifier
+#endif
+
+// some arguments are only used in debug mode, but unused in release one
+#ifdef __WXDEBUG__
+    #define WXUNUSED_UNLESS_DEBUG(param)  param
+#else
+    #define WXUNUSED_UNLESS_DEBUG(param)  WXUNUSED(param)
+#endif
+
+// delete pointer if it is not NULL and NULL it afterwards
 // (checking that it's !NULL before passing it to delete is just a
 //  a question of style, because delete will do it itself anyhow, but it might
 //  be considered as an error by some overzealous debugging implementations of
 //  the library, so we do it ourselves)
-#if defined(__SGI_CC__)
-// Okay this is bad styling, but the native SGI compiler is very picky, it
-// wont let you compare/assign between a NULL (void *) and another pointer
-// type. To be really clean we'd need to pass in another argument, the type
-// of p.
-// Also note the use of 0L, this would allow future possible 64bit support
-// (as yet untested) by ensuring that we zero all the bits in a pointer
-// (which is always the same length as a long (at least with the LP64 standard)
-// --- offer aug 98
-#define wxDELETE(p)      if ( (p) ) { delete (p); p = 0L; }
-#else
 #define wxDELETE(p)      if ( (p) != NULL ) { delete p; p = NULL; }
-#endif /* __SGI__CC__ */
 
 // delete an array and NULL it (see comments above)
-#if defined(__SGI_CC__)
-// see above comment.
-#define wxDELETEA(p)      if ( (p) ) { delete [] (p); p = 0L; }
-#else
-#define wxDELETEA(p)      if ( ((void *) (p)) != NULL ) { delete [] p; p = NULL; }
-#endif /* __SGI__CC__ */
+#define wxDELETEA(p)     if ( (p) ) { delete [] (p); p = NULL; }
 
-/// size of statically declared array
+// size of statically declared array
 #define WXSIZEOF(array)   (sizeof(array)/sizeof(array[0]))
 
 // ----------------------------------------------------------------------------
@@ -597,16 +481,17 @@ enum
     wxMOTIF_X,                // OSF Motif 1.x.x
     wxCOSE_X,                 // OSF Common Desktop Environment
     wxNEXTSTEP,               // NeXTStep
-    wxMACINTOSH,              // Apple System 7 and 8
+    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
-    wxQT,                     // Qt
     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
@@ -616,8 +501,10 @@ enum
     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
+    wxUNIX,                   // wxBase under Unix
+    wxX11                     // Plain X11 and Universal widgets
 };
 
 // ----------------------------------------------------------------------------
@@ -645,47 +532,53 @@ enum
 #define wxInt8    char    signed
 #define wxUint8   char  unsigned
 
-#ifdef __WIN16__
-#define wxInt16    int    signed
-#define wxUint16   int  unsigned
-#define wxInt32   long    signed
-#define wxUint32  long  unsigned
-#endif
-
-#ifdef __WIN32__
-#define wxInt16  short    signed
-#define wxUint16 short  unsigned
-#define wxInt32    int    signed
-#define wxUint32   int  unsigned
-#endif
-
-#ifdef __WXMAC__
-#define wxInt16  short    signed
-#define wxUint16 short  unsigned
-#define wxInt32    int    signed
-#define wxUint32   int  unsigned
-#endif
-
-#ifdef __WXOS2__
-#define wxInt16  short    signed
-#define wxUint16 short  unsigned
-#define wxInt32    int    signed
-#define wxUint32   int  unsigned
-#endif
+#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);
 
-#if !defined(__WXMSW__) && !defined(__WXMAC__) && !defined(__WXOS2__)
-  #if defined(SIZEOF_INT)
-    /* well, this shouldn't happen... */
-    #define wxInt16  short    signed
-    #define wxUint16 short  unsigned
-    #define wxInt32    int    signed
-    #define wxUint32   int  unsigned
-  #else
-    #define wxInt16  short    signed
-    #define wxUint16 short  unsigned
-    #define wxInt32    int    signed
-    #define wxUint32   int  unsigned
-  #endif
+        #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
@@ -784,6 +677,76 @@ typedef float wxFloat32 ;
 #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)
@@ -793,6 +756,8 @@ typedef float wxFloat32 ;
   #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)
@@ -802,6 +767,8 @@ typedef float wxFloat32 ;
   #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
 
 // ----------------------------------------------------------------------------
@@ -984,6 +951,24 @@ enum wxBorder
 // descend into all subwindows
 #define wxWS_EX_VALIDATE_RECURSIVELY    0x00000001
 
+// wxCommandEvents and the objects of the derived classes are forwarded to the
+// parent window and so on recursively by default. Using this flag for the
+// given window allows to block this propagation at this window, i.e. prevent
+// the events from being propagated further upwards. The dialogs have this
+// flag on by default.
+#define wxWS_EX_BLOCK_EVENTS            0x00000002
+
+// don't use this window as an implicit parent for the other windows: this must
+// be used with transient windows as otherwise there is the risk of creating a
+// dialog/frame with this window as a parent which would lead to a crash if the
+// parent is destroyed before the child
+#define wxWS_EX_TRANSIENT               0x00000004
+
+// Use this style to add a context-sensitive help to the window (currently for
+// Win32 only and it doesn't work if wxMINIMIZE_BOX or wxMAXIMIZE_BOX are used)
+#define wxFRAME_EX_CONTEXTHELP  0x00000004
+#define wxDIALOG_EX_CONTEXTHELP 0x00000004
+
 /*
  * wxFrame/wxDialog style flags
  */
@@ -991,7 +976,7 @@ enum wxBorder
 #define wxICONIZE               0x4000
 #define wxMINIMIZE              wxICONIZE
 #define wxMAXIMIZE              0x2000
-// free value: 0x1000
+                                        // free flag value: 0x1000
 #define wxSYSTEM_MENU           0x0800
 #define wxMINIMIZE_BOX          0x0400
 #define wxMAXIMIZE_BOX          0x0200
@@ -1002,22 +987,16 @@ enum wxBorder
 #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
+#define wxFRAME_FLOAT_ON_PARENT 0x0008  // Always above its parent
 
 // 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_MODAL          0x0020  // free flag value 0x0020
 #define wxDIALOG_MODELESS       0x0000
 
-// 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.
@@ -1034,7 +1013,7 @@ enum wxBorder
    wxMINIMIZE_BOX | wxMAXIMIZE_BOX | \
    wxCAPTION | wxCLIP_CHILDREN)
 
-#ifdef __WXMSW__
+#if defined(__WXMSW__) || defined(__WXPM__) || defined(__WXMGL__)
 #   define wxDEFAULT_DIALOG_STYLE  (wxSYSTEM_MENU | wxCAPTION)
 #else
 //  Under Unix, the dialogs don't have a system menu. Specifying wxSYSTEM_MENU
@@ -1056,17 +1035,6 @@ enum wxBorder
 #   define wxEXT_DIALOG_STYLE  (wxDEFAULT_DIALOG_STYLE|wxED_CLIENT_MARGIN|wxED_STATIC_LINE)
 #endif
 
-/*
- * wxToolBar style flags
- */
-#define wxTB_HORIZONTAL         wxHORIZONTAL
-#define wxTB_VERTICAL           wxVERTICAL
-#define wxTB_3DBUTTONS          0x0010
-// Flatbar/Coolbar under Win98/ GTK 1.2
-#define wxTB_FLAT               0x0020
-// use native docking under GTK
-#define wxTB_DOCKABLE           0x0040
-
 /*
  * wxMenuBar style flags
  */
@@ -1099,15 +1067,9 @@ enum wxBorder
 // always show an entire number of rows
 #define wxLB_INT_HEIGHT     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
+#define wxPROCESS_ENTER     0x0400  // wxTE_PROCESS_ENTER
+#define wxPASSWORD          0x0800  // wxTE_PASSWORD
 
 /*
  * wxComboBox style flags
@@ -1137,6 +1099,7 @@ enum wxBorder
  * wxRadioButton style flag
  */
 #define wxRB_GROUP          0x0004
+#define wxRB_SINGLE         0x0008
 
 /*
  * wxGauge flags
@@ -1170,21 +1133,6 @@ enum wxBorder
 #define wxSB_HORIZONTAL      wxHORIZONTAL
 #define wxSB_VERTICAL        wxVERTICAL
 
-/*
- * wxTreeCtrl flags
- */
-#define wxTR_HAS_BUTTONS     0x0004
-#define wxTR_EDIT_LABELS     0x0008
-#define wxTR_LINES_AT_ROOT   0x0010
-
-#define wxTR_SINGLE          0x0000
-#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
-
 /*
  * wxSpinButton flags.
  * Note that a wxSpinCtrl is sometimes defined as
@@ -1208,6 +1156,7 @@ enum wxBorder
 #define wxSP_3DBORDER         0x0200
 #define wxSP_FULLSASH         0x0400
 #define wxSP_3D               (wxSP_3DBORDER | wxSP_3DSASH)
+#define wxSP_SASH_AQUA        0x0800
 
 /*
  * wxNotebook flags
@@ -1224,8 +1173,23 @@ enum wxBorder
  */
 #define wxTC_RIGHTJUSTIFY     0x0010
 #define wxTC_FIXEDWIDTH       0x0020
-#define wxTC_OWNERDRAW        0x0040
+#define wxTC_TOP              0x0000    // default
+#define wxTC_LEFT             0x0020
+#define wxTC_RIGHT            0x0040
+#define wxTC_BOTTOM           0x0080
 #define wxTC_MULTILINE        wxNB_MULTILINE
+#define wxTC_OWNERDRAW        0x0200
+
+// wxToolBar style flags
+#define wxTB_HORIZONTAL     wxHORIZONTAL    // == 0x0004
+#define wxTB_VERTICAL       wxVERTICAL      // == 0x0008
+#define wxTB_3DBUTTONS      0x0010
+#define wxTB_FLAT           0x0020          // supported only under Win98+/GTK
+#define wxTB_DOCKABLE       0x0040          // use native docking under GTK
+#define wxTB_NOICONS        0x0080          // don't show the icons
+#define wxTB_TEXT           0x0100          // show the text
+#define wxTB_NODIVIDER      0x0200          // don't show the divider (Windows)
+#define wxTB_NOALIGN        0x0400          // no automatic alignment (Windows)
 
 /*
  * wxStatusBar95 flags
@@ -1262,19 +1226,10 @@ enum wxBorder
 #define wxPD_REMAINING_TIME     0x0040
 
 /*
- * wxHtmlWindow flags
+ * wxDirDialog styles
  */
-#define wxHW_SCROLLBAR_NEVER    0x0002
-#define wxHW_SCROLLBAR_AUTO     0x0004
 
-/*
- * wxCalendarCtrl flags
- */
-#define wxCAL_SUNDAY_FIRST      0x0000
-#define wxCAL_MONDAY_FIRST      0x0001
-#define wxCAL_SHOW_HOLIDAYS     0x0002
-#define wxCAL_NO_YEAR_CHANGE    0x0004
-#define wxCAL_NO_MONTH_CHANGE   0x000c // no month change => no year change
+#define wxDD_NEW_DIR_BUTTON     0x0080
 
 /*
  * extended dialog specifiers. these values are stored in a different
@@ -1284,13 +1239,14 @@ enum wxBorder
  */
 
 // wxCENTRE already defined as  0x00000001
+#define wxYES                   0x00000002
 #define wxOK                    0x00000004
-#define wxYES_NO                0x00000008
+#define wxNO                    0x00000008
+#define wxYES_NO                (wxYES | wxNO)
 #define wxCANCEL                0x00000010
-#define wxYES                   0x00000020
-#define wxNO                    0x00000040
+
+#define wxYES_DEFAULT           0x00000000  // has no effect (default)
 #define wxNO_DEFAULT            0x00000080
-#define wxYES_DEFAULT           0x00000000  // has no effect
 
 #define wxICON_EXCLAMATION      0x00000100
 #define wxICON_HAND             0x00000200
@@ -1313,77 +1269,111 @@ enum wxBorder
 // standard IDs
 // ----------------------------------------------------------------------------
 
+// any id: means that we don't care about the id, whether when installing an
+// event handler or when creating a new window
+enum
+{
+    wxID_ANY = -1
+};
+
 // id for a separator line in the menu (invalid for normal item)
-#define wxID_SEPARATOR (-1)
+enum
+{
+    wxID_SEPARATOR = -1
+};
 
 // Standard menu IDs
-#define wxID_LOWEST             4999
-
-#define wxID_OPEN               5000
-#define wxID_CLOSE              5001
-#define wxID_NEW                5002
-#define wxID_SAVE               5003
-#define wxID_SAVEAS             5004
-#define wxID_REVERT             5005
-#define wxID_EXIT               5006
-#define wxID_UNDO               5007
-#define wxID_REDO               5008
-#define wxID_HELP               5009
-#define wxID_PRINT              5010
-#define wxID_PRINT_SETUP        5011
-#define wxID_PREVIEW            5012
-#define wxID_ABOUT              5013
-#define wxID_HELP_CONTENTS      5014
-#define wxID_HELP_COMMANDS      5015
-#define wxID_HELP_PROCEDURES    5016
-#define wxID_HELP_CONTEXT       5017
-
-#define wxID_CUT                5030
-#define wxID_COPY               5031
-#define wxID_PASTE              5032
-#define wxID_CLEAR              5033
-#define wxID_FIND               5034
-#define wxID_DUPLICATE          5035
-#define wxID_SELECTALL          5036
-
-#define wxID_FILE1              5050
-#define wxID_FILE2              5051
-#define wxID_FILE3              5052
-#define wxID_FILE4              5053
-#define wxID_FILE5              5054
-#define wxID_FILE6              5055
-#define wxID_FILE7              5056
-#define wxID_FILE8              5057
-#define wxID_FILE9              5058
-
-// Standard button IDs
-#define wxID_OK                 5100
-#define wxID_CANCEL             5101
-#define wxID_APPLY              5102
-#define wxID_YES                5103
-#define wxID_NO                 5104
-#define wxID_STATIC             5105
-#define wxID_FORWARD            5106
-#define wxID_BACKWARD           5107
-#define wxID_DEFAULT            5108
-#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
+enum
+{
+    wxID_LOWEST = 4999,
+
+    wxID_OPEN,
+    wxID_CLOSE,
+    wxID_NEW,
+    wxID_SAVE,
+    wxID_SAVEAS,
+    wxID_REVERT,
+    wxID_EXIT,
+    wxID_UNDO,
+    wxID_REDO,
+    wxID_HELP,
+    wxID_PRINT,
+    wxID_PRINT_SETUP,
+    wxID_PREVIEW,
+    wxID_ABOUT,
+    wxID_HELP_CONTENTS,
+    wxID_HELP_COMMANDS,
+    wxID_HELP_PROCEDURES,
+    wxID_HELP_CONTEXT,
+    wxID_CLOSE_ALL,
+
+    wxID_CUT = 5030,
+    wxID_COPY,
+    wxID_PASTE,
+    wxID_CLEAR,
+    wxID_FIND,
+    wxID_DUPLICATE,
+    wxID_SELECTALL,
+
+    wxID_FILE1 = 5050,
+    wxID_FILE2,
+    wxID_FILE3,
+    wxID_FILE4,
+    wxID_FILE5,
+    wxID_FILE6,
+    wxID_FILE7,
+    wxID_FILE8,
+    wxID_FILE9,
+
+    // Standard button IDs
+    wxID_OK = 5100,
+    wxID_CANCEL,
+    wxID_APPLY,
+    wxID_YES,
+    wxID_NO,
+    wxID_STATIC,
+    wxID_FORWARD,
+    wxID_BACKWARD,
+    wxID_DEFAULT,
+    wxID_MORE,
+    wxID_SETUP,
+    wxID_RESET,
+    wxID_CONTEXT_HELP,
+    wxID_YESTOALL,
+    wxID_NOTOALL,
+    wxID_ABORT,
+    wxID_RETRY,
+    wxID_IGNORE,
+
+    // System menu IDs (used by wxUniv):
+    wxID_SYSTEM_MENU = 5200,
+    wxID_CLOSE_FRAME,
+    wxID_MOVE_FRAME,
+    wxID_RESIZE_FRAME,
+    wxID_MAXIMIZE_FRAME,
+    wxID_ICONIZE_FRAME,
+    wxID_RESTORE_FRAME,
+
+    // IDs used by generic file dialog (13 consecutive starting from this value)
+    wxID_FILEDLGG = 5900,
+
+    wxID_HIGHEST = 5999
+};
 
 // ----------------------------------------------------------------------------
-// constants
+// other constants
 // ----------------------------------------------------------------------------
 
+// menu and toolbar item kinds
+enum wxItemKind
+{
+    wxITEM_SEPARATOR = -1,
+    wxITEM_NORMAL,
+    wxITEM_CHECK,
+    wxITEM_RADIO,
+    wxITEM_MAX
+};
+
 // hit test results
 enum wxHitTest
 {
@@ -1432,60 +1422,62 @@ enum wxHitTest
 // GDI descriptions
 // ----------------------------------------------------------------------------
 
-enum {
-// Text font families
-  wxDEFAULT    = 70,
-  wxDECORATIVE,
-  wxROMAN,
-  wxSCRIPT,
-  wxSWISS,
-  wxMODERN,
-  wxTELETYPE,  /* @@@@ */
-
-// Proportional or Fixed width fonts (not yet used)
-  wxVARIABLE   = 80,
-  wxFIXED,
-
-  wxNORMAL     = 90,
-  wxLIGHT,
-  wxBOLD,
-// Also wxNORMAL for normal (non-italic text)
-  wxITALIC,
-  wxSLANT,
-
-// Pen styles
-  wxSOLID      =   100,
-  wxDOT,
-  wxLONG_DASH,
-  wxSHORT_DASH,
-  wxDOT_DASH,
-  wxUSER_DASH,
-
-  wxTRANSPARENT,
-
-// 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,
-  wxCROSSDIAG_HATCH,
-  wxFDIAGONAL_HATCH,
-  wxCROSS_HATCH,
-  wxHORIZONTAL_HATCH,
-  wxVERTICAL_HATCH,
-#define IS_HATCH(s)    ((s)>=wxBDIAGONAL_HATCH && (s)<=wxVERTICAL_HATCH)
-
-  wxJOIN_BEVEL =     120,
-  wxJOIN_MITER,
-  wxJOIN_ROUND,
-
-  wxCAP_ROUND =      130,
-  wxCAP_PROJECTING,
-  wxCAP_BUTT
+enum
+{
+    // Text font families
+    wxDEFAULT    = 70,
+    wxDECORATIVE,
+    wxROMAN,
+    wxSCRIPT,
+    wxSWISS,
+    wxMODERN,
+    wxTELETYPE,  /* @@@@ */
+
+    // Proportional or Fixed width fonts (not yet used)
+    wxVARIABLE   = 80,
+    wxFIXED,
+
+    wxNORMAL     = 90,
+    wxLIGHT,
+    wxBOLD,
+    // Also wxNORMAL for normal (non-italic text)
+    wxITALIC,
+    wxSLANT,
+
+    // Pen styles
+    wxSOLID      =   100,
+    wxDOT,
+    wxLONG_DASH,
+    wxSHORT_DASH,
+    wxDOT_DASH,
+    wxUSER_DASH,
+
+    wxTRANSPARENT,
+
+    // 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,
+    wxCROSSDIAG_HATCH,
+    wxFDIAGONAL_HATCH,
+    wxCROSS_HATCH,
+    wxHORIZONTAL_HATCH,
+    wxVERTICAL_HATCH,
+
+    wxJOIN_BEVEL =     120,
+    wxJOIN_MITER,
+    wxJOIN_ROUND,
+
+    wxCAP_ROUND =      130,
+    wxCAP_PROJECTING,
+    wxCAP_BUTT
 };
 
+// VZ: why doesn't it start with "wx"? FIXME
+#define IS_HATCH(s)    ((s)>=wxBDIAGONAL_HATCH && (s)<=wxVERTICAL_HATCH)
 
 // Logical ops
 typedef enum
@@ -1508,19 +1500,28 @@ typedef enum
   wxSET,          wxROP_WHITE = wxSET,               wxBLIT_WHITENESS = wxSET           // 1
 } form_ops_t;
 
-/* Flood styles */
-#define  wxFLOOD_SURFACE   1
-#define  wxFLOOD_BORDER    2
+// Flood styles
+enum
+{
+    wxFLOOD_SURFACE = 1,
+    wxFLOOD_BORDER
+};
 
-/* Polygon filling mode */
-#define  wxODDEVEN_RULE    1
-#define  wxWINDING_RULE    2
+// Polygon filling mode
+enum
+{
+    wxODDEVEN_RULE = 1,
+    wxWINDING_RULE
+};
 
-/* ToolPanel in wxFrame */
-#define    wxTOOL_TOP       1
-#define    wxTOOL_BOTTOM       2
-#define    wxTOOL_LEFT       3
-#define    wxTOOL_RIGHT       4
+// ToolPanel in wxFrame (VZ: unused?)
+enum
+{
+    wxTOOL_TOP = 1,
+    wxTOOL_BOTTOM,
+    wxTOOL_LEFT,
+    wxTOOL_RIGHT
+};
 
 // the values of the format constants should be the same as correspondign
 // CF_XXX constants in Windows API
@@ -1544,138 +1545,141 @@ enum wxDataFormatId
     wxDF_FILENAME =         15, /* CF_HDROP */
     wxDF_LOCALE =           16,
     wxDF_PRIVATE =          20,
+    wxDF_HTML =             30, /* Note: does not correspond to CF_ constant */
     wxDF_MAX
 };
 
-/* Virtual keycodes */
-
+// Virtual keycodes
 enum wxKeyCode
 {
-  WXK_BACK    =    8,
-  WXK_TAB     =    9,
-  WXK_RETURN  =    13,
-  WXK_ESCAPE  =    27,
-  WXK_SPACE   =    32,
-  WXK_DELETE  =    127,
-
-  WXK_START   = 300,
-  WXK_LBUTTON,
-  WXK_RBUTTON,
-  WXK_CANCEL,
-  WXK_MBUTTON,
-  WXK_CLEAR,
-  WXK_SHIFT,
-  WXK_ALT,
-  WXK_CONTROL,
-  WXK_MENU,
-  WXK_PAUSE,
-  WXK_CAPITAL,
-  WXK_PRIOR,  /* Page up */
-  WXK_NEXT,   /* Page down */
-  WXK_END,
-  WXK_HOME,
-  WXK_LEFT,
-  WXK_UP,
-  WXK_RIGHT,
-  WXK_DOWN,
-  WXK_SELECT,
-  WXK_PRINT,
-  WXK_EXECUTE,
-  WXK_SNAPSHOT,
-  WXK_INSERT,
-  WXK_HELP,
-  WXK_NUMPAD0,
-  WXK_NUMPAD1,
-  WXK_NUMPAD2,
-  WXK_NUMPAD3,
-  WXK_NUMPAD4,
-  WXK_NUMPAD5,
-  WXK_NUMPAD6,
-  WXK_NUMPAD7,
-  WXK_NUMPAD8,
-  WXK_NUMPAD9,
-  WXK_MULTIPLY,
-  WXK_ADD,
-  WXK_SEPARATOR,
-  WXK_SUBTRACT,
-  WXK_DECIMAL,
-  WXK_DIVIDE,
-  WXK_F1,
-  WXK_F2,
-  WXK_F3,
-  WXK_F4,
-  WXK_F5,
-  WXK_F6,
-  WXK_F7,
-  WXK_F8,
-  WXK_F9,
-  WXK_F10,
-  WXK_F11,
-  WXK_F12,
-  WXK_F13,
-  WXK_F14,
-  WXK_F15,
-  WXK_F16,
-  WXK_F17,
-  WXK_F18,
-  WXK_F19,
-  WXK_F20,
-  WXK_F21,
-  WXK_F22,
-  WXK_F23,
-  WXK_F24,
-  WXK_NUMLOCK,
-  WXK_SCROLL,
-  WXK_PAGEUP,
-  WXK_PAGEDOWN,
-
-  WXK_NUMPAD_SPACE,
-  WXK_NUMPAD_TAB,
-  WXK_NUMPAD_ENTER,
-  WXK_NUMPAD_F1,
-  WXK_NUMPAD_F2,
-  WXK_NUMPAD_F3,
-  WXK_NUMPAD_F4,
-  WXK_NUMPAD_HOME,
-  WXK_NUMPAD_LEFT,
-  WXK_NUMPAD_UP,
-  WXK_NUMPAD_RIGHT,
-  WXK_NUMPAD_DOWN,
-  WXK_NUMPAD_PRIOR,
-  WXK_NUMPAD_PAGEUP,
-  WXK_NUMPAD_NEXT,
-  WXK_NUMPAD_PAGEDOWN,
-  WXK_NUMPAD_END,
-  WXK_NUMPAD_BEGIN,
-  WXK_NUMPAD_INSERT,
-  WXK_NUMPAD_DELETE,
-  WXK_NUMPAD_EQUAL,
-  WXK_NUMPAD_MULTIPLY,
-  WXK_NUMPAD_ADD,
-  WXK_NUMPAD_SEPARATOR,
-  WXK_NUMPAD_SUBTRACT,
-  WXK_NUMPAD_DECIMAL,
-  WXK_NUMPAD_DIVIDE
+    WXK_BACK    =    8,
+    WXK_TAB     =    9,
+    WXK_RETURN  =    13,
+    WXK_ESCAPE  =    27,
+    WXK_SPACE   =    32,
+    WXK_DELETE  =    127,
+
+    WXK_START   = 300,
+    WXK_LBUTTON,
+    WXK_RBUTTON,
+    WXK_CANCEL,
+    WXK_MBUTTON,
+    WXK_CLEAR,
+    WXK_SHIFT,
+    WXK_ALT,
+    WXK_CONTROL,
+    WXK_MENU,
+    WXK_PAUSE,
+    WXK_CAPITAL,
+    WXK_PRIOR,  // Page up
+    WXK_NEXT,   // Page down
+    WXK_END,
+    WXK_HOME,
+    WXK_LEFT,
+    WXK_UP,
+    WXK_RIGHT,
+    WXK_DOWN,
+    WXK_SELECT,
+    WXK_PRINT,
+    WXK_EXECUTE,
+    WXK_SNAPSHOT,
+    WXK_INSERT,
+    WXK_HELP,
+    WXK_NUMPAD0,
+    WXK_NUMPAD1,
+    WXK_NUMPAD2,
+    WXK_NUMPAD3,
+    WXK_NUMPAD4,
+    WXK_NUMPAD5,
+    WXK_NUMPAD6,
+    WXK_NUMPAD7,
+    WXK_NUMPAD8,
+    WXK_NUMPAD9,
+    WXK_MULTIPLY,
+    WXK_ADD,
+    WXK_SEPARATOR,
+    WXK_SUBTRACT,
+    WXK_DECIMAL,
+    WXK_DIVIDE,
+    WXK_F1,
+    WXK_F2,
+    WXK_F3,
+    WXK_F4,
+    WXK_F5,
+    WXK_F6,
+    WXK_F7,
+    WXK_F8,
+    WXK_F9,
+    WXK_F10,
+    WXK_F11,
+    WXK_F12,
+    WXK_F13,
+    WXK_F14,
+    WXK_F15,
+    WXK_F16,
+    WXK_F17,
+    WXK_F18,
+    WXK_F19,
+    WXK_F20,
+    WXK_F21,
+    WXK_F22,
+    WXK_F23,
+    WXK_F24,
+    WXK_NUMLOCK,
+    WXK_SCROLL,
+    WXK_PAGEUP,
+    WXK_PAGEDOWN,
+
+    WXK_NUMPAD_SPACE,
+    WXK_NUMPAD_TAB,
+    WXK_NUMPAD_ENTER,
+    WXK_NUMPAD_F1,
+    WXK_NUMPAD_F2,
+    WXK_NUMPAD_F3,
+    WXK_NUMPAD_F4,
+    WXK_NUMPAD_HOME,
+    WXK_NUMPAD_LEFT,
+    WXK_NUMPAD_UP,
+    WXK_NUMPAD_RIGHT,
+    WXK_NUMPAD_DOWN,
+    WXK_NUMPAD_PRIOR,
+    WXK_NUMPAD_PAGEUP,
+    WXK_NUMPAD_NEXT,
+    WXK_NUMPAD_PAGEDOWN,
+    WXK_NUMPAD_END,
+    WXK_NUMPAD_BEGIN,
+    WXK_NUMPAD_INSERT,
+    WXK_NUMPAD_DELETE,
+    WXK_NUMPAD_EQUAL,
+    WXK_NUMPAD_MULTIPLY,
+    WXK_NUMPAD_ADD,
+    WXK_NUMPAD_SEPARATOR,
+    WXK_NUMPAD_SUBTRACT,
+    WXK_NUMPAD_DECIMAL,
+    WXK_NUMPAD_DIVIDE
 };
 
-// Mapping modes (as per Windows)
-#define wxMM_TEXT             1
-#define wxMM_LOMETRIC         2
-#define wxMM_HIMETRIC         3
-#define wxMM_LOENGLISH        4
-#define wxMM_HIENGLISH        5
-#define wxMM_TWIPS            6
-#define wxMM_ISOTROPIC        7
-#define wxMM_ANISOTROPIC      8
-
-#define wxMM_POINTS           9
-#define wxMM_METRIC          10
+// Mapping modes (same values as used by Windows, don't change)
+enum
+{
+    wxMM_TEXT = 1,
+    wxMM_LOMETRIC,
+    wxMM_HIMETRIC,
+    wxMM_LOENGLISH,
+    wxMM_HIENGLISH,
+    wxMM_TWIPS,
+    wxMM_ISOTROPIC,
+    wxMM_ANISOTROPIC,
+    wxMM_POINTS,
+    wxMM_METRIC
+};
 
 /* Shortcut for easier dialog-unit-to-pixel conversion */
 #define wxDLG_UNIT(parent, pt) parent->ConvertDialogToPixels(pt)
 
 /* Paper types */
-typedef enum {
+typedef enum
+{
     wxPAPER_NONE,               // Use specific dimensions
     wxPAPER_LETTER,             // Letter, 8 1/2 by 11 inches
     wxPAPER_LEGAL,              // Legal, 8 1/2 by 14 inches
@@ -1745,7 +1749,7 @@ typedef enum {
     wxPAPER_A3_TRANSVERSE,      // A3 Transverse 297 x 420 mm
     wxPAPER_A3_EXTRA_TRANSVERSE // A3 Extra Transverse 322 x 445 mm
 
-} wxPaperSize ;
+} wxPaperSize;
 
 /* Printing orientation */
 #ifndef wxPORTRAIT
@@ -1756,11 +1760,12 @@ typedef enum {
 /* Duplex printing modes
  */
 
-typedef enum {
+enum wxDuplexMode
+{
     wxDUPLEX_SIMPLEX, // Non-duplex
     wxDUPLEX_HORIZONTAL,
     wxDUPLEX_VERTICAL
-} wxDuplexMode;
+};
 
 /* Print quality.
  */
@@ -1775,28 +1780,29 @@ typedef int wxPrintQuality;
 /* Print mode (currently PostScript only)
  */
 
-typedef enum {
+enum wxPrintMode
+{
     wxPRINT_MODE_NONE =    0,
     wxPRINT_MODE_PREVIEW = 1,   // Preview in external application
     wxPRINT_MODE_FILE =    2,   // Print to file
     wxPRINT_MODE_PRINTER = 3    // Send to printer
-} wxPrintMode;
+};
 
 // ----------------------------------------------------------------------------
 // miscellaneous
 // ----------------------------------------------------------------------------
 
 // define this macro if font handling is done using the X font names
-#if defined(__WXGTK__) || defined(__X__)
+#if (defined(__WXGTK__) && !defined(__WXGTK20__)) || defined(__X__)
     #define _WX_X_FONTLIKE
 #endif
 
 // macro to specify "All Files" on different platforms
-#if defined(__WXMSW__)
-#   define wxALL_FILES_PATTERN   "*.*"
+#if defined(__WXMSW__) || defined(__WXPM__)
+#   define wxALL_FILES_PATTERN   wxT("*.*")
 #   define wxALL_FILES           gettext_noop("All files (*.*)|*.*")
 #else
-#   define wxALL_FILES_PATTERN   "*"
+#   define wxALL_FILES_PATTERN   wxT("*")
 #   define wxALL_FILES           gettext_noop("All files (*)|*")
 #endif
 
@@ -1808,6 +1814,27 @@ typedef enum {
 
 #ifdef __WXMAC__
 
+typedef unsigned char WXCOLORREF[6];
+typedef void*       WXHBITMAP;
+typedef void*       WXHMETAFILE ;
+typedef void*       WXHICON ;
+typedef void*       WXHCURSOR ;
+typedef void*       WXHRGN ;
+typedef void*       WXRECTPTR ;
+typedef void*       WXPOINTPTR ;
+typedef void*       WXHWND ;
+typedef void*       WXEVENTREF ;
+typedef void*       WXAPPLEEVENTREF ;
+typedef void*       WXHDC ;
+typedef void*       WXHMENU ;
+typedef unsigned int    WXUINT;
+typedef unsigned long   WXDWORD;
+typedef unsigned short  WXWORD;
+
+typedef void*       WXWidget ;
+typedef void*       WXWindow ;
+typedef void*       WXDisplay ;
+/*
 typedef WindowPtr       WXHWND;
 typedef Handle          WXHANDLE;
 typedef CIconHandle     WXHICON;
@@ -1820,16 +1847,11 @@ typedef CursHandle      WXHCURSOR;
 typedef RgnHandle       WXHRGN;
 //typedef unsigned long   WXHACCEL;
 //typedef unsigned long   WXHINSTANCE;
-typedef GWorldPtr       WXHBITMAP;
 //typedef unsigned long   WXHIMAGELIST;
 //typedef unsigned long   WXHGLOBAL;
 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 void *          WXRGNDATA;
 //typedef void *          WXMSG;
 //typedef unsigned long   WXHCONV;
@@ -1841,7 +1863,7 @@ typedef int (*WXFARPROC)();
 
 typedef WindowPtr       WXWindow;
 typedef ControlHandle   WXWidget;
-
+*/
 #endif
 
 #if defined(__WXMSW__) || defined(__WXPM__)
@@ -1879,17 +1901,7 @@ typedef unsigned long   WXHDC;
 typedef unsigned int    WXUINT;
 typedef unsigned long   WXDWORD;
 typedef unsigned short  WXWORD;
-#ifdef __WXMSW__
-typedef unsigned int    WXWPARAM;
-typedef long            WXLPARAM;
-#else
-#  define WXWPARAM      MPARAM
-#  define WXLPARAM      MPARAM
-#  define RECT          RECTL
-#  define LOGFONT       FATTRS
-#  define LOWORD        SHORT1FROMMP
-#  define HIWORD        SHORT2FROMMP
-#endif // __WXMSW__
+
 typedef unsigned long   WXCOLORREF;
 typedef void *          WXRGNDATA;
 typedef void *          WXMSG;
@@ -1901,7 +1913,38 @@ typedef void *          WXDRAWITEMSTRUCT;
 typedef void *          WXMEASUREITEMSTRUCT;
 typedef void *          WXLPCREATESTRUCT;
 
+typedef WXHWND          WXWidget;
+
+#endif // MSW or OS2
+
+
+#ifdef __WXMSW__
+typedef unsigned int    WXWPARAM;
+typedef long            WXLPARAM;
+
+#if !defined(__WIN32__) || defined(__GNUWIN32__) || defined(__WXWINE__) || defined(__WXMICROWIN__)
+typedef int             (*WXFARPROC)();
+#else
+typedef int             (__stdcall *WXFARPROC)();
+#endif
+#endif // __WXMSW__
+
+
 #if defined(__WXPM__)
+#ifdef __EMX__
+/* Need a well-known type for WXFARPROC
+   below. MPARAM is typedef'ed too late. */
+#define WXWPARAM        void *
+#define WXLPARAM        void *
+#else
+#define WXWPARAM        MPARAM
+#define WXLPARAM        MPARAM
+#endif
+#define RECT            RECTL
+#define LOGFONT         FATTRS
+#define LOWORD          SHORT1FROMMP
+#define HIWORD          SHORT2FROMMP
+
 typedef unsigned long   WXMPARAM;
 typedef unsigned long   WXMSGID;
 typedef void*           WXRESULT;
@@ -1924,7 +1967,10 @@ 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) (b) | ((WORD) (g) << 8)) | (((DWORD)(BYTE)(r)) << 16)))
+// WARNING: The OS/2 headers typedef BYTE simply as 'char'; if the default is signed, all
+// hell will break loose!
+//#define OS2RGB(r,g,b) ((DWORD ((BYTE) (b) | ((WORD) (g) << 8)) | (((DWORD)(BYTE)(r)) << 16)))
+#define OS2RGB(r,g,b) ((DWORD)((unsigned char)(b) | ((unsigned char)(g) << 8)) | ((unsigned char)(r) << 16))
 
 typedef unsigned long COLORREF;
 #define GetBValue(rgb) ((BYTE)((rgb) >> 16))
@@ -1946,42 +1992,27 @@ typedef struct tagLOGPALETTE
     WORD palNumentries;
     WORD PALETTEENTRY[1];
 } LOGPALETTE;
-#endif //__WXPM__
 
-#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 )
+#if (defined(__VISAGECPP__) && (__IBMCPP__ < 400)) || defined (__WATCOMC__)
     // 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
+typedef void* (_System *WXFARPROC)(unsigned long, unsigned long, void*, void*);
 #else
-    typedef int (*WXFARPROC)();
+#ifdef __EMX__
+#define _System
 #endif
-
-typedef WXHWND WXWidget;
-
-#if defined(__BORLANDC__) && !defined(__WIN32__)
-#  ifndef LPTSTR
-#    define LPTSTR LPSTR
-#  endif
-#  ifndef LPCTSTR
-#    define LPCTSTR LPSTR
-#  endif
+typedef WXRESULT (_System *WXFARPROC)(WXHWND, WXMSGID, WXWPARAM, WXLPARAM);
 #endif
 
-#endif // MSW or OS2
+#endif //__WXPM__
+
 
-#ifdef __WXMOTIF__
+#if defined(__WXMOTIF__) || defined(__WXX11__)
 /* Stand-ins for X/Xt/Motif types */
 typedef void*           WXWindow;
 typedef void*           WXWidget;
 typedef void*           WXAppContext;
 typedef void*           WXColormap;
+typedef void*           WXColor;
 typedef void            WXDisplay;
 typedef void            WXEvent;
 typedef void*           WXCursor;
@@ -1998,6 +2029,7 @@ typedef unsigned long   Atom;  /* this might fail on a few architectures */
 #endif // Motif
 
 #ifdef __WXGTK__
+
 /* Stand-ins for GLIB types */
 typedef char           gchar;
 typedef signed char    gint8;
@@ -2008,23 +2040,28 @@ typedef void*          gpointer;
 typedef struct _GSList GSList;
 
 /* Stand-ins for GDK types */
-typedef gulong                  GdkAtom;
 typedef struct _GdkColor        GdkColor;
 typedef struct _GdkColormap     GdkColormap;
 typedef struct _GdkFont         GdkFont;
 typedef struct _GdkGC           GdkGC;
+typedef struct _GdkVisual       GdkVisual;
+
 #ifdef __WXGTK20__
-    typedef struct _GdkDrawable     GdkWindow;
-    typedef struct _GdkDrawable     GdkBitmap;
-    typedef struct _GdkDrawable     GdkPixmap;
-#else
-    typedef struct _GdkWindow       GdkWindow;
-    typedef struct _GdkWindow       GdkBitmap;
-    typedef struct _GdkWindow       GdkPixmap;
-#endif
+typedef struct _GdkAtom        *GdkAtom;
+typedef struct _GdkDrawable     GdkWindow;
+typedef struct _GdkDrawable     GdkBitmap;
+typedef struct _GdkDrawable     GdkPixmap;
+#else // GTK+ 1.2
+typedef gulong                  GdkAtom;
+typedef struct _GdkWindow       GdkWindow;
+typedef struct _GdkWindow       GdkBitmap;
+typedef struct _GdkWindow       GdkPixmap;
+#endif // GTK+ 1.2/2.0
+
 typedef struct _GdkCursor       GdkCursor;
 typedef struct _GdkRegion       GdkRegion;
 typedef struct _GdkDragContext  GdkDragContext;
+
 #ifdef HAVE_XIM
 typedef struct _GdkIC           GdkIC;
 typedef struct _GdkICAttr       GdkICAttr;
@@ -2051,15 +2088,27 @@ typedef GtkWidget *WXWidget;
 #endif
 
 #ifdef __WXGTK20__
+/* Input method thing */
+typedef struct _GtkIMMulticontext    GtkIMMulticontext;
+#endif // __WXGTK20__
+
+#endif // __WXGTK__
+
+#if defined(__WXGTK20__) || (defined(__WXX11__) && wxUSE_UNICODE)
+#define wxUSE_PANGO 1
+#else
+#define wxUSE_PANGO 0
+#endif
+
+#if wxUSE_PANGO
 /* 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
+typedef struct window_t *WXWidget;
 #endif // MGL
 
 // This is required because of clashing macros in windows.h, which may be