]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/defs.h
only define globals when wxUSE_BASE to avoid duplicate definitions in wxBase and...
[wxWidgets.git] / include / wx / defs.h
index 56edd148398d2765c55690562ce6fb7ff4d57487..9f088c38327d4cc6fe830d84d40a28b29cc68efd 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 */
 /*  ---------------------------------------------------------------------------- */
 /*  Make sure the environment is set correctly */
 #   if defined(__WXMSW__) && defined(__X__)
 #       error "Target can't be both X and Windows"
+#   elif defined(__WXMSW__) && defined(__PALMOS__)
+#       error "Target can't be both PalmOS and Windows"
 #   elif !defined(__WXMOTIF__) && \
          !defined(__WXMSW__)   && \
+         !defined(__WXPALMOS__)&& \
          !defined(__WXGTK__)   && \
          !defined(__WXPM__)    && \
          !defined(__WXMAC__)   && \
@@ -66,7 +65,7 @@
 
 /*  suppress some Visual C++ warnings */
 #ifdef __VISUALC__
-    /*  the only "real" warning here is 4244 but there areust too many of them */
+    /*  the only "real" warning here is 4244 but there are just too many of them */
     /*  in our code... one day someone should go and fix them but until then... */
 #   pragma warning(disable:4201)    /*  nonstandard extension used: nameless struct/union */
 #   pragma warning(disable:4244)    /*  conversion from double to float */
 #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 */
@@ -323,6 +316,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 */
 /*  ---------------------------------------------------------------------------- */
@@ -439,7 +476,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 */
@@ -633,14 +681,25 @@ typedef wxUint16 wxWord;
  */
 
 /*  32bit */
-#ifdef __WINDOWS__
+#ifdef __PALMOS__
+    typedef int wxInt32;
+    typedef unsigned int wxUint32;
+    #define SIZEOF_INT 4
+    #define SIZEOF_LONG 4
+    #define SIZEOF_WCHAR_T 2
+    #define SIZEOF_SIZE_T 4
+    #define wxSIZE_T_IS_UINT
+    #define SIZEOF_VOID_P 4
+    #define SIZEOF_SIZE_T 4
+#elif defined(__WINDOWS__)
     /*  Win64 uses LLP64 model and so ints and longs have the same size as in */
     /*  Win32 */
     #if defined(__WIN32__)
         typedef int wxInt32;
         typedef unsigned int wxUint32;
 
-        /*  conside that if SIZEOF_INT is defined, all the other ones are too */
+        /* Assume that if SIZEOF_INT is defined that all the other ones except
+           SIZEOF_SIZE_T, are too.  See next #if below.  */
         #ifndef SIZEOF_INT
             #define SIZEOF_INT 4
             #define SIZEOF_LONG 4
@@ -667,6 +726,19 @@ typedef wxUint16 wxWord;
                 #define SIZEOF_VOID_P 4
             #endif /*  Win64/32 */
         #endif /*  !defined(SIZEOF_INT) */
+
+        /*
+          If Python.h was included first, it defines all of the SIZEOF's above
+          except for SIZEOF_SIZE_T, so we need to do it here to avoid
+          triggering the #error in the ssize_t typedefs below...
+        */
+        #ifndef SIZEOF_SIZE_T
+            #ifdef __WIN64__
+                #define SIZEOF_SIZE_T 8
+            #else /* Win32 */
+                #define SIZEOF_SIZE_T 4
+            #endif
+        #endif
     #else
         #error "Unsupported Windows version"
     #endif
@@ -740,6 +812,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 */
@@ -806,6 +913,25 @@ typedef wxUint32 wxDword;
 #endif
 
 
+/* Make sure ssize_t is defined (a signed type the same size as size_t) */
+/* HAVE_SSIZE_T should be defined for compiliers that already have it */
+#ifdef __MINGW32__
+    #include <sys/types.h>
+    #if defined(_SSIZE_T_) && !defined(HAVE_SSIZE_T)
+        #define HAVE_SSIZE_T
+    #endif
+#endif
+#ifndef HAVE_SSIZE_T
+    #if SIZEOF_SIZE_T == 4
+        typedef wxInt32 ssize_t;
+    #elif SIZEOF_SIZE_T == 8
+        typedef wxInt64 ssize_t
+    #else
+        #error "error defining ssize_t, size_t is not 4 or 8 bytes"
+    #endif
+#endif
+
+
 /*  base floating point types */
 /*  wxFloat32: 32 bit IEEE float ( 1 sign, 8 exponent bits, 23 fraction bits */
 /*  wxFloat64: 64 bit IEEE float ( 1 sign, 11 exponent bits, 52 fraction bits */
@@ -988,12 +1114,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 */
 /*  ---------------------------------------------------------------------------- */
@@ -1065,7 +1185,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
@@ -1216,7 +1336,7 @@ enum wxBorder
 #define wxDIALOG_EX_CONTEXTHELP 0x00000004
 
 /*  Create a window which is attachable to another top level window */
-#define wxFRAME_DRAWER          0x0020  
+#define wxFRAME_DRAWER          0x0020
 
 /*
  * MDI parent frame style flags
@@ -1411,10 +1531,9 @@ enum wxBorder
 #define wxPD_AUTO_HIDE          0x0004
 #define wxPD_ELAPSED_TIME       0x0008
 #define wxPD_ESTIMATED_TIME     0x0010
-/*  wxGA_SMOOTH = 0x0020 may also be used with wxProgressDialog */
-/*  NO!!! This is wxDIALOG_MODAL and will cause the progress dialog to */
-/*  be modal. No progress will then be made at all. */
+#define wxPD_SMOOTH             0x0020
 #define wxPD_REMAINING_TIME     0x0040
+#define wxPD_CAN_SKIP           0x0080
 
 /*
  * wxDirDialog styles
@@ -1701,12 +1820,15 @@ enum
     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,
-    wxCROSSDIAG_HATCH,
-    wxFDIAGONAL_HATCH,
-    wxCROSS_HATCH,
+
+    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,
@@ -1717,28 +1839,31 @@ enum
     wxCAP_BUTT
 };
 
-/*  VZ: why doesn't it start with "wx"? FIXME */
-#define IS_HATCH(s)    ((s)>=wxBDIAGONAL_HATCH && (s)<=wxVERTICAL_HATCH)
+#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
 {
-  wxCLEAR,        wxROP_BLACK = wxCLEAR,             wxBLIT_BLACKNESS = wxCLEAR,        /*  0 */
-  wxXOR,          wxROP_XORPEN = wxXOR,              wxBLIT_SRCINVERT = wxXOR,          /*  src XOR dst */
-  wxINVERT,       wxROP_NOT = wxINVERT,              wxBLIT_DSTINVERT = wxINVERT,       /*  NOT dst */
-  wxOR_REVERSE,   wxROP_MERGEPENNOT = wxOR_REVERSE,  wxBLIT_00DD0228 = wxOR_REVERSE,    /*  src OR (NOT dst) */
-  wxAND_REVERSE,  wxROP_MASKPENNOT = wxAND_REVERSE,  wxBLIT_SRCERASE = wxAND_REVERSE,   /*  src AND (NOT dst) */
-  wxCOPY,         wxROP_COPYPEN = wxCOPY,            wxBLIT_SRCCOPY = wxCOPY,           /*  src */
-  wxAND,          wxROP_MASKPEN = wxAND,             wxBLIT_SRCAND = wxAND,             /*  src AND dst */
-  wxAND_INVERT,   wxROP_MASKNOTPEN = wxAND_INVERT,   wxBLIT_00220326 = wxAND_INVERT,    /*  (NOT src) AND dst */
-  wxNO_OP,        wxROP_NOP = wxNO_OP,               wxBLIT_00AA0029 = wxNO_OP,         /*  dst */
-  wxNOR,          wxROP_NOTMERGEPEN = wxNOR,         wxBLIT_NOTSRCERASE = wxNOR,        /*  (NOT src) AND (NOT dst) */
-  wxEQUIV,        wxROP_NOTXORPEN = wxEQUIV,         wxBLIT_00990066 = wxEQUIV,         /*  (NOT src) XOR dst */
-  wxSRC_INVERT,   wxROP_NOTCOPYPEN = wxSRC_INVERT,   wxBLIT_NOTSCRCOPY = wxSRC_INVERT,  /*  (NOT src) */
-  wxOR_INVERT,    wxROP_MERGENOTPEN = wxOR_INVERT,   wxBLIT_MERGEPAINT = wxOR_INVERT,   /*  (NOT src) OR dst */
-  wxNAND,         wxROP_NOTMASKPEN = wxNAND,         wxBLIT_007700E6 = wxNAND,          /*  (NOT src) OR (NOT dst) */
-  wxOR,           wxROP_MERGEPEN = wxOR,             wxBLIT_SRCPAINT = wxOR,            /*  src OR dst */
-  wxSET,          wxROP_WHITE = wxSET,               wxBLIT_WHITENESS = wxSET           /*  1 */
+    wxCLEAR,        wxROP_BLACK = wxCLEAR,             wxBLIT_BLACKNESS = wxCLEAR,        /*  0 */
+    wxXOR,          wxROP_XORPEN = wxXOR,              wxBLIT_SRCINVERT = wxXOR,          /*  src XOR dst */
+    wxINVERT,       wxROP_NOT = wxINVERT,              wxBLIT_DSTINVERT = wxINVERT,       /*  NOT dst */
+    wxOR_REVERSE,   wxROP_MERGEPENNOT = wxOR_REVERSE,  wxBLIT_00DD0228 = wxOR_REVERSE,    /*  src OR (NOT dst) */
+    wxAND_REVERSE,  wxROP_MASKPENNOT = wxAND_REVERSE,  wxBLIT_SRCERASE = wxAND_REVERSE,   /*  src AND (NOT dst) */
+    wxCOPY,         wxROP_COPYPEN = wxCOPY,            wxBLIT_SRCCOPY = wxCOPY,           /*  src */
+    wxAND,          wxROP_MASKPEN = wxAND,             wxBLIT_SRCAND = wxAND,             /*  src AND dst */
+    wxAND_INVERT,   wxROP_MASKNOTPEN = wxAND_INVERT,   wxBLIT_00220326 = wxAND_INVERT,    /*  (NOT src) AND dst */
+    wxNO_OP,        wxROP_NOP = wxNO_OP,               wxBLIT_00AA0029 = wxNO_OP,         /*  dst */
+    wxNOR,          wxROP_NOTMERGEPEN = wxNOR,         wxBLIT_NOTSRCERASE = wxNOR,        /*  (NOT src) AND (NOT dst) */
+    wxEQUIV,        wxROP_NOTXORPEN = wxEQUIV,         wxBLIT_00990066 = wxEQUIV,         /*  (NOT src) XOR dst */
+    wxSRC_INVERT,   wxROP_NOTCOPYPEN = wxSRC_INVERT,   wxBLIT_NOTSCRCOPY = wxSRC_INVERT,  /*  (NOT src) */
+    wxOR_INVERT,    wxROP_MERGENOTPEN = wxOR_INVERT,   wxBLIT_MERGEPAINT = wxOR_INVERT,   /*  (NOT src) OR dst */
+    wxNAND,         wxROP_NOTMASKPEN = wxNAND,         wxBLIT_007700E6 = wxNAND,          /*  (NOT src) OR (NOT dst) */
+    wxOR,           wxROP_MERGEPEN = wxOR,             wxBLIT_SRCPAINT = wxOR,            /*  src OR dst */
+    wxSET,          wxROP_WHITE = wxSET,               wxBLIT_WHITENESS = wxSET           /*  1 */
 } form_ops_t;
 
 /*  Flood styles */
@@ -1800,6 +1925,9 @@ enum wxKeyCode
     WXK_SPACE   =    32,
     WXK_DELETE  =    127,
 
+    /* These 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,
@@ -2105,8 +2233,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;
@@ -2182,16 +2310,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);
@@ -2203,7 +2338,7 @@ DECLARE_WXCOCOA_OBJC_CLASS(NSView);
 typedef WX_NSView WXWidget; /*  wxWidgets BASE definition */
 #endif /*  __WXCOCOA__ */
 
-#ifdef __WXMSW__
+#if defined(__WXMSW__) || defined(__WXPALMOS__)
 
 /*  the keywords needed for WinMain() declaration */
 #ifndef WXFAR
@@ -2446,6 +2581,7 @@ typedef struct _GtkNotebookPage   GtkNotebookPage;
 typedef struct _GtkAccelGroup     GtkAccelGroup;
 typedef struct _GtkItemFactory    GtkItemFactory;
 typedef struct _GtkSelectionData  GtkSelectionData;
+typedef struct _GtkTextBuffer     GtkTextBuffer;
 
 typedef GtkWidget *WXWidget;