/**
-* Name: defs.h
-* Purpose: Declarations/definitions common to all wx source files
-* Author: Julian Smart and others
+* Name: 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)
-* Licence: wxWindows licence
+* Created: 01/02/97
+* RCS-ID: $Id$
+* Copyright: (c)
+* Licence: wxWindows licence
*/
/* THIS IS A C FILE, DON'T USE C++ FEATURES (IN PARTICULAR COMMENTS) IN IT */
#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
#endif /* __BORLANDC__ */
/* ---------------------------------------------------------------------------- */
-/* wxWindows version and compatibility defines */
+/* wxWidgets version and compatibility defines */
/* ---------------------------------------------------------------------------- */
#include "wx/version.h"
/* compiler defects workarounds */
/* ---------------------------------------------------------------------------- */
-#if defined(__VISUALC__) && !defined(WIN32) && !defined(__WXWINCE__)
- /* VC1.5 does not have LPTSTR type */
-#define LPTSTR LPSTR
-#define LPCTSTR LPCSTR
-#elif defined(__BORLANDC__) && !defined(__WIN32__)
-#ifndef LPTSTR
-#define LPTSTR LPSTR
-#endif
-#ifndef LPCTSTR
-#define LPCTSTR LPSTR
-#endif
-#endif
-
-
/*
Digital Unix C++ compiler only defines this symbol for .cxx and .hxx files,
so define it ourselves (newer versions do it for all files, though, and
/* general, but there are places where you can use them to advantage */
/* without totally breaking ports that cannot use them. If you do, then */
/* wrap it in this guard, but such cases should still be relatively rare. */
-#ifndef __WIN16__
- #define wxUSE_NESTED_CLASSES 1
-#else
- #define wxUSE_NESTED_CLASSES 0
-#endif
+#define wxUSE_NESTED_CLASSES 1
/* check for explicit keyword support */
#ifndef HAVE_EXPLICIT
#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
/* 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_STATIC_CAST
+ #define wx_static_cast(t, x) static_cast<t>(x)
+#else
+ #define wx_static_cast(t, x) ((t)(x))
+#endif
+
+#ifdef HAVE_CONST_CAST
+ #define wx_const_cast(t, x) const_cast<t>(x)
+#else
+ #define wx_const_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)
+
#ifndef HAVE_STD_WSTRING
#if defined(__VISUALC__) && (__VISUALC__ >= 1100)
/* VC++ 6.0 and 5.0 have std::wstring (what about earlier versions?) */
/* NULL declaration: it must be defined as 0 for C++ programs (in particular, */
/* it must not be defined as "(void *)0" which is standard for C but completely */
/* breaks C++ code) */
+#ifndef __HANDHELDPC__
#include <stddef.h>
+#endif
/* delete pointer if it is not NULL and NULL it afterwards */
/* (checking that it's !NULL before passing it to delete is just a */
};
/* ---------------------------------------------------------------------------- */
-/* standard wxWindows types */
+/* standard wxWidgets types */
/* ---------------------------------------------------------------------------- */
/* the type for screen and DC coordinates */
/* to ensure compatibility with 2.0, we must use long */
#define wxCoord long
#else /* !wxUSE_COMPATIBLE_COORD_TYPES */
- #ifdef __WIN16__
- /* under Win16, int is too small, so use long to allow for bigger */
- /* virtual canvases */
- typedef long wxCoord;
- #else /* !Win16 */
/* other platforms we support have at least 32bit int - quite enough */
typedef int wxCoord;
- #endif /* Win16/!Win16 */
#endif /* wxUSE_COMPATIBLE_COORD_TYPES/!wxUSE_COMPATIBLE_COORD_TYPES */
/* 16bit */
#ifdef SIZEOF_SHORT
#if SIZEOF_SHORT != 2
- #error "wxWindows assumes sizeof(short) == 2, please fix the code"
+ #error "wxWidgets assumes sizeof(short) == 2, please fix the code"
#endif
#else
#define SIZEOF_SHORT 2
/* 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__)
#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
typedef long wxInt32;
typedef unsigned long wxUint32;
#elif
- /* wxWindows is not ready for 128bit systems yet... */
+ /* wxWidgets is not ready for 128bit systems yet... */
#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;
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.wxwidgets.org.
+ */
+ #error "Pointers can't be stored inside integer types."
+#endif
/* 64 bit */
#define wxLongLongSuffix l
#define wxLongLongFmtSpec _T("l")
#define wxLongLongIsLong
-#elif (defined(__VISUALC__) && defined(__WIN32__))
+#elif (defined(__VISUALC__) && defined(__WIN32__))
#define wxLongLong_t __int64
#define wxLongLongSuffix i64
#define wxLongLongFmtSpec _T("I64")
#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")
-#elif defined(__DIGITALMARS__)
+#elif defined(__DIGITALMARS__)
#define wxLongLong_t __int64
#define wxLongLongSuffix LL
#define wxLongLongFmtSpec _T("ll")
wxGROW = 0x2000,
wxEXPAND = wxGROW,
wxSHAPED = 0x4000,
- wxADJUST_MINSIZE = 0x8000,
- wxTILE = 0xc000
+ 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
};
/* border flags: the values are chosen for backwards compatibility */
/* 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 */
#define wxFRAME_EX_CONTEXTHELP 0x00000004
#define wxDIALOG_EX_CONTEXTHELP 0x00000004
-/*
- * wxFrame/wxDialog style flags
- */
-#define wxSTAY_ON_TOP 0x8000
-#define wxICONIZE 0x4000
-#define wxMINIMIZE wxICONIZE
-#define wxMAXIMIZE 0x2000
-#define wxCLOSE_BOX 0x1000
-
-#define wxSYSTEM_MENU 0x0800
-#define wxMINIMIZE_BOX 0x0400
-#define wxMAXIMIZE_BOX 0x0200
-#define wxTINY_CAPTION_HORIZ 0x0100
-#define wxTINY_CAPTION_VERT 0x0080
-#define wxRESIZE_BORDER 0x0040
-
-#define wxDIALOG_NO_PARENT 0x0001 /* Don't make owned by apps top window */
-#define wxFRAME_NO_TASKBAR 0x0002 /* No taskbar button (MSW only) */
-#define wxFRAME_TOOL_WINDOW 0x0004 /* No taskbar button, no system menu */
-#define wxFRAME_FLOAT_ON_PARENT 0x0008 /* Always above its parent */
-#define wxFRAME_SHAPED 0x0010 /* Create a window that is able to be shaped */
-
-/* deprecated versions defined for compatibility reasons */
-#define wxRESIZE_BOX wxMAXIMIZE_BOX
-#define wxTHICK_FRAME wxRESIZE_BORDER
-
-/* obsolete styles, unused any more */
-#define wxDIALOG_MODAL 0x0020 /* free flag value 0x0020 */
-#define wxDIALOG_MODELESS 0
-#define wxNO_3D 0
-#define wxUSER_COLOURS 0
-
-
/*
* MDI parent frame style flags
* Can overlap with some of the above.
#define wxFRAME_NO_WINDOW_MENU 0x0100
-#define wxDEFAULT_FRAME_STYLE \
- (wxSYSTEM_MENU | wxRESIZE_BORDER | \
- wxMINIMIZE_BOX | wxMAXIMIZE_BOX | wxCLOSE_BOX | \
- wxCAPTION | wxCLIP_CHILDREN)
-
-#define wxDEFAULT_DIALOG_STYLE (wxSYSTEM_MENU | wxCAPTION | wxCLOSE_BOX)
-
/*
* wxExtDialog style flags
*/
/* id for a separator line in the menu (invalid for normal item) */
enum
{
- wxID_SEPARATOR = -1
+ wxID_SEPARATOR = -2
};
/* Standard menu IDs */
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 */
};
/* ---------------------------------------------------------------------------- */
#endif
/* --------------------------------------------------------------------------- */
-/* macros that enable wxWindows apps to be compiled in absence of the */
+/* macros that enable wxWidgets apps to be compiled in absence of the */
/* sytem headers, although some platform specific types are used in the */
/* platform specific (implementation) parts of the headers */
/* --------------------------------------------------------------------------- */
#ifdef __WXMAC__
+#define WX_OPAQUE_TYPE( name ) struct wxOpaque##name
+
typedef unsigned char WXCOLORREF[6];
typedef void* WXHBITMAP;
typedef void* WXHMETAFILE;
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;
-/*
-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; */
/* 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__
#warning "Objective-C types will not be checked by the compiler."
/* NOTE: typedef struct objc_object *id; */
/* IOW, we're declaring these using the id type without using that name, */
-/* since "id" is used extensively not only within wxWindows itself, but */
-/* also in wxWindows application code. The following works fine when */
+/* since "id" is used extensively not only within wxWidgets itself, but */
+/* also in wxWidgets application code. The following works fine when */
/* compiling C(++) code, and works without typesafety for Obj-C(++) code */
#define DECLARE_WXCOCOA_OBJC_CLASS(klass) \
typedef struct objc_object *WX_##klass
DECLARE_WXCOCOA_OBJC_CLASS(NSThread);
DECLARE_WXCOCOA_OBJC_CLASS(NSWindow);
DECLARE_WXCOCOA_OBJC_CLASS(NSView);
-typedef WX_NSView WXWidget; /* wxWindows BASE definition */
+typedef WX_NSView WXWidget; /* wxWidgets BASE definition */
#endif /* __WXCOCOA__ */
-#if defined(__WXMSW__) || defined(__WXPM__)
+#ifdef __WXMSW__
/* the keywords needed for WinMain() declaration */
-#ifdef __WIN16__
-# ifdef __VISUALC__
-# define WXFAR __far
-# else
-# define WXFAR _far
-# endif
-#else /* Win32 */
-# ifndef WXFAR
+#ifndef WXFAR
# define WXFAR
-# endif
-#endif /* Win16/32 */
+#endif
-/* 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;
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;
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)();
#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. */
/* 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);
/* Stand-ins for GTK types */
typedef struct _GtkWidget GtkWidget;
-typedef struct _GtkStyle GtkStyle;
+typedef struct _GtkRcStyle GtkRcStyle;
typedef struct _GtkAdjustment GtkAdjustment;
typedef struct _GtkList GtkList;
typedef struct _GtkToolbar GtkToolbar;
#endif /* MGL */
/* This is required because of clashing macros in windows.h, which may be */
-/* included before or after wxWindows classes, and therefore must be */
-/* disabled here before any significant wxWindows headers are included. */
+/* included before or after wxWidgets classes, and therefore must be */
+/* disabled here before any significant wxWidgets headers are included. */
#ifdef __WXMSW__
#ifdef GetClassInfo
#undef GetClassInfo