]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/defs.h
disable clearing event tables by default, only do it if wxUSE_MEMORY_TRACING is used...
[wxWidgets.git] / include / wx / defs.h
index 759d9325873b27e8783fa413b17aee4e0e2ce56b..d5fc6c3c56fb3770e8cb801460736984ce4a6ba7 100644 (file)
@@ -59,9 +59,6 @@
     #define __WXBASE__
 #endif
 
-/*  include the feature test macros */
-#include "wx/features.h"
-
 /*  suppress some Visual C++ warnings */
 #ifdef __VISUALC__
     /*  the only "real" warning here is 4244 but there are just too many of them */
@@ -272,6 +269,8 @@ typedef int wxWindowID;
         #define HAVE_EXPLICIT
     #elif defined(__DIGITALMARS__)
         #define HAVE_EXPLICIT
+    #elif defined(__WATCOMC__)
+        #define HAVE_EXPLICIT
     #endif
 #endif /*  !HAVE_EXPLICIT */
 
@@ -437,6 +436,12 @@ typedef int wxWindowID;
     #endif /* va_copy/!va_copy */
 #endif /* wxVaCopy */
 
+#ifndef HAVE_VARIADIC_MACROS
+    #if wxCHECK_WATCOM_VERSION(1,2)
+        #define HAVE_VARIADIC_MACROS
+    #endif
+#endif /* HAVE_VARIADIC_MACROS */
+
 
 /*  ---------------------------------------------------------------------------- */
 /*  portable calling conventions macros */
@@ -494,25 +499,20 @@ typedef int wxWindowID;
 /*  ---------------------------------------------------------------------------- */
 
 /*  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
+#ifndef ATTRIBUTE_PRINTF
+#   if defined(__GNUC__) && !wxUSE_UNICODE
+#       define ATTRIBUTE_PRINTF(m, n) __attribute__ ((__format__ (__printf__, m, n)))
+#   else
+#       define ATTRIBUTE_PRINTF(m, n)
+#   endif
+
+#   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 /* !defined(ATTRIBUTE_PRINTF) */
+
 
 /*  Macro to issue warning when using deprecated functions with gcc3 or MSVC7: */
 #if wxCHECK_GCC_VERSION(3, 1)
@@ -550,6 +550,60 @@ typedef int wxWindowID;
 /*  integer on success as failure indicator */
 #define wxNOT_FOUND       (-1)
 
+/*  ---------------------------------------------------------------------------- */
+/*  macros dealing with comparison operators */
+/*  ---------------------------------------------------------------------------- */
+
+/*
+    Expands into m(op, args...) for each op in the set { ==, !=, <, <=, >, >= }.
+ */
+#define wxFOR_ALL_COMPARISONS(m) \
+    m(==) m(!=) m(>=) m(<=) m(>) m(<)
+
+#define wxFOR_ALL_COMPARISONS_1(m, x) \
+    m(==,x) m(!=,x) m(>=,x) m(<=,x) m(>,x) m(<,x)
+
+#define wxFOR_ALL_COMPARISONS_2(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(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)
+
+/*
+    This is only used with wxDEFINE_COMPARISON_REV: it passes both the normal
+    and the reversed comparison operators to the macro.
+ */
+#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,>)
+
+
+#define wxDEFINE_COMPARISON(op, T1, T2, cmp) \
+    inline bool operator op(T1 x, T2 y) { return cmp(x, y, op); }
+
+#define wxDEFINE_COMPARISON_REV(op, T1, T2, cmp, oprev) \
+    inline bool operator op(T2 y, T1 x) { return cmp(x, y, oprev); }
+
+/*
+    Define all 6 comparison operators (==, !=, <, <=, >, >=) for the given
+    types in the specified order. The implementation is provided by the cmp
+    macro. Normally wxDEFINE_ALL_COMPARISONS should be used as comparison
+    operators are usually symmetric.
+ */
+#define wxDEFINE_COMPARISONS(T1, T2, cmp) \
+    wxFOR_ALL_COMPARISONS_3(wxDEFINE_COMPARISON, T1, T2, cmp)
+
+/*
+    This macro allows to define all 12 comparison operators (6 operators for
+    both orders of arguments) for the given types using the provided "cmp"
+    macro to implement the actual comparison: the macro is called with the 2
+    arguments names, the first of type T1 and the second of type T2, and the
+    comparison operator being implemented.
+ */
+#define wxDEFINE_ALL_COMPARISONS(T1, T2, cmp) \
+    wxFOR_ALL_COMPARISONS_3(wxDEFINE_COMPARISON, T1, T2, cmp) \
+    wxFOR_ALL_COMPARISONS_3_REV(wxDEFINE_COMPARISON_REV, T1, T2, cmp)
+
 /*  ---------------------------------------------------------------------------- */
 /*  macros to avoid compiler warnings */
 /*  ---------------------------------------------------------------------------- */
