]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/defs.h
derive wxConfig classes from wxObject and add wxRTTI macros to them (patch 1587607)
[wxWidgets.git] / include / wx / defs.h
index 64fcabb53496da9639de4aafaed8941b695e3a2b..e9ffe12880b5b347258f2372b7c08179a23ec10c 100644 (file)
@@ -1,13 +1,13 @@
-/**
-*  Name:        wx/defs.h
-*  Purpose:     Declarations/definitions common to all wx source files
-*  Author:      Julian Smart and others
-*  Modified by: Ryan Norton (Converted to C)
-*  Created:     01/02/97
-*  RCS-ID:      $Id$
-*  Copyright:   (c) Julian Smart
-*  Licence:     wxWindows licence
-*/
+/*
+ *  Name:        wx/defs.h
+ *  Purpose:     Declarations/definitions common to all wx source files
+ *  Author:      Julian Smart and others
+ *  Modified by: Ryan Norton (Converted to C)
+ *  Created:     01/02/97
+ *  RCS-ID:      $Id$
+ *  Copyright:   (c) Julian Smart
+ *  Licence:     wxWindows licence
+ */
 
 /* THIS IS A C FILE, DON'T USE C++ FEATURES (IN PARTICULAR COMMENTS) IN IT */
 
@@ -35,6 +35,7 @@
          !defined(__WXCOCOA__) && \
          !defined(__X__)       && \
          !defined(__WXMGL__)   && \
+         !defined(__WXDFB__)   && \
          !defined(__WXX11__)   && \
           wxUSE_GUI
 #       ifdef __UNIX__
@@ -58,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 */
     /* is buggy, and occurs for code that does actually get executed */
 #   if !defined __WXDEBUG__ && __VISUALC__ <= 1100
 #       pragma warning(disable:4702)    /* unreachable code */
+#   endif
+    /* The VC++ 5.0 warning 'C4003: not enough actual parameters for macro'
+     * is incompatible with the wxWidgets headers since it is given when
+     * parameters are empty but not missing. */
+#   if __VISUALC__ <= 1100
+#       pragma warning(disable:4003)    /* not enough actual parameters for macro */
 #   endif
 
     /*
@@ -368,7 +372,7 @@ typedef int wxWindowID;
         /*  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, 1)
+          && 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
@@ -539,28 +543,6 @@ typedef int wxWindowID;
 /*  size of statically declared array */
 #define WXSIZEOF(array)   (sizeof(array)/sizeof(array[0]))
 
-/*  helper macros to concatenate two tokens together */
-#define wxCONCAT_HELPER(text, line) text ## line
-#define wxCONCAT(text, line)        wxCONCAT_HELPER(text, line)
-
-/*  helper macros to be able to define unique/anonymous objects: this works by */
-/*  appending the current line number to the given identifier to reduce the */
-/*  probability of the conflict (it may still happen if this is used in the */
-/*  headers, hence you should avoid doing it or provide unique prefixes then) */
-#if defined(__VISUALC__) && (__VISUALC__ >= 1300)
-    /*
-       __LINE__ handling is completely broken in VC++ when using "Edit and
-       Continue" (/ZI option) and results in preprocessor errors if we use it
-       inside the macros. Luckily VC7 has another standard macro which can be
-       used like this and is even better than __LINE__ because it is globally
-       unique.
-     */
-#   define wxCONCAT_LINE(text)         wxCONCAT(text, __COUNTER__)
-#else /* normal compilers */
-#   define wxCONCAT_LINE(text)         wxCONCAT(text, __LINE__)
-#endif
-#define wxMAKE_UNIQUE_NAME(text)    wxCONCAT_LINE(text)
-
 /*  symbolic constant used by all Find()-like functions returning positive */
 /*  integer on success as failure indicator */
 #define wxNOT_FOUND       (-1)
@@ -685,9 +667,6 @@ enum {  wxDefaultCoord = -1 };
 /*  practice) */
 
 /*  8bit */
-#ifndef SIZEOF_CHAR
-    #define SIZEOF_CHAR 1
-#endif
 typedef signed char wxInt8;
 typedef unsigned char wxUint8;
 typedef wxUint8 wxByte;
@@ -923,18 +902,17 @@ inline void *wxUIntToPtr(wxUIntPtr p)
 /*  we will need to define this */
 #undef wxLongLongIsLong
 
-/*  first check for generic cases which are long on 64bit machine and "long */
-/*  long", then check for specific compilers */
-#if defined(SIZEOF_LONG) && (SIZEOF_LONG == 8)
-    #define wxLongLong_t long
-    #define wxLongLongSuffix l
-    #define wxLongLongFmtSpec _T("l")
-    #define wxLongLongIsLong
-#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")
@@ -954,14 +932,6 @@ inline void *wxUIntToPtr(wxUIntPtr p)
     #define wxLongLong_t long long
     #define wxLongLongSuffix ll
     #define wxLongLongFmtSpec _T("I64")
-#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(__MWERKS__)
     #if __option(longlong)
         #define wxLongLong_t long long
@@ -971,8 +941,25 @@ 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
+    #define wxLongLongFmtSpec _T("l")
+    #define wxLongLongIsLong
 #endif
 
 
@@ -984,7 +971,7 @@ inline void *wxUIntToPtr(wxUIntPtr p)
         #define wxULongLong_t unsigned wxLongLong_t
     #endif
 
-    /*  these macros allow to definea 64 bit constants in a portable way */
+    /*  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))
 
@@ -994,7 +981,7 @@ inline void *wxUIntToPtr(wxUIntPtr p)
     #define wxHAS_INT64 1
 
 #elif wxUSE_LONGLONG
-    /*  these macros allow to definea 64 bit constants in a portable way */
+    /*  these macros allow to define 64 bit constants in a portable way */
     #define wxLL(x) wxLongLong(x)
     #define wxULL(x) wxULongLong(x)
 
@@ -1284,20 +1271,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 */
@@ -1560,60 +1545,6 @@ enum wxBorder
 #define wxSP_ARROW_KEYS       0x1000
 #define wxSP_WRAP             0x2000
 
-/*
- * wxBookCtrl flags (common for wxNotebook, wxListbook, wxChoicebook, wxTreebook)
- */
-
-#define wxBK_DEFAULT          0x0000
-#define wxBK_TOP              0x0010
-#define wxBK_BOTTOM           0x0020
-#define wxBK_LEFT             0x0040
-#define wxBK_RIGHT            0x0080
-#define wxBK_ALIGN_MASK       ( wxBK_TOP | wxBK_BOTTOM | wxBK_LEFT | wxBK_RIGHT )
-
-/*
- * wxNotebook flags
- */
-#if WXWIN_COMPATIBILITY_2_6
-/* Use common book wxBK_* flags for describing alignment */
-#define wxNB_DEFAULT          wxBK_DEFAULT
-#define wxNB_TOP              wxBK_TOP
-#define wxNB_BOTTOM           wxBK_BOTTOM
-#define wxNB_LEFT             wxBK_LEFT
-#define wxNB_RIGHT            wxBK_RIGHT
-#endif
-
-#define wxNB_FIXEDWIDTH       0x0100
-#define wxNB_MULTILINE        0x0200
-#define wxNB_NOPAGETHEME      0x0400
-#define wxNB_FLAT             0x0800
-
-/*
- * wxListbook flags
- */
-#if WXWIN_COMPATIBILITY_2_6
-/* Use common book wxBK_* flags for describing alignment */
-#define wxLB_DEFAULT          wxBK_DEFAULT
-#define wxLB_TOP              wxBK_TOP
-#define wxLB_BOTTOM           wxBK_BOTTOM
-#define wxLB_LEFT             wxBK_LEFT
-#define wxLB_RIGHT            wxBK_RIGHT
-#define wxLB_ALIGN_MASK       wxBK_ALIGN_MASK
-#endif
-
-/*
- * wxChoicebook flags
- */
-#if WXWIN_COMPATIBILITY_2_6
-/* Use common book wxBK_* flags for describing alignment */
-#define wxCHB_DEFAULT          wxBK_DEFAULT
-#define wxCHB_TOP              wxBK_TOP
-#define wxCHB_BOTTOM           wxBK_BOTTOM
-#define wxCHB_LEFT             wxBK_LEFT
-#define wxCHB_RIGHT            wxBK_RIGHT
-#define wxCHB_ALIGN_MASK       wxBK_ALIGN_MASK
-#endif
-
 /*
  * wxTabCtrl flags
  */
@@ -1623,8 +1554,8 @@ 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
@@ -1649,18 +1580,6 @@ enum wxBorder
 #define wxLI_HORIZONTAL         wxHORIZONTAL
 #define wxLI_VERTICAL           wxVERTICAL
 
-/*
- * wxProgressDialog flags
- */
-#define wxPD_CAN_ABORT          0x0001
-#define wxPD_APP_MODAL          0x0002
-#define wxPD_AUTO_HIDE          0x0004
-#define wxPD_ELAPSED_TIME       0x0008
-#define wxPD_ESTIMATED_TIME     0x0010
-#define wxPD_SMOOTH             0x0020
-#define wxPD_REMAINING_TIME     0x0040
-#define wxPD_CAN_SKIP           0x0080
-
 
 /*
  * extended dialog specifiers. these values are stored in a different
@@ -1752,7 +1671,8 @@ enum
     wxID_CLOSE_ALL,
     wxID_PREFERENCES,
 
-    wxID_CUT = 5030,
+    wxID_EDIT = 5030,
+    wxID_CUT,
     wxID_COPY,
     wxID_PASTE,
     wxID_CLEAR,
@@ -1773,7 +1693,8 @@ enum
     wxID_VIEW_SORTSIZE,
     wxID_VIEW_SORTTYPE,
 
-    wxID_FILE1 = 5050,
+    wxID_FILE = 5050,
+    wxID_FILE1,
     wxID_FILE2,
     wxID_FILE3,
     wxID_FILE4,
@@ -1964,12 +1885,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
 {
@@ -2729,15 +2644,12 @@ typedef unsigned long   HGLOBAL;
 /*  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 */
-/*  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))
-#define GetGValue(rgb) ((BYTE)(((WORD)(rgb)) >> 8))
-#define GetRValue(rgb) ((BYTE)(rgb))
+#define GetRValue(rgb) ((unsigned char)((rgb) >> 16))
+#define GetGValue(rgb) ((unsigned char)(((unsigned short)(rgb)) >> 8))
+#define GetBValue(rgb) ((unsigned char)(rgb))
 #define PALETTEINDEX(i) ((COLORREF)(0x01000000 | (DWORD)(WORD)(i)))
 #define PALETTERGB(r,g,b) (0x02000000 | OS2RGB(r,g,b))
 /*  OS2's RGB/RGB2 is backwards from this */
@@ -2792,6 +2704,7 @@ typedef void*           WXFontType; /* either a XmFontList or XmRenderTable */
 typedef void*           WXString;
 
 typedef unsigned long   Atom;  /* this might fail on a few architectures */
+typedef long            WXPixel; /* safety catch in src/motif/colour.cpp */
 
 #endif /*  Motif */
 
@@ -2856,16 +2769,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)
@@ -2885,6 +2788,12 @@ typedef struct _PangoFontDescription PangoFontDescription;
 typedef struct window_t *WXWidget;
 #endif /*  MGL */
 
+#ifdef __WXDFB__
+/* DirectFB doesn't have the concept of non-TLW window, so use
+   something arbitrary */
+typedef const void* WXWidget;
+#endif /*  DFB */
+
 /*  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. */
@@ -2919,6 +2828,10 @@ typedef struct window_t *WXWidget;
 #endif
   /*  __WXMSW__ */
 
+
+/*  include the feature test macros */
+#include "wx/features.h"
+
 /*  --------------------------------------------------------------------------- */
 /*  macro to define a class without copy ctor nor assignment operator */
 /*  --------------------------------------------------------------------------- */