]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/defs.h
implement support for returning several elements at once from IEnumFORMATETC (part...
[wxWidgets.git] / include / wx / defs.h
index 6aabd7f2b2bed8b938c15750c278da6787673a28..85331769e682aeb29d0f514e6e70219bdf0bd554 100644 (file)
 
 // 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
 
 #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
 // ============================================================================
     #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
@@ -236,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
 
@@ -348,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
@@ -451,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
 // ----------------------------------------------------------------------------
@@ -486,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)
 // ----------------------------------------------------------------------------
@@ -923,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
@@ -993,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
@@ -1018,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
@@ -1025,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
@@ -1816,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
 // ----------------------------------------------------------------------------
@@ -1853,7 +1914,7 @@ typedef void*       WXPOINTPTR ;
 typedef void*       WXHWND ;
 typedef void*       WXEVENTREF ;
 typedef void*          WXEVENTHANDLERREF ;
-typedef void*       WXEVENTHANDLERCALLREF ; 
+typedef void*       WXEVENTHANDLERCALLREF ;
 typedef void*       WXAPPLEEVENTREF ;
 typedef void*       WXHDC ;
 typedef void*       WXHMENU ;
@@ -1898,22 +1959,45 @@ 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__)
-    #include <objc/objc.h>
-    #define DECLARE_WXCOCOA_OBJC_CLASS(klass) \
-    @class klass;                   typedef klass *WX_##klass
-#elif defined(wxI_LIKE_OBJC_ID)
-    #define DECLARE_WXCOCOA_OBJC_CLASS(klass) \
-    typedef id WX_##klass
-#else // the goal is to get rid of this secion at some time!
-    #define DECLARE_WXCOCOA_OBJC_CLASS(klass) \
-    typedef void *WX_##klass
-#endif
+#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);