| 1 | ///////////////////////////////////////////////////////////////////////////// |
| 2 | // Name: wx/os2/private.h |
| 3 | // Purpose: Private declarations: as this header is only included by |
| 4 | // wxWidgets itself, it may contain identifiers which don't start |
| 5 | // with "wx". |
| 6 | // Author: Julian Smart |
| 7 | // Modified by: |
| 8 | // Created: 01/02/97 |
| 9 | // RCS-ID: $Id$ |
| 10 | // Copyright: (c) Julian Smart |
| 11 | // Licence: wxWindows licence |
| 12 | ///////////////////////////////////////////////////////////////////////////// |
| 13 | |
| 14 | #ifndef _WX_OS2_PRIVATE_H_ |
| 15 | #define _WX_OS2_PRIVATE_H_ |
| 16 | |
| 17 | #define INCL_BASE |
| 18 | #define INCL_PM |
| 19 | #define INCL_GPI |
| 20 | #define INCL_WINSYS |
| 21 | #define INCL_SHLERRORS |
| 22 | #define INCL_GPIERRORS |
| 23 | #define INCL_DOS |
| 24 | #define INCL_WINATOM |
| 25 | #define INCL_WIN |
| 26 | #include <os2.h> |
| 27 | |
| 28 | #if wxONLY_WATCOM_EARLIER_THAN(1,4) |
| 29 | inline HATOMTBL APIENTRY WinQuerySystemAtomTable(VOID){return NULL;} |
| 30 | inline ULONG APIENTRY WinQueryAtomName(HATOMTBL,ATOM,PCSZ,ULONG){return 0;} |
| 31 | inline LONG APIENTRY GpiPointArc(HPS,PPOINTL){return GPI_ERROR;} |
| 32 | inline BOOL APIENTRY WinDrawPointer(HPS,LONG,LONG,HPOINTER,ULONG){return FALSE;} |
| 33 | inline HPOINTER APIENTRY WinCreatePointerIndirect(HWND,PPOINTERINFO){return NULLHANDLE;} |
| 34 | inline BOOL APIENTRY WinGetMaxPosition(HWND,PSWP){return FALSE;} |
| 35 | inline BOOL APIENTRY WinGetMinPosition(HWND,PSWP,PPOINTL){return FALSE;} |
| 36 | #endif |
| 37 | |
| 38 | #if defined(__WATCOMC__) && defined(__WXMOTIF__) |
| 39 | #include <os2def.h> |
| 40 | #define I_NEED_OS2_H |
| 41 | #include <X11/Xmd.h> |
| 42 | |
| 43 | // include this header from here for many of the GUI related code |
| 44 | #if wxUSE_GUI |
| 45 | extern "C" { |
| 46 | #include <Xm/VendorSP.h> |
| 47 | } |
| 48 | #endif |
| 49 | |
| 50 | // provide Unix-like pipe() |
| 51 | #include <types.h> |
| 52 | #include <tcpustd.h> |
| 53 | #include <sys/time.h> |
| 54 | // Use ::DosCreatePipe or ::DosCreateNPipe under OS/2 |
| 55 | // for more see http://posix2.sourceforge.net/guide.html |
| 56 | inline int pipe( int WXUNUSED(filedes)[2] ) |
| 57 | { |
| 58 | wxFAIL_MSG(wxT("Implement first")); |
| 59 | return -1; |
| 60 | } |
| 61 | #endif |
| 62 | |
| 63 | #if defined (__EMX__) && !defined(USE_OS2_TOOLKIT_HEADERS) && !defined(HAVE_SPBCDATA) |
| 64 | |
| 65 | typedef struct _SPBCDATA { |
| 66 | ULONG cbSize; /* Size of control block. */ |
| 67 | ULONG ulTextLimit; /* Entryfield text limit. */ |
| 68 | LONG lLowerLimit; /* Spin lower limit (numeric only). */ |
| 69 | LONG lUpperLimit; /* Spin upper limit (numeric only). */ |
| 70 | ULONG idMasterSpb; /* ID of the servant's master spinbutton. */ |
| 71 | PVOID pHWXCtlData; /* Handwriting control data structure flag. */ |
| 72 | } SPBCDATA; |
| 73 | |
| 74 | typedef SPBCDATA *PSPBCDATA; |
| 75 | |
| 76 | #endif |
| 77 | |
| 78 | #include "wx/dlimpexp.h" |
| 79 | #include "wx/fontenc.h" |
| 80 | |
| 81 | class WXDLLIMPEXP_FWD_CORE wxFont; |
| 82 | class WXDLLIMPEXP_FWD_CORE wxWindow; |
| 83 | class WXDLLIMPEXP_FWD_BASE wxString; |
| 84 | class WXDLLIMPEXP_FWD_CORE wxBitmap; |
| 85 | |
| 86 | // --------------------------------------------------------------------------- |
| 87 | // private constants |
| 88 | // --------------------------------------------------------------------------- |
| 89 | |
| 90 | // |
| 91 | // Constant strings for control names and classes |
| 92 | // |
| 93 | |
| 94 | // |
| 95 | // Controls |
| 96 | // |
| 97 | WXDLLEXPORT_DATA(extern const char) wxButtonNameStr[]; |
| 98 | WXDLLEXPORT_DATA(extern const char) wxCheckBoxNameStr[]; |
| 99 | WXDLLEXPORT_DATA(extern const char) wxChoiceNameStr[]; |
| 100 | WXDLLEXPORT_DATA(extern const char) wxComboBoxNameStr[]; |
| 101 | WXDLLEXPORT_DATA(extern const char) wxDialogNameStr[]; |
| 102 | WXDLLEXPORT_DATA(extern const char) wxFrameNameStr[]; |
| 103 | WXDLLEXPORT_DATA(extern const char) wxGaugeNameStr[]; |
| 104 | WXDLLEXPORT_DATA(extern const char) wxStaticBoxNameStr[]; |
| 105 | WXDLLEXPORT_DATA(extern const char) wxListBoxNameStr[]; |
| 106 | WXDLLEXPORT_DATA(extern const char) wxStaticLineNameStr[]; |
| 107 | WXDLLEXPORT_DATA(extern const char) wxStaticTextNameStr[]; |
| 108 | WXDLLEXPORT_DATA(extern const char) wxStaticBitmapNameStr[]; |
| 109 | WXDLLEXPORT_DATA(extern const char) wxPanelNameStr[]; |
| 110 | WXDLLEXPORT_DATA(extern const char) wxRadioBoxNameStr[]; |
| 111 | WXDLLEXPORT_DATA(extern const char) wxRadioButtonNameStr[]; |
| 112 | WXDLLEXPORT_DATA(extern const char) wxBitmapRadioButtonNameStr[]; |
| 113 | WXDLLEXPORT_DATA(extern const char) wxScrollBarNameStr[]; |
| 114 | WXDLLEXPORT_DATA(extern const char) wxSliderNameStr[]; |
| 115 | WXDLLEXPORT_DATA(extern const char) wxTextCtrlNameStr[]; |
| 116 | WXDLLEXPORT_DATA(extern const char) wxToolBarNameStr[]; |
| 117 | WXDLLEXPORT_DATA(extern const char) wxStatusLineNameStr[]; |
| 118 | WXDLLEXPORT_DATA(extern const char) wxGetTextFromUserPromptStr[]; |
| 119 | WXDLLEXPORT_DATA(extern const char) wxMessageBoxCaptionStr[]; |
| 120 | WXDLLEXPORT_DATA(extern const char) wxFileSelectorPromptStr[]; |
| 121 | WXDLLEXPORT_DATA(extern const char) wxFileSelectorDefaultWildcardStr[]; |
| 122 | WXDLLEXPORT_DATA(extern const wxChar*) wxInternalErrorStr; |
| 123 | WXDLLEXPORT_DATA(extern const wxChar*) wxFatalErrorStr; |
| 124 | WXDLLEXPORT_DATA(extern const char) wxTreeCtrlNameStr[]; |
| 125 | WXDLLEXPORT_DATA(extern const char) wxDirDialogNameStr[]; |
| 126 | WXDLLEXPORT_DATA(extern const char) wxDirDialogDefaultFolderStr[]; |
| 127 | |
| 128 | // |
| 129 | // Class names |
| 130 | // |
| 131 | WXDLLEXPORT_DATA(extern const wxChar*) wxFrameClassName; |
| 132 | WXDLLEXPORT_DATA(extern const wxChar*) wxFrameClassNameNoRedraw; |
| 133 | WXDLLEXPORT_DATA(extern const wxChar*) wxMDIFrameClassName; |
| 134 | WXDLLEXPORT_DATA(extern const wxChar*) wxMDIFrameClassNameNoRedraw; |
| 135 | WXDLLEXPORT_DATA(extern const wxChar*) wxMDIChildFrameClassName; |
| 136 | WXDLLEXPORT_DATA(extern const wxChar*) wxMDIChildFrameClassNameNoRedraw; |
| 137 | WXDLLEXPORT_DATA(extern const wxChar*) wxPanelClassName; |
| 138 | WXDLLEXPORT_DATA(extern const wxChar*) wxPanelClassNameNR; |
| 139 | WXDLLEXPORT_DATA(extern const wxChar*) wxCanvasClassName; |
| 140 | WXDLLEXPORT_DATA(extern const wxChar*) wxCanvasClassNameNR; |
| 141 | |
| 142 | // --------------------------------------------------------------------------- |
| 143 | // standard icons from the resources |
| 144 | // --------------------------------------------------------------------------- |
| 145 | |
| 146 | #ifdef __WXPM__ |
| 147 | |
| 148 | WXDLLEXPORT_DATA(extern HICON) wxSTD_FRAME_ICON; |
| 149 | WXDLLEXPORT_DATA(extern HICON) wxSTD_MDIPARENTFRAME_ICON; |
| 150 | WXDLLEXPORT_DATA(extern HICON) wxSTD_MDICHILDFRAME_ICON; |
| 151 | WXDLLEXPORT_DATA(extern HICON) wxDEFAULT_FRAME_ICON; |
| 152 | WXDLLEXPORT_DATA(extern HICON) wxDEFAULT_MDIPARENTFRAME_ICON; |
| 153 | WXDLLEXPORT_DATA(extern HICON) wxDEFAULT_MDICHILDFRAME_ICON; |
| 154 | WXDLLEXPORT_DATA(extern HFONT) wxSTATUS_LINE_FONT; |
| 155 | |
| 156 | #endif |
| 157 | |
| 158 | // --------------------------------------------------------------------------- |
| 159 | // this defines a CASTWNDPROC macro which casts a pointer to the type of a |
| 160 | // window proc for PM. |
| 161 | // MPARAM is a void * but is really a 32-bit value |
| 162 | // --------------------------------------------------------------------------- |
| 163 | |
| 164 | typedef MRESULT (APIENTRY * WndProcCast) (HWND, ULONG, MPARAM, MPARAM); |
| 165 | #define CASTWNDPROC (WndProcCast) |
| 166 | |
| 167 | /* |
| 168 | * Decide what window classes we're going to use |
| 169 | * for this combination of CTl3D/FAFA settings |
| 170 | */ |
| 171 | |
| 172 | #define STATIC_CLASS _T("STATIC") |
| 173 | #define STATIC_FLAGS (SS_TEXT|DT_LEFT|SS_LEFT|WS_VISIBLE) |
| 174 | #define CHECK_CLASS _T("BUTTON") |
| 175 | #define CHECK_FLAGS (BS_AUTOCHECKBOX|WS_TABSTOP) |
| 176 | #define CHECK_IS_FAFA FALSE |
| 177 | #define RADIO_CLASS _T("BUTTON" ) |
| 178 | #define RADIO_FLAGS (BS_AUTORADIOBUTTON|WS_VISIBLE) |
| 179 | #define RADIO_SIZE 20 |
| 180 | #define RADIO_IS_FAFA FALSE |
| 181 | #define PURE_WINDOWS |
| 182 | /* PM has no group box button style |
| 183 | #define GROUP_CLASS "BUTTON" |
| 184 | #define GROUP_FLAGS (BS_GROUPBOX|WS_CHILD|WS_VISIBLE) |
| 185 | */ |
| 186 | |
| 187 | /* |
| 188 | #define BITCHECK_FLAGS (FB_BITMAP|FC_BUTTONDRAW|FC_DEFAULT|WS_VISIBLE) |
| 189 | #define BITRADIO_FLAGS (FC_BUTTONDRAW|FB_BITMAP|FC_RADIO|WS_CHILD|WS_VISIBLE) |
| 190 | */ |
| 191 | |
| 192 | // --------------------------------------------------------------------------- |
| 193 | // misc macros |
| 194 | // --------------------------------------------------------------------------- |
| 195 | |
| 196 | #define MEANING_CHARACTER '0' |
| 197 | #define DEFAULT_ITEM_WIDTH 200 |
| 198 | #define DEFAULT_ITEM_HEIGHT 80 |
| 199 | |
| 200 | // Scale font to get edit control height |
| 201 | #define EDIT_HEIGHT_FROM_CHAR_HEIGHT(cy) (3*(cy)/2) |
| 202 | |
| 203 | #ifdef __WXPM__ |
| 204 | |
| 205 | // Generic subclass proc, for panel item moving/sizing and intercept |
| 206 | // EDIT control VK_RETURN messages |
| 207 | extern LONG APIENTRY wxSubclassedGenericControlProc(WXHWND hWnd, WXDWORD message, WXWPARAM wParam, WXLPARAM lParam); |
| 208 | |
| 209 | #endif |
| 210 | |
| 211 | // --------------------------------------------------------------------------- |
| 212 | // constants which might miss from some compilers' headers |
| 213 | // --------------------------------------------------------------------------- |
| 214 | |
| 215 | #if !defined(WS_EX_CLIENTEDGE) |
| 216 | #define WS_EX_CLIENTEDGE 0x00000200L |
| 217 | #endif |
| 218 | |
| 219 | #ifndef ENDSESSION_LOGOFF |
| 220 | #define ENDSESSION_LOGOFF 0x80000000 |
| 221 | #endif |
| 222 | |
| 223 | #ifndef PMERR_INVALID_PARM |
| 224 | #define PMERR_INVALID_PARM 0x1303 |
| 225 | #endif |
| 226 | |
| 227 | #ifndef PMERR_INVALID_PARAMETERS |
| 228 | #define PMERR_INVALID_PARAMETERS 0x1208 |
| 229 | #endif |
| 230 | |
| 231 | #ifndef BOOKERR_INVALID_PARAMETERS |
| 232 | #define BOOKERR_INVALID_PARAMETERS -1 |
| 233 | #endif |
| 234 | |
| 235 | #ifndef DLGC_ENTRYFIELD |
| 236 | #define DLGC_ENTRYFIELD 0x0001 |
| 237 | #endif |
| 238 | |
| 239 | #ifndef DLGC_BUTTON |
| 240 | #define DLGC_BUTTON 0x0002 |
| 241 | #endif |
| 242 | |
| 243 | #ifndef DLGC_MLE |
| 244 | #define DLGC_MLE 0x0400 |
| 245 | #endif |
| 246 | |
| 247 | #ifndef DP_NORMAL |
| 248 | #define DP_NORMAL 0 |
| 249 | #endif |
| 250 | |
| 251 | // --------------------------------------------------------------------------- |
| 252 | // debug messages -- OS/2 has no native debug output system |
| 253 | // --------------------------------------------------------------------------- |
| 254 | |
| 255 | // --------------------------------------------------------------------------- |
| 256 | // macros to make casting between WXFOO and FOO a bit easier: the GetFoo() |
| 257 | // returns Foo cast to the Windows type for oruselves, while GetFooOf() takes |
| 258 | // an argument which should be a pointer or reference to the object of the |
| 259 | // corresponding class (this depends on the macro) |
| 260 | // --------------------------------------------------------------------------- |
| 261 | |
| 262 | #define GetHwnd() ((HWND)GetHWND()) |
| 263 | #define GetHwndOf(win) ((HWND)((win)->GetHWND())) |
| 264 | // old name |
| 265 | #define GetWinHwnd GetHwndOf |
| 266 | |
| 267 | #define GetHdc() ((HDC)GetHDC()) |
| 268 | #define GetHdcOf(dc) ((HDC)(dc).GetHDC()) |
| 269 | |
| 270 | #define GetHbitmap() ((HBITMAP)GetHBITMAP()) |
| 271 | #define GetHbitmapOf(bmp) ((HBITMAP)(bmp).GetHBITMAP()) |
| 272 | |
| 273 | #define GetHicon() ((HICON)GetHICON()) |
| 274 | #define GetHiconOf(icon) ((HICON)(icon).GetHICON()) |
| 275 | |
| 276 | #define GetHaccel() ((HACCEL)GetHACCEL()) |
| 277 | #define GetHaccelOf(table) ((HACCEL)((table).GetHACCEL())) |
| 278 | |
| 279 | #define GetHmenu() ((HMENU)GetHMenu()) |
| 280 | #define GetHmenuOf(menu) ((HMENU)menu->GetHMenu()) |
| 281 | |
| 282 | #define GetHcursor() ((HCURSOR)GetHCURSOR()) |
| 283 | #define GetHcursorOf(cursor) ((HCURSOR)(cursor).GetHCURSOR()) |
| 284 | |
| 285 | #define GetHfont() ((HFONT)GetHFONT()) |
| 286 | #define GetHfontOf(font) ((HFONT)(font).GetHFONT()) |
| 287 | |
| 288 | // OS/2 convention of the mask is opposed to the wxWidgets one, so we need |
| 289 | // to invert the mask each time we pass one/get one to/from Windows |
| 290 | extern HBITMAP wxInvertMask(HBITMAP hbmpMask, int w = 0, int h = 0); |
| 291 | extern HBITMAP wxCopyBmp(HBITMAP hbmp, bool flip=false, int w=0, int h=0); |
| 292 | |
| 293 | // --------------------------------------------------------------------------- |
| 294 | // global data |
| 295 | // --------------------------------------------------------------------------- |
| 296 | |
| 297 | #ifdef __WXPM__ |
| 298 | // The MakeProcInstance version of the function wxSubclassedGenericControlProc |
| 299 | WXDLLEXPORT_DATA(extern int) wxGenericControlSubClassProc; |
| 300 | WXDLLEXPORT_DATA(extern wxChar*) wxBuffer; |
| 301 | WXDLLEXPORT_DATA(extern HINSTANCE) wxhInstance; |
| 302 | #endif |
| 303 | |
| 304 | // --------------------------------------------------------------------------- |
| 305 | // global functions |
| 306 | // --------------------------------------------------------------------------- |
| 307 | |
| 308 | #ifdef __WXPM__ |
| 309 | extern "C" |
| 310 | { |
| 311 | WXDLLEXPORT HINSTANCE wxGetInstance(); |
| 312 | } |
| 313 | |
| 314 | WXDLLEXPORT void wxSetInstance(HINSTANCE hInst); |
| 315 | #endif |
| 316 | |
| 317 | #include "wx/thread.h" |
| 318 | static inline MRESULT MySendMsg(HWND hwnd, ULONG ulMsgid, |
| 319 | MPARAM mpParam1, MPARAM mpParam2) |
| 320 | { |
| 321 | MRESULT vRes; |
| 322 | vRes = ::WinSendMsg(hwnd, ulMsgid, mpParam1, mpParam2); |
| 323 | #if wxUSE_THREADS |
| 324 | if (!wxThread::IsMain()) |
| 325 | ::WinPostMsg(hwnd, ulMsgid, mpParam1, mpParam2); |
| 326 | #endif |
| 327 | return vRes; |
| 328 | } |
| 329 | #define WinSendMsg MySendMsg |
| 330 | |
| 331 | #ifdef __WXPM__ |
| 332 | |
| 333 | WXDLLEXPORT void wxDrawBorder( HPS hPS |
| 334 | ,RECTL& rRect |
| 335 | ,WXDWORD dwStyle |
| 336 | ); |
| 337 | |
| 338 | WXDLLEXPORT wxWindow* wxFindWinFromHandle(WXHWND hWnd); |
| 339 | |
| 340 | WXDLLEXPORT void wxGetCharSize(WXHWND wnd, int *x, int *y,wxFont *the_font); |
| 341 | |
| 342 | WXDLLEXPORT void wxConvertVectorFontSize( FIXED fxPointSize |
| 343 | ,PFATTRS pFattrs |
| 344 | ); |
| 345 | WXDLLEXPORT void wxFillLogFont( LOGFONT* pLogFont |
| 346 | ,PFACENAMEDESC pFaceName |
| 347 | ,HPS* phPS |
| 348 | ,bool* pbInternalPS |
| 349 | ,long* pflId |
| 350 | ,wxString& sFaceName |
| 351 | ,wxFont* pFont |
| 352 | ); |
| 353 | WXDLLEXPORT wxFontEncoding wxGetFontEncFromCharSet(int nCharSet); |
| 354 | WXDLLEXPORT void wxOS2SelectMatchingFontByName( PFATTRS vFattrs |
| 355 | ,PFACENAMEDESC pFaceName |
| 356 | ,PFONTMETRICS pFM |
| 357 | ,int nNumFonts |
| 358 | ,const wxFont* pFont |
| 359 | ); |
| 360 | WXDLLEXPORT wxFont wxCreateFontFromLogFont( LOGFONT* pLogFont |
| 361 | ,PFONTMETRICS pFM |
| 362 | ,PFACENAMEDESC pFace |
| 363 | ); |
| 364 | WXDLLEXPORT int wxGpiStrcmp(wxChar* s0, wxChar* s1); |
| 365 | |
| 366 | WXDLLEXPORT void wxSliderEvent(WXHWND control, WXWORD wParam, WXWORD pos); |
| 367 | WXDLLEXPORT void wxScrollBarEvent(WXHWND hbar, WXWORD wParam, WXWORD pos); |
| 368 | |
| 369 | // Find maximum size of window/rectangle |
| 370 | WXDLLEXPORT extern void wxFindMaxSize(WXHWND hwnd, RECT *rect); |
| 371 | |
| 372 | WXDLLEXPORT wxWindow* wxFindControlFromHandle(WXHWND hWnd); |
| 373 | WXDLLEXPORT void wxAddControlHandle(WXHWND hWnd, wxWindow *item); |
| 374 | |
| 375 | // Safely get the window text (i.e. without using fixed size buffer) |
| 376 | WXDLLEXPORT extern wxString wxGetWindowText(WXHWND hWnd); |
| 377 | |
| 378 | // get the window class name |
| 379 | WXDLLEXPORT extern wxString wxGetWindowClass(WXHWND hWnd); |
| 380 | |
| 381 | // get the window id (should be unsigned, hence this is not wxWindowID which |
| 382 | // is, for mainly historical reasons, signed) |
| 383 | WXDLLEXPORT extern WXWORD wxGetWindowId(WXHWND hWnd); |
| 384 | |
| 385 | // Convert a PM Error code to a string |
| 386 | WXDLLIMPEXP_BASE extern wxString wxPMErrorToStr(ERRORID vError); |
| 387 | |
| 388 | // Does this window style specify any border? |
| 389 | inline bool wxStyleHasBorder(long style) |
| 390 | { |
| 391 | return (style & (wxSIMPLE_BORDER | wxRAISED_BORDER | |
| 392 | wxSUNKEN_BORDER | wxDOUBLE_BORDER)) != 0; |
| 393 | } |
| 394 | |
| 395 | inline RECTL wxGetWindowRect(HWND hWnd) |
| 396 | { |
| 397 | RECTL vRect; |
| 398 | |
| 399 | ::WinQueryWindowRect(hWnd, &vRect); |
| 400 | return vRect; |
| 401 | } // end of wxGetWindowRect |
| 402 | |
| 403 | WXDLLEXPORT extern void wxOS2SetFont( HWND hWnd |
| 404 | ,const wxFont& rFont |
| 405 | ); |
| 406 | |
| 407 | |
| 408 | WXDLLEXPORT extern bool wxCheckWindowWndProc( WXHWND hWnd |
| 409 | ,WXFARPROC fnWndProc |
| 410 | ); |
| 411 | WXDLLEXPORT extern wxBitmap wxDisableBitmap( const wxBitmap& rBmp |
| 412 | ,long lColor |
| 413 | ); |
| 414 | |
| 415 | #include "wx/colour.h" |
| 416 | |
| 417 | WXDLLEXPORT extern COLORREF wxColourToRGB(const wxColour& rColor); |
| 418 | |
| 419 | #endif // __WXPM__ |
| 420 | |
| 421 | #endif // _WX_OS2_PRIVATE_H_ |