X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/4ce1efe123a9b5f7dbb5be4aaf3dd0a21b399f38..1f1c42109dce7d0760966eb57127a0bb668d50f5:/include/wx/defs.h?ds=sidebyside diff --git a/include/wx/defs.h b/include/wx/defs.h index 25cb52771a..85331769e6 100644 --- a/include/wx/defs.h +++ b/include/wx/defs.h @@ -24,16 +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(__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 + #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 @@ -78,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 // ============================================================================ @@ -241,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 @@ -353,37 +358,63 @@ 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 +#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) +// for backwards compatibility, define suffix-less versions too +#define WXDLLEXPORT WXDLLIMPEXP_CORE +#define WXDLLEXPORT_DATA WXDLLIMPEXP_DATA_CORE // ---------------------------------------------------------------------------- // Very common macros @@ -456,6 +487,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 // ---------------------------------------------------------------------------- @@ -491,11 +535,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) // ---------------------------------------------------------------------------- @@ -928,19 +967,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 @@ -998,6 +1028,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 @@ -1023,6 +1064,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 @@ -1030,7 +1072,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 @@ -1821,6 +1866,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 // ---------------------------------------------------------------------------- @@ -1903,17 +1959,43 @@ typedef ControlHandle WXWidget; #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 +// 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);