@@ -658,18 +712,6 @@ typedef int wxCoord;
 
 enum {  wxDefaultCoord = -1 };
 
-/*  round-to-nearest (used in scaling) */
-#ifdef __cplusplus
-inline wxCoord wxCoordRound(const float& f)
-{
-    return (f > 0) ? (wxCoord)(f + 0.5) : (f < 0) ? (wxCoord)(f - 0.5) : 0;
-}
-inline wxCoord wxCoordRound(const double& f)
-{
-    return (f > 0) ? (wxCoord)(f + 0.5) : (f < 0) ? (wxCoord)(f - 0.5) : 0;
-}
-#endif
-
 /*  ---------------------------------------------------------------------------- */
 /*  define fixed length types */
 /*  ---------------------------------------------------------------------------- */
@@ -682,9 +724,6 @@ inline wxCoord wxCoordRound(const double& f)
 /*  practice) */
 
 /*  8bit */
-#ifndef SIZEOF_CHAR
-    #define SIZEOF_CHAR 1
-#endif
 typedef signed char wxInt8;
 typedef unsigned char wxUint8;
 typedef wxUint8 wxByte;
@@ -716,7 +755,7 @@ typedef wxUint16 wxWord;
   |short      | 16    16    16    16    16 |
   |int        | 32    64    32    32    16 |
   |long       | 64    64    32    32    32 |
-  |long long  |             64             |
+  |long long  | 64    64    64    --    -- |
   |void *     | 64    64    64    32    32 |
   +-----------+----------------------------+
 
@@ -839,8 +878,33 @@ typedef wxUint16 wxWord;
     #endif
 #endif /*  Win/!Win */
 
+/* also define C99-like sized MIN/MAX constants */
+#define wxINT8_MIN CHAR_MIN
+#define wxINT8_MAX CHAR_MAX
+
+#define wxINT16_MIN SHRT_MIN
+#define wxINT16_MAX SHRT_MAX
+
+#if SIZEOF_INT == 4
+    #define wxINT32_MIN INT_MIN
+    #define wxINT32_MAX INT_MAX
+#elif SIZEOF_LONG == 4
+    #define wxINT32_MIN LONG_MIN
+    #define wxINT32_MAX LONG_MAX
+#else
+    #error "Unknown 32 bit type"
+#endif
+
 typedef wxUint32 wxDword;
 
+#ifdef LLONG_MAX
+    #define wxINT64_MAX LLONG_MAX
+    #define wxINT64_MIN LLONG_MIN
+#else
+    #define wxINT64_MAX wxLL(9223372036854775807)
+    #define wxINT64_MIN wxLL(-9223372036854775807-1)
+#endif
+
 /*
    Define an integral type big enough to contain all of long, size_t and void *.
  */
@@ -920,20 +984,17 @@ inline void *wxUIntToPtr(wxUIntPtr p)
 /*  we will need to define this */
 #undef wxLongLongIsLong
 
