X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/d8c72298ec07a4f296ffde211360682447b9d159..bf7d7ee7062f7f6028df40e43745235658e38b4d:/include/wx/defs.h diff --git a/include/wx/defs.h b/include/wx/defs.h index b3893851f5..ccb3af3dbf 100644 --- a/include/wx/defs.h +++ b/include/wx/defs.h @@ -20,6 +20,61 @@ // compiler and OS identification // ---------------------------------------------------------------------------- +// first define Windows symbols if they're not defined on the command line: we +// can autodetect everything we need if _WIN32 is defined +#if defined(_WIN32) || defined(WIN32) || defined(__NT__) + #ifndef __WXMSW__ + #define __WXMSW__ + #endif + + #ifndef __WIN32__ + #define __WIN32__ + #endif + + // Win95 means Win95-style UI, i.e. Win9x/NT 4+ + #if !defined(__WIN95__) && defined(WINVER) && (WINVER >= 0x0400) + #define __WIN95__ + #endif +#endif // Win32 + +#ifdef __WXWINE__ + #ifndef __WIN32__ + #define __WIN32__ + #endif + #ifndef __WIN95__ + #define __WIN95__ + #endif + #ifndef STRICT + #define STRICT + #endif +#endif // WINE + +#if defined(TWIN32) && !defined(__TWIN32__) + #define __TWIN32__ +#endif // Twin32 + +#include "wx/setup.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:: +#else + #define wxSTD +#endif + +// just in case they were defined in setup.h +#ifdef PACKAGE +#undef PACKAGE +#endif + +#ifdef VERSION +#undef VERSION +#endif + // OS: first test for generic Unix defines, then for particular flavours and // finally for Unix-like systems #if defined(__UNIX__) || defined(__unix) || defined(__unix__) || \ @@ -52,32 +107,47 @@ #define OS2EMX_PLAIN_CHAR #endif + // define __HPUX__ for HP-UX where standard macro is __hpux + #if defined(__hpux) && !defined(__HPUX__) + #define __HPUX__ + #endif // HP-UX + #if defined(__APPLE__) - // MacOS X + // 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 - - #define PM_USE_SESSION_APIS 0 + #include - #endif -#elif defined(applec) || defined(THINK_C) || (defined(__MWERKS__) && !defined(__INTEL__)) - // MacOS + #endif // __APPLE__ +#elif defined(applec) || \ + defined(THINK_C) || \ + (defined(__MWERKS__) && !defined(__INTEL__)) + // MacOS #elif defined(__WXMAC__) && defined(__APPLE__) - // MacOS X + // MacOS 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 - - #define PM_USE_SESSION_APIS 0 + #include #elif defined(__OS2__) #if defined(__IBMCPP__) @@ -95,11 +165,17 @@ // VisualAge is the only thing that understands _Optlink #define LINKAGEMODE _Optlink #endif + #define wxSIZE_T_IS_UINT #else // Windows #ifndef __WINDOWS__ #define __WINDOWS__ #endif // Windows + // to be changed for Win64! + #ifndef __WIN32__ + #define __WIN16__ + #endif + // define another standard symbol for Microsoft Visual C++: the standard one // (_MSC_VER) is also defined by Metrowerks compiler #if defined(_MSC_VER) && !defined(__MWERKS__) @@ -107,12 +183,23 @@ #elif defined(__BCPLUSPLUS__) && !defined(__BORLANDC__) #define __BORLANDC__ #elif defined(__WATCOMC__) - //#define __WATCOMC__ #elif defined(__SC__) #define __SYMANTECC__ #endif // compiler + + // size_t is the same as unsigned int for all Windows compilers we know, + // so define it if it hadn't been done by configure yet + #if !defined(wxSIZE_T_IS_UINT) && !defined(wxSIZE_T_IS_ULONG) + #define wxSIZE_T_IS_UINT + #endif #endif // OS +// if we're on a Unix system but didn't use configure (so that setup.h didn't +// define __UNIX__), do define __UNIX__ now +#if !defined(__UNIX__) && defined(__UNIX_LIKE__) + #define __UNIX__ +#endif // Unix + // LINKAGEMODE mode is empty for everyting except OS/2 #ifndef LINKAGEMODE #define LINKAGEMODE @@ -136,6 +223,12 @@ #endif #endif // __VISUALC__ +// 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' +#endif // __VISUALC__ + // suppress some Salford C++ warnings #ifdef __SALFORDC__ # pragma suppress 353 // Possible nested comments @@ -165,13 +258,15 @@ #define va_list __gnuc_va_list #endif // HP-UX +// This macro can be used to check that the version of mingw32 compiler is +// at least maj.min #if defined( __GNUWIN32__ ) || defined( __MINGW32__ ) || defined( __CYGWIN__ ) -#include "wx/msw/gccpriv.h" + #include "wx/msw/gccpriv.h" +#else + #undef wxCHECK_W32API_VERSION + #define wxCHECK_W32API_VERSION(maj, min) (0) #endif -////////////////////////////////////////////////////////////////////////////////// -// Currently Only MS-Windows/NT, XView and Motif are supported -// #if defined(__HPUX__) && !defined(__WXGTK__) #ifndef __WXMOTIF__ #define __WXMOTIF__ @@ -182,78 +277,19 @@ #define __X__ #endif -#ifdef __WXMSW__ - -#if defined(_WIN32) || defined(WIN32) || defined(__NT__) - #ifndef __WIN32__ - #define __WIN32__ - #endif -#endif - -#ifdef __WXWINE__ - #ifndef __WIN32__ - #define __WIN32__ - #endif - #ifndef __WIN95__ - #define __WIN95__ - #endif - #ifndef STRICT - #define STRICT - #endif -#endif - -#ifndef __WIN32__ -#define __WIN16__ -#endif - -#if !defined(__WIN95__) && (WINVER >= 0x0400) -#define __WIN95__ -#endif - -#if defined(TWIN32) && !defined(__TWIN32__) -#define __TWIN32__ -#endif - -#endif // wxMSW - // Make sure the environment is set correctly #if defined(__WXMSW__) && defined(__X__) #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(__WXSTUBS__) && wxUSE_GUI - #error "No Target! Use -D[__WXMOTIF__|__WXGTK__|__WXMSW__|__WXMAC__|__WXQT__|__WXPM__|__WXSTUBS__]" -#endif - -// ---------------------------------------------------------------------------- -// wxWindows options -// ---------------------------------------------------------------------------- - -#include - -#include "wx/setup.h" - -// just in case they were defined in setup.h -#ifdef PACKAGE -#undef PACKAGE -#endif - -#ifdef VERSION -#undef VERSION + !defined(__WXQT__) && !defined(__WXMGL__) && 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 -// this has to be done after including setup.h which might -// define __HPUX__ 1 itself -#if defined(__hpux) && !defined(__HPUX__) - #define __HPUX__ -#endif // HP-UX - -// if we're on a Unix system but didn't use configure (so that setup.h didn't -// define __UNIX__), do define __UNIX__ now -#if !defined(__UNIX__) && defined(__UNIX_LIKE__) - #define __UNIX__ -#endif // Unix - #include "wx/version.h" // ---------------------------------------------------------------------------- @@ -264,7 +300,10 @@ // 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 // ============================================================================ @@ -373,7 +412,7 @@ typedef int wxWindowID; // wxCALLBACK should be used for the functions which are called back by // Windows (such as compare function for wxListCtrl) -#if defined(__WIN32__) +#if defined(__WIN32__) && !defined(__WXMICROWIN__) #define wxCALLBACK wxSTDCALL #else // no stdcall under Unix nor Win16 @@ -399,8 +438,8 @@ typedef int wxWindowID; #if defined(__WXMSW__) -// __declspec works in BC++ 5 and later, as well as VC++ and gcc -#if defined(__VISUALC__) || defined(__BORLANDC__) || defined(__GNUC__) +// __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 @@ -462,8 +501,10 @@ typedef int wxWindowID; # define WXDLLIMPORT #endif +#ifdef __cplusplus class WXDLLEXPORT wxObject; class WXDLLEXPORT wxEvent; +#endif /** symbolic constant used by all Find()-like functions returning positive integer on success as failure indicator */ @@ -474,7 +515,12 @@ class WXDLLEXPORT wxEvent; // ---------------------------------------------------------------------------- // everybody gets the assert and other debug macros +#ifdef __cplusplus #include "wx/debug.h" +#endif + +// NULL declaration +#include //@{ /// delete pointer if it is not NULL and NULL it afterwards @@ -543,7 +589,9 @@ class WXDLLEXPORT wxEvent; #endif // Callback function type definition +#ifdef __cplusplus typedef void (*wxFunction) (wxObject&, wxEvent&); +#endif // ---------------------------------------------------------------------------- // OS mnemonics -- Identify the running OS (useful for Windows) @@ -820,7 +868,10 @@ enum wxAlignment wxALIGN_CENTRE_VERTICAL = wxALIGN_CENTER_VERTICAL, wxALIGN_CENTER = (wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL), - wxALIGN_CENTRE = wxALIGN_CENTER + wxALIGN_CENTRE = wxALIGN_CENTER, + + // a mask to extract alignment from the combination of flags + wxALIGN_MASK = 0x0f00 }; enum wxStretch @@ -830,7 +881,26 @@ enum wxStretch wxGROW = 0x2000, wxEXPAND = wxGROW, wxSHAPED = 0x4000, - wxADJUST_MINSIZE = 0x8000 + wxADJUST_MINSIZE = 0x8000, + wxTILE = 0xc000 +}; + +// border flags: the values are chosen for backwards compatibility +enum wxBorder +{ + // this is different from wxBORDER_NONE as by default the controls do have + // border + wxBORDER_DEFAULT = 0, + + wxBORDER_NONE = 0x00200000, + wxBORDER_STATIC = 0x01000000, + wxBORDER_SIMPLE = 0x02000000, + wxBORDER_RAISED = 0x04000000, + wxBORDER_SUNKEN = 0x08000000, + wxBORDER_DOUBLE = 0x10000000, + + // a mask to extract border style from the combination of flags + wxBORDER_MASK = 0x1f200000 }; // ---------------------------------------------------------------------------- @@ -857,31 +927,41 @@ enum wxStretch #define wxHSCROLL 0x40000000 #define wxCAPTION 0x20000000 -// New styles -#define wxDOUBLE_BORDER 0x10000000 -#define wxSUNKEN_BORDER 0x08000000 -#define wxRAISED_BORDER 0x04000000 -#define wxBORDER 0x02000000 -#define wxSIMPLE_BORDER wxBORDER -#define wxSTATIC_BORDER 0x01000000 -#define wxTRANSPARENT_WINDOW 0x00100000 -#define wxNO_BORDER 0x00200000 +// New styles (border styles are now in their own enum) +#define wxDOUBLE_BORDER wxBORDER_DOUBLE +#define wxSUNKEN_BORDER wxBORDER_SUNKEN +#define wxRAISED_BORDER wxBORDER_RAISED +#define wxBORDER wxBORDER_SIMPLE +#define wxSIMPLE_BORDER wxBORDER_SIMPLE +#define wxSTATIC_BORDER wxBORDER_STATIC +#define wxNO_BORDER wxBORDER_NONE // Override CTL3D etc. control colour processing to allow own background // colour. -// OBSOLETE - use wxNO_3D instead -#define wxUSER_COLOURS 0x00800000 // 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 +#define wxALWAYS_SHOW_SB 0x00800000 + // Clip children when painting, which reduces flicker in e.g. frames and // splitter windows, but can't be used in a panel where a static box must be // 'transparent' (panel paints the background for it) #define wxCLIP_CHILDREN 0x00400000 + // Note we're reusing the wxCAPTION style because we won't need captions // for subwindows/controls #define wxCLIP_SIBLINGS 0x20000000 +#define wxTRANSPARENT_WINDOW 0x00100000 + // Add this style to a panel to get tab traversal working outside of dialogs // (on by default for wxPanel, wxDialog, wxScrolledWindow) #define wxTAB_TRAVERSAL 0x00080000 @@ -890,10 +970,15 @@ enum wxStretch // Windows, it won't normally get the dialog navigation key events) #define wxWANTS_CHARS 0x00040000 -// Make window retained (mostly Motif, I think) +// Make window retained (mostly Motif, I think) -- obsolete (VZ)? #define wxRETAINED 0x00020000 #define wxBACKINGSTORE wxRETAINED +// set this flag to create a special popup window: it will be always shown on +// top of other windows, will capture the mouse and will be dismissed when the +// mouse is clicked outside of it or if it loses focus in any other way +#define wxPOPUP_WINDOW 0x00020000 + // don't invalidate the whole window (resulting in a PAINT event) when the // window is resized (currently, makes sense for wxMSW only) #define wxNO_FULL_REPAINT_ON_RESIZE 0x00010000 @@ -1020,7 +1105,8 @@ enum wxStretch #define wxLB_NEEDED_SB 0x0200 #define wxLB_ALWAYS_SB 0x0400 #define wxLB_HSCROLL wxHSCROLL - +// always show an entire number of rows +#define wxLB_INT_HEIGHT 0x0800 /* * wxTextCtrl style flags */ @@ -1035,10 +1121,18 @@ enum wxStretch #define wxTE_RICH 0x0080 #define wxTE_NO_VSCROLL 0x0100 #define wxTE_AUTO_SCROLL 0x0200 -#define wxPROCESS_ENTER 0x0400 -#define wxPASSWORD 0x0800 -#define wxTE_PROCESS_ENTER wxPROCESS_ENTER -#define wxTE_PASSWORD wxPASSWORD +#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 +#define wxTE_DONTWRAP wxHSCROLL +#define wxTE_LINEWRAP 0x0800 +#define wxTE_WORDWRAP 0x0000 // it's just == !wxHSCROLL + +// deprecated synonyms +#define wxPROCESS_ENTER wxTE_PROCESS_ENTER +#define wxPASSWORD wxTE_PASSWORD /* * wxComboBox style flags @@ -1051,9 +1145,15 @@ enum wxStretch /* * wxRadioBox style flags */ +// should we number the items from left to right or from top to bottom in a 2d +// radiobox? +#define wxRA_LEFTTORIGHT 0x0001 +#define wxRA_TOPTOBOTTOM 0x0002 + // New, more intuitive names to specify majorDim argument #define wxRA_SPECIFY_COLS wxHORIZONTAL #define wxRA_SPECIFY_ROWS wxVERTICAL + // Old names for compatibility #define wxRA_HORIZONTAL wxHORIZONTAL #define wxRA_VERTICAL wxVERTICAL @@ -1079,8 +1179,8 @@ enum wxStretch #define wxSL_VERTICAL wxVERTICAL // 8 // The next one is obsolete - use scroll events instead #define wxSL_NOTIFY_DRAG 0x0000 -#define wxSL_AUTOTICKS 0x0010 -// #define wxSL_MANUALTICKS 0x0010 +#define wxSL_TICKS 0x0010 +#define wxSL_AUTOTICKS wxSL_TICKS // we don't support manual ticks #define wxSL_LABELS 0x0020 #define wxSL_LEFT 0x0040 #define wxSL_TOP 0x0080 @@ -1117,36 +1217,8 @@ enum wxStretch #define wxTR_EXTENDED 0x0040 #define wxTR_HAS_VARIABLE_ROW_HEIGHT 0x0080 #define wxTR_NO_LINES 0x0100 - -/* - * wxListCtrl flags - */ -#define wxLC_VRULES 0x0001 -#define wxLC_HRULES 0x0002 -#define wxLC_ICON 0x0004 -#define wxLC_SMALL_ICON 0x0008 -#define wxLC_LIST 0x0010 -#define wxLC_REPORT 0x0020 -#define wxLC_ALIGN_TOP 0x0040 -#define wxLC_ALIGN_LEFT 0x0080 -#define wxLC_AUTOARRANGE 0x0100 -#define wxLC_USER_TEXT 0x0200 -#define wxLC_EDIT_LABELS 0x0400 -#define wxLC_NO_HEADER 0x0800 -#define wxLC_NO_SORT_HEADER 0x1000 -#define wxLC_SINGLE_SEL 0x2000 -#define wxLC_SORT_ASCENDING 0x4000 -#define wxLC_SORT_DESCENDING 0x8000 - -#define wxLC_MASK_TYPE (wxLC_ICON | wxLC_SMALL_ICON | wxLC_LIST | wxLC_REPORT) -#define wxLC_MASK_ALIGN (wxLC_ALIGN_TOP | wxLC_ALIGN_LEFT) -#define wxLC_MASK_SORT (wxLC_SORT_ASCENDING | wxLC_SORT_DESCENDING) - -// Omitted because (a) too much detail (b) not enough style flags -// #define wxLC_NO_SCROLL -// #define wxLC_NO_LABEL_WRAP -// #define wxLC_OWNERDRAW_FIXED -// #define wxLC_SHOW_SEL_ALWAYS +#define wxTR_MAC_BUTTONS 0x0200 +#define wxTR_ROW_LINES 0x0400 /* * wxSpinButton flags. @@ -1172,21 +1244,23 @@ enum wxStretch #define wxSP_FULLSASH 0x0400 #define wxSP_3D (wxSP_3DBORDER | wxSP_3DSASH) -/* - * wxTabCtrl flags - */ -#define wxTC_MULTILINE 0x0000 -#define wxTC_RIGHTJUSTIFY 0x0010 -#define wxTC_FIXEDWIDTH 0x0020 -#define wxTC_OWNERDRAW 0x0040 - /* * wxNotebook flags */ #define wxNB_FIXEDWIDTH 0x0010 +#define wxNB_TOP 0x0000 // default #define wxNB_LEFT 0x0020 #define wxNB_RIGHT 0x0040 #define wxNB_BOTTOM 0x0080 +#define wxNB_MULTILINE 0x0100 + +/* + * wxTabCtrl flags + */ +#define wxTC_RIGHTJUSTIFY 0x0010 +#define wxTC_FIXEDWIDTH 0x0020 +#define wxTC_OWNERDRAW 0x0040 +#define wxTC_MULTILINE wxNB_MULTILINE /* * wxStatusBar95 flags @@ -1198,6 +1272,11 @@ enum wxStretch */ #define wxST_NO_AUTORESIZE 0x0001 +/* + * wxStaticBitmap flags + */ +#define wxBI_EXPAND wxEXPAND + /* * wxStaticLine flags */ @@ -1336,6 +1415,36 @@ enum wxStretch #define wxID_FILEDLGG 5900 #define wxID_HIGHEST 5999 +// ---------------------------------------------------------------------------- +// constants +// ---------------------------------------------------------------------------- + +// hit test results +enum wxHitTest +{ + wxHT_NOWHERE, + + // scrollbar + wxHT_SCROLLBAR_FIRST = wxHT_NOWHERE, + wxHT_SCROLLBAR_ARROW_LINE_1, // left or upper arrow to scroll by line + wxHT_SCROLLBAR_ARROW_LINE_2, // right or down + wxHT_SCROLLBAR_ARROW_PAGE_1, // left or upper arrow to scroll by page + wxHT_SCROLLBAR_ARROW_PAGE_2, // right or down + wxHT_SCROLLBAR_THUMB, // on the thumb + wxHT_SCROLLBAR_BAR_1, // bar to the left/above the thumb + wxHT_SCROLLBAR_BAR_2, // bar to the right/below the thumb + wxHT_SCROLLBAR_LAST, + + // window + wxHT_WINDOW_OUTSIDE, // not in this window at all + wxHT_WINDOW_INSIDE, // in the client area + wxHT_WINDOW_VERT_SCROLLBAR, // on the vertical scrollbar + wxHT_WINDOW_HORZ_SCROLLBAR, // on the horizontal scrollbar + wxHT_WINDOW_CORNER, // on the corner between 2 scrollbars + + wxHT_MAX +}; + // ---------------------------------------------------------------------------- // Possible SetSize flags // ---------------------------------------------------------------------------- @@ -1874,7 +1983,7 @@ typedef struct tagLOGPALETTE } LOGPALETTE; #endif //__WXPM__ -#if defined(__GNUWIN32__) || defined(__WXWINE__) +#if defined(__GNUWIN32__) || defined(__WXWINE__) || defined(__WXMICROWIN__) typedef int (*WXFARPROC)(); #elif defined(__WIN32__) typedef int (__stdcall *WXFARPROC)(); @@ -1985,6 +2094,10 @@ typedef struct _PangoFontDescription PangoFontDescription; #endif #endif // GTK +#ifdef __WXMGL__ +typedef void *WXWidget; // FIXME_MGL - type-safe +#endif // MGL + // This is required because of clashing macros in windows.h, which may be // included before or after wxWindows classes, and therefore must be // disabled here before any significant wxWindows headers are included. @@ -2026,7 +2139,7 @@ typedef struct _PangoFontDescription PangoFontDescription; #define DECLARE_NO_COPY_CLASS(classname) \ private: \ classname(const classname&); \ - classname& operator=(const classname&) + classname& operator=(const classname&); #endif // _WX_DEFS_H_