X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/b54e41c5298568d48a7a1fa532b2653288a8713c..de85a884d77ad5a29b418b343d4d3cc99c127b5e:/include/wx/defs.h?ds=inline diff --git a/include/wx/defs.h b/include/wx/defs.h index ccb3af3dbf..064b94ce47 100644 --- a/include/wx/defs.h +++ b/include/wx/defs.h @@ -37,6 +37,12 @@ #endif #endif // Win32 +#if defined(__WXMSW__) || defined(__WIN32__) + #if !defined(__WINDOWS__) + #define __WINDOWS__ + #endif +#endif + #ifdef __WXWINE__ #ifndef __WIN32__ #define __WIN32__ @@ -55,13 +61,16 @@ #include "wx/setup.h" +// check the consistency of the settings in setup.h +#include "wx/chkconf.h" + // old C++ headers (like ) declare classes in the global namespace // while the new, standard ones (like ) do it in std:: namespace // // using this macro allows constuctions like "wxSTD iostream" to work in // either case #if !wxUSE_IOSTREAMH - #define wxSTD std:: + #define wxSTD std:: #else #define wxSTD #endif @@ -112,41 +121,26 @@ #define __HPUX__ #endif // HP-UX - #if defined(__APPLE__) - // MacOS X - #ifndef __WXMAC__ - #define __WXMAC__ - #endif - #ifndef __WXMAC_X__ - // This define really should not be necessary since __WXMAC__ - // combined with __UNIX__ is sufficient to differentiate - // Classic Mac OS from Mac OS X. However, some code has been - // added to workaround defects(?) in the bundled gcc compiler - // and these corrections are identified by __WXMAC_X__ - #define __WXMAC_X__ - #endif + #if defined(__WXMAC__) && defined(__DARWIN__) + // Mac OS X + + // Some code has been added to workaround defects(?) in the + // bundled gcc compiler. These corrections are identified by: + // __DARWIN__ for corrections necessary for Darwin (wxMac, wxMotif) #include - #endif // __APPLE__ + #endif // __WXMAC__ && __DARWIN__ #elif defined(applec) || \ defined(THINK_C) || \ (defined(__MWERKS__) && !defined(__INTEL__)) // MacOS -#elif defined(__WXMAC__) && defined(__APPLE__) - // MacOS X +#elif defined(__WXMAC__) && defined(__DARWIN__) + // Mac OS X #define __UNIX_LIKE__ - #ifndef __WXMAC__ - #define __WXMAC__ - #endif - #ifndef __WXMAC_X__ - // This define really should not be necessary since __WXMAC__ - // combined with __UNIX__ is sufficient to differentiate - // Classic Mac OS from Mac OS X. However, some code has been - // added to workaround defects(?) in the bundled gcc compiler - // and these corrections are identified by __WXMAC_X__ - #define __WXMAC_X__ - #endif + // Some code has been added to workaround defects(?) in the + // bundled gcc compiler. These corrections are identified by: + // __DARWIN__ for corrections necessary for Darwin (wxMac, wxMotif) #include #elif defined(__OS2__) @@ -225,8 +219,8 @@ // 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' +# 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 @@ -282,7 +276,7 @@ #error "Target can't be both X and Windows" #elif !defined(__WXMOTIF__) && !defined(__WXMSW__) && !defined(__WXGTK__) && \ !defined(__WXPM__) && !defined(__WXMAC__) && !defined(__X__) && \ - !defined(__WXQT__) && !defined(__WXMGL__) && wxUSE_GUI + !defined(__WXMGL__) && wxUSE_GUI #ifdef __UNIX__ #error "No Target! You should use wx-config program for compilation flags!" #else // !Unix @@ -378,20 +372,6 @@ typedef short int WXTYPE; // because -1 is a valid (and largely used) value for window id. typedef int wxWindowID; -// Macro to cut down on compiler warnings. -#if REMOVE_UNUSED_ARG - #define WXUNUSED(identifier) /* identifier */ -#else // stupid, broken compiler - #define WXUNUSED(identifier) identifier -#endif - -// some arguments are only used in debug mode, but unused in release one -#ifdef __WXDEBUG__ - #define WXUNUSED_UNLESS_DEBUG(param) param -#else - #define WXUNUSED_UNLESS_DEBUG(param) WXUNUSED(param) -#endif - // ---------------------------------------------------------------------------- // portable calling conventions macros // ---------------------------------------------------------------------------- @@ -437,62 +417,48 @@ typedef int wxWindowID; // ---------------------------------------------------------------------------- #if defined(__WXMSW__) - -// __declspec works in BC++ 5 and later, Watcom C++ 11.0 and later as well as VC++ and gcc -#if defined(__VISUALC__) || defined(__BORLANDC__) || defined(__GNUC__) || defined(__WATCOMC__) -# ifdef WXMAKINGDLL -# define WXDLLEXPORT __declspec( dllexport ) -# define WXDLLEXPORT_DATA(type) __declspec( dllexport ) type -# define WXDLLEXPORT_CTORFN -# elif defined(WXUSINGDLL) -# define WXDLLEXPORT __declspec( dllimport ) -# define WXDLLEXPORT_DATA(type) __declspec( dllimport ) type -# define WXDLLEXPORT_CTORFN -# else -# define WXDLLEXPORT -# define WXDLLEXPORT_DATA(type) type -# define WXDLLEXPORT_CTORFN -# endif -#else -# define WXDLLEXPORT -# define WXDLLEXPORT_DATA(type) type -# define WXDLLEXPORT_CTORFN -#endif - + // __declspec works in BC++ 5 and later, Watcom C++ 11.0 and later as well + // as VC++ and gcc + #if defined(__VISUALC__) || defined(__BORLANDC__) || defined(__GNUC__) || defined(__WATCOMC__) + #define WXEXPORT __declspec(dllexport) + #define WXIMPORT __declspec(dllimport) + #else // compiler doesn't support __declspec() + #define WXEXPORT + #define WXIMPORT + #endif #elif defined(__WXPM__) + #if defined (__WATCOMC__) + #define WXEXPORT __declspec(dllexport) + // __declspec(dllimport) prepends __imp to imported symbols. We do NOT + // want that! + #define WXIMPORT + #elif (!(defined(__VISAGECPP__) && (__IBMCPP__ < 400 || __IBMC__ < 400 ))) + #define WXEXPORT _Export + #define WXIMPORT _Export + #endif +#endif -# if (!(defined(__VISAGECPP__) && (__IBMCPP__ < 400 || __IBMC__ < 400 ))) - -# ifdef WXMAKINGDLL -# define WXDLLEXPORT _Export -# define WXDLLEXPORT_DATA(type) _Export type -# define WXDLLEXPORT_CTORFN -# elif defined(WXUSINGDLL) -# define WXDLLEXPORT _Export -# define WXDLLEXPORT_DATA(type) _Export type -# define WXDLLEXPORT_CTORFN -# else -# define WXDLLEXPORT -# define WXDLLEXPORT_DATA(type) type -# define WXDLLEXPORT_CTORFN -# endif - -# else - -# define WXDLLEXPORT -# define WXDLLEXPORT_DATA(type) type -# define WXDLLEXPORT_CTORFN - -# endif - -#else // !(MSW or OS2) - -# define WXDLLEXPORT -# define WXDLLEXPORT_DATA(type) type -# define WXDLLEXPORT_CTORFN - +// for other platforms/compilers we don't anything +#ifndef WXEXPORT + #define WXEXPORT + #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 +#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 +#else // not making nor using DLL + #define WXDLLEXPORT + #define WXDLLEXPORT_DATA(type) type + #define WXDLLEXPORT_CTORFN +#endif // For ostream, istream ofstream #if defined(__BORLANDC__) && defined( _RTLDLL ) @@ -506,8 +472,8 @@ class WXDLLEXPORT wxObject; class WXDLLEXPORT wxEvent; #endif - /** symbolic constant used by all Find()-like functions returning positive - integer on success as failure indicator */ +// symbolic constant used by all Find()-like functions returning positive +// integer on success as failure indicator #define wxNOT_FOUND (-1) // ---------------------------------------------------------------------------- @@ -519,38 +485,36 @@ class WXDLLEXPORT wxEvent; #include "wx/debug.h" #endif -// NULL declaration +// 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) #include -//@{ -/// delete pointer if it is not NULL and NULL it afterwards +// Macro to cut down on compiler warnings. +#if REMOVE_UNUSED_ARG + #define WXUNUSED(identifier) /* identifier */ +#else // stupid, broken compiler + #define WXUNUSED(identifier) identifier +#endif + +// some arguments are only used in debug mode, but unused in release one +#ifdef __WXDEBUG__ + #define WXUNUSED_UNLESS_DEBUG(param) param +#else + #define WXUNUSED_UNLESS_DEBUG(param) WXUNUSED(param) +#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 // a question of style, because delete will do it itself anyhow, but it might // be considered as an error by some overzealous debugging implementations of // the library, so we do it ourselves) -#if defined(__SGI_CC__) -// Okay this is bad styling, but the native SGI compiler is very picky, it -// wont let you compare/assign between a NULL (void *) and another pointer -// type. To be really clean we'd need to pass in another argument, the type -// of p. -// Also note the use of 0L, this would allow future possible 64bit support -// (as yet untested) by ensuring that we zero all the bits in a pointer -// (which is always the same length as a long (at least with the LP64 standard) -// --- offer aug 98 -#define wxDELETE(p) if ( (p) ) { delete (p); p = 0L; } -#else #define wxDELETE(p) if ( (p) != NULL ) { delete p; p = NULL; } -#endif /* __SGI__CC__ */ // delete an array and NULL it (see comments above) -#if defined(__SGI_CC__) -// see above comment. -#define wxDELETEA(p) if ( (p) ) { delete [] (p); p = 0L; } -#else -#define wxDELETEA(p) if ( ((void *) (p)) != NULL ) { delete [] p; p = NULL; } -#endif /* __SGI__CC__ */ +#define wxDELETEA(p) if ( (p) ) { delete [] (p); p = NULL; } -/// size of statically declared array +// size of statically declared array #define WXSIZEOF(array) (sizeof(array)/sizeof(array[0])) // ---------------------------------------------------------------------------- @@ -612,7 +576,6 @@ enum wxGTK_WIN32, // GTK on Win32 wxGTK_OS2, // GTK on OS/2 wxGTK_BEOS, // GTK on BeOS - wxQT, // Qt wxGEOS, // GEOS wxOS2_PM, // OS/2 Workplace wxWINDOWS, // Windows or WfW @@ -993,6 +956,13 @@ enum wxBorder // descend into all subwindows #define wxWS_EX_VALIDATE_RECURSIVELY 0x00000001 +// wxCommandEvents and the objects of the derived classes are forwarded to the +// parent window and so on recursively by default. Using this flag for the +// given window allows to block this propagation at this window, i.e. prevent +// the events from being propagated further upwards. The dialogs have this +// flag on by default. +#define wxWS_EX_BLOCK_EVENTS 0x00000002 + /* * wxFrame/wxDialog style flags */ @@ -1107,22 +1077,6 @@ enum wxBorder #define wxLB_HSCROLL wxHSCROLL // always show an entire number of rows #define wxLB_INT_HEIGHT 0x0800 -/* - * wxTextCtrl style flags - */ -// the flag bits 0x0001, 2, 4 and 8 are free but should be used only for the -// things which don't make sense for a text control used by wxTextEntryDialog -// because they would otherwise conflict with wxOK, wxCANCEL, wxCENTRE -#define wxTE_READONLY 0x0010 -#define wxTE_MULTILINE 0x0020 -#define wxTE_PROCESS_TAB 0x0040 -// this style means to use RICHEDIT control and does something only under wxMSW -// and Win32 and is silently ignored under all other platforms -#define wxTE_RICH 0x0080 -#define wxTE_NO_VSCROLL 0x0100 -#define wxTE_AUTO_SCROLL 0x0200 -#define wxTE_PROCESS_ENTER 0x0400 -#define wxTE_PASSWORD 0x0800 // use wxHSCROLL to not wrap text at all, wxTE_LINEWRAP to wrap it at any // position and wxTE_WORDWRAP to wrap at words boundary @@ -1195,31 +1149,6 @@ enum wxBorder #define wxSB_HORIZONTAL wxHORIZONTAL #define wxSB_VERTICAL wxVERTICAL -/* - * wxButton flags (Win32 only) - */ -#define wxBU_AUTODRAW 0x0004 -#define wxBU_NOAUTODRAW 0x0000 -#define wxBU_LEFT 0x0040 -#define wxBU_TOP 0x0080 -#define wxBU_RIGHT 0x0100 -#define wxBU_BOTTOM 0x0200 - -/* - * wxTreeCtrl flags - */ -#define wxTR_HAS_BUTTONS 0x0004 -#define wxTR_EDIT_LABELS 0x0008 -#define wxTR_LINES_AT_ROOT 0x0010 - -#define wxTR_SINGLE 0x0000 -#define wxTR_MULTIPLE 0x0020 -#define wxTR_EXTENDED 0x0040 -#define wxTR_HAS_VARIABLE_ROW_HEIGHT 0x0080 -#define wxTR_NO_LINES 0x0100 -#define wxTR_MAC_BUTTONS 0x0200 -#define wxTR_ROW_LINES 0x0400 - /* * wxSpinButton flags. * Note that a wxSpinCtrl is sometimes defined as @@ -1959,7 +1888,10 @@ typedef unsigned short WORD; // WIN32 graphics types for OS/2 GPI // RGB under OS2 is more like a PALETTEENTRY struct under Windows so we need a real RGB def -#define OS2RGB(r,g,b) ((DWORD ((BYTE) (b) | ((WORD) (g) << 8)) | (((DWORD)(BYTE)(r)) << 16))) +// WARNING: The OS/2 headers typedef BYTE simply as 'char'; if the default is signed, all +// hell will break loose! +//#define OS2RGB(r,g,b) ((DWORD ((BYTE) (b) | ((WORD) (g) << 8)) | (((DWORD)(BYTE)(r)) << 16))) +#define OS2RGB(r,g,b) ((DWORD)((unsigned char)(b) | ((unsigned char)(g) << 8)) | ((unsigned char)(r) << 16)) typedef unsigned long COLORREF; #define GetBValue(rgb) ((BYTE)((rgb) >> 16)) @@ -1988,7 +1920,7 @@ typedef struct tagLOGPALETTE #elif defined(__WIN32__) typedef int (__stdcall *WXFARPROC)(); #elif defined(__WXPM__) -# if defined(__VISAGECPP__) && (__IBMCPP__ < 400 || __IBMC__ < 400 ) +# if (defined(__VISAGECPP__) && (__IBMCPP__ < 400)) || defined (__WATCOMC__) // 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 @@ -2026,7 +1958,6 @@ typedef void* WXGC; typedef void* WXRegion; typedef void* WXFont; typedef void* WXImage; -typedef void* WXCursor; typedef void* WXFontList; typedef unsigned long Atom; /* this might fail on a few architectures */ @@ -2095,7 +2026,7 @@ typedef struct _PangoFontDescription PangoFontDescription; #endif // GTK #ifdef __WXMGL__ -typedef void *WXWidget; // FIXME_MGL - type-safe +typedef struct window_t *WXWidget; #endif // MGL // This is required because of clashing macros in windows.h, which may be