-/*  first check for compilers which have the real long long */
-#if (defined(SIZEOF_LONG_LONG) && SIZEOF_LONG_LONG >= 8)  || \
-        defined(__GNUC__) || \
-        defined(__CYGWIN__) || \
-        defined(__WXMICROWIN__) || \
-        (defined(__DJGPP__) && __DJGPP__ >= 2)
-    #define wxLongLong_t long long
-    #define wxLongLongSuffix ll
-    #define wxLongLongFmtSpec _T("ll")
-#elif defined(__WXPALMOS__)
-    #define wxLongLong_t int64_t
-    #define wxLongLongSuffix ll
-    #define wxLongLongFmtSpec _T("ll")
-#elif (defined(__VISUALC__) && defined(__WIN32__))
+/*
+   First check for specific compilers which have known 64 bit integer types,
+   this avoids clashes with SIZEOF_LONG[_LONG] being defined incorrectly for
+   e.g. MSVC builds (Python.h defines it as 8 even for MSVC).
+
+   Also notice that we check for "long long" before checking for 64 bit long as
+   we still want to use "long long" and not "long" for wxLongLong_t on 64 bit
+   architectures to be able to pass wxLongLong_t to the standard functions
+   prototyped as taking "long long" such as strtoll().
+ */
+#if (defined(__VISUALC__) && defined(__WIN32__))
     #define wxLongLong_t __int64
     #define wxLongLongSuffix i64
     #define wxLongLongFmtSpec _T("I64")
@@ -962,8 +1023,20 @@ inline void *wxUIntToPtr(wxUIntPtr p)
         #error "The 64 bit integer support in CodeWarrior has been disabled."
         #error "See the documentation on the 'longlong' pragma."
     #endif
+#elif defined(__WXPALMOS__)
+    #define wxLongLong_t int64_t
+    #define wxLongLongSuffix ll
+    #define wxLongLongFmtSpec _T("ll")
 #elif defined(__VISAGECPP__) && __IBMCPP__ >= 400
     #define wxLongLong_t long long
+#elif (defined(SIZEOF_LONG_LONG) && SIZEOF_LONG_LONG >= 8)  || \
+        defined(__GNUC__) || \
+        defined(__CYGWIN__) || \
+        defined(__WXMICROWIN__) || \
+        (defined(__DJGPP__) && __DJGPP__ >= 2)
+    #define wxLongLong_t long long
+    #define wxLongLongSuffix ll
+    #define wxLongLongFmtSpec _T("ll")
 #elif defined(SIZEOF_LONG) && (SIZEOF_LONG == 8)
     #define wxLongLong_t long
     #define wxLongLongSuffix l
@@ -1280,20 +1353,18 @@ enum wxAlignment
 
 enum wxStretch
 {
+    /* for compatibility only, default now, don't use explicitly any more */
+#if WXWIN_COMPATIBILITY_2_6
+    wxADJUST_MINSIZE          = 0,
+#endif
+
     wxSTRETCH_NOT             = 0x0000,
     wxSHRINK                  = 0x1000,
     wxGROW                    = 0x2000,
     wxEXPAND                  = wxGROW,
     wxSHAPED                  = 0x4000,
     wxFIXED_MINSIZE           = 0x8000,
-    wxTILE                    = 0xc000,
-
-    /* for compatibility only, default now, don't use explicitly any more */
-#if WXWIN_COMPATIBILITY_2_4
-    wxADJUST_MINSIZE          = 0x00100000
-#else
-    wxADJUST_MINSIZE          = 0
-#endif
+    wxTILE                    = 0xc000
 };
 
 /*  border flags: the values are chosen for backwards compatibility */
@@ -1565,21 +1636,14 @@ enum wxBorder
 #define wxTC_LEFT             0x0020
 #define wxTC_RIGHT            0x0040
 #define wxTC_BOTTOM           0x0080
