X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/20947e08ca1865197bab22b3b5874fb104ceb16b..8e77fd8bca165aab9709649d79a7cbc6a172d4e1:/include/wx/os2/private.h diff --git a/include/wx/os2/private.h b/include/wx/os2/private.h index a80c7ddfd5..05a6dc36c6 100644 --- a/include/wx/os2/private.h +++ b/include/wx/os2/private.h @@ -1,7 +1,7 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: private.h +// Name: wx/os2/private.h // Purpose: Private declarations: as this header is only included by -// wxWindows itself, it may contain identifiers which don't start +// wxWidgets itself, it may contain identifiers which don't start // with "wx". // Author: Julian Smart // Modified by: @@ -11,45 +11,152 @@ // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// -#ifndef _WX_PRIVATE_H_ -#define _WX_PRIVATE_H_ +#ifndef _WX_OS2_PRIVATE_H_ +#define _WX_OS2_PRIVATE_H_ #define INCL_BASE #define INCL_PM #define INCL_GPI +#define INCL_WINSYS +#define INCL_GPIERRORS +#define INCL_DOS +#define INCL_DOSPROCESS +#define INCL_DOSERRORS +#define INCL_WIN +#define INCL_WINATOM +#define INCL_SHLERRORS + #include -class WXDLLEXPORT wxFont; -class WXDLLEXPORT wxWindow; +#if wxONLY_WATCOM_EARLIER_THAN(1,4) + inline HATOMTBL APIENTRY WinQuerySystemAtomTable(VOID){return NULL;} + inline ULONG APIENTRY WinQueryAtomName(HATOMTBL,ATOM,PCSZ,ULONG){return 0;} + inline LONG APIENTRY GpiPointArc(HPS,PPOINTL){return GPI_ERROR;} + inline BOOL APIENTRY WinDrawPointer(HPS,LONG,LONG,HPOINTER,ULONG){return FALSE;} + inline HPOINTER APIENTRY WinCreatePointerIndirect(HWND,PPOINTERINFO){return NULLHANDLE;} + inline BOOL APIENTRY WinGetMaxPosition(HWND,PSWP){return FALSE;} + inline BOOL APIENTRY WinGetMinPosition(HWND,PSWP,PPOINTL){return FALSE;} +#endif -// --------------------------------------------------------------------------- -// private constants -// --------------------------------------------------------------------------- +#if defined(__WATCOMC__) && defined(__WXMOTIF__) + #include + #define I_NEED_OS2_H + #include + + // include this header from here for many of the GUI related code + #if wxUSE_GUI + extern "C" { + #include + } + #endif + + // provide Unix-like pipe() + #include + #include + #include + // Use ::DosCreatePipe or ::DosCreateNPipe under OS/2 + // for more see http://posix2.sourceforge.net/guide.html + inline int pipe( int WXUNUSED(filedes)[2] ) + { + wxFAIL_MSG(wxT("Implement first")); + return -1; + } +#endif + +#if defined (__EMX__) && !defined(USE_OS2_TOOLKIT_HEADERS) && !defined(HAVE_SPBCDATA) -// Conversion -static const double METRIC_CONVERSION_CONSTANT = 0.0393700787; + typedef struct _SPBCDATA { + ULONG cbSize; /* Size of control block. */ + ULONG ulTextLimit; /* Entryfield text limit. */ + LONG lLowerLimit; /* Spin lower limit (numeric only). */ + LONG lUpperLimit; /* Spin upper limit (numeric only). */ + ULONG idMasterSpb; /* ID of the servant's master spinbutton. */ + PVOID pHWXCtlData; /* Handwriting control data structure flag. */ + } SPBCDATA; -// Scaling factors for various unit conversions -static const double mm2inches = (METRIC_CONVERSION_CONSTANT); -static const double inches2mm = (1/METRIC_CONVERSION_CONSTANT); + typedef SPBCDATA *PSPBCDATA; -static const double mm2twips = (METRIC_CONVERSION_CONSTANT*1440); -static const double twips2mm = (1/(METRIC_CONVERSION_CONSTANT*1440)); +#endif + +#include "wx/dlimpexp.h" +#include "wx/fontenc.h" + +class WXDLLIMPEXP_FWD_CORE wxFont; +class WXDLLIMPEXP_FWD_CORE wxWindow; +class WXDLLIMPEXP_FWD_BASE wxString; +class WXDLLIMPEXP_FWD_CORE wxBitmap; + +// --------------------------------------------------------------------------- +// private constants +// --------------------------------------------------------------------------- -static const double mm2pt = (METRIC_CONVERSION_CONSTANT*72); -static const double pt2mm = (1/(METRIC_CONVERSION_CONSTANT*72)); +// +// Constant strings for control names and classes +// + +// +// Controls +// +WXDLLIMPEXP_DATA_CORE(extern const char) wxButtonNameStr[]; +WXDLLIMPEXP_DATA_CORE(extern const char) wxCheckBoxNameStr[]; +WXDLLIMPEXP_DATA_CORE(extern const char) wxChoiceNameStr[]; +WXDLLIMPEXP_DATA_CORE(extern const char) wxComboBoxNameStr[]; +WXDLLIMPEXP_DATA_CORE(extern const char) wxDialogNameStr[]; +WXDLLIMPEXP_DATA_CORE(extern const char) wxFrameNameStr[]; +WXDLLIMPEXP_DATA_CORE(extern const char) wxGaugeNameStr[]; +WXDLLIMPEXP_DATA_CORE(extern const char) wxStaticBoxNameStr[]; +WXDLLIMPEXP_DATA_CORE(extern const char) wxListBoxNameStr[]; +WXDLLIMPEXP_DATA_CORE(extern const char) wxStaticLineNameStr[]; +WXDLLIMPEXP_DATA_CORE(extern const char) wxStaticTextNameStr[]; +WXDLLIMPEXP_DATA_CORE(extern const char) wxStaticBitmapNameStr[]; +WXDLLIMPEXP_DATA_CORE(extern const char) wxPanelNameStr[]; +WXDLLIMPEXP_DATA_CORE(extern const char) wxRadioBoxNameStr[]; +WXDLLIMPEXP_DATA_CORE(extern const char) wxRadioButtonNameStr[]; +WXDLLIMPEXP_DATA_CORE(extern const char) wxBitmapRadioButtonNameStr[]; +WXDLLIMPEXP_DATA_CORE(extern const char) wxScrollBarNameStr[]; +WXDLLIMPEXP_DATA_CORE(extern const char) wxSliderNameStr[]; +WXDLLIMPEXP_DATA_CORE(extern const char) wxTextCtrlNameStr[]; +WXDLLIMPEXP_DATA_CORE(extern const char) wxToolBarNameStr[]; +WXDLLIMPEXP_DATA_CORE(extern const char) wxStatusLineNameStr[]; +WXDLLIMPEXP_DATA_CORE(extern const char) wxGetTextFromUserPromptStr[]; +WXDLLIMPEXP_DATA_CORE(extern const char) wxMessageBoxCaptionStr[]; +WXDLLIMPEXP_DATA_CORE(extern const char) wxFileSelectorPromptStr[]; +WXDLLIMPEXP_DATA_CORE(extern const char) wxFileSelectorDefaultWildcardStr[]; +WXDLLIMPEXP_DATA_CORE(extern const wxChar*) wxInternalErrorStr; +WXDLLIMPEXP_DATA_CORE(extern const wxChar*) wxFatalErrorStr; +WXDLLIMPEXP_DATA_CORE(extern const char) wxTreeCtrlNameStr[]; +WXDLLIMPEXP_DATA_CORE(extern const char) wxDirDialogNameStr[]; +WXDLLIMPEXP_DATA_CORE(extern const char) wxDirDialogDefaultFolderStr[]; + +// +// Class names +// +WXDLLIMPEXP_DATA_CORE(extern const wxChar*) wxFrameClassName; +WXDLLIMPEXP_DATA_CORE(extern const wxChar*) wxFrameClassNameNoRedraw; +WXDLLIMPEXP_DATA_CORE(extern const wxChar*) wxMDIFrameClassName; +WXDLLIMPEXP_DATA_CORE(extern const wxChar*) wxMDIFrameClassNameNoRedraw; +WXDLLIMPEXP_DATA_CORE(extern const wxChar*) wxMDIChildFrameClassName; +WXDLLIMPEXP_DATA_CORE(extern const wxChar*) wxMDIChildFrameClassNameNoRedraw; +WXDLLIMPEXP_DATA_CORE(extern const wxChar*) wxPanelClassName; +WXDLLIMPEXP_DATA_CORE(extern const wxChar*) wxPanelClassNameNR; +WXDLLIMPEXP_DATA_CORE(extern const wxChar*) wxCanvasClassName; +WXDLLIMPEXP_DATA_CORE(extern const wxChar*) wxCanvasClassNameNR; // --------------------------------------------------------------------------- // standard icons from the resources // --------------------------------------------------------------------------- -WXDLLEXPORT_DATA(extern HICON) wxSTD_FRAME_ICON; -WXDLLEXPORT_DATA(extern HICON) wxSTD_MDIPARENTFRAME_ICON; -WXDLLEXPORT_DATA(extern HICON) wxSTD_MDICHILDFRAME_ICON; -WXDLLEXPORT_DATA(extern HICON) wxDEFAULT_FRAME_ICON; -WXDLLEXPORT_DATA(extern HICON) wxDEFAULT_MDIPARENTFRAME_ICON; -WXDLLEXPORT_DATA(extern HICON) wxDEFAULT_MDICHILDFRAME_ICON; -WXDLLEXPORT_DATA(extern HFONT) wxSTATUS_LINE_FONT; +#ifdef __WXPM__ + +WXDLLIMPEXP_DATA_CORE(extern HICON) wxSTD_FRAME_ICON; +WXDLLIMPEXP_DATA_CORE(extern HICON) wxSTD_MDIPARENTFRAME_ICON; +WXDLLIMPEXP_DATA_CORE(extern HICON) wxSTD_MDICHILDFRAME_ICON; +WXDLLIMPEXP_DATA_CORE(extern HICON) wxDEFAULT_FRAME_ICON; +WXDLLIMPEXP_DATA_CORE(extern HICON) wxDEFAULT_MDIPARENTFRAME_ICON; +WXDLLIMPEXP_DATA_CORE(extern HICON) wxDEFAULT_MDICHILDFRAME_ICON; +WXDLLIMPEXP_DATA_CORE(extern HFONT) wxSTATUS_LINE_FONT; + +#endif // --------------------------------------------------------------------------- // this defines a CASTWNDPROC macro which casts a pointer to the type of a @@ -60,30 +167,20 @@ WXDLLEXPORT_DATA(extern HFONT) wxSTATUS_LINE_FONT; typedef MRESULT (APIENTRY * WndProcCast) (HWND, ULONG, MPARAM, MPARAM); #define CASTWNDPROC (WndProcCast) -#if wxUSE_ITSY_BITSY - #define IBS_HORZCAPTION 0x4000L - #define IBS_VERTCAPTION 0x8000L - - UINT APIENTRY ibGetCaptionSize( HWND hWnd ) ; - UINT APIENTRY ibSetCaptionSize( HWND hWnd, UINT nSize ) ; - MRESULT APIENTRY ibDefWindowProc( HWND hWnd, ULONG ulMsg, MPARAM wParam, MPARAM lParam ) ; - VOID APIENTRY ibAdjustWindowRect( HWND hWnd, LPRECT lprc ) ; -#endif // wxUSE_ITSY_BITSY - /* * Decide what window classes we're going to use * for this combination of CTl3D/FAFA settings */ -#define STATIC_CLASS _T("STATIC") +#define STATIC_CLASS wxT("STATIC") #define STATIC_FLAGS (SS_TEXT|DT_LEFT|SS_LEFT|WS_VISIBLE) -#define CHECK_CLASS _T("BUTTON") +#define CHECK_CLASS wxT("BUTTON") #define CHECK_FLAGS (BS_AUTOCHECKBOX|WS_TABSTOP) -#define CHECK_IS_FAFA FALSE -#define RADIO_CLASS _T("BUTTON" ) +#define CHECK_IS_FAFA FALSE +#define RADIO_CLASS wxT("BUTTON" ) #define RADIO_FLAGS (BS_AUTORADIOBUTTON|WS_VISIBLE) #define RADIO_SIZE 20 -#define RADIO_IS_FAFA FALSE +#define RADIO_IS_FAFA FALSE #define PURE_WINDOWS /* PM has no group box button style #define GROUP_CLASS "BUTTON" @@ -106,22 +203,54 @@ typedef MRESULT (APIENTRY * WndProcCast) (HWND, ULONG, MPARAM, MPARAM); // Scale font to get edit control height #define EDIT_HEIGHT_FROM_CHAR_HEIGHT(cy) (3*(cy)/2) +#ifdef __WXPM__ + // Generic subclass proc, for panel item moving/sizing and intercept // EDIT control VK_RETURN messages extern LONG APIENTRY wxSubclassedGenericControlProc(WXHWND hWnd, WXDWORD message, WXWPARAM wParam, WXLPARAM lParam); +#endif + // --------------------------------------------------------------------------- // constants which might miss from some compilers' headers // --------------------------------------------------------------------------- #if !defined(WS_EX_CLIENTEDGE) - #define WS_EX_CLIENTEDGE 0 + #define WS_EX_CLIENTEDGE 0x00000200L #endif #ifndef ENDSESSION_LOGOFF #define ENDSESSION_LOGOFF 0x80000000 #endif +#ifndef PMERR_INVALID_PARM + #define PMERR_INVALID_PARM 0x1303 +#endif + +#ifndef PMERR_INVALID_PARAMETERS + #define PMERR_INVALID_PARAMETERS 0x1208 +#endif + +#ifndef BOOKERR_INVALID_PARAMETERS + #define BOOKERR_INVALID_PARAMETERS -1 +#endif + +#ifndef DLGC_ENTRYFIELD + #define DLGC_ENTRYFIELD 0x0001 +#endif + +#ifndef DLGC_BUTTON + #define DLGC_BUTTON 0x0002 +#endif + +#ifndef DLGC_MLE + #define DLGC_MLE 0x0400 +#endif + +#ifndef DP_NORMAL + #define DP_NORMAL 0 +#endif + // --------------------------------------------------------------------------- // debug messages -- OS/2 has no native debug output system // --------------------------------------------------------------------------- @@ -141,6 +270,9 @@ extern LONG APIENTRY wxSubclassedGenericControlProc(WXHWND hWnd, WXDWORD message #define GetHdc() ((HDC)GetHDC()) #define GetHdcOf(dc) ((HDC)(dc).GetHDC()) +#define GetHbitmap() ((HBITMAP)GetHBITMAP()) +#define GetHbitmapOf(bmp) ((HBITMAP)(bmp).GetHBITMAP()) + #define GetHicon() ((HICON)GetHICON()) #define GetHiconOf(icon) ((HICON)(icon).GetHICON()) @@ -150,50 +282,111 @@ extern LONG APIENTRY wxSubclassedGenericControlProc(WXHWND hWnd, WXDWORD message #define GetHmenu() ((HMENU)GetHMenu()) #define GetHmenuOf(menu) ((HMENU)menu->GetHMenu()) +#define GetHcursor() ((HCURSOR)GetHCURSOR()) +#define GetHcursorOf(cursor) ((HCURSOR)(cursor).GetHCURSOR()) + +#define GetHfont() ((HFONT)GetHFONT()) +#define GetHfontOf(font) ((HFONT)(font).GetHFONT()) + +// OS/2 convention of the mask is opposed to the wxWidgets one, so we need +// to invert the mask each time we pass one/get one to/from Windows +extern HBITMAP wxInvertMask(HBITMAP hbmpMask, int w = 0, int h = 0); +extern HBITMAP wxCopyBmp(HBITMAP hbmp, bool flip=false, int w=0, int h=0); + // --------------------------------------------------------------------------- // global data // --------------------------------------------------------------------------- +#ifdef __WXPM__ // The MakeProcInstance version of the function wxSubclassedGenericControlProc -WXDLLEXPORT_DATA(extern) wxGenericControlSubClassProc; -WXDLLEXPORT_DATA(extern wxChar*) wxBuffer; -WXDLLEXPORT_DATA(extern HINSTANCE) wxhInstance; +WXDLLIMPEXP_DATA_CORE(extern int) wxGenericControlSubClassProc; +WXDLLIMPEXP_DATA_CORE(extern wxChar*) wxBuffer; +WXDLLIMPEXP_DATA_CORE(extern HINSTANCE) wxhInstance; +#endif // --------------------------------------------------------------------------- // global functions // --------------------------------------------------------------------------- +#ifdef __WXPM__ extern "C" { -WXDLLEXPORT HINSTANCE wxGetInstance(); +WXDLLIMPEXP_CORE HINSTANCE wxGetInstance(); } -WXDLLEXPORT void wxSetInstance(HINSTANCE hInst); - -WXDLLEXPORT wxWindow* wxFindWinFromHandle(WXHWND hWnd); - -WXDLLEXPORT void wxGetCharSize(WXHWND wnd, int *x, int *y,wxFont *the_font); -WXDLLEXPORT void wxFillLogFont(LOGFONT *logFont, wxFont *font); -WXDLLEXPORT wxFont wxCreateFontFromLogFont(LOGFONT *logFont); +WXDLLIMPEXP_CORE void wxSetInstance(HINSTANCE hInst); +#endif -WXDLLEXPORT void wxSliderEvent(WXHWND control, WXWORD wParam, WXWORD pos); -WXDLLEXPORT void wxScrollBarEvent(WXHWND hbar, WXWORD wParam, WXWORD pos); +#include "wx/thread.h" +static inline MRESULT MySendMsg(HWND hwnd, ULONG ulMsgid, + MPARAM mpParam1, MPARAM mpParam2) +{ + MRESULT vRes; + vRes = ::WinSendMsg(hwnd, ulMsgid, mpParam1, mpParam2); +#if wxUSE_THREADS + if (!wxThread::IsMain()) + ::WinPostMsg(hwnd, ulMsgid, mpParam1, mpParam2); +#endif + return vRes; +} +#define WinSendMsg MySendMsg + +#ifdef __WXPM__ + +WXDLLIMPEXP_CORE void wxDrawBorder( HPS hPS + ,RECTL& rRect + ,WXDWORD dwStyle + ); + +WXDLLIMPEXP_CORE wxWindow* wxFindWinFromHandle(WXHWND hWnd); + +WXDLLIMPEXP_CORE void wxGetCharSize(WXHWND wnd, int *x, int *y,wxFont *the_font); + +WXDLLIMPEXP_CORE void wxConvertVectorFontSize( FIXED fxPointSize + ,PFATTRS pFattrs + ); +WXDLLIMPEXP_CORE void wxFillLogFont( LOGFONT* pLogFont + ,PFACENAMEDESC pFaceName + ,HPS* phPS + ,bool* pbInternalPS + ,long* pflId + ,wxString& sFaceName + ,wxFont* pFont + ); +WXDLLIMPEXP_CORE wxFontEncoding wxGetFontEncFromCharSet(int nCharSet); +WXDLLIMPEXP_CORE void wxOS2SelectMatchingFontByName( PFATTRS vFattrs + ,PFACENAMEDESC pFaceName + ,PFONTMETRICS pFM + ,int nNumFonts + ,const wxFont* pFont + ); +WXDLLIMPEXP_CORE wxFont wxCreateFontFromLogFont( LOGFONT* pLogFont + ,PFONTMETRICS pFM + ,PFACENAMEDESC pFace + ); +WXDLLIMPEXP_CORE int wxGpiStrcmp(wxChar* s0, wxChar* s1); + +WXDLLIMPEXP_CORE void wxSliderEvent(WXHWND control, WXWORD wParam, WXWORD pos); +WXDLLIMPEXP_CORE void wxScrollBarEvent(WXHWND hbar, WXWORD wParam, WXWORD pos); // Find maximum size of window/rectangle -WXDLLEXPORT extern void wxFindMaxSize(WXHWND hwnd, RECT *rect); +WXDLLIMPEXP_CORE extern void wxFindMaxSize(WXHWND hwnd, RECT *rect); -WXDLLEXPORT wxWindow* wxFindControlFromHandle(WXHWND hWnd); -WXDLLEXPORT void wxAddControlHandle(WXHWND hWnd, wxWindow *item); +WXDLLIMPEXP_CORE wxWindow* wxFindControlFromHandle(WXHWND hWnd); +WXDLLIMPEXP_CORE void wxAddControlHandle(WXHWND hWnd, wxWindow *item); // Safely get the window text (i.e. without using fixed size buffer) -WXDLLEXPORT extern wxString wxGetWindowText(WXHWND hWnd); +WXDLLIMPEXP_CORE extern wxString wxGetWindowText(WXHWND hWnd); // get the window class name -WXDLLEXPORT extern wxString wxGetWindowClass(WXHWND hWnd); +WXDLLIMPEXP_CORE extern wxString wxGetWindowClass(WXHWND hWnd); // get the window id (should be unsigned, hence this is not wxWindowID which // is, for mainly historical reasons, signed) -WXDLLEXPORT extern WXWORD wxGetWindowId(WXHWND hWnd); +WXDLLIMPEXP_CORE extern WXWORD wxGetWindowId(WXHWND hWnd); + +// Convert a PM Error code to a string +WXDLLIMPEXP_BASE extern wxString wxPMErrorToStr(ERRORID vError); // Does this window style specify any border? inline bool wxStyleHasBorder(long style) @@ -202,5 +395,30 @@ inline bool wxStyleHasBorder(long style) wxSUNKEN_BORDER | wxDOUBLE_BORDER)) != 0; } +inline RECTL wxGetWindowRect(HWND hWnd) +{ + RECTL vRect; + + ::WinQueryWindowRect(hWnd, &vRect); + return vRect; +} // end of wxGetWindowRect + +WXDLLIMPEXP_CORE extern void wxOS2SetFont( HWND hWnd + ,const wxFont& rFont + ); + + +WXDLLIMPEXP_CORE extern bool wxCheckWindowWndProc( WXHWND hWnd + ,WXFARPROC fnWndProc + ); +WXDLLIMPEXP_CORE extern wxBitmap wxDisableBitmap( const wxBitmap& rBmp + ,long lColor + ); +#if wxUSE_GUI +class wxColour; +WXDLLIMPEXP_CORE extern COLORREF wxColourToRGB(const wxColour& rColor); #endif - // _WX_PRIVATE_H_ + +#endif // __WXPM__ + +#endif // _WX_OS2_PRIVATE_H_