X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/0e0126c2204732b9dfeefef0de838d7d375cf1f0..e3b8a866960ec59e5c1dfa927e3e222b73ea8a57:/include/wx/defs.h?ds=sidebyside diff --git a/include/wx/defs.h b/include/wx/defs.h index e98d4a5498..1831c6a5ba 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 @@ -40,14 +54,12 @@ // suppress some Visual C++ warnings #ifdef __VISUALC__ + // the only "real" warning here is 4244 but there arej ust 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 -# pragma warning(disable:4100) // unreferenced formal parameter -# pragma warning(disable:4511) // copy ctor couldn't be generated -# pragma warning(disable:4512) // operator=() couldn't be generated -# pragma warning(disable:4699) // using precompiled header -# pragma warning(disable:4134) // conversion between pointers to members of same class # pragma warning(disable:4710) // function not inlined +# pragma warning(disable:4097) // typedef used as class #ifndef WIN32 # pragma warning(disable:4135) // conversion between different integral types # pragma warning(disable:4769) // assignment of near pointer to long integer @@ -77,16 +89,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 +158,17 @@ #elif defined(__WATCOMC__) && (__WATCOMC__ >= 1100) // Watcom 11+ supports bool #define HAVE_BOOL - #elif defined(__GNUWIN32__) + #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 @@ -174,35 +181,26 @@ typedef unsigned int bool; #endif // bool -#ifdef __cplusplus - // define boolean constants: don't use true/false here as not all compilers - // support them but also redefine TRUE which could have been defined as 1 - // by previous headers: this would be incorrect as our TRUE is supposed to - // be of type bool, just like true, not int - // - // however if the user code absolutely needs TRUE to be defined in its own - // way, it can predefine WX_TRUE_DEFINED to prevent the redefinition here - #ifdef TRUE - #ifndef WX_TRUE_DEFINED - #undef TRUE - #undef FALSE - #endif - #endif +// deal with TRUE/true stuff: we assume that if the compiler supports bool, it +// supports true/false as well and that, OTOH, if it does _not_ support bool, +// it doesn't support these keywords (this is less sure, in particular VC++ +// 4.x could be a problem here) +#ifndef HAVE_BOOL + #define true ((bool)1) + #define false ((bool)0) +#endif - #ifndef TRUE - #define TRUE ((bool)1) - #define FALSE ((bool)0) - #endif -#else // !__cplusplus - // the definitions above don't work for C sources - #ifndef TRUE - #define TRUE 1 - #endif +// for backwards compatibility, also define TRUE and FALSE +// +// note that these definitions should work both in C++ and C code, so don't +// use true/false below +#ifndef TRUE + #define TRUE 1 +#endif - #ifndef FALSE - #define FALSE 0 - #endif -#endif // C++/!C++ +#ifndef FALSE + #define FALSE 0 +#endif typedef short int WXTYPE; @@ -231,8 +229,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 @@ -240,6 +242,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 @@ -249,12 +253,30 @@ 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 // ---------------------------------------------------------------------------- // stdcall is used for all functions called by Windows under Windows -#if defined(__WINDOWS__) && !defined(__WXWINE__) +#if defined(__WINDOWS__) #if defined(__GNUWIN32__) #define wxSTDCALL __attribute__((stdcall)) #else @@ -321,7 +343,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) @@ -334,37 +356,80 @@ 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 + #if wxUSE_BASE + #define WXMAKINGDLL_BASE + #endif + + #define WXMAKINGDLL_CORE + #define WXMAKINGDLL_HTML + #define WXMAKINGDLL_XML +#endif // WXMAKINGDLL + +// 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) - #define WXDLLEXPORT WXIMPORT - #define WXDLLEXPORT_DATA(type) WXIMPORT type - #define WXDLLEXPORT_CTORFN + #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) + #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) + #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) +#ifdef WXMAKINGDLL_GL + #define WXDLLIMPEXP_GL WXEXPORT +#elif defined(WXUSINGDLL) + #define WXDLLIMPEXP_GL WXIMPORT +#else // not making nor using DLL + #define WXDLLIMPEXP_GL +#endif + +#ifdef WXMAKINGDLL_XML + #define WXDLLIMPEXP_XML WXEXPORT +#elif defined(WXUSINGDLL) + #define WXDLLIMPEXP_XML WXIMPORT +#else // not making nor using DLL + #define WXDLLIMPEXP_XML +#endif + +// for backwards compatibility, define suffix-less versions too +#define WXDLLEXPORT WXDLLIMPEXP_CORE +#define WXDLLEXPORT_DATA WXDLLIMPEXP_DATA_CORE // ---------------------------------------------------------------------------- // Very common macros @@ -391,6 +456,15 @@ class WXDLLEXPORT wxEvent; # endif /* ATTRIBUTE_PRINTF */ #endif +// Macro to issue warning when using deprecated functions with gcc3 or MSVC7: +#if wxCHECK_GCC_VERSION(3, 1) + #define wxDEPRECATED(x) x __attribute__ ((deprecated)) +#elif defined(__VISUALC__) && (__VISUALC__ >= 1300) + #define wxDEPRECATED(x) __declspec(deprecated) x +#else + #define wxDEPRECATED(x) x +#endif + // everybody gets the assert and other debug macros #ifdef __cplusplus #include "wx/debug.h" @@ -428,6 +502,19 @@ class WXDLLEXPORT wxEvent; // size of statically declared array #define WXSIZEOF(array) (sizeof(array)/sizeof(array[0])) +// helper macros to be able to define unique/anonymous objects: this works by +// 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(text, line) text ## line +#define wxCONCAT_LINE2(text, line) wxCONCAT(text, line) +#define wxCONCAT_LINE(text) wxCONCAT_LINE2(text, __LINE__) +#define wxMAKE_UNIQUE_NAME(text) wxCONCAT_LINE(text) + +// 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 +550,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) // ---------------------------------------------------------------------------- @@ -497,6 +579,7 @@ enum wxWIN32S, // Windows 32S API wxWIN95, // Windows 95 wxWIN386, // Watcom 32-bit supervisor modus + wxWINDOWS_CE, // Windows CE wxMGL_UNIX, // MGL with direct hardware access wxMGL_X, // MGL on X wxMGL_WIN32, // MGL on Win32 @@ -591,7 +674,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 +854,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 // ---------------------------------------------------------------------------- @@ -894,19 +983,10 @@ enum wxBorder #define wxSTATIC_BORDER wxBORDER_STATIC #define wxNO_BORDER wxBORDER_NONE -// Override CTL3D etc. control colour processing to allow own background -// colour. -// Override CTL3D or native 3D styles for children -#define wxNO_3D 0x00800000 - -// OBSOLETE - use wxNO_3D instead -#define wxUSER_COLOURS wxNO_3D - // wxALWAYS_SHOW_SB: instead of hiding the scrollbar when it is not needed, // disable it - but still show (see also wxLB_ALWAYS_SB style) // -// NB: as this style is only supported by wxUniversal so far as it doesn't use -// wxUSER_COLOURS/wxNO_3D, we reuse the same style value +// NB: as this style is only supported by wxUniversal and wxMSW so far #define wxALWAYS_SHOW_SB 0x00800000 // Clip children when painting, which reduces flicker in e.g. frames and @@ -964,6 +1044,17 @@ 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 + +// this window should always process idle events +#define wxWS_EX_PROCESS_IDLE 0x00000010 + +// this window should always process UI update events +#define wxWS_EX_PROCESS_UI_UPDATES 0x00000020 + // 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 +1067,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 +1080,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 @@ -995,7 +1088,10 @@ enum wxBorder // obsolete styles, unused any more #define wxDIALOG_MODAL 0x0020 // free flag value 0x0020 -#define wxDIALOG_MODELESS 0x0000 +#define wxDIALOG_MODELESS 0 +#define wxNO_3D 0 +#define wxUSER_COLOURS 0 + /* * MDI parent frame style flags @@ -1010,16 +1106,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 @@ -1144,20 +1234,6 @@ enum wxBorder #define wxSP_ARROW_KEYS 0x1000 #define wxSP_WRAP 0x2000 -/* - * wxSplitterWindow flags - */ -#define wxSP_NOBORDER 0x0000 -#define wxSP_NOSASH 0x0010 -#define wxSP_BORDER 0x0020 -#define wxSP_PERMIT_UNSPLIT 0x0040 -#define wxSP_LIVE_UPDATE 0x0080 -#define wxSP_3DSASH 0x0100 -#define wxSP_3DBORDER 0x0200 -#define wxSP_FULLSASH 0x0400 -#define wxSP_3D (wxSP_3DBORDER | wxSP_3DSASH) -#define wxSP_SASH_AQUA 0x0800 - /* * wxNotebook flags */ @@ -1180,17 +1256,6 @@ enum wxBorder #define wxTC_MULTILINE wxNB_MULTILINE #define wxTC_OWNERDRAW 0x0200 -// wxToolBar style flags -#define wxTB_HORIZONTAL wxHORIZONTAL // == 0x0004 -#define wxTB_VERTICAL wxVERTICAL // == 0x0008 -#define wxTB_3DBUTTONS 0x0010 -#define wxTB_FLAT 0x0020 // supported only under Win98+/GTK -#define wxTB_DOCKABLE 0x0040 // use native docking under GTK -#define wxTB_NOICONS 0x0080 // don't show the icons -#define wxTB_TEXT 0x0100 // show the text -#define wxTB_NODIVIDER 0x0200 // don't show the divider (Windows) -#define wxTB_NOALIGN 0x0400 // no automatic alignment (Windows) - /* * wxStatusBar95 flags */ @@ -1314,6 +1379,19 @@ enum wxID_FIND, wxID_DUPLICATE, wxID_SELECTALL, + wxID_DELETE, + wxID_REPLACE, + wxID_REPLACE_ALL, + wxID_PROPERTIES, + + wxID_VIEW_DETAILS, + wxID_VIEW_LARGEICONS, + wxID_VIEW_SMALLICONS, + wxID_VIEW_LIST, + wxID_VIEW_SORTDATE, + wxID_VIEW_SORTNAME, + wxID_VIEW_SORTSIZE, + wxID_VIEW_SORTTYPE, wxID_FILE1 = 5050, wxID_FILE2, @@ -1656,9 +1734,24 @@ 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 }; +#if wxUSE_HOTKEY +enum wxHotkeyModifier +{ + wxMOD_NONE = 0, + wxMOD_ALT = 1, + wxMOD_CONTROL = 2, + wxMOD_SHIFT = 4, + wxMOD_WIN = 8 +}; +#endif + // Mapping modes (same values as used by Windows, don't change) enum { @@ -1788,6 +1881,17 @@ enum wxPrintMode wxPRINT_MODE_PRINTER = 3 // Send to printer }; +// ---------------------------------------------------------------------------- +// UpdateWindowUI flags +// ---------------------------------------------------------------------------- + +enum wxUpdateUI +{ + wxUPDATE_UI_NONE = 0x0000, + wxUPDATE_UI_RECURSE = 0x0001, + wxUPDATE_UI_FROMIDLE = 0x0002 // Invoked from On(Internal)Idle +}; + // ---------------------------------------------------------------------------- // miscellaneous // ---------------------------------------------------------------------------- @@ -1800,10 +1904,10 @@ enum wxPrintMode // macro to specify "All Files" on different platforms #if defined(__WXMSW__) || defined(__WXPM__) # define wxALL_FILES_PATTERN wxT("*.*") -# define wxALL_FILES gettext_noop(wxT("All files (*.*)|*.*")) +# define wxALL_FILES gettext_noop("All files (*.*)|*.*") #else # define wxALL_FILES_PATTERN wxT("*") -# define wxALL_FILES gettext_noop(wxT("All files (*)|*")) +# define wxALL_FILES gettext_noop("All files (*)|*") #endif // --------------------------------------------------------------------------- @@ -1824,6 +1928,8 @@ typedef void* WXRECTPTR ; typedef void* WXPOINTPTR ; typedef void* WXHWND ; typedef void* WXEVENTREF ; +typedef void* WXEVENTHANDLERREF ; +typedef void* WXEVENTHANDLERCALLREF ; typedef void* WXAPPLEEVENTREF ; typedef void* WXHDC ; typedef void* WXHMENU ; @@ -1866,6 +1972,61 @@ 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(NSBitmapImageRep); +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 @@ -1922,7 +2083,7 @@ typedef WXHWND WXWidget; typedef unsigned int WXWPARAM; typedef long WXLPARAM; -#if !defined(__WIN32__) || defined(__GNUWIN32__) || defined(__WXWINE__) || defined(__WXMICROWIN__) +#if !defined(__WIN32__) || defined(__GNUWIN32__) || defined(__WXMICROWIN__) typedef int (*WXFARPROC)(); #else typedef int (__stdcall *WXFARPROC)(); @@ -2023,6 +2184,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 */ @@ -2154,5 +2319,9 @@ typedef struct window_t *WXWidget; classname(const classname&); \ classname& operator=(const classname&); +#define DECLARE_NO_ASSIGN_CLASS(classname) \ + private: \ + classname& operator=(const classname&); + #endif // _WX_DEFS_H_