-#define wxTC_MULTILINE        wxNB_MULTILINE
-#define wxTC_OWNERDRAW        0x0200
+#define wxTC_MULTILINE        0x0200    /* == wxNB_MULTILINE */
+#define wxTC_OWNERDRAW        0x0400
 
 /*
  * wxStatusBar95 flags
  */
 #define wxST_SIZEGRIP         0x0010
 
-/*
- * wxStaticText flags
- */
-#define wxST_NO_AUTORESIZE    0x0001
-#define wxST_DOTS_MIDDLE      0x0002
-#define wxST_DOTS_END         0x0004
-
 /*
  * wxStaticBitmap flags
  */
@@ -1605,6 +1669,8 @@ enum wxBorder
 #define wxNO                    0x00000008
 #define wxYES_NO                (wxYES | wxNO)
 #define wxCANCEL                0x00000010
+#define wxAPPLY                 0x00000020
+#define wxCLOSE                 0x00000040
 
 #define wxYES_DEFAULT           0x00000000  /*  has no effect (default) */
 #define wxNO_DEFAULT            0x00000080
@@ -1637,6 +1703,16 @@ enum wxBackgroundStyle
   wxBG_STYLE_CUSTOM
 };
 
+/*
+ * Key types used by (old style) lists and hashes.
+ */
+enum wxKeyType
+{
+    wxKEY_NONE,
+    wxKEY_INTEGER,
+    wxKEY_STRING
+};
+
 /*  ---------------------------------------------------------------------------- */
 /*  standard IDs */
 /*  ---------------------------------------------------------------------------- */
@@ -1786,6 +1862,7 @@ enum wxItemKind
     wxITEM_NORMAL,
     wxITEM_CHECK,
     wxITEM_RADIO,
+    wxITEM_DROPDOWN,
     wxITEM_MAX
 };
 
@@ -1896,12 +1973,6 @@ enum
     wxCAP_BUTT
 };
 
-#if WXWIN_COMPATIBILITY_2_4
-    #define IS_HATCH(s)    ((s)>=wxFIRST_HATCH && (s)<=wxLAST_HATCH)
-#else
-    /* use wxBrush::IsHatch() instead thought wxMotif still uses it in src/motif/dcclient.cpp */
-#endif
-
 /*  Logical ops */
 typedef enum
 {
@@ -2778,6 +2849,7 @@ typedef struct _GtkItemFactory    GtkItemFactory;
 typedef struct _GtkSelectionData  GtkSelectionData;
 typedef struct _GtkTextBuffer     GtkTextBuffer;
 typedef struct _GtkRange          GtkRange;
+typedef struct _GtkCellRenderer   GtkCellRenderer;
 
 typedef GtkWidget *WXWidget;
 
@@ -2786,16 +2858,6 @@ typedef GtkWidget *WXWidget;
 #define GTK_CLASS_TYPE(klass) ((klass)->type)
 #endif
 
-#ifdef __WXGTK20__
-#define G_DISABLE_DEPRECATED
-#define PANGO_DISABLE_DEPRECATED
-#define GDK_PIXBUF_DISABLE_DEPRECATED
-#ifndef __VMS
-/* GtkCombo is not defined on VMS if this is defined */
-# define GTK_DISABLE_DEPRECATED
-#endif
-#endif
-
 #endif /*  __WXGTK__ */
 
 #if defined(__WXGTK20__) || (defined(__WXX11__) && wxUSE_UNICODE)
@@ -2855,6 +2917,10 @@ typedef const void* WXWidget;
 #endif
   /*  __WXMSW__ */
 
+
+/*  include the feature test macros */
+#include "wx/features.h"
+
 /*  --------------------------------------------------------------------------- */
 /*  macro to define a class without copy ctor nor assignment operator */
 /*  --------------------------------------------------------------------------- */