]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/defs.h
simplify wxEVT_MENU_OPEN/CLOSE generation
[wxWidgets.git] / include / wx / defs.h
index 44704739c516f40a5d20fbbb0edfe1d1202f156d..87b0f82d3e287cf23480dddf6297fb3d830779a1 100644 (file)
 #       pragma warning(disable:4003)    /* not enough actual parameters for macro */
 #   endif
 
 #       pragma warning(disable:4003)    /* not enough actual parameters for macro */
 #   endif
 
+    /*
+       When compiling with VC++ 7 /Wp64 option we get thousands of warnings for
+       conversion from size_t to int or long. Some precious few of them might
+       be worth looking into but unfortunately it seems infeasible to fix all
+       the other, harmless ones (e.g. inserting static_cast<int>(s.length())
+       everywhere this method is used though we are quite sure that using >4GB
+       strings is a bad idea anyhow) so just disable it globally for now.
+     */
+    #if wxCHECK_VISUALC_VERSION(7)
+        /* conversion from 'size_t' to 'unsigned long', possible loss of data */
+        #pragma warning(disable:4267)
+    #endif /* VC++ 7 or later */
+
     /*
        VC++ 8 gives a warning when using standard functions such as sprintf,
        localtime, ... -- stop this madness, unless the user had already done it
      */
     /*
        VC++ 8 gives a warning when using standard functions such as sprintf,
        localtime, ... -- stop this madness, unless the user had already done it
      */
-    #if __VISUALC__ >= 1400
+    #if wxCHECK_VISUALC_VERSION(8)
         #ifndef _CRT_SECURE_NO_DEPRECATE
             #define _CRT_SECURE_NO_DEPRECATE 1
         #endif
         #ifndef _CRT_SECURE_NO_DEPRECATE
             #define _CRT_SECURE_NO_DEPRECATE 1
         #endif
@@ -439,11 +452,47 @@ typedef short int WXTYPE;
 
 #ifndef HAVE_WOSTREAM
     // Mingw <=3.4 doesn't have std::wostream
 
 #ifndef HAVE_WOSTREAM
     // Mingw <=3.4 doesn't have std::wostream
-    #if !defined(__MINGW32__) || wxCHECK_GCC_VERSION(4,0)
+    #if defined(__MINGW32__) && !wxCHECK_GCC_VERSION(4,0)
+        #define wxNO_WOSTREAM
+    #endif
+
+    // VC++ doesn't have it in the old iostream library
+    #if defined(__VISUALC__) && wxUSE_IOSTREAMH
+        #define wxNO_WOSTREAM
+    #endif
+
+    #ifndef wxNO_WOSTREAM
         #define HAVE_WOSTREAM
     #endif
         #define HAVE_WOSTREAM
     #endif
+
+    #undef wxNO_WOSTREAM
 #endif /* HAVE_WOSTREAM */
 
 #endif /* HAVE_WOSTREAM */
 
+// ----------------------------------------------------------------------------
+// other C++ features
+// ----------------------------------------------------------------------------
+
+#ifndef HAVE_PARTIAL_SPECIALIZATION
+    // be optimistic by default
+    #define HAVE_PARTIAL_SPECIALIZATION
+#endif
+
+#ifdef __VISUALC__
+    #if __VISUALC__ < 1310
+        #undef HAVE_PARTIAL_SPECIALIZATION
+    #endif
+#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
+    #if defined(HAVE_PARTIAL_SPECIALIZATION) && !defined(__BORLANDC__)
+        #define HAVE_TEMPLATE_OVERLOAD_RESOLUTION
+    #endif // __BORLANDC__
+#endif // !defined(HAVE_TEMPLATE_OVERLOAD_RESOLUTION)
+
 /*  ---------------------------------------------------------------------------- */
 /*  portable calling conventions macros */
 /*  ---------------------------------------------------------------------------- */
 /*  ---------------------------------------------------------------------------- */
 /*  portable calling conventions macros */
 /*  ---------------------------------------------------------------------------- */
@@ -934,12 +983,22 @@ typedef wxUint32 wxDword;
 /*
    Define an integral type big enough to contain all of long, size_t and void *.
  */
 /*
    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 */
+#if SIZEOF_SIZE_T >= SIZEOF_VOID_P
+    /*
+       Win64 case: size_t is the only integral type big enough for "void *".
+
+       Notice that wxUIntPtr should be also defined as size_t when building
+       under Win32 with MSVC with /Wp64 option as otherwise any conversion
+       between ints and pointers results in a warning 4311 or 4312, even if it
+       is safe under Win32. Using size_t (declared with __w64) allows to avoid
+       them.
+     */
     typedef size_t wxUIntPtr;
     typedef size_t wxUIntPtr;
+#elif SIZEOF_LONG >= SIZEOF_VOID_P
+    /*
+       Normal case when long is the largest integral type.
+     */
+    typedef unsigned long wxUIntPtr;
 #else
     /*
        This should never happen for the current architectures but if you're
 #else
     /*
        This should never happen for the current architectures but if you're
@@ -1361,7 +1420,10 @@ enum wxOrientation
     wxHORIZONTAL              = 0x0004,
     wxVERTICAL                = 0x0008,
 
     wxHORIZONTAL              = 0x0004,
     wxVERTICAL                = 0x0008,
 
-    wxBOTH                    = wxVERTICAL | wxHORIZONTAL
+    wxBOTH                    = wxVERTICAL | wxHORIZONTAL,
+
+    /*  a mask to extract orientation from the combination of flags */
+    wxORIENTATION_MASK        = wxBOTH
 };
 
 enum wxDirection
 };
 
 enum wxDirection
@@ -1379,7 +1441,10 @@ enum wxDirection
     wxWEST                    = wxLEFT,
     wxEAST                    = wxRIGHT,
 
     wxWEST                    = wxLEFT,
     wxEAST                    = wxRIGHT,
 
-    wxALL                     = (wxUP | wxDOWN | wxRIGHT | wxLEFT)
+    wxALL                     = (wxUP | wxDOWN | wxRIGHT | wxLEFT),
+
+    /*  a mask to extract direction from the combination of flags */
+    wxDIRECTION_MASK           = wxALL
 };
 
 enum wxAlignment
 };
 
 enum wxAlignment
@@ -1401,20 +1466,31 @@ enum wxAlignment
     wxALIGN_MASK              = 0x0f00
 };
 
     wxALIGN_MASK              = 0x0f00
 };
 
-enum wxStretch
+/* misc. flags for wxSizer items */
+enum wxSizerFlagBits
 {
     /* for compatibility only, default now, don't use explicitly any more */
 #if WXWIN_COMPATIBILITY_2_6
 {
     /* for compatibility only, default now, don't use explicitly any more */
 #if WXWIN_COMPATIBILITY_2_6
-    wxADJUST_MINSIZE          = 0,
+    wxADJUST_MINSIZE               = 0,
 #endif
 #endif
+    wxFIXED_MINSIZE                = 0x8000,
+    wxRESERVE_SPACE_EVEN_IF_HIDDEN = 0x0002,
+
+    /*  a mask to extract wxSizerFlagBits from combination of flags */
+    wxSIZER_FLAG_BITS_MASK         = 0x8002
+};
 
 
+enum wxStretch
+{
     wxSTRETCH_NOT             = 0x0000,
     wxSHRINK                  = 0x1000,
     wxGROW                    = 0x2000,
     wxEXPAND                  = wxGROW,
     wxSHAPED                  = 0x4000,
     wxSTRETCH_NOT             = 0x0000,
     wxSHRINK                  = 0x1000,
     wxGROW                    = 0x2000,
     wxEXPAND                  = wxGROW,
     wxSHAPED                  = 0x4000,
-    wxFIXED_MINSIZE           = 0x8000,
-    wxTILE                    = 0xc000
+    wxTILE                    = wxSHAPED | wxFIXED_MINSIZE,
+
+    /*  a mask to extract stretch from the combination of flags */
+    wxSTRETCH_MASK            = 0x7000 /* sans wxTILE */
 };
 
 /*  border flags: the values are chosen for backwards compatibility */
 };
 
 /*  border flags: the values are chosen for backwards compatibility */
@@ -1917,7 +1993,7 @@ enum
 
     /*  IDs used by generic file dialog (13 consecutive starting from this value) */
     wxID_FILEDLGG = 5900,
 
     /*  IDs used by generic file dialog (13 consecutive starting from this value) */
     wxID_FILEDLGG = 5900,
-    
+
     /*  IDs used by generic file ctrl (4 consecutive starting from this value) */
     wxID_FILECTRL = 5950,
 
     /*  IDs used by generic file ctrl (4 consecutive starting from this value) */
     wxID_FILECTRL = 5950,
 
@@ -2023,40 +2099,6 @@ enum
     /*  Also wxNORMAL for normal (non-italic text) */
     wxITALIC,
     wxSLANT,
     /*  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,     /* 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,
-
-    wxJOIN_BEVEL =     120,
-    wxJOIN_MITER,
-    wxJOIN_ROUND,
-
-    wxCAP_ROUND =      130,
-    wxCAP_PROJECTING,
-    wxCAP_BUTT
 };
 
 /*  Logical ops */
 };
 
 /*  Logical ops */
@@ -2583,7 +2625,7 @@ typedef HIShapeRef WXHRGN;
 
 #endif
 
 
 #endif
 
-#if defined( __WXCOCOA__ ) || defined(__WXMAC__) 
+#if defined( __WXCOCOA__ ) || defined(__WXMAC__)
 
 /* Definitions of 32-bit/64-bit types
  * These are typedef'd exactly the same way in newer OS X headers so
 
 /* Definitions of 32-bit/64-bit types
  * These are typedef'd exactly the same way in newer OS X headers so
@@ -2730,6 +2772,17 @@ typedef void *          WXRECTANGLEPTR;
 #    define WXFAR
 #endif
 
 #    define WXFAR
 #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)
+#if wxCHECK_VISUALC_VERSION(7)
+    #define wxW64 __w64
+#else
+    #define wxW64
+#endif
+
 /*  Stand-ins for Windows types to avoid #including all of windows.h */
 typedef void *          WXHWND;
 typedef void *          WXHANDLE;
 /*  Stand-ins for Windows types to avoid #including all of windows.h */
 typedef void *          WXHWND;
 typedef void *          WXHANDLE;
@@ -2766,13 +2819,13 @@ typedef void *          WXLPCREATESTRUCT;
 typedef WXHWND          WXWidget;
 
 #ifdef __WIN64__
 typedef WXHWND          WXWidget;
 
 #ifdef __WIN64__
-typedef unsigned __int64    WXWPARAM;
+typedef unsigned __int64   WXWPARAM;
 typedef __int64            WXLPARAM;
 typedef __int64            WXLRESULT;
 #else
 typedef __int64            WXLPARAM;
 typedef __int64            WXLRESULT;
 #else
-typedef unsigned int    WXWPARAM;
-typedef long            WXLPARAM;
-typedef long            WXLRESULT;
+typedef wxW64 unsigned int WXWPARAM;
+typedef wxW64 long         WXLPARAM;
+typedef wxW64 long         WXLRESULT;
 #endif
 
 #if defined(__GNUWIN32__) || defined(__WXMICROWIN__)
 #endif
 
 #if defined(__GNUWIN32__) || defined(__WXMICROWIN__)