X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/6357cb9d099f4546ecb7bccdf9b81f0f150b7d54..687dcff3a46a55c11851b1cabdbbbef5492a2f5f:/include/wx/defs.h diff --git a/include/wx/defs.h b/include/wx/defs.h index 8eadc9138e..74e04440bf 100644 --- a/include/wx/defs.h +++ b/include/wx/defs.h @@ -24,15 +24,29 @@ // Make sure the environment is set correctly #if defined(__WXMSW__) && defined(__X__) -#error "Target can't be both X and Windows" + #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 -#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 + !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 + +#ifndef __WXWINDOWS__ + #define __WXWINDOWS__ 1 +#endif + +#ifndef wxUSE_BASE + // by default consider that this is a monolithic build + #define wxUSE_BASE 1 +#endif + +#if !wxUSE_GUI && !defined(__WXBASE__) + #define __WXBASE__ #endif // include the feature test macros @@ -77,16 +91,6 @@ #include "wx/version.h" -// possibility to build non GUI apps is new, so don't burden ourselves with -// compatibility code -#if !wxUSE_GUI -#undef WXWIN_COMPATIBILITY_2 -#undef WXWIN_COMPATIBILITY_2_2 - -#define WXWIN_COMPATIBILITY_2 0 -#define WXWIN_COMPATIBILITY_2_2 0 -#endif // !GUI - // ============================================================================ // non portable C++ features // ============================================================================ @@ -156,12 +160,17 @@ #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 @@ -222,8 +231,12 @@ typedef int wxWindowID; // 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 @@ -231,6 +244,8 @@ typedef int wxWindowID; #elif defined(__MWERKS__) && (__MWERKS__ >= 0x2400) // Metrowerks CW6 or higher has explicit #define HAVE_EXPLICIT + #elif defined(__DIGITALMARS__) + #define HAVE_EXPLICIT #endif #endif // !HAVE_EXPLICIT @@ -240,6 +255,24 @@ typedef int wxWindowID; #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 // ---------------------------------------------------------------------------- @@ -312,7 +345,7 @@ typedef int wxWindowID; #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) @@ -325,37 +358,71 @@ typedef int wxWindowID; #define WXIMPORT #endif -// WXDLLEXPORT maps to export declaration when building the DLL, to import -// declaration if using it or to nothing at all if we don't use wxWin DLL +/* + We support building wxWindows as a set of several libraries but we don't + support arbitrary combinations of libs/DLLs: either we build all of them as + DLLs (in which case WXMAKINGDLL is defined) or none (it isn't). + + However we have a problem because we need separate WXDLLEXPORT versions for + different libraries as, for example, wxString class should be dllexported + when compiled in wxBase and dllimported otherwise, so we do define separate + WXMAKING/USINGDLL_XYZ constants for each component XYZ. + */ #ifdef WXMAKINGDLL - #define WXDLLEXPORT WXEXPORT - #define WXDLLEXPORT_DATA(type) WXEXPORT type - #define WXDLLEXPORT_CTORFN -#elif defined(WXUSINGDLL) - #define WXDLLEXPORT WXIMPORT - #define WXDLLEXPORT_DATA(type) WXIMPORT type - #define WXDLLEXPORT_CTORFN + #if wxUSE_BASE + #define WXMAKINGDLL_BASE + #else + #define WXUSINGDLL_BASE + #endif + + #define WXMAKINGDLL_CORE +#endif // WXMAKINGDLL + +#ifdef WXUSINGDLL + #define WXUSINGDLL_BASE + #define WXUSINGDLL_CORE + #define WXUSINGDLL_HTML +#endif // WXUSINGDLL + + +// WXDLLEXPORT maps to export declaration when building the DLL, to import +// declaration if using it or to nothing at all if we don't use wxWin as DLL +#ifdef WXMAKINGDLL_BASE + #define WXDLLIMPEXP_BASE WXEXPORT + #define WXDLLIMPEXP_DATA_BASE(type) WXEXPORT type +#elif defined(WXUSINGDLL_BASE) + #define WXDLLIMPEXP_BASE WXIMPORT + #define WXDLLIMPEXP_DATA_BASE(type) WXIMPORT type #else // not making nor using DLL - #define WXDLLEXPORT - #define WXDLLEXPORT_DATA(type) type - #define WXDLLEXPORT_CTORFN + #define WXDLLIMPEXP_BASE + #define WXDLLIMPEXP_DATA_BASE(type) type #endif -// For ostream, istream ofstream -#if defined(__BORLANDC__) && defined( _RTLDLL ) -# define WXDLLIMPORT __import -#else -# define WXDLLIMPORT +#ifdef WXMAKINGDLL_CORE + #define WXDLLIMPEXP_CORE WXEXPORT + #define WXDLLIMPEXP_DATA_CORE(type) WXEXPORT type +#elif defined(WXUSINGDLL_CORE) + #define WXDLLIMPEXP_CORE WXIMPORT + #define WXDLLIMPEXP_DATA_CORE(type) WXIMPORT type +#else // not making nor using DLL + #define WXDLLIMPEXP_CORE + #define WXDLLIMPEXP_DATA_CORE(type) type #endif -#ifdef __cplusplus -class WXDLLEXPORT wxObject; -class WXDLLEXPORT wxEvent; +#ifdef WXMAKINGDLL_HTML + #define WXDLLIMPEXP_HTML WXEXPORT + #define WXDLLIMPEXP_DATA_HTML(type) WXEXPORT type +#elif defined(WXUSINGDLL_HTML) + #define WXDLLIMPEXP_HTML WXIMPORT + #define WXDLLIMPEXP_DATA_HTML(type) WXIMPORT type +#else // not making nor using DLL + #define WXDLLIMPEXP_HTML + #define WXDLLIMPEXP_DATA_HTML(type) type #endif -// symbolic constant used by all Find()-like functions returning positive -// integer on success as failure indicator -#define wxNOT_FOUND (-1) +// for backwards compatibility, define suffix-less versions too +#define WXDLLEXPORT WXDLLIMPEXP_CORE +#define WXDLLEXPORT_DATA WXDLLIMPEXP_DATA_CORE // ---------------------------------------------------------------------------- // Very common macros @@ -428,6 +495,10 @@ class WXDLLEXPORT wxEvent; // size of statically declared array #define WXSIZEOF(array) (sizeof(array)/sizeof(array[0])) +// symbolic constant used by all Find()-like functions returning positive +// integer on success as failure indicator +#define wxNOT_FOUND (-1) + // ---------------------------------------------------------------------------- // compiler specific settings // ---------------------------------------------------------------------------- @@ -463,11 +534,6 @@ class WXDLLEXPORT wxEvent; # endif #endif -// Callback function type definition -#ifdef __cplusplus -typedef void (*wxFunction) (wxObject&, wxEvent&); -#endif - // ---------------------------------------------------------------------------- // OS mnemonics -- Identify the running OS (useful for Windows) // ---------------------------------------------------------------------------- @@ -591,7 +657,7 @@ enum // 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; @@ -771,6 +837,12 @@ 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 // ---------------------------------------------------------------------------- @@ -964,6 +1036,11 @@ enum wxBorder // 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 @@ -976,7 +1053,8 @@ enum wxBorder #define wxICONIZE 0x4000 #define wxMINIMIZE wxICONIZE #define wxMAXIMIZE 0x2000 - // free flag value: 0x1000 +#define wxCLOSE_BOX 0x1000 + #define wxSYSTEM_MENU 0x0800 #define wxMINIMIZE_BOX 0x0400 #define wxMAXIMIZE_BOX 0x0200 @@ -988,6 +1066,7 @@ enum wxBorder #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 @@ -1010,16 +1089,10 @@ enum wxBorder #define wxDEFAULT_FRAME_STYLE \ (wxSYSTEM_MENU | wxRESIZE_BORDER | \ - wxMINIMIZE_BOX | wxMAXIMIZE_BOX | \ + wxMINIMIZE_BOX | wxMAXIMIZE_BOX | wxCLOSE_BOX | \ wxCAPTION | wxCLIP_CHILDREN) -#if defined(__WXMSW__) || defined(__WXPM__) || defined(__WXMGL__) -# define wxDEFAULT_DIALOG_STYLE (wxSYSTEM_MENU | wxCAPTION) -#else -// Under Unix, the dialogs don't have a system menu. Specifying wxSYSTEM_MENU -// here will make a close button appear. -# define wxDEFAULT_DIALOG_STYLE wxCAPTION -#endif +#define wxDEFAULT_DIALOG_STYLE (wxSYSTEM_MENU | wxCAPTION | wxCLOSE_BOX) /* * wxExtDialog style flags @@ -1656,7 +1729,11 @@ enum wxKeyCode WXK_NUMPAD_SEPARATOR, WXK_NUMPAD_SUBTRACT, WXK_NUMPAD_DECIMAL, - WXK_NUMPAD_DIVIDE + WXK_NUMPAD_DIVIDE, + + WXK_WINDOWS_LEFT, + WXK_WINDOWS_RIGHT, + WXK_WINDOWS_MENU }; // Mapping modes (same values as used by Windows, don't change) @@ -1825,6 +1902,7 @@ typedef void* WXPOINTPTR ; typedef void* WXHWND ; typedef void* WXEVENTREF ; typedef void* WXEVENTHANDLERREF ; +typedef void* WXEVENTHANDLERCALLREF ; typedef void* WXAPPLEEVENTREF ; typedef void* WXHDC ; typedef void* WXHMENU ; @@ -1867,6 +1945,60 @@ typedef ControlHandle WXWidget; */ #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(NSColor); +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 @@ -2024,6 +2156,10 @@ typedef void* WXRegion; 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 */