]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/defs.h
Decided that not doing methods for keyboard commands was not worth the
[wxWidgets.git] / include / wx / defs.h
index 871a569ed3bc132fd2826256df1e80e406998ef0..af15a048aab31b65788c54be68489dc17c910686 100644 (file)
 
 #include "wx/platform.h"
 
+/*  RN - only double-check the environment when building in C++ 
+    Shouldn't configure pass the environment to all sub-libs too? */
+#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(__WXMOTIF__) && !defined(__WXMSW__) && !defined(__WXGTK__) && \
+#   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(__WXCOCOA__) && \
       !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
+#       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
+#endif /*__cplusplus*/
 
 #ifndef __WXWINDOWS__
     #define __WXWINDOWS__ 1
@@ -262,8 +266,8 @@ typedef int wxWindowID;
     #define wxEXPLICIT
 #endif /*  HAVE_EXPLICIT/!HAVE_EXPLICIT */
 
-/*  check for static/const/reinterpret_cast<>() */
-#ifndef HAVE_STATIC_CAST
+/* check for static/const_cast<>() (we don't use the other ones for now) */
+#ifndef HAVE_CXX_CASTS
     #if defined(__VISUALC__) && (__VISUALC__ >= 1100)
         /*  VC++ 6.0 and 5.0 have C++ casts (what about earlier versions?) */
         #define HAVE_CXX_CASTS
@@ -272,14 +276,23 @@ typedef int wxWindowID;
         /*  GCC 2.95 has C++ casts, what about earlier versions? */
         #define HAVE_CXX_CASTS
     #endif
-#endif /*  HAVE_STATIC_CAST */
+#endif /*  !HAVE_CXX_CASTS */
 
 #ifdef HAVE_CXX_CASTS
     #ifndef HAVE_CONST_CAST
         #define HAVE_CONST_CAST
     #endif
+    #ifndef HAVE_STATIC_CAST
+        #define HAVE_STATIC_CAST
+    #endif
 #endif /*  HAVE_CXX_CASTS */
 
+#ifdef HAVE_CONST_CAST
+    #define wxConstCast(obj, className) const_cast<className *>(obj)
+#else
+    #define wxConstCast(obj, className) ((className *)(obj))
+#endif
+
 #ifndef HAVE_STD_WSTRING
     #if defined(__VISUALC__) && (__VISUALC__ >= 1100)
         /*  VC++ 6.0 and 5.0 have std::wstring (what about earlier versions?) */
@@ -618,15 +631,6 @@ typedef wxUint16 wxWord;
 
 /*  32bit */
 #ifdef __WINDOWS__
-    #if defined(__WIN64__)
-        /*  you may remove this #error and try to compile the library, please */
-        /*  report the results to wx-dev@lists.wxwindows.org if you do! */
-        #error "wxWindows hasn't been tested under Win64, continue at your own risk"
-
-        /*  the same definitions as for Win32 _should_ work here as only */
-        /*  sizeof(void *) changes, but it must be tested first */
-    #endif /*  __WIN64__ */
-
     /*  Win64 uses LLP64 model and so ints and longs have the same size as in */
     /*  Win32 */
     #if defined(__WIN32__)
@@ -639,13 +643,25 @@ typedef wxUint16 wxWord;
             #define SIZEOF_LONG 4
             #define SIZEOF_WCHAR_T 2
 
-            #define wxSIZE_T_IS_UINT
+            /*
+               under Win64 sizeof(size_t) == 8 and so it is neither unsigned
+               int nor unsigned long!
+             */
+            #ifdef __WIN64__
+                #define SIZEOF_SIZE_T 8
+
+                #undef wxSIZE_T_IS_UINT
+            #else /* Win32 */
+                #define SIZEOF_SIZE_T 4
+
+                #define wxSIZE_T_IS_UINT
+            #endif
             #undef wxSIZE_T_IS_ULONG
 
             #ifdef __WIN64__
-                #define SIZEOF_INT_P 8
+                #define SIZEOF_VOID_P 8
             #else /*  Win32 */
-                #define SIZEOF_INT_P 4
+                #define SIZEOF_VOID_P 4
             #endif /*  Win64/32 */
         #endif /*  !defined(SIZEOF_INT) */
     #else
@@ -674,10 +690,14 @@ typedef wxUint16 wxWord;
             #error "Unknown sizeof(int) value, what are you compiling for?"
         #endif
     #else /*  !defined(SIZEOF_INT) */
-        /*  assume sizeof(int) == 4 -- what else can we do? */
+        /*  assume default 32bit machine -- what else can we do? */
         wxCOMPILE_TIME_ASSERT( sizeof(int) == 4, IntMustBeExactly4Bytes);
+        wxCOMPILE_TIME_ASSERT( sizeof(size_t) == 4, SizeTMustBeExactly4Bytes);
+        wxCOMPILE_TIME_ASSERT( sizeof(void *) == 4, PtrMustBeExactly4Bytes);
 
         #define SIZEOF_INT 4
+        #define SIZEOF_SIZE_T 4
+        #define SIZEOF_VOID_P 4
 
         typedef int wxInt32;
         typedef unsigned int wxUint32;
@@ -700,6 +720,22 @@ typedef wxUint16 wxWord;
 
 typedef wxUint32 wxDword;
 
+/*
+   Define an integral type big enough to contain all of long, size_t and void *.
+ */
+#if SIZEOF_LONG >= SIZEOF_VOID_P && SIZEOF_LONG >= SIZEOF_SIZE_T
+    /* normal case */
+    typedef unsigned long wxUIntPtr;
+#elif SIZEOF_SIZE_T >= SIZEOF_VOID_P
+    /* Win64 case */
+    typedef size_t wxUIntPtr;
+#else
+    /*
+       This should never happen for the current architectures but if you're
+       using one where it does, please contact wx-dev@lists.wxwindows.org.
+     */
+    #error "Pointers can't be stored inside integer types."
+#endif
 
 /*  64 bit */
 
@@ -726,7 +762,7 @@ typedef wxUint32 wxDword;
     #define wxLongLong_t __int64
     #define wxLongLongSuffix i64
     #define wxLongLongFmtSpec _T("Ld")
-#elif (defined(__WATCOMC__) && defined(__WIN32__))
+#elif (defined(__WATCOMC__) && (defined(__WIN32__) || defined(__DOS__)))
       #define wxLongLong_t __int64
       #define wxLongLongSuffix i64
       #define wxLongLongFmtSpec _T("Ld")
@@ -1085,8 +1121,16 @@ enum wxBorder
 /*  Windows, it won't normally get the dialog navigation key events) */
 #define wxWANTS_CHARS           0x00040000
 
-/*  Make window retained (mostly Motif, I think) -- obsolete (VZ)? */
+/*  Make window retained (Motif only, see src/generic/scrolwing.cpp)
+ *  This is non-zero only under wxMotif, to avoid a clash with wxPOPUP_WINDOW
+ *  on other platforms
+ */
+
+#ifdef __WXMOTIF__
 #define wxRETAINED              0x00020000
+#else
+#define wxRETAINED              0x00000000
+#endif
 #define wxBACKINGSTORE          wxRETAINED
 
 /*  set this flag to create a special popup window: it will be always shown on */
@@ -1414,7 +1458,7 @@ enum
 /*  id for a separator line in the menu (invalid for normal item) */
 enum
 {
-    wxID_SEPARATOR = -1
+    wxID_SEPARATOR = -2
 };
 
 /*  Standard menu IDs */
@@ -1950,7 +1994,8 @@ 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 */
+    wxPRINT_MODE_PRINTER = 3,   /*  Send to printer */
+    wxPRINT_MODE_STREAM =  4    /*  Send postscript data into a stream */
 };
 
 /*  ---------------------------------------------------------------------------- */
@@ -2012,22 +2057,22 @@ typedef unsigned short  WXWORD;
 typedef void*       WXWidget;
 typedef void*       WXWindow;
 typedef void*       WXDisplay;
-/*
-typedef WindowPtr       WXHWND;
-typedef Handle          WXHANDLE;
-typedef CIconHandle     WXHICON;
+
+/* typedef WindowPtr       WXHWND; */
+/* typedef Handle          WXHANDLE; */
+/* typedef CIconHandle     WXHICON; */
 /* typedef unsigned long   WXHFONT; */
-typedef MenuHandle      WXHMENU;
+/* typedef MenuHandle      WXHMENU; */
 /* typedef unsigned long   WXHPEN; */
 /* typedef unsigned long   WXHBRUSH; */
 /* typedef unsigned long   WXHPALETTE; */
-typedef CursHandle      WXHCURSOR;
-typedef RgnHandle       WXHRGN;
+/* typedef CursHandle      WXHCURSOR; */
+/* typedef RgnHandle       WXHRGN; */
 /* typedef unsigned long   WXHACCEL; */
 /* typedef unsigned long   WXHINSTANCE; */
 /* typedef unsigned long   WXHIMAGELIST; */
 /* typedef unsigned long   WXHGLOBAL; */
-typedef GrafPtr         WXHDC;
+/* typedef GrafPtr         WXHDC; */
 /* typedef unsigned int    WXWPARAM; */
 /* typedef long            WXLPARAM; */
 /* typedef void *          WXRGNDATA; */
@@ -2037,11 +2082,11 @@ typedef GrafPtr         WXHDC;
 /* typedef void *          WXDRAWITEMSTRUCT; */
 /* typedef void *          WXMEASUREITEMSTRUCT; */
 /* typedef void *          WXLPCREATESTRUCT; */
-typedef int (*WXFARPROC)();
+/* typedef int (*WXFARPROC)(); */
+
+/* typedef WindowPtr       WXWindow; */
+/* typedef ControlHandle   WXWidget; */
 
-typedef WindowPtr       WXWindow;
-typedef ControlHandle   WXWidget;
-*/
 #endif
 
 #ifdef __WXCOCOA__
@@ -2105,7 +2150,7 @@ DECLARE_WXCOCOA_OBJC_CLASS(NSView);
 typedef WX_NSView WXWidget; /*  wxWindows BASE definition */
 #endif /*  __WXCOCOA__ */
 
-#if defined(__WXMSW__) || defined(__WXPM__)
+#ifdef __WXMSW__
 
 /*  the keywords needed for WinMain() declaration */
 #ifdef __WIN16__
@@ -2120,23 +2165,23 @@ typedef WX_NSView WXWidget; /*  wxWindows BASE definition */
 #  endif
 #endif /*  Win16/32 */
 
-/*  Stand-ins for Windows types or OS/2, to avoid #including all of windows.h or os2.h */
-typedef unsigned long   WXHWND;
-typedef unsigned long   WXHANDLE;
-typedef unsigned long   WXHICON;
-typedef unsigned long   WXHFONT;
-typedef unsigned long   WXHMENU;
-typedef unsigned long   WXHPEN;
-typedef unsigned long   WXHBRUSH;
-typedef unsigned long   WXHPALETTE;
-typedef unsigned long   WXHCURSOR;
-typedef unsigned long   WXHRGN;
-typedef unsigned long   WXHACCEL;
+/*  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 *          WXHACCEL;
 typedef void WXFAR  *   WXHINSTANCE;
-typedef unsigned long   WXHBITMAP;
-typedef unsigned long   WXHIMAGELIST;
-typedef unsigned long   WXHGLOBAL;
-typedef unsigned long   WXHDC;
+typedef void *          WXHBITMAP;
+typedef void *          WXHIMAGELIST;
+typedef void *          WXHGLOBAL;
+typedef void *          WXHDC;
 typedef unsigned int    WXUINT;
 typedef unsigned long   WXDWORD;
 typedef unsigned short  WXWORD;
@@ -2144,9 +2189,9 @@ typedef unsigned short  WXWORD;
 typedef unsigned long   WXCOLORREF;
 typedef void *          WXRGNDATA;
 typedef void *          WXMSG;
-typedef unsigned long   WXHCONV;
-typedef unsigned long   WXHKEY;
-typedef unsigned long   WXHTREEITEM;
+typedef void *          WXHCONV;
+typedef void *          WXHKEY;
+typedef void *          WXHTREEITEM;
 
 typedef void *          WXDRAWITEMSTRUCT;
 typedef void *          WXMEASUREITEMSTRUCT;
@@ -2154,12 +2199,15 @@ typedef void *          WXLPCREATESTRUCT;
 
 typedef WXHWND          WXWidget;
 
-#endif /*  MSW or OS2 */
-
-
-#ifdef __WXMSW__
+#ifdef __WIN64__
+typedef unsigned __int64    WXWPARAM;
+typedef __int64            WXLPARAM;
+typedef __int64            WXLRESULT;
+#else
 typedef unsigned int    WXWPARAM;
 typedef long            WXLPARAM;
+typedef long            WXLRESULT;
+#endif
 
 #if !defined(__WIN32__) || defined(__GNUWIN32__) || defined(__WXMICROWIN__)
 typedef int             (*WXFARPROC)();
@@ -2170,6 +2218,35 @@ typedef int             (__stdcall *WXFARPROC)();
 
 
 #if defined(__WXPM__) || defined(__EMX__)
+#ifdef __WXPM__
+/*  Stand-ins for OS/2 types, to avoid #including all of os2.h */
+typedef unsigned long   WXHWND;
+typedef unsigned long   WXHANDLE;
+typedef unsigned long   WXHICON;
+typedef unsigned long   WXHFONT;
+typedef unsigned long   WXHMENU;
+typedef unsigned long   WXHPEN;
+typedef unsigned long   WXHBRUSH;
+typedef unsigned long   WXHPALETTE;
+typedef unsigned long   WXHCURSOR;
+typedef unsigned long   WXHRGN;
+typedef unsigned long   WXHACCEL;
+typedef unsigned long   WXHBITMAP;
+typedef unsigned long   WXHDC;
+typedef unsigned int    WXUINT;
+typedef unsigned long   WXDWORD;
+typedef unsigned short  WXWORD;
+
+typedef unsigned long   WXCOLORREF;
+typedef void *          WXMSG;
+typedef unsigned long   WXHTREEITEM;
+
+typedef void *          WXDRAWITEMSTRUCT;
+typedef void *          WXMEASUREITEMSTRUCT;
+typedef void *          WXLPCREATESTRUCT;
+
+typedef WXHWND          WXWidget;
+#endif
 #ifdef __EMX__
 /* Need a well-known type for WXFARPROC
    below. MPARAM is typedef'ed too late. */
@@ -2238,7 +2315,7 @@ typedef struct tagLOGPALETTE
     /*  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
-#ifdef __EMX__
+#if defined(__EMX__) && !defined(_System)
 #define _System
 #endif
 typedef WXRESULT (_System *WXFARPROC)(WXHWND, WXMSGID, WXWPARAM, WXLPARAM);