]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/defs.h
fixup
[wxWidgets.git] / include / wx / defs.h
index 6fc8a46f854edc3543450c35cf3197abfefc188d..208c4ad4b3497cec4bd0f71bb279bc3132cc0817 100644 (file)
 #ifndef _WX_DEFS_H_
 #define _WX_DEFS_H_
 
-#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
-#pragma interface "defs.h"
-#endif
-
 /*  ---------------------------------------------------------------------------- */
 /*  compiler and OS identification */
 /*  ---------------------------------------------------------------------------- */
 #endif
 #endif /*  __VISUALC__ */
 
-/*  suppress some Watcom C++ warnings */
-#ifdef __WATCOMC__
-#   pragma warning 849 9            /*  Disable 'virtual function hidden' */
-#   pragma warning 549 9            /*  Disable 'operand contains compiler generated information' */
-#endif /*  __VISUALC__ */
-
 /*  suppress some Salford C++ warnings */
 #ifdef __SALFORDC__
 #   pragma suppress 353             /*  Possible nested comments */
@@ -270,6 +260,9 @@ typedef int wxWindowID;
     #ifndef HAVE_CONST_CAST
         #define HAVE_CONST_CAST
     #endif
+    #ifndef HAVE_REINTERPRET_CAST
+        #define HAVE_REINTERPRET_CAST
+    #endif
     #ifndef HAVE_STATIC_CAST
         #define HAVE_STATIC_CAST
     #endif
@@ -287,6 +280,12 @@ typedef int wxWindowID;
     #define wx_const_cast(t, x) ((t)(x))
 #endif
 
+#ifdef HAVE_REINTERPRET_CAST
+    #define wx_reinterpret_cast(t, x) reinterpret_cast<t>(x)
+#else
+    #define wx_reinterpret_cast(t, x) ((t)(x))
+#endif
+
 /* for consistency with wxStatic/DynamicCast defined in wx/object.h */
 #define wxConstCast(obj, className) wx_const_cast(className *, obj)
 
@@ -314,6 +313,50 @@ typedef int wxWindowID;
     #endif
 #endif
 
+/* provide replacement for C99 va_copy() if the compiler doesn't have it */
+
+/* could be already defined by configure or the user */
+#ifndef wxVaCopy
+    /* if va_copy is a macro or configure detected that we have it, use it */
+    #if defined(va_copy) || defined(HAVE_VA_COPY)
+        #define wxVaCopy va_copy
+    #else /* no va_copy, try to provide a replacement */
+        /*
+           configure tries to determine whether va_list is an array or struct
+           type, but it may not be used under Windows, so deal with a few
+           special cases.
+         */
+
+        #ifdef __WATCOMC__
+            /* Watcom uses array type for va_list except for PPC and Alpha */
+            #if !defined(__PPC__) && !defined(__AXP__)
+                #define VA_LIST_IS_ARRAY
+            #endif
+        #endif /* __WATCOMC__ */
+
+        #if defined(__PPC__) && (defined(_CALL_SYSV) || defined (_WIN32))
+            /*
+                PPC using SysV ABI and NT/PPC are special in that they use an
+                extra level of indirection.
+             */
+            #define VA_LIST_IS_POINTER
+        #endif /* SysV or Win32 on __PPC__ */
+
+        /*
+            note that we use memmove(), not memcpy(), in case anybody tries
+            to do wxVaCopy(ap, ap)
+         */
+        #if defined(VA_LIST_IS_POINTER)
+            #define wxVaCopy(d, s)  memmove(*(d), *(s), sizeof(va_list))
+        #elif defined(VA_LIST_IS_ARRAY)
+            #define wxVaCopy(d, s) memmove((d), (s), sizeof(va_list))
+        #else /* we can only hope that va_lists are simple lvalues */
+            #define wxVaCopy(d, s) ((d) = (s))
+        #endif
+    #endif /* va_copy/!va_copy */
+#endif // wxVaCopy
+
+
 /*  ---------------------------------------------------------------------------- */
 /*  portable calling conventions macros */
 /*  ---------------------------------------------------------------------------- */
@@ -430,7 +473,18 @@ typedef int wxWindowID;
 /*  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) */
-#define wxCONCAT_LINE(text)         wxCONCAT(text, __LINE__)
+#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 */
@@ -731,6 +785,41 @@ typedef wxUint32 wxDword;
     #error "Pointers can't be stored inside integer types."
 #endif
 
+#ifdef __cplusplus
+/* And also define a couple of simple functions to cast pointer to/from it. */
+inline wxUIntPtr wxPtrToUInt(const void *p)
+{
+    /*
+       VC++ 7.1 gives warnings about casts such as below even when they're
+       explicit with /Wp64 option, suppress them as we really know what we're
+       doing here
+     */
+#ifdef __VISUALC__
+    #pragma warning(disable: 4311) /* pointer truncation from '' to '' */
+#endif
+
+    return wx_reinterpret_cast(wxUIntPtr, p);
+
+#ifdef __VISUALC__
+    #pragma warning(default: 4311)
+#endif
+}
+
+inline void *wxUIntToPtr(wxUIntPtr p)
+{
+#ifdef __VISUALC__
+    #pragma warning(disable: 4312) /* conversion to type of greater size */
+#endif
+
+    return wx_reinterpret_cast(void *, p);
+
+#ifdef __VISUALC__
+    #pragma warning(default: 4312)
+#endif
+}
+#endif /*__cplusplus*/
+
+
 /*  64 bit */
 
 /*  NB: we #define and not typedef wxLongLong_t because we want to be able to */
@@ -817,6 +906,24 @@ typedef float wxFloat32;
     typedef double wxDouble;
 #endif
 
+/*
+    Some (non standard) compilers typedef wchar_t as an existing type instead
+    of treating it as a real fundamental type, set wxWCHAR_T_IS_REAL_TYPE to 0
+    for them and to 1 for all the others.
+ */
+#if wxUSE_WCHAR_T
+    /*
+        VC++ typedefs wchar_t as unsigned short by default, that is unless
+        /Za or /Zc:wchar_t option is used in which case _WCHAR_T_DEFINED is
+        defined.
+     */
+#   if defined(__VISUALC__) && !defined(_NATIVE_WCHAR_T_DEFINED)
+#       define wxWCHAR_T_IS_REAL_TYPE 0
+#   else /* compiler having standard-conforming wchar_t */
+#       define wxWCHAR_T_IS_REAL_TYPE 1
+#   endif
+#endif /* wxUSE_WCHAR_T */
+
 /*  ---------------------------------------------------------------------------- */
 /*  byte ordering related definition and macros */
 /*  ---------------------------------------------------------------------------- */
@@ -961,12 +1068,6 @@ typedef float wxFloat32;
     #define wxUINT64_SWAP_ON_BE(val)  (val)
 #endif
 
-/*  Macros to convert from unsigned long to void pointer. */
-/*  High order truncation occurs if the respective type is not large enough. */
-#define WXPTRULONGSLICE (((wxBYTE_ORDER==wxBIG_ENDIAN)&&(sizeof(void*)==8)&&(sizeof(unsigned long)<8))?1:0)
-#define wxPtrToULong(p) (((unsigned long*)(&(p)))[WXPTRULONGSLICE])
-#define wxULongToPtr(p,n) (p=NULL,wxPtrToULong(p)=(unsigned long)(n),p)
-
 /*  ---------------------------------------------------------------------------- */
 /*  Geometric flags */
 /*  ---------------------------------------------------------------------------- */
@@ -1038,7 +1139,7 @@ enum wxStretch
     wxFIXED_MINSIZE           = 0x8000,
     wxTILE                    = 0xc000,
 
-    // for compatibility only, default now, don't use explicitly any more
+    /* for compatibility only, default now, don't use explicitly any more */
 #if WXWIN_COMPATIBILITY_2_4
     wxADJUST_MINSIZE          = 0x00100000
 #else
@@ -1188,6 +1289,9 @@ enum wxBorder
 #define wxFRAME_EX_CONTEXTHELP  0x00000004
 #define wxDIALOG_EX_CONTEXTHELP 0x00000004
 
+/*  Create a window which is attachable to another top level window */
+#define wxFRAME_DRAWER          0x0020
+
 /*
  * MDI parent frame style flags
  * Can overlap with some of the above.
@@ -1318,6 +1422,27 @@ enum wxBorder
 #define wxNB_RIGHT            0x0040
 #define wxNB_BOTTOM           0x0080
 #define wxNB_MULTILINE        0x0100
+#define wxNB_DEFAULT          wxNB_TOP
+
+/*
+ * wxListbook flags
+ */
+#define wxLB_DEFAULT          0x0
+#define wxLB_TOP              0x1
+#define wxLB_BOTTOM           0x2
+#define wxLB_LEFT             0x4
+#define wxLB_RIGHT            0x8
+#define wxLB_ALIGN_MASK       0xf
+
+/*
+ * wxChoicebook flags
+ */
+#define wxCHB_DEFAULT         0x0
+#define wxCHB_TOP             0x1
+#define wxCHB_BOTTOM          0x2
+#define wxCHB_LEFT            0x4
+#define wxCHB_RIGHT           0x8
+#define wxCHB_ALIGN_MASK      0xf
 
 /*
  * wxTabCtrl flags
@@ -1749,7 +1874,10 @@ enum wxKeyCode
     WXK_SPACE   =    32,
     WXK_DELETE  =    127,
 
-    WXK_START   = 300,
+    /* There are by design not compatable with unicode characters.
+       If you want to get a unicode character from a key event, use
+       wxKeyEvent::GetUnicodeKey instead.                           */
+    WXK_START   = 300, 
     WXK_LBUTTON,
     WXK_RBUTTON,
     WXK_CANCEL,
@@ -2054,8 +2182,8 @@ typedef unsigned long   WXDWORD;
 typedef unsigned short  WXWORD;
 
 
-//typedef void*       WXWidget;
-//typedef void*       WXWindow;
+/* typedef void*       WXWidget; */
+/* typedef void*       WXWindow; */
 typedef WX_OPAQUE_TYPE(ControlRef ) * WXWidget ;
 typedef WX_OPAQUE_TYPE(WindowRef) * WXWindow ;
 typedef void*       WXDisplay;
@@ -2131,16 +2259,23 @@ DECLARE_WXCOCOA_OBJC_CLASS(NSBitmapImageRep);
 DECLARE_WXCOCOA_OBJC_CLASS(NSBox);
 DECLARE_WXCOCOA_OBJC_CLASS(NSButton);
 DECLARE_WXCOCOA_OBJC_CLASS(NSColor);
+DECLARE_WXCOCOA_OBJC_CLASS(NSColorPanel);
 DECLARE_WXCOCOA_OBJC_CLASS(NSControl);
+DECLARE_WXCOCOA_OBJC_CLASS(NSCursor);
 DECLARE_WXCOCOA_OBJC_CLASS(NSEvent);
+DECLARE_WXCOCOA_OBJC_CLASS(NSFontPanel);
 DECLARE_WXCOCOA_OBJC_CLASS(NSImage);
 DECLARE_WXCOCOA_OBJC_CLASS(NSLayoutManager);
 DECLARE_WXCOCOA_OBJC_CLASS(NSMenu);
+DECLARE_WXCOCOA_OBJC_CLASS(NSMenuExtra);
 DECLARE_WXCOCOA_OBJC_CLASS(NSMenuItem);
 DECLARE_WXCOCOA_OBJC_CLASS(NSMutableArray);
 DECLARE_WXCOCOA_OBJC_CLASS(NSNotification);
+DECLARE_WXCOCOA_OBJC_CLASS(NSObject);
 DECLARE_WXCOCOA_OBJC_CLASS(NSPanel);
 DECLARE_WXCOCOA_OBJC_CLASS(NSScrollView);
+DECLARE_WXCOCOA_OBJC_CLASS(NSSound);
+DECLARE_WXCOCOA_OBJC_CLASS(NSStatusItem);
 DECLARE_WXCOCOA_OBJC_CLASS(NSTableColumn);
 DECLARE_WXCOCOA_OBJC_CLASS(NSTableView);
 DECLARE_WXCOCOA_OBJC_CLASS(NSTextContainer);