#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(__X__) && \
- !defined(__WXMGL__) && !defined(__WXX11__) && wxUSE_GUI
+ !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
#elif defined(__WATCOMC__) && (__WATCOMC__ >= 1100)
// Watcom 11+ supports bool
#define HAVE_BOOL
+ #elif defined(__DIGITALMARS__)
+ // DigitalMars supports bool
+ #define HAVE_BOOL
#elif defined(__GNUWIN32__) || defined(__MINGW32__) || defined(__CYGWIN__)
// Cygwin supports bool
#define HAVE_BOOL
#elif defined(__VISAGECPP__)
#if __IBMCPP__ < 400
typedef unsigned long bool;
+ #define true ((bool)1)
+ #define false ((bool)0)
#endif
#define HAVE_BOOL
#endif // compilers
// check for explicit keyword support
#ifndef HAVE_EXPLICIT
- #if defined(__VISUALC__) && (__VISUALC__ >= 1200)
- // VC++ 6.0 has explicit (what about the earlier versions?)
+ #if defined(__VISUALC__) && (__VISUALC__ >= 1100)
+ // VC++ 6.0 and 5.0 have explicit (what about the earlier versions?)
+ #define HAVE_EXPLICIT
+ #elif ( defined(__MINGW32__) || defined(__CYGWIN32__) ) \
+ && wxCHECK_GCC_VERSION(2, 95)
+ // GCC 2.95 has explicit, what about earlier versions?
#define HAVE_EXPLICIT
#elif defined(__BORLANDC__) && (__BORLANDC__ >= 0x0520)
// BC++ 4.52 doesn't support explicit, CBuilder 1 does
#elif defined(__MWERKS__) && (__MWERKS__ >= 0x2400)
// Metrowerks CW6 or higher has explicit
#define HAVE_EXPLICIT
+ #elif defined(__DIGITALMARS__)
+ #define HAVE_EXPLICIT
#endif
#endif // !HAVE_EXPLICIT
#define wxEXPLICIT
#endif // HAVE_EXPLICIT/!HAVE_EXPLICIT
+// check for static/const/reinterpret_cast<>()
+#ifndef HAVE_STATIC_CAST
+ #if defined(__VISUALC__) && (__VISUALC__ >= 1100)
+ // VC++ 6.0 and 5.0 have C++ casts (what about the earlier versions?)
+ #define HAVE_CXX_CASTS
+ #elif ( defined(__MINGW32__) || defined(__CYGWIN32__) ) \
+ && wxCHECK_GCC_VERSION(2, 95)
+ // GCC 2.95 has C++ casts, what about earlier versions?
+ #define HAVE_CXX_CASTS
+ #endif
+#endif // HAVE_STATIC_CAST
+
+#ifdef HAVE_CXX_CASTS
+ #ifndef HAVE_CONST_CAST
+ #define HAVE_CONST_CAST
+ #endif
+#endif // HAVE_CXX_CASTS
+
// ----------------------------------------------------------------------------
// portable calling conventions macros
// ----------------------------------------------------------------------------
#define WXEXPORT _Export
#define WXIMPORT _Export
#endif
-#elif defined(__WXMAC__)
+#elif defined(__WXMAC__) || defined(__WXCOCOA__)
#ifdef __MWERKS__
#define WXEXPORT __declspec(export)
#define WXIMPORT __declspec(import)
// precision, so use the IEEE types for storage , and this for calculations
typedef float wxFloat32 ;
-#if defined( __WXMAC__ ) && defined (__MWERKS__)
+#if (defined( __WXMAC__ ) || defined(__WXCOCOA__)) && defined (__MWERKS__)
typedef short double wxFloat64;
#else
typedef double wxFloat64;
#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
// ----------------------------------------------------------------------------
// parent is destroyed before the child
#define wxWS_EX_TRANSIENT 0x00000004
+// don't paint the window background, we'll assume it will
+// be done by a theming engine. This is not yet used but could
+// possibly be made to work in the future, at least on Windows
+#define wxWS_EX_THEMED_BACKGROUND 0x00000008
+
// Use this style to add a context-sensitive help to the window (currently for
// Win32 only and it doesn't work if wxMINIMIZE_BOX or wxMAXIMIZE_BOX are used)
#define wxFRAME_EX_CONTEXTHELP 0x00000004
#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
typedef void* WXHWND ;
typedef void* WXEVENTREF ;
typedef void* WXEVENTHANDLERREF ;
-typedef void* WXEVENTHANDLERCALLREF ;
+typedef void* WXEVENTHANDLERCALLREF ;
typedef void* WXAPPLEEVENTREF ;
typedef void* WXHDC ;
typedef void* WXHMENU ;
*/
#endif
+#ifdef __WXCOCOA__
+
+// NOTE: This ought to work with other compilers too, but I'm being cautious
+#if defined(__GNUC__) && defined(__APPLE__)
+/* It's desirable to have type safety for Objective-C(++) code as it does
+at least catch typos of method names among other things. However, it
+is not possible to declare an Objective-C class from plain old C or C++
+code. Furthermore, because of C++ name mangling, the type name must
+be the same for both C++ and Objective-C++ code. Therefore, we define
+what should be a pointer to an Objective-C class as a pointer to a plain
+old C struct with the same name. Unfortunately, because the compiler
+does not see a struct as an Objective-C class we cannot declare it
+as a struct in Objective-C(++) mode.
+*/
+#if defined(__OBJC__)
+#define DECLARE_WXCOCOA_OBJC_CLASS(klass) \
+@class klass; \
+typedef klass *WX_##klass
+#else // not defined(__OBJC__)
+#define DECLARE_WXCOCOA_OBJC_CLASS(klass) \
+typedef struct klass *WX_##klass
+#endif // defined(__OBJC__)
+
+#else // not GNU
+#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
+// compiling C(++) code, and works without typesafety for Obj-C(++) code
+#define DECLARE_WXCOCOA_OBJC_CLASS(klass) \
+typedef struct objc_object *WX_##klass
+
+#endif // defined(__GNUC__) && defined(__APPLE__)
+
+DECLARE_WXCOCOA_OBJC_CLASS(NSApplication);
+DECLARE_WXCOCOA_OBJC_CLASS(NSBox);
+DECLARE_WXCOCOA_OBJC_CLASS(NSButton);
+DECLARE_WXCOCOA_OBJC_CLASS(NSControl);
+DECLARE_WXCOCOA_OBJC_CLASS(NSEvent);
+DECLARE_WXCOCOA_OBJC_CLASS(NSLayoutManager);
+DECLARE_WXCOCOA_OBJC_CLASS(NSMenu);
+DECLARE_WXCOCOA_OBJC_CLASS(NSMenuItem);
+DECLARE_WXCOCOA_OBJC_CLASS(NSPanel);
+DECLARE_WXCOCOA_OBJC_CLASS(NSTableView);
+DECLARE_WXCOCOA_OBJC_CLASS(NSTextContainer);
+DECLARE_WXCOCOA_OBJC_CLASS(NSTextField);
+DECLARE_WXCOCOA_OBJC_CLASS(NSTextStorage);
+DECLARE_WXCOCOA_OBJC_CLASS(NSWindow);
+DECLARE_WXCOCOA_OBJC_CLASS(NSView);
+typedef WX_NSView WXWidget; // wxWindows BASE definition
+#endif // __WXCOCOA__
+
#if defined(__WXMSW__) || defined(__WXPM__)
// the keywords needed for WinMain() declaration
typedef void* WXFont;
typedef void* WXImage;
typedef void* WXFontList;
+typedef void* WXRendition;
+typedef void* WXRenderTable;
+typedef void* WXFontType; /* either a XmFontList or XmRenderTable */
+typedef void* WXString;
typedef unsigned long Atom; /* this might fail on a few architectures */