X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/657a8a359826e46a7fc458216403f54deca34989..223862cbd39bf964c146c90cb055c5409c07d07d:/include/wx/defs.h diff --git a/include/wx/defs.h b/include/wx/defs.h index 1391858c3a..a96a6e91f4 100644 --- a/include/wx/defs.h +++ b/include/wx/defs.h @@ -14,8 +14,10 @@ #ifndef _WX_DEFS_H_ #define _WX_DEFS_H_ -// NOTE: this symbol will be replaced with "WXWIN_COMPATIBILITY_3_0" as soon -// as the development branch for 3.1 is created +/* + NOTE: this symbol will be replaced with "WXWIN_COMPATIBILITY_3_0" as soon + as the development branch for 3.1 is created + */ #define FUTURE_WXWIN_COMPATIBILITY_3_0 1 #define wxDEPRECATED_FUTURE( x ) x @@ -28,12 +30,9 @@ #ifdef __cplusplus /* Make sure the environment is set correctly */ # if defined(__WXMSW__) && defined(__X__) -# error "Target can't be both X and Windows" -# elif defined(__WXMSW__) && defined(__PALMOS__) -# error "Target can't be both PalmOS and Windows" +# error "Target can't be both X and MSW" # elif !defined(__WXMOTIF__) && \ !defined(__WXMSW__) && \ - !defined(__WXPALMOS__)&& \ !defined(__WXGTK__) && \ !defined(__WXPM__) && \ !defined(__WXOSX_CARBON__) && \ @@ -41,7 +40,6 @@ !defined(__WXOSX_IPHONE__) && \ !defined(__WXCOCOA__) && \ !defined(__X__) && \ - !defined(__WXMGL__) && \ !defined(__WXDFB__) && \ !defined(__WXX11__) && \ wxUSE_GUI @@ -79,8 +77,10 @@ # pragma warning(disable:4514) /* unreferenced inline func has been removed */ # pragma warning(disable:4710) /* function not inlined */ - // TODO: this warning should really be enabled as it can be genuinely - // useful, check where does it occur in wxWidgets + /* + TODO: this warning should really be enabled as it can be genuinely + useful, check where does it occur in wxWidgets + */ #pragma warning(disable: 4127) /* conditional expression is constant */ /* There are too many false positivies for this one, particularly when @@ -89,6 +89,16 @@ class 'bar'" */ # pragma warning(disable:4251) + /* + This is a similar warning which occurs when deriving from standard + containers. MSDN even mentions that it can be ignored in this case + (albeit only in debug build while the warning is the same in release + too and seems equally harmless). + */ +#if wxUSE_STD_CONTAINERS +# pragma warning(disable:4275) +#endif /* wxUSE_STD_CONTAINERS */ + # ifdef __VISUALC5__ /* For VC++ 5.0 for release mode, the warning 'C4702: unreachable code */ /* is buggy, and occurs for code that does actually get executed */ @@ -115,7 +125,7 @@ */ #ifdef __VISUALC6__ #pragma warning(disable: 4284) - #endif // VC6 + #endif /* VC6 */ /* When compiling with VC++ 7 /Wp64 option we get thousands of warnings for @@ -141,6 +151,9 @@ #ifndef _CRT_NON_CONFORMING_SWPRINTFS #define _CRT_NON_CONFORMING_SWPRINTFS 1 #endif + #ifndef _SCL_SECURE_NO_WARNINGS + #define _SCL_SECURE_NO_WARNINGS 1 + #endif #endif /* VC++ 8 */ #endif /* __VISUALC__ */ @@ -162,6 +175,18 @@ # define wxSUPPRESS_GCC_PRIVATE_DTOR_WARNING(name) #endif +/* + Clang Support + */ + +#ifndef WX_HAS_CLANG_FEATURE +# ifndef __has_feature +# define WX_HAS_CLANG_FEATURE(x) 0 +# else +# define WX_HAS_CLANG_FEATURE(x) __has_feature(x) +# endif +#endif + /* ---------------------------------------------------------------------------- */ /* wxWidgets version and compatibility defines */ /* ---------------------------------------------------------------------------- */ @@ -190,6 +215,12 @@ #define va_list __gnuc_va_list #endif /* HP-UX */ +/* Prevents conflicts between sys/types.h and winsock.h with Cygwin, */ +/* when using Windows sockets. */ +#if defined(__CYGWIN__) && defined(__WXMSW__) +#define __USE_W32_SOCKETS +#endif + /* ---------------------------------------------------------------------------- */ /* check for native bool type and TRUE/FALSE constants */ /* ---------------------------------------------------------------------------- */ @@ -233,9 +264,6 @@ typedef short int WXTYPE; #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 #elif defined(__DIGITALMARS__) #define HAVE_EXPLICIT #elif defined(__WATCOMC__) @@ -303,8 +331,7 @@ typedef short int WXTYPE; #if defined(__VISUALC__) && (__VISUALC__ >= 1100) /* VC++ 6.0 and 5.0 have std::wstring (what about earlier versions?) */ #define HAVE_STD_WSTRING - #elif ( defined(__MINGW32__) || defined(__CYGWIN32__) ) \ - && wxCHECK_GCC_VERSION(3, 3) + #elif defined(__MINGW32__) && wxCHECK_GCC_VERSION(3, 3) /* GCC 3.1 has std::wstring; 3.0 never was in MinGW, 2.95 hasn't it */ #define HAVE_STD_WSTRING #endif @@ -323,6 +350,12 @@ typedef short int WXTYPE; #endif #endif +#ifndef HAVE_TR1_TYPE_TRAITS + #if defined(__VISUALC__) && (_MSC_FULL_VER >= 150030729) + #define HAVE_TR1_TYPE_TRAITS + #endif +#endif + /* provide replacement for C99 va_copy() if the compiler doesn't have it */ /* could be already defined by configure or the user */ @@ -370,18 +403,23 @@ typedef short int WXTYPE; #if wxCHECK_WATCOM_VERSION(1,2) #define HAVE_VARIADIC_MACROS #endif + + #if wxCHECK_VISUALC_VERSION(9) + #define HAVE_VARIADIC_MACROS + #endif #endif /* HAVE_VARIADIC_MACROS */ #ifndef HAVE_WOSTREAM - // Mingw <= 3.4 and any version (so far) when targetting PalmOS don't have - // std::wostream - #if defined(__PALMOS__) || \ - (defined(__MINGW32__) && !wxCHECK_GCC_VERSION(4, 0)) + /* + Mingw <= 3.4 and all versions of Cygwin don't have std::wostream + */ + #if (defined(__MINGW32__) && !wxCHECK_GCC_VERSION(4, 0)) || \ + defined(__CYGWIN__) #define wxNO_WOSTREAM #endif - // VC++ doesn't have it in the old iostream library + /* VC++ doesn't have it in the old iostream library */ #if defined(__VISUALC__) && wxUSE_IOSTREAMH #define wxNO_WOSTREAM #endif @@ -393,12 +431,12 @@ typedef short int WXTYPE; #undef wxNO_WOSTREAM #endif /* HAVE_WOSTREAM */ -// ---------------------------------------------------------------------------- -// other C++ features -// ---------------------------------------------------------------------------- +/* ---------------------------------------------------------------------------- */ +/* other C++ features */ +/* ---------------------------------------------------------------------------- */ #ifndef HAVE_PARTIAL_SPECIALIZATION - // be optimistic by default + /* be optimistic by default */ #define HAVE_PARTIAL_SPECIALIZATION #endif @@ -406,17 +444,17 @@ typedef short int WXTYPE; #if __VISUALC__ < 1310 #undef HAVE_PARTIAL_SPECIALIZATION #endif -#endif // __VISUALC__ +#endif /* __VISUALC__ */ #ifndef HAVE_TEMPLATE_OVERLOAD_RESOLUTION - // assume the compiler can use type or const expressions as template - // arguments if it supports partial specialization -- except if it's a - // Borland one which can't + /* assume the compiler can use type or const expressions as template + arguments if it supports partial specialization -- except if it's a + Borland one which can't */ #if defined(HAVE_PARTIAL_SPECIALIZATION) && !defined(__BORLANDC__) #define HAVE_TEMPLATE_OVERLOAD_RESOLUTION - #endif // __BORLANDC__ -#endif // !defined(HAVE_TEMPLATE_OVERLOAD_RESOLUTION) + #endif /* (HAVE_PARTIAL_SPECIALIZATION) && !defined(__BORLANDC__) */ +#endif /* !defined(HAVE_TEMPLATE_OVERLOAD_RESOLUTION) */ /* ---------------------------------------------------------------------------- */ /* portable calling conventions macros */ @@ -436,7 +474,7 @@ typedef short int WXTYPE; #define wxSTDCALL #endif /* platform */ -/* LINKAGEMODE mode is empty for everyting except OS/2 */ +/* LINKAGEMODE mode is empty for everything except OS/2 */ #ifndef LINKAGEMODE #define LINKAGEMODE #endif /* LINKAGEMODE */ @@ -488,6 +526,17 @@ typedef short int WXTYPE; # define WX_ATTRIBUTE_PRINTF_5 WX_ATTRIBUTE_PRINTF(5, 6) #endif /* !defined(WX_ATTRIBUTE_PRINTF) */ +#ifndef WX_ATTRIBUTE_NORETURN +# if WX_HAS_CLANG_FEATURE(attribute_analyzer_noreturn) +# define WX_ATTRIBUTE_NORETURN __attribute__((analyzer_noreturn)) +# elif defined( __GNUC__ ) +# define WX_ATTRIBUTE_NORETURN __attribute__ ((noreturn)) +# elif wxCHECK_VISUALC_VERSION(7) +# define WX_ATTRIBUTE_NORETURN __declspec(noreturn) +# else +# define WX_ATTRIBUTE_NORETURN +# endif +#endif /* Macro to issue warning when using deprecated functions with gcc3 or MSVC7: */ #if wxCHECK_GCC_VERSION(3, 1) @@ -498,15 +547,14 @@ typedef short int WXTYPE; #define wxDEPRECATED(x) x #endif -/* - explicitly specifying inline allows gcc < 3.4 to - handle the deprecation attribute even in the constructor. - doesn't seem to work on Apple's gcc 4.0.1 unless using -O0 -*/ -#if wxCHECK_GCC_VERSION(3, 4) || defined( __DARWIN__ ) - #define wxDEPRECATED_CONSTRUCTOR(x) x -#else +#if defined(__GNUC__) && !wxCHECK_GCC_VERSION(3, 4) + /* + We need to add dummy "inline" to allow gcc < 3.4 to handle the + deprecation attribute on the constructors. + */ #define wxDEPRECATED_CONSTRUCTOR(x) wxDEPRECATED( inline x) +#else + #define wxDEPRECATED_CONSTRUCTOR(x) wxDEPRECATED(x) #endif /* @@ -519,6 +567,11 @@ typedef short int WXTYPE; */ #define wxDEPRECATED_INLINE(func, body) wxDEPRECATED(func) { body } +/* + A macro to define a simple deprecated accessor. + */ +#define wxDEPRECATED_ACCESSOR(func, what) wxDEPRECATED_INLINE(func, return what;) + /* Special variant of the macro above which should be used for the functions which are deprecated but called by wx itself: this often happens with @@ -544,7 +597,7 @@ typedef short int WXTYPE; /* 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) */ -#if !defined(__HANDHELDPC__) && !defined(__PALMOS__) +#if !defined(__HANDHELDPC__) #include #endif @@ -596,6 +649,10 @@ typedef short int WXTYPE; /* integer on success as failure indicator */ #define wxNOT_FOUND (-1) +/* the default value for some length parameters meaning that the string is */ +/* NUL-terminated */ +#define wxNO_LEN ((size_t)-1) + /* ---------------------------------------------------------------------------- */ /* macros dealing with comparison operators */ /* ---------------------------------------------------------------------------- */ @@ -616,9 +673,13 @@ typedef short int WXTYPE; m(==,x,y,z) m(!=,x,y,z) m(>=,x,y,z) m(<=,x,y,z) m(>,x,y,z) m(<,x,y,z) /* - This is only used with wxDEFINE_COMPARISON_REV: it passes both the normal - and the reversed comparison operators to the macro. + These are only used with wxDEFINE_COMPARISON_[BY_]REV: they pass both the + normal and the reversed comparison operators to the macro. */ +#define wxFOR_ALL_COMPARISONS_2_REV(m, x, y) \ + m(==,x,y,==) m(!=,x,y,!=) m(>=,x,y,<=) \ + m(<=,x,y,>=) m(>,x,y,<) m(<,x,y,>) + #define wxFOR_ALL_COMPARISONS_3_REV(m, x, y, z) \ m(==,x,y,z,==) m(!=,x,y,z,!=) m(>=,x,y,z,<=) \ m(<=,x,y,z,>=) m(>,x,y,z,<) m(<,x,y,z,>) @@ -630,6 +691,9 @@ typedef short int WXTYPE; #define wxDEFINE_COMPARISON_REV(op, T1, T2, cmp, oprev) \ inline bool operator op(T2 y, T1 x) { return cmp(x, y, oprev); } +#define wxDEFINE_COMPARISON_BY_REV(op, T1, T2, oprev) \ + inline bool operator op(T1 x, T2 y) { return y oprev x; } + /* Define all 6 comparison operators (==, !=, <, <=, >, >=) for the given types in the specified order. The implementation is provided by the cmp @@ -639,6 +703,14 @@ typedef short int WXTYPE; #define wxDEFINE_COMPARISONS(T1, T2, cmp) \ wxFOR_ALL_COMPARISONS_3(wxDEFINE_COMPARISON, T1, T2, cmp) +/* + Define all 6 comparison operators (==, !=, <, <=, >, >=) for the given + types in the specified order, implemented in terms of existing operators + for the reverse order. + */ +#define wxDEFINE_COMPARISONS_BY_REV(T1, T2) \ + wxFOR_ALL_COMPARISONS_2_REV(wxDEFINE_COMPARISON_BY_REV, T1, T2) + /* This macro allows to define all 12 comparison operators (6 operators for both orders of arguments) for the given types using the provided "cmp" @@ -707,13 +779,6 @@ typedef short int WXTYPE; /* compiler specific settings */ /* ---------------------------------------------------------------------------- */ -#if defined(__MWERKS__) - #undef try - #undef except - #undef finally - #define except(x) catch(...) -#endif /* Metrowerks */ - #if wxONLY_WATCOM_EARLIER_THAN(1,4) typedef short mode_t; #endif @@ -721,13 +786,10 @@ typedef short int WXTYPE; /* where should i put this? we need to make sure of this as it breaks */ /* the code. */ #if !wxUSE_IOSTREAMH && defined(__WXDEBUG__) -# ifndef __MWERKS__ -/* #undef __WXDEBUG__ */ # ifdef wxUSE_DEBUG_NEW_ALWAYS # undef wxUSE_DEBUG_NEW_ALWAYS # define wxUSE_DEBUG_NEW_ALWAYS 0 # endif -# endif #endif /* ---------------------------------------------------------------------------- */ @@ -743,10 +805,8 @@ enum { wxDefaultCoord = -1 }; /* define fixed length types */ /* ---------------------------------------------------------------------------- */ -#if defined(__WXPALMOS__) || defined(__MINGW32__) - #if !defined(__MWERKS__) +#if defined(__MINGW32__) #include - #endif #endif /* chars are always one byte (by definition), shorts are always two (in */ @@ -795,34 +855,31 @@ typedef wxUint16 wxWord; */ /* 32bit */ -#ifdef __PALMOS__ - typedef int wxInt32; - typedef unsigned int wxUint32; - #define SIZEOF_INT 4 - #define SIZEOF_LONG 4 - #define SIZEOF_WCHAR_T 2 - #define SIZEOF_SIZE_T 4 - #ifdef __WXPALMOS6__ - #define wxSIZE_T_IS_UINT - #endif - #define SIZEOF_VOID_P 4 - #define SIZEOF_SIZE_T 4 -#elif defined(__WINDOWS__) - /* Win64 uses LLP64 model and so ints and longs have the same size as in */ - /* Win32 */ +#if defined(__WINDOWS__) #if defined(__WIN32__) typedef int wxInt32; typedef unsigned int wxUint32; - /* Assume that if SIZEOF_INT is defined that all the other ones except - SIZEOF_SIZE_T, are too. See next #if below. */ + /* + Win64 uses LLP64 model and so ints and longs have the same size as + in Win32. + */ #ifndef SIZEOF_INT #define SIZEOF_INT 4 + #endif + + #ifndef SIZEOF_LONG #define SIZEOF_LONG 4 + #endif + + #ifndef SIZEOF_WCHAR_T + /* Windows uses UTF-16 */ #define SIZEOF_WCHAR_T 2 + #endif + #ifndef SIZEOF_SIZE_T /* - under Win64 sizeof(size_t) == 8 and so it is neither unsigned + Under Win64 sizeof(size_t) == 8 and so it is neither unsigned int nor unsigned long! */ #ifdef __WIN64__ @@ -835,25 +892,14 @@ typedef wxUint16 wxWord; #define wxSIZE_T_IS_UINT #endif #undef wxSIZE_T_IS_ULONG + #endif + #ifndef SIZEOF_VOID_P #ifdef __WIN64__ #define SIZEOF_VOID_P 8 #else /* Win32 */ #define SIZEOF_VOID_P 4 #endif /* Win64/32 */ - #endif /* !defined(SIZEOF_INT) */ - - /* - If Python.h was included first, it defines all of the SIZEOF's above - except for SIZEOF_SIZE_T, so we need to do it here to avoid - triggering the #error in the ssize_t typedefs below... - */ - #ifndef SIZEOF_SIZE_T - #ifdef __WIN64__ - #define SIZEOF_SIZE_T 8 - #else /* Win32 */ - #define SIZEOF_SIZE_T 4 - #endif #endif #else #error "Unsupported Windows version" @@ -896,7 +942,7 @@ typedef wxUint16 wxWord; #if defined(__MACH__) && !defined(SIZEOF_WCHAR_T) #define SIZEOF_WCHAR_T 4 #endif - #if wxUSE_WCHAR_T && !defined(SIZEOF_WCHAR_T) + #if !defined(SIZEOF_WCHAR_T) /* also assume that sizeof(wchar_t) == 2 (under Unix the most */ /* common case is 4 but there configure would have defined */ /* SIZEOF_WCHAR_T for us) */ @@ -905,23 +951,31 @@ typedef wxUint16 wxWord; Wchar_tMustBeExactly2Bytes); #define SIZEOF_WCHAR_T 2 - #endif /* wxUSE_WCHAR_T */ + #endif /* !defined(SIZEOF_WCHAR_T) */ #endif #endif /* Win/!Win */ +#ifndef SIZEOF_WCHAR_T + #error "SIZEOF_WCHAR_T must be defined, but isn't" +#endif + /* also define C99-like sized MIN/MAX constants */ #define wxINT8_MIN CHAR_MIN #define wxINT8_MAX CHAR_MAX +#define wxUINT8_MAX UCHAR_MAX #define wxINT16_MIN SHRT_MIN #define wxINT16_MAX SHRT_MAX +#define wxUINT16_MAX USHRT_MAX #if SIZEOF_INT == 4 #define wxINT32_MIN INT_MIN #define wxINT32_MAX INT_MAX + #define wxUINT32_MAX UINT_MAX #elif SIZEOF_LONG == 4 #define wxINT32_MIN LONG_MIN #define wxINT32_MAX LONG_MAX + #define wxUINT32_MAX ULONG_MAX #else #error "Unknown 32 bit type" #endif @@ -929,11 +983,13 @@ typedef wxUint16 wxWord; typedef wxUint32 wxDword; #ifdef LLONG_MAX - #define wxINT64_MAX LLONG_MAX #define wxINT64_MIN LLONG_MIN + #define wxINT64_MAX LLONG_MAX + #define wxUINT64_MAX ULLONG_MAX #else - #define wxINT64_MAX wxLL(9223372036854775807) #define wxINT64_MIN (wxLL(-9223372036854775807)-1) + #define wxINT64_MAX wxLL(9223372036854775807) + #define wxUINT64_MAX wxULL(0xFFFFFFFFFFFFFFFF) #endif /* 64 bit */ @@ -960,40 +1016,23 @@ typedef wxUint32 wxDword; #if (defined(__VISUALC__) && defined(__WIN32__)) #define wxLongLong_t __int64 #define wxLongLongSuffix i64 - #define wxLongLongFmtSpec _T("I64") + #define wxLongLongFmtSpec "I64" #elif defined(__BORLANDC__) && defined(__WIN32__) && (__BORLANDC__ >= 0x520) #define wxLongLong_t __int64 #define wxLongLongSuffix i64 - #define wxLongLongFmtSpec _T("L") + #define wxLongLongFmtSpec "L" #elif (defined(__WATCOMC__) && (defined(__WIN32__) || defined(__DOS__) || defined(__OS2__))) #define wxLongLong_t __int64 #define wxLongLongSuffix i64 - #define wxLongLongFmtSpec _T("L") + #define wxLongLongFmtSpec "L" #elif defined(__DIGITALMARS__) #define wxLongLong_t __int64 #define wxLongLongSuffix LL - #define wxLongLongFmtSpec _T("ll") + #define wxLongLongFmtSpec "ll" #elif defined(__MINGW32__) #define wxLongLong_t long long #define wxLongLongSuffix ll - #define wxLongLongFmtSpec _T("I64") -#elif defined(__MWERKS__) - #if __option(longlong) - #define wxLongLong_t long long - #define wxLongLongSuffix ll - #define wxLongLongFmtSpec _T("ll") - #else - #error "The 64 bit integer support in CodeWarrior has been disabled." - #error "See the documentation on the 'longlong' pragma." - #endif -#elif defined(__WXPALMOS__) - #if defined(__WXPALMOS6__) - #define wxLongLong_t int64_t - #else - #define wxLongLong_t long long - #endif /* __WXPALMOS6__ */ - #define wxLongLongSuffix ll - #define wxLongLongFmtSpec _T("ll") + #define wxLongLongFmtSpec "I64" #elif defined(__VISAGECPP__) && __IBMCPP__ >= 400 #define wxLongLong_t long long #elif (defined(SIZEOF_LONG_LONG) && SIZEOF_LONG_LONG >= 8) || \ @@ -1003,36 +1042,42 @@ typedef wxUint32 wxDword; (defined(__DJGPP__) && __DJGPP__ >= 2) #define wxLongLong_t long long #define wxLongLongSuffix ll - #define wxLongLongFmtSpec _T("ll") + #define wxLongLongFmtSpec "ll" #elif defined(SIZEOF_LONG) && (SIZEOF_LONG == 8) #define wxLongLong_t long #define wxLongLongSuffix l - #define wxLongLongFmtSpec _T("l") + #define wxLongLongFmtSpec "l" #define wxLongLongIsLong #endif #ifdef wxLongLong_t + #define wxULongLong_t unsigned wxLongLong_t - #ifdef __WXPALMOS__ - #if defined(__WXPALMOS6__) - #define wxULongLong_t uint64_t - #else - #define wxULongLong_t unsigned long long - #endif /* __WXPALMOS6__ */ + /* + wxLL() and wxULL() macros allow to define 64 bit constants in a + portable way. + */ + #ifndef wxCOMPILER_BROKEN_CONCAT_OPER + #define wxLL(x) wxCONCAT(x, wxLongLongSuffix) + #define wxULL(x) wxCONCAT(x, wxCONCAT(u, wxLongLongSuffix)) #else - #define wxULongLong_t unsigned wxLongLong_t + /* + Currently only Borland compiler has broken concatenation operator + and this compiler is known to use [u]i64 suffix. + */ + #define wxLL(x) wxAPPEND_i64(x) + #define wxULL(x) wxAPPEND_ui64(x) #endif - /* these macros allow to define 64 bit constants in a portable way */ - #define wxLL(x) wxCONCAT(x, wxLongLongSuffix) - #define wxULL(x) wxCONCAT(x, wxCONCAT(u, wxLongLongSuffix)) - typedef wxLongLong_t wxInt64; typedef wxULongLong_t wxUint64; #define wxHAS_INT64 1 + #ifndef wxLongLongIsLong + #define wxHAS_LONG_LONG_T_DIFFERENT_FROM_LONG + #endif #elif wxUSE_LONGLONG /* these macros allow to define 64 bit constants in a portable way */ #define wxLL(x) wxLongLong(x) @@ -1057,8 +1102,6 @@ typedef wxUint32 wxDword; #if defined(_SSIZE_T_) || defined(_SSIZE_T_DEFINED) #define HAVE_SSIZE_T #endif -#elif defined(__PALMOS__) - #define HAVE_SSIZE_T #elif wxCHECK_WATCOM_VERSION(1,4) #define HAVE_SSIZE_T #endif @@ -1069,7 +1112,7 @@ typedef wxUint32 wxDword; #ifdef __UNIX__ #include #endif -#else // !HAVE_SSIZE_T +#else /* !HAVE_SSIZE_T */ #if SIZEOF_SIZE_T == 4 typedef wxInt32 ssize_t; #elif SIZEOF_SIZE_T == 8 @@ -1077,13 +1120,18 @@ typedef wxUint32 wxDword; #else #error "error defining ssize_t, size_t is not 4 or 8 bytes" #endif + + /* prevent ssize_t redefinitions in other libraries */ + #define HAVE_SSIZE_T #endif -// we can't rely on Windows _W64 being defined as windows.h may not be included -// so define our own equivalent: this should be used with types like WXLPARAM -// or WXWPARAM which are 64 bit under Win64 to avoid warnings each time we cast -// it to a pointer or a handle (which results in hundreds of warnings as Win32 -// API often passes pointers in them) +/* + We can't rely on Windows _W64 being defined as windows.h may not be + included so define our own equivalent: this should be used with types + like WXLPARAM or WXWPARAM which are 64 bit under Win64 to avoid warnings + each time we cast it to a pointer or a handle (which results in hundreds + of warnings as Win32 API often passes pointers in them) + */ #if wxCHECK_VISUALC_VERSION(7) #define wxW64 __w64 #else @@ -1094,7 +1142,13 @@ typedef wxUint32 wxDword; Define signed and unsigned integral types big enough to contain all of long, size_t and void *. */ -#if SIZEOF_SIZE_T >= SIZEOF_VOID_P +#if SIZEOF_LONG >= SIZEOF_VOID_P + /* + Normal case when long is the largest integral type. + */ + typedef long wxIntPtr; + typedef unsigned long wxUIntPtr; +#elif SIZEOF_SIZE_T >= SIZEOF_VOID_P /* Win64 case: size_t is the only integral type big enough for "void *". @@ -1104,12 +1158,6 @@ typedef wxUint32 wxDword; */ typedef wxW64 ssize_t wxIntPtr; typedef size_t wxUIntPtr; -#elif SIZEOF_LONG >= SIZEOF_VOID_P - /* - Normal case when long is the largest integral type. - */ - typedef long wxIntPtr; - typedef unsigned long wxUIntPtr; #else /* This should never happen for the current architectures but if you're @@ -1178,11 +1226,7 @@ inline void *wxUIntToPtr(wxUIntPtr p) /* calculations */ typedef float wxFloat32; -#if (defined( __WXMAC__ ) || defined(__WXCOCOA__)) && defined (__MWERKS__) - typedef short double wxFloat64; -#else - typedef double wxFloat64; -#endif +typedef double wxFloat64; typedef double wxDouble; @@ -1227,14 +1271,14 @@ typedef double wxDouble; /* Define wxChar16 and wxChar32 */ -#if wxUSE_WCHAR_T && (!defined(SIZEOF_WCHAR_T) || (SIZEOF_WCHAR_T == 2)) +#if SIZEOF_WCHAR_T == 2 #define wxWCHAR_T_IS_WXCHAR16 typedef wchar_t wxChar16; #else typedef wxUint16 wxChar16; #endif -#if wxUSE_WCHAR_T && defined(SIZEOF_WCHAR_T) && (SIZEOF_WCHAR_T == 4) +#if SIZEOF_WCHAR_T == 4 #define wxWCHAR_T_IS_WXCHAR32 typedef wchar_t wxChar32; #else @@ -1260,36 +1304,6 @@ typedef double wxDouble; /* byte swapping */ -#if defined (__MWERKS__) && ( (__MWERKS__ < 0x0900) || macintosh ) -/* assembler versions for these */ -#ifdef __POWERPC__ - inline wxUint16 wxUINT16_SWAP_ALWAYS( wxUint16 i ) - {return (__lhbrx( &i , 0 ) );} - inline wxInt16 wxINT16_SWAP_ALWAYS( wxInt16 i ) - {return (__lhbrx( &i , 0 ) );} - inline wxUint32 wxUINT32_SWAP_ALWAYS( wxUint32 i ) - {return (__lwbrx( &i , 0 ) );} - inline wxInt32 wxINT32_SWAP_ALWAYS( wxInt32 i ) - {return (__lwbrx( &i , 0 ) );} -#else - #pragma parameter __D0 wxUINT16_SWAP_ALWAYS(__D0) - pascal wxUint16 wxUINT16_SWAP_ALWAYS(wxUint16 value) - = { 0xE158 }; - - #pragma parameter __D0 wxINT16_SWAP_ALWAYS(__D0) - pascal wxInt16 wxINT16_SWAP_ALWAYS(wxInt16 value) - = { 0xE158 }; - - #pragma parameter __D0 wxUINT32_SWAP_ALWAYS (__D0) - pascal wxUint32 wxUINT32_SWAP_ALWAYS(wxUint32 value) - = { 0xE158, 0x4840, 0xE158 }; - - #pragma parameter __D0 wxINT32_SWAP_ALWAYS (__D0) - pascal wxInt32 wxINT32_SWAP_ALWAYS(wxInt32 value) - = { 0xE158, 0x4840, 0xE158 }; - -#endif -#else /* !MWERKS */ #define wxUINT16_SWAP_ALWAYS(val) \ ((wxUint16) ( \ (((wxUint16) (val) & (wxUint16) 0x00ffU) << 8) | \ @@ -1313,7 +1327,6 @@ typedef double wxDouble; (((wxUint32) (val) & (wxUint32) 0x0000ff00U) << 8) | \ (((wxUint32) (val) & (wxUint32) 0x00ff0000U) >> 8) | \ (((wxUint32) (val) & (wxUint32) 0xff000000U) >> 24))) -#endif /* machine specific byte swapping */ #ifdef wxLongLong_t @@ -1394,6 +1407,45 @@ typedef double wxDouble; #endif #endif +/* ---------------------------------------------------------------------------- */ +/* template workarounds for buggy compilers */ +/* ---------------------------------------------------------------------------- */ + +#if defined(__GNUC__) && !wxCHECK_GCC_VERSION( 3, 4 ) + /* GCC <= 3.4 has buggy template support */ +# define wxUSE_MEMBER_TEMPLATES 0 +#endif + +#if defined(_MSC_VER) && _MSC_VER <= 1200 + /* MSVC <= 6.0 has buggy template support */ +# define wxUSE_MEMBER_TEMPLATES 0 +# define wxUSE_FUNC_TEMPLATE_POINTER 0 +#endif + +#ifndef wxUSE_MEMBER_TEMPLATES +# define wxUSE_MEMBER_TEMPLATES 1 +#endif + +#ifndef wxUSE_FUNC_TEMPLATE_POINTER +# define wxUSE_FUNC_TEMPLATE_POINTER 1 +#endif + +#if wxUSE_MEMBER_TEMPLATES +# define wxTEMPLATED_MEMBER_CALL( method, type ) method() +# define wxTEMPLATED_MEMBER_FIX( type ) +#else +# define wxTEMPLATED_MEMBER_CALL( method, type ) method((type*)NULL) +# define wxTEMPLATED_MEMBER_FIX( type ) type* =NULL +#endif + +#if defined(_MSC_VER) && _MSC_VER <= 1200 +# define wxTEMPLATED_FUNCTION_FIX( type ), wxTEMPLATED_MEMBER_FIX(type) +# define wxINFUNC_CLASS_TYPE_FIX( type ) typedef type type; +#else +# define wxTEMPLATED_FUNCTION_FIX( type ) +# define wxINFUNC_CLASS_TYPE_FIX( type ) +#endif + /* ---------------------------------------------------------------------------- */ /* Geometric flags */ /* ---------------------------------------------------------------------------- */ @@ -1445,6 +1497,13 @@ enum wxDirection enum wxAlignment { + /* + 0 is a valid wxAlignment value (both wxALIGN_LEFT and wxALIGN_TOP + use it) so define a symbolic name for an invalid alignment value + which can be assumed to be different from anything else + */ + wxALIGN_INVALID = -1, + wxALIGN_NOT = 0x0000, wxALIGN_CENTER_HORIZONTAL = 0x0100, wxALIGN_CENTRE_HORIZONTAL = wxALIGN_CENTER_HORIZONTAL, @@ -1465,8 +1524,13 @@ enum wxAlignment /* misc. flags for wxSizer items */ enum wxSizerFlagBits { - /* for compatibility only, default now, don't use explicitly any more */ -#if WXWIN_COMPATIBILITY_2_8 + /* + wxADJUST_MINSIZE doesn't do anything any more but we still define + it for compatibility. Notice that it may be also predefined (as 0, + hopefully) in the user code in order to use it even in + !WXWIN_COMPATIBILITY_2_8 builds so don't redefine it in such case. + */ +#if WXWIN_COMPATIBILITY_2_8 && !defined(wxADJUST_MINSIZE) wxADJUST_MINSIZE = 0, #endif wxFIXED_MINSIZE = 0x8000, @@ -1524,12 +1588,40 @@ enum wxBorder * Some styles are used across more than one group, * so the values mustn't clash with others in the group. * Otherwise, numbers can be reused across groups. - * - * From version 1.66: - * Window (cross-group) styles now take up the first half - * of the flag, and control-specific styles the - * second half. - * + */ + +/* + Summary of the bits used by various styles. + + High word, containing styles which can be used with many windows: + + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + |31|30|29|28|27|26|25|24|23|22|21|20|19|18|17|16| + +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | \_ wxFULL_REPAINT_ON_RESIZE + | | | | | | | | | | | | | | \____ wxPOPUP_WINDOW + | | | | | | | | | | | | | \_______ wxWANTS_CHARS + | | | | | | | | | | | | \__________ wxTAB_TRAVERSAL + | | | | | | | | | | | \_____________ wxTRANSPARENT_WINDOW + | | | | | | | | | | \________________ wxBORDER_NONE + | | | | | | | | | \___________________ wxCLIP_CHILDREN + | | | | | | | | \______________________ wxALWAYS_SHOW_SB + | | | | | | | \_________________________ wxBORDER_STATIC + | | | | | | \____________________________ wxBORDER_SIMPLE + | | | | | \_______________________________ wxBORDER_RAISED + | | | | \__________________________________ wxBORDER_SUNKEN + | | | \_____________________________________ wxBORDER_{DOUBLE,THEME} + | | \________________________________________ wxCAPTION/wxCLIP_SIBLINGS + | \___________________________________________ wxHSCROLL + \______________________________________________ wxVSCROLL + + + Low word style bits is class-specific meaning that the same bit can have + different meanings for different controls (e.g. 0x10 is wxCB_READONLY + meaning that the control can't be modified for wxComboBox but wxLB_SORT + meaning that the control should be kept sorted for wxListBox, while + wxLB_SORT has a different value -- and this is just fine). */ /* @@ -1688,9 +1780,10 @@ enum wxBorder #define wxLB_MULTIPLE 0x0040 #define wxLB_EXTENDED 0x0080 /* wxLB_OWNERDRAW is Windows-only */ +#define wxLB_NEEDED_SB 0x0000 #define wxLB_OWNERDRAW 0x0100 -#define wxLB_NEEDED_SB 0x0200 -#define wxLB_ALWAYS_SB 0x0400 +#define wxLB_ALWAYS_SB 0x0200 +#define wxLB_NO_SB 0x0400 #define wxLB_HSCROLL wxHSCROLL /* always show an entire number of rows */ #define wxLB_INT_HEIGHT 0x0800 @@ -1724,14 +1817,12 @@ enum wxBorder /* Old names for compatibility */ #define wxRA_HORIZONTAL wxHORIZONTAL #define wxRA_VERTICAL wxVERTICAL -#define wxRA_USE_CHECKBOX 0x0010 /* alternative native subcontrols (wxPalmOS) */ /* * wxRadioButton style flag */ #define wxRB_GROUP 0x0004 #define wxRB_SINGLE 0x0008 -#define wxRB_USE_CHECKBOX 0x0010 /* alternative native control (wxPalmOS) */ /* * wxScrollBar flags @@ -1741,14 +1832,15 @@ enum wxBorder /* * wxSpinButton flags. - * Note that a wxSpinCtrl is sometimes defined as - * a wxTextCtrl, and so the flags must be different - * from wxTextCtrl's. + * Note that a wxSpinCtrl is sometimes defined as a wxTextCtrl, and so the + * flags shouldn't overlap with wxTextCtrl flags that can be used for a single + * line controls (currently we reuse wxTE_CHARWRAP and wxTE_RICH2 neither of + * which makes sense for them). */ #define wxSP_HORIZONTAL wxHORIZONTAL /* 4 */ #define wxSP_VERTICAL wxVERTICAL /* 8 */ -#define wxSP_ARROW_KEYS 0x1000 -#define wxSP_WRAP 0x2000 +#define wxSP_ARROW_KEYS 0x4000 +#define wxSP_WRAP 0x8000 /* * wxTabCtrl flags @@ -1762,11 +1854,6 @@ enum wxBorder #define wxTC_MULTILINE 0x0200 /* == wxNB_MULTILINE */ #define wxTC_OWNERDRAW 0x0400 -/* - * wxStatusBar95 flags - */ -#define wxST_SIZEGRIP 0x0010 - /* * wxStaticBitmap flags */ @@ -1808,25 +1895,55 @@ enum wxBorder #define wxICON_INFORMATION 0x00000800 #define wxICON_STOP wxICON_HAND #define wxICON_ASTERISK wxICON_INFORMATION -#define wxICON_MASK (0x00000100|0x00000200|0x00000400|0x00000800) -#define wxFORWARD 0x00001000 -#define wxBACKWARD 0x00002000 -#define wxRESET 0x00004000 -#define wxHELP 0x00008000 -#define wxMORE 0x00010000 -#define wxSETUP 0x00020000 +#define wxHELP 0x00001000 +#define wxFORWARD 0x00002000 +#define wxBACKWARD 0x00004000 +#define wxRESET 0x00008000 +#define wxMORE 0x00010000 +#define wxSETUP 0x00020000 +#define wxICON_NONE 0x00040000 + +#define wxICON_MASK \ + (wxICON_EXCLAMATION|wxICON_HAND|wxICON_QUESTION|wxICON_INFORMATION|wxICON_NONE) /* * Background styles. See wxWindow::SetBackgroundStyle */ - enum wxBackgroundStyle { - wxBG_STYLE_SYSTEM, - wxBG_STYLE_COLOUR, - wxBG_STYLE_CUSTOM, - wxBG_STYLE_TRANSPARENT + /* + background is erased in the EVT_ERASE_BACKGROUND handler or using + the system default background if no such handler is defined (this + is the default style) + */ + wxBG_STYLE_ERASE, + + /* + background is erased by the system, no EVT_ERASE_BACKGROUND event + is generated at all + */ + wxBG_STYLE_SYSTEM, + + /* + background is erased in EVT_PAINT handler and not erased at all + before it, this should be used if the paint handler paints over + the entire window to avoid flicker + */ + wxBG_STYLE_PAINT, + + + /* this is a Mac-only style, don't use in portable code */ + wxBG_STYLE_TRANSPARENT, + + /* this style is deprecated and doesn't do anything, don't use */ + wxBG_STYLE_COLOUR, + + /* + this style is deprecated and is synonymous with + wxBG_STYLE_PAINT, use the new name + */ + wxBG_STYLE_CUSTOM = wxBG_STYLE_PAINT }; /* @@ -2017,6 +2134,13 @@ enum wxStandardID wxID_MDI_WINDOW_NEXT, wxID_MDI_WINDOW_LAST = wxID_MDI_WINDOW_NEXT, + /* OS X system menu ids */ + wxID_OSX_MENU_FIRST = 5250, + wxID_OSX_HIDE = wxID_OSX_MENU_FIRST, + wxID_OSX_HIDEOTHERS, + wxID_OSX_SHOWALL, + wxID_OSX_MENU_LAST = wxID_OSX_SHOWALL, + /* IDs used by generic file dialog (13 consecutive starting from this value) */ wxID_FILEDLGG = 5900, @@ -2054,6 +2178,18 @@ enum wxItemKind wxITEM_MAX }; +/* + * The possible states of a 3-state checkbox (Compatible + * with the 2-state checkbox). + */ +enum wxCheckBoxState +{ + wxCHK_UNCHECKED, + wxCHK_CHECKED, + wxCHK_UNDETERMINED /* 3-state checkbox only */ +}; + + /* hit test results */ enum wxHitTest { @@ -2106,6 +2242,28 @@ enum wxHitTest /* GDI descriptions */ /* ---------------------------------------------------------------------------- */ +// Hatch styles used by both pen and brush styles. +// +// NB: Do not use these constants directly, they're for internal use only, use +// wxBRUSHSTYLE_XXX_HATCH and wxPENSTYLE_XXX_HATCH instead. +enum wxHatchStyle +{ + wxHATCHSTYLE_INVALID = -1, + + /* + The value of the first style is chosen to fit with + wxDeprecatedGUIConstants values below, don't change it. + */ + wxHATCHSTYLE_FIRST = 111, + wxHATCHSTYLE_BDIAGONAL = wxHATCHSTYLE_FIRST, + wxHATCHSTYLE_CROSSDIAG, + wxHATCHSTYLE_FDIAGONAL, + wxHATCHSTYLE_CROSS, + wxHATCHSTYLE_HORIZONTAL, + wxHATCHSTYLE_VERTICAL, + wxHATCHSTYLE_LAST = wxHATCHSTYLE_VERTICAL +}; + /* WARNING: the following styles are deprecated; use the wxFontFamily, wxFontStyle, wxFontWeight, wxBrushStyle, @@ -2148,20 +2306,20 @@ enum wxDeprecatedGUIConstants wxTRANSPARENT, /* Brush & Pen Stippling. Note that a stippled pen cannot be dashed!! */ - /* Note also that stippling a Pen IS meaningfull, because a Line is */ + /* Note also that stippling a Pen IS meaningful, 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, /* In wxWidgets < 2.6 use WX_HATCH macro */ - wxCROSSDIAG_HATCH, /* to verify these wx*_HATCH are in style */ - wxFDIAGONAL_HATCH, /* of wxBrush. In wxWidgets >= 2.6 use */ - wxCROSS_HATCH, /* wxBrush::IsHatch() instead. */ - wxHORIZONTAL_HATCH, - wxVERTICAL_HATCH, - wxFIRST_HATCH = wxBDIAGONAL_HATCH, - wxLAST_HATCH = wxVERTICAL_HATCH + wxBDIAGONAL_HATCH = wxHATCHSTYLE_BDIAGONAL, + wxCROSSDIAG_HATCH = wxHATCHSTYLE_CROSSDIAG, + wxFDIAGONAL_HATCH = wxHATCHSTYLE_FDIAGONAL, + wxCROSS_HATCH = wxHATCHSTYLE_CROSS, + wxHORIZONTAL_HATCH = wxHATCHSTYLE_HORIZONTAL, + wxVERTICAL_HATCH = wxHATCHSTYLE_VERTICAL, + wxFIRST_HATCH = wxHATCHSTYLE_FIRST, + wxLAST_HATCH = wxHATCHSTYLE_LAST }; #endif @@ -2200,10 +2358,39 @@ enum wxDataFormatId wxDF_MAX }; -/* Virtual keycodes */ +/* Key codes */ enum wxKeyCode { - WXK_BACK = 8, // backspace + WXK_NONE = 0, + + WXK_CONTROL_A = 1, + WXK_CONTROL_B, + WXK_CONTROL_C, + WXK_CONTROL_D, + WXK_CONTROL_E, + WXK_CONTROL_F, + WXK_CONTROL_G, + WXK_CONTROL_H, + WXK_CONTROL_I, + WXK_CONTROL_J, + WXK_CONTROL_K, + WXK_CONTROL_L, + WXK_CONTROL_M, + WXK_CONTROL_N, + WXK_CONTROL_O, + WXK_CONTROL_P, + WXK_CONTROL_Q, + WXK_CONTROL_R, + WXK_CONTROL_S, + WXK_CONTROL_T, + WXK_CONTROL_U, + WXK_CONTROL_V, + WXK_CONTROL_W, + WXK_CONTROL_X, + WXK_CONTROL_Y, + WXK_CONTROL_Z, + + WXK_BACK = 8, /* backspace */ WXK_TAB = 9, WXK_RETURN = 13, WXK_ESCAPE = 27, @@ -2214,12 +2401,12 @@ enum wxKeyCode WXK_DELETE = 127, /* values from 128 to 255 are reserved for ASCII extended characters - (note that there isn't a real widely used standard for the meaning + (note that there isn't a single fixed standard for the meaning of these values; avoid them in portable apps!) */ - /* These are, by design, not compatible with unicode characters. + /* These are not compatible with unicode characters. If you want to get a unicode character from a key event, use - wxKeyEvent::GetUnicodeKey instead. */ + wxKeyEvent::GetUnicodeKey */ WXK_START = 300, WXK_LBUTTON, WXK_RBUTTON, @@ -2326,7 +2513,12 @@ enum wxKeyCode WXK_WINDOWS_LEFT, WXK_WINDOWS_RIGHT, WXK_WINDOWS_MENU , - WXK_COMMAND, +#ifdef __WXOSX__ + WXK_RAW_CONTROL, +#else + WXK_RAW_CONTROL = WXK_CONTROL, +#endif + WXK_COMMAND = WXK_CONTROL, /* Hardware-specific buttons */ WXK_SPECIAL1 = 193, @@ -2362,10 +2554,11 @@ enum wxKeyModifier wxMOD_META = 0x0008, wxMOD_WIN = wxMOD_META, #if defined(__WXMAC__) || defined(__WXCOCOA__) - wxMOD_CMD = wxMOD_META, + wxMOD_RAW_CONTROL = 0x0010, #else - wxMOD_CMD = wxMOD_CONTROL, + wxMOD_RAW_CONTROL = wxMOD_CONTROL, #endif + wxMOD_CMD = wxMOD_CONTROL, wxMOD_ALL = 0xffff }; @@ -2493,14 +2686,17 @@ typedef enum wxPAPER_PENV_7_ROTATED, /* PRC Envelope #7 Rotated 230 x 160 mm */ wxPAPER_PENV_8_ROTATED, /* PRC Envelope #8 Rotated 309 x 120 mm */ wxPAPER_PENV_9_ROTATED, /* PRC Envelope #9 Rotated 324 x 229 mm */ - wxPAPER_PENV_10_ROTATED /* PRC Envelope #10 Rotated 458 x 324 m */ + wxPAPER_PENV_10_ROTATED, /* PRC Envelope #10 Rotated 458 x 324 m */ + wxPAPER_A0, /* A0 Sheet 841 x 1189 mm */ + wxPAPER_A1 /* A1 Sheet 594 x 841 mm */ } wxPaperSize; /* Printing orientation */ -#ifndef wxPORTRAIT -#define wxPORTRAIT 1 -#define wxLANDSCAPE 2 -#endif +enum wxPrintOrientation +{ + wxPORTRAIT = 1, + wxLANDSCAPE +}; /* Duplex printing modes */ @@ -2579,7 +2775,7 @@ typedef int (* LINKAGEMODE wxListIterateFunction)(void *current); #endif #if defined(__CYGWIN__) && defined(__WXMSW__) -# if wxUSE_STL || defined(wxUSE_STD_STRING) +# if wxUSE_STD_CONTAINERS || defined(wxUSE_STD_STRING) /* NASTY HACK because the gethostname in sys/unistd.h which the gnu stl includes and wx builds with by default clash with each other @@ -2594,10 +2790,15 @@ typedef int (* LINKAGEMODE wxListIterateFunction)(void *current); /* --------------------------------------------------------------------------- */ /* macros that enable wxWidgets apps to be compiled in absence of the */ -/* sytem headers, although some platform specific types are used in the */ +/* system headers, although some platform specific types are used in the */ /* platform specific (implementation) parts of the headers */ /* --------------------------------------------------------------------------- */ +#ifdef __DARWIN__ +#define DECLARE_WXOSX_OPAQUE_CFREF( name ) typedef struct __##name* name##Ref; +#define DECLARE_WXOSX_OPAQUE_CONST_CFREF( name ) typedef const struct __##name* name##Ref; +#endif + #ifdef __WXMAC__ #define WX_OPAQUE_TYPE( name ) struct wxOpaque##name @@ -2618,8 +2819,8 @@ typedef unsigned short WXWORD; typedef WX_OPAQUE_TYPE(PicHandle ) * WXHMETAFILE ; #if wxOSX_USE_CARBON -typedef WX_OPAQUE_TYPE(ControlRef ) * WXWidget ; -typedef WX_OPAQUE_TYPE(WindowRef) * WXWindow ; +typedef struct OpaqueControlRef* WXWidget ; +typedef struct OpaqueWindowPtr* WXWindow ; typedef struct __AGLPixelFormatRec *WXGLPixelFormat; typedef struct __AGLContextRec *WXGLContext; #endif @@ -2632,10 +2833,7 @@ typedef void* WXDisplay; typedef const void * CFTypeRef; -// typedef const struct __CFString * CFStringRef; - -#define DECLARE_WXOSX_OPAQUE_CFREF( name ) typedef struct __##name* name##Ref; -#define DECLARE_WXOSX_OPAQUE_CONST_CFREF( name ) typedef const struct __##name* name##Ref; +/* typedef const struct __CFString * CFStringRef; */ DECLARE_WXOSX_OPAQUE_CONST_CFREF( CFString ) typedef struct __CFString * CFMutableStringRef; @@ -2709,7 +2907,7 @@ typedef unsigned int NSUInteger; */ /* NOTE: This ought to work with other compilers too, but I'm being cautious */ -#if (defined(__GNUC__) && defined(__APPLE__)) || defined(__MWERKS__) +#if (defined(__GNUC__) && defined(__APPLE__)) /* It's desirable to have type safety for Objective-C(++) code as it does at least catch typos of method names among other things. However, it is not possible to declare an Objective-C class from plain old C or C++ @@ -2729,7 +2927,7 @@ typedef klass *WX_##klass typedef struct klass *WX_##klass #endif /* defined(__OBJC__) */ -#else /* not Apple's GNU or CodeWarrior */ +#else /* not Apple's gcc */ #warning "Objective-C types will not be checked by the compiler." /* NOTE: typedef struct objc_object *id; */ /* IOW, we're declaring these using the id type without using that name, */ @@ -2739,7 +2937,7 @@ typedef struct klass *WX_##klass #define DECLARE_WXCOCOA_OBJC_CLASS(klass) \ typedef struct objc_object *WX_##klass -#endif /* (defined(__GNUC__) && defined(__APPLE__)) || defined(__MWERKS__) */ +#endif /* (defined(__GNUC__) && defined(__APPLE__)) */ DECLARE_WXCOCOA_OBJC_CLASS(NSApplication); DECLARE_WXCOCOA_OBJC_CLASS(NSBitmapImageRep); @@ -2798,75 +2996,52 @@ typedef WX_NSOpenGLContext WXGLContext; DECLARE_WXCOCOA_OBJC_CLASS(UIWindow); DECLARE_WXCOCOA_OBJC_CLASS(UIView); DECLARE_WXCOCOA_OBJC_CLASS(UIFont); +DECLARE_WXCOCOA_OBJC_CLASS(UIImage); +DECLARE_WXCOCOA_OBJC_CLASS(UIEvent); +DECLARE_WXCOCOA_OBJC_CLASS(NSSet); +DECLARE_WXCOCOA_OBJC_CLASS(EAGLContext); typedef WX_UIWindow WXWindow; typedef WX_UIView WXWidget; +typedef WX_EAGLContext WXGLContext; +typedef WX_NSString* WXGLPixelFormat; #endif -#endif // __WXMAC__ - -#if defined(__WXPALMOS__) - -typedef void * WXHWND; -typedef void * WXHANDLE; -typedef void * WXHICON; -typedef void * WXHFONT; -typedef void * WXHMENU; -typedef void * WXHPEN; -typedef void * WXHBRUSH; -typedef void * WXHPALETTE; -typedef void * WXHCURSOR; -typedef void * WXHRGN; -typedef void * WXHACCEL; -typedef void * WXHINSTANCE; -typedef void * WXHBITMAP; -typedef void * WXHIMAGELIST; -typedef void * WXHGLOBAL; -typedef void * WXHDC; -typedef unsigned int WXUINT; -typedef unsigned long WXDWORD; -typedef unsigned short WXWORD; - -typedef unsigned long WXCOLORREF; -typedef struct tagMSG WXMSG; - -typedef WXHWND WXWINHANDLE; /* WinHandle of PalmOS */ -typedef WXWINHANDLE WXWidget; - -typedef void * WXFORMPTR; -typedef void * WXEVENTPTR; -typedef void * WXRECTANGLEPTR; - -#endif /* __WXPALMOS__ */ - +#endif /* __WXMAC__ */ /* ABX: check __WIN32__ instead of __WXMSW__ for the same MSWBase in any Win32 port */ #if defined(__WIN32__) -/* the keywords needed for WinMain() declaration */ -#ifndef WXFAR -# define WXFAR -#endif - /* Stand-ins for Windows types to avoid #including all of windows.h */ -typedef void * WXHWND; -typedef void * WXHANDLE; -typedef void * WXHICON; -typedef void * WXHFONT; -typedef void * WXHMENU; -typedef void * WXHPEN; -typedef void * WXHBRUSH; -typedef void * WXHPALETTE; -typedef void * WXHCURSOR; -typedef void * WXHRGN; -typedef void * WXRECTPTR; -typedef void * WXHACCEL; -typedef void WXFAR * WXHINSTANCE; -typedef void * WXHBITMAP; -typedef void * WXHIMAGELIST; -typedef void * WXHGLOBAL; -typedef void * WXHDC; + +#ifndef NO_STRICT + #define WX_MSW_DECLARE_HANDLE(type) typedef struct type##__ * WX##type +#else + #define WX_MSW_DECLARE_HANDLE(type) typedef void * WX##type +#endif + +typedef void* WXHANDLE; +WX_MSW_DECLARE_HANDLE(HWND); +WX_MSW_DECLARE_HANDLE(HICON); +WX_MSW_DECLARE_HANDLE(HFONT); +WX_MSW_DECLARE_HANDLE(HMENU); +WX_MSW_DECLARE_HANDLE(HPEN); +WX_MSW_DECLARE_HANDLE(HBRUSH); +WX_MSW_DECLARE_HANDLE(HPALETTE); +WX_MSW_DECLARE_HANDLE(HCURSOR); +WX_MSW_DECLARE_HANDLE(HRGN); +WX_MSW_DECLARE_HANDLE(RECTPTR); +WX_MSW_DECLARE_HANDLE(HACCEL); +WX_MSW_DECLARE_HANDLE(HINSTANCE); +WX_MSW_DECLARE_HANDLE(HBITMAP); +WX_MSW_DECLARE_HANDLE(HIMAGELIST); +WX_MSW_DECLARE_HANDLE(HGLOBAL); +WX_MSW_DECLARE_HANDLE(HDC); +typedef WXHINSTANCE WXHMODULE; + +#undef WX_MSW_DECLARE_HANDLE + typedef unsigned int WXUINT; typedef unsigned long WXDWORD; typedef unsigned short WXWORD; @@ -2882,7 +3057,9 @@ typedef void * WXDRAWITEMSTRUCT; typedef void * WXMEASUREITEMSTRUCT; typedef void * WXLPCREATESTRUCT; +#ifdef __WXMSW__ typedef WXHWND WXWidget; +#endif #ifdef __WIN64__ typedef unsigned __int64 WXWPARAM; @@ -2921,6 +3098,8 @@ typedef unsigned long WXHPALETTE; typedef unsigned long WXHCURSOR; typedef unsigned long WXHRGN; typedef unsigned long WXHACCEL; +typedef unsigned long WXHINSTANCE; +typedef unsigned long WXHMODULE; typedef unsigned long WXHBITMAP; typedef unsigned long WXHDC; typedef unsigned int WXUINT; @@ -3040,53 +3219,45 @@ typedef long WXPixel; /* safety catch in src/motif/colour.cpp */ #ifdef __WXGTK__ /* Stand-ins for GLIB types */ -typedef char gchar; -typedef signed char gint8; -typedef int gint; -typedef unsigned guint; -typedef unsigned long gulong; -typedef void* gpointer; typedef struct _GSList GSList; /* Stand-ins for GDK types */ typedef struct _GdkColor GdkColor; -typedef struct _GdkColormap GdkColormap; -typedef struct _GdkFont GdkFont; -typedef struct _GdkGC GdkGC; -typedef struct _GdkVisual GdkVisual; - -#ifdef __WXGTK20__ -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; +#if defined(__WXGTK20__) + typedef struct _GdkAtom* GdkAtom; +#else + typedef unsigned long GdkAtom; +#endif + +#if !defined(__WXGTK3__) + typedef struct _GdkColormap GdkColormap; + typedef struct _GdkFont GdkFont; + typedef struct _GdkGC GdkGC; + typedef struct _GdkRegion GdkRegion; +#endif + +#if defined(__WXGTK3__) + typedef struct _GdkWindow GdkWindow; +#elif defined(__WXGTK20__) + typedef struct _GdkDrawable GdkWindow; + typedef struct _GdkDrawable GdkPixmap; +#else + typedef struct _GdkWindow GdkWindow; + typedef struct _GdkWindow GdkBitmap; + typedef struct _GdkWindow GdkPixmap; #endif /* Stand-ins for GTK types */ typedef struct _GtkWidget GtkWidget; typedef struct _GtkRcStyle GtkRcStyle; typedef struct _GtkAdjustment GtkAdjustment; -typedef struct _GtkList GtkList; typedef struct _GtkToolbar GtkToolbar; -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 _GtkTextBuffer GtkTextBuffer; typedef struct _GtkRange GtkRange; @@ -3114,10 +3285,6 @@ typedef struct _PangoLayout PangoLayout; typedef struct _PangoFontDescription PangoFontDescription; #endif -#ifdef __WXMGL__ -typedef struct window_t *WXWidget; -#endif /* MGL */ - #ifdef __WXDFB__ /* DirectFB doesn't have the concept of non-TLW window, so use something arbitrary */ @@ -3127,9 +3294,11 @@ typedef const void* WXWidget; /* This is required because of clashing macros in windows.h, which may be */ /* included before or after wxWidgets classes, and therefore must be */ /* disabled here before any significant wxWidgets headers are included. */ -#ifdef __WXMSW__ +#ifdef __cplusplus +#ifdef __WINDOWS__ #include "wx/msw/winundef.h" -#endif /* __WXMSW__ */ +#endif /* __WINDOWS__ */ +#endif /* __cplusplus */ /* include the feature test macros */ @@ -3158,7 +3327,7 @@ typedef const void* WXWidget; private: \ classname& operator=(const classname&) -// deprecated variants _not_ requiring a semicolon after them +/* deprecated variants _not_ requiring a semicolon after them */ #define DECLARE_NO_COPY_CLASS(classname) \ wxDECLARE_NO_COPY_CLASS(classname); #define DECLARE_NO_COPY_TEMPLATE_CLASS(classname, arg) \ @@ -3177,7 +3346,7 @@ typedef const void* WXWidget; "/manifestdependency:\"type='win32' \ name='Microsoft.Windows.Common-Controls' \ version='6.0.0.0' \ - processorArchitecture='"cpu"' \ + processorArchitecture='" cpu "' \ publicKeyToken='6595b64144ccf1df' \ language='*'\""