xref: /aoo42x/main/vcl/inc/os2/saldata.hxx (revision cdf0e10c)
1 /*************************************************************************
2  *
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * Copyright 2000, 2010 Oracle and/or its affiliates.
6  *
7  * OpenOffice.org - a multi-platform office productivity suite
8  *
9  * This file is part of OpenOffice.org.
10  *
11  * OpenOffice.org is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License version 3
13  * only, as published by the Free Software Foundation.
14  *
15  * OpenOffice.org is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU Lesser General Public License version 3 for more details
19  * (a copy is included in the LICENSE file that accompanied this code).
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * version 3 along with OpenOffice.org.  If not, see
23  * <http://www.openoffice.org/license.html>
24  * for a copy of the LGPLv3 License.
25  *
26  ************************************************************************/
27 
28 #ifndef _SV_SALDATA_HXX
29 #define _SV_SALDATA_HXX
30 
31 #include <vcl/sv.h>
32 #include <vcl/svdata.hxx>
33 #include <vcl/salwtype.hxx>
34 
35 class Os2SalInstance;
36 class Os2SalFrame;
37 class Os2SalObject;
38 
39 extern "C" int debug_printf(const char *f, ...);
40 
41 // --------------
42 // - SalIMEData -
43 // --------------
44 
45 // YD FIXME #define ENABLE_IME
46 
47 #ifdef ENABLE_IME
48 
49 struct SalIMEData;
50 
51 #ifdef OS2IM_INCLUDED
52 
53 typedef APIRET (APIENTRY ImAssociateInstanceFunc)( HWND hwnd, HIMI himi, PHIMI phimiPrev );
54 typedef APIRET (APIENTRY ImGetInstanceFunc)( HWND hwnd, PHIMI phimi );
55 typedef APIRET (APIENTRY ImReleaseInstanceFunc)( HWND hwnd, HIMI himi );
56 typedef APIRET (APIENTRY ImSetConversionFontFunc)( HIMI himi, PFATTRS pFontAttrs );
57 typedef APIRET (APIENTRY ImSetConversionFontSizeFunc)( HIMI himi, PSIZEF psizfxBox );
58 typedef APIRET (APIENTRY ImGetConversionStringFunc)( HIMI himi, ULONG ulIndex, PVOID pBuf, PULONG pulBufLen );
59 typedef APIRET (APIENTRY ImGetResultStringFunc)( HIMI himi, ULONG ulIndex, PVOID pBuf, PULONG pulBufLen );
60 typedef APIRET (APIENTRY ImSetCandidateWindowPosFunc)( HIMI himi, PCANDIDATEPOS pCandidatePos );
61 typedef APIRET (APIENTRY ImQueryIMEPropertyFunc)( HIMI himi, ULONG ulIndex, PULONG pulProp );
62 typedef APIRET (APIENTRY ImRequestIMEFunc)( HIMI himi, ULONG ulAction, ULONG ulIndex, ULONG ulValue );
63 typedef APIRET (APIENTRY ImSetIMModeFunc)( HIMI himi, ULONG ulInputMode, ULONG ulConversionMode );
64 typedef APIRET (APIENTRY ImQueryIMModeFunc)( HIMI himi, PULONG pulInputMode, PULONG pulConversionMode );
65 
66 struct SalIMEData
67 {
68 	HMODULE 						mhModIME;
69 	ImAssociateInstanceFunc*		mpAssocIME;
70 	ImGetInstanceFunc*				mpGetIME;
71 	ImReleaseInstanceFunc*			mpReleaseIME;
72 	ImSetConversionFontFunc*		mpSetConversionFont;
73 	ImSetConversionFontSizeFunc*	mpSetConversionFontSize;
74 	ImGetConversionStringFunc*		mpGetConversionString;
75 	ImGetResultStringFunc*			mpGetResultString;
76 	ImSetCandidateWindowPosFunc*	mpSetCandidateWin;
77 	ImQueryIMEPropertyFunc* 		mpQueryIMEProperty;
78 	ImRequestIMEFunc*				mpRequestIME;
79 	ImSetIMModeFunc*				mpSetIMEMode;
80 	ImQueryIMModeFunc*				mpQueryIMEMode;
81 };
82 
83 #endif
84 
85 #endif
86 
87 // --------------------
88 // - Icon cache       -
89 // --------------------
90 
91 struct SalIcon
92 {
93     int     nId;
94     HPOINTER hIcon;
95     SalIcon *pNext;
96 };
97 
98 // -----------
99 // - SalData -
100 // -----------
101 
102 struct SalData
103 {
104 	HAB 					mhAB;					// anchor block handle
105 	HMQ 					mhMQ;					// handle of os2 message queue
106 	int 					mnArgc; 				// commandline param count
107 	char**					mpArgv; 				// commandline
108 	ULONG					mnNewTimerMS;			// Neue Zeit, mit dem der Timer gestartet werden soll
109 	ULONG                   		mnTimerMS;              	// Current Time (in MS) of the Timer
110 	ULONG                   		mnTimerOrgMS;          		// Current Original Time (in MS)
111 	ULONG					mnNextTimerTime;
112 	ULONG					mnLastEventTime;
113 	ULONG					mnTimerId;			// os2 timer id
114 	BOOL      				mbInTimerProc;			// timer event is currently being dispatched
115 	//SALTIMERPROC				mpTimerProc;			// timer callback proc
116 	HWND					mhWantLeaveMsg; 		// window handle, that want a MOUSELEAVE message
117 	AutoTimer*				mpMouseLeaveTimer;		// Timer for MouseLeave Test
118 	Os2SalInstance*				mpFirstInstance;		// pointer of first instance
119 	Os2SalFrame*				mpFirstFrame;			// pointer of first frame
120 	Os2SalFrame*				mpCreateFrame;			// Create-Frame for WM_CREATE
121 	Os2SalObject*				mpFirstObject;			// pointer of first object window
122 	ULONG					mnAppThreadId;			// Id from Applikation-Thread
123 	ULONG					mnFontMetricCount;		// number of entries in the font list
124 	PFONTMETRICS				mpFontMetrics;			// cached font list
125 	BOOL					mbObjClassInit; 		// Ist SALOBJECTCLASS initialised
126 #ifdef ENABLE_IME
127 	SalIMEData* 				mpIMEData;				// SalIME-Data
128 	BOOL					mbIMEInit;				// SalIME-Data-Init
129 #endif
130 
131     SalIcon*                mpFirstIcon;            // icon cache, points to first icon, NULL if none
132 
133 };
134 
135 inline void SetSalData( SalData* pData ) { ImplGetSVData()->mpSalData = (void*)pData; }
136 inline SalData* GetSalData() { return (SalData*)ImplGetSVData()->mpSalData; }
137 inline SalData* GetAppSalData() { return (SalData*)ImplGetAppSVData()->mpSalData; }
138 
139 // --------------
140 // - SalShlData -
141 // --------------
142 
143 #define OS2_VER_211 	211
144 #define OS2_VER_WARP3	230
145 #define OS2_VER_WARP4	240
146 
147 struct SalShlData
148 {
149     HMODULE	mhMod;		// Module handle of SAL-DLL
150     USHORT	mnVersion;	// 211 = OS2 2.11; 230 = OS2 3.0; 240 = OS2 4.0
151     PFNWP	mpFrameProc; 	// old frame proc
152 };
153 
154 extern SalShlData aSalShlData;
155 
156 BOOL SalImplHandleProcessMenu( HWND hWnd, ULONG nMsg, MPARAM nMP1, MPARAM nMP2 );
157 
158 // --------------------------------------------
159 // - SALSHL.CXX - for accessing DLL resources -
160 // --------------------------------------------
161 
162 HPOINTER ImplLoadSalCursor( int nId );
163 HBITMAP ImplLoadSalBitmap( int nId );
164 BOOL ImplLoadSalIcon( int nId, HPOINTER& rIcon);
165 
166 // SALGDI.CXX
167 void ImplInitSalGDI();
168 void ImplFreeSalGDI();
169 
170 // --------------
171 // - Prototypes -
172 // --------------
173 
174 // \\OS2\SOURCE\APP\SALINST.CXX
175 void ImplSalYieldMutexAcquireWithWait();
176 ULONG ImplSalReleaseYieldMutex();
177 void ImplSalAcquireYieldMutex( ULONG nCount );
178 ULONG GetCurrentThreadId();
179 BOOL ImplSalYieldMutexTryToAcquire();
180 void ImplSalYieldMutexAcquire();
181 void ImplSalYieldMutexRelease();
182 
183 // \\OS2\SOURCE\WINDOW\SALFRAME.CXX
184 MRESULT EXPENTRY SalFrameWndProc( HWND hWnd, ULONG nMsg, MPARAM nMP1, MPARAM nMP2 );
185 MRESULT EXPENTRY SalFrameFrameProc( HWND hWnd, ULONG nMsg, MPARAM nMP1, MPARAM nMP2 );
186 // \SV\WIN\SOURCE\APP\SALTIMER.CXX
187 #define SALTIMERPROC_RECURSIVE 0xffffffff
188 void SalTimerProc( HWND hWnd, UINT nMsg, UINT nId, ULONG nTime );
189 
190 // \WIN\SOURCE\WINDOW\SALFRAME.CXX
191 void SalTestMouseLeave();
192 
193 // \\OS2\SOURCE\WINDOW\SALFRAME.CXX
194 // return Frame for Message-Handling
195 Os2SalFrame* GetSalDefaultFrame();
196 
197 // \\OS2\SOURCE\WINDOW\SALFRAME.CXX
198 // IME-Daten wieder freigeben
199 #ifdef ENABLE_IME
200 void ImplReleaseSALIMEData();
201 #endif
202 
203 // -----------
204 // - Defines -
205 // -----------
206 
207 #define SAL_PROFILE_APPNAME 		((PSZ)"StarOffice")
208 #define SAL_PROFILE_USEDJP			((PSZ)"UseDJP")
209 #define SAL_PROFILE_PRINTDJP		((PSZ)"PrintDJP")
210 #define SAL_PROFILE_PRINTRAW		((PSZ)"PrintRAW")
211 
212 #define SAL_FRAME_WNDEXTRA			sizeof(ULONG)
213 #define SAL_FRAME_THIS				0
214 #define SAL_FRAME_CLASSNAME 		"SALFRAME"
215 #define SAL_SUBFRAME_CLASSNAME 		"SALSUBFRAME"
216 #define SAL_OBJECT_WNDEXTRA 		sizeof(ULONG)
217 #define SAL_OBJECT_THIS 			0
218 #define SAL_OBJECT_CLASSNAME		"SALOBJECT"
219 #define SAL_OBJECT_CHILDCLASSNAME	"SALOBJECTCHILD"
220 #define SAL_OBJECT_CLIPCLASSNAME	"SALOBJECTCLIP"
221 #define SAL_COM_CLASSNAME			"SALCOMWND"
222 
223 #define SAL_MOUSELEAVE_TIMEOUT		300
224 
225 // MP1 == 0; MP2 == pData
226 #define SAL_MSG_USEREVENT			(WM_USER+111)
227 // MP1 == 0; MP2 == MousePosition relativ to upper left of screen
228 #define SAL_MSG_MOUSELEAVE			(WM_USER+112)
229 // MP1 == hDC; MP2 == 0
230 #define SAL_MSG_PRINTABORTJOB		(WM_USER+113)
231 // MP1 == 0; MP2 == 0
232 #define SAL_MSG_STARTTIMER			(WM_USER+114)
233 // MP1 == nFrameStyle; MP2 == pParent; lResult pFrame
234 #define SAL_MSG_CREATEFRAME 		(WM_USER+115)
235 // MP1 == 0; MP2 == pParent; lResult pObject
236 #define SAL_MSG_CREATEOBJECT		(WM_USER+116)
237 // MP1 == bWait; MP2 == pMutex
238 #define SAL_MSG_THREADYIELD 		(WM_USER+117)
239 // MP1 == 0; MP2 == 0
240 #define SAL_MSG_RELEASEWAITYIELD	(WM_USER+118)
241 // MP1 == 0; MP2 == pData
242 #define SAL_MSG_SYSPROCESSMENU		(WM_USER+119)
243 // POSTFOCUS-Message; MP1 == nMP1; MP2 == nMP2 (SHORT1( bFocus ), 0)
244 #define SAL_MSG_POSTFOCUS			(WM_USER+120)
245 // POSTSIZE-Message; MP1 == nMP1; MP2 == nMP2
246 #define SAL_MSG_POSTSIZE			(WM_USER+121)
247 
248 // wParam == wParam; lParam == lParam
249 #define SAL_MSG_POSTMOVE            (WM_USER+136)
250 // wParam == pRECT; lParam == 0
251 #define SAL_MSG_POSTPAINT           (WM_USER+137)
252 // wParam == nFlags; lParam == 0
253 #define SAL_MSG_TOTOP               (WM_USER+142)
254 // wParam == bVisible; lParam == 0
255 #define SAL_MSG_SHOW                (WM_USER+143)
256 
257 // SysChild-ToTop; nMP1 = 0; nMP2 = 0
258 #define SALOBJ_MSG_TOTOP			(WM_USER+150)
259 // POSTFOCUS-Message; MP1 == nMP1; MP2 == nMP2 (SHORT1( bFocus ), 0)
260 #define SALOBJ_MSG_POSTFOCUS		(WM_USER+151)
261 
262 // wParam == 0; lParam == 0
263 #define SAL_MSG_DESTROYFRAME        (WM_USER+160)
264 // wParam == 0; lParam == pObject;
265 #define SAL_MSG_DESTROYOBJECT       (WM_USER+161)
266 // wParam == 0; lParam == this; lResult == bRet
267 #define SAL_MSG_CREATESOUND         (WM_USER+162)
268 // wParam == 0; lParam == this
269 #define SAL_MSG_DESTROYSOUND        (WM_USER+163)
270 // wParam == hWnd; lParam == 0; lResult == hDC
271 #define SAL_MSG_GETDC               (WM_USER+164)
272 // wParam == hWnd; lParam == 0
273 #define SAL_MSG_RELEASEDC           (WM_USER+165)
274 // wParam == newParentHwnd; lParam == oldHwnd; lResult == newhWnd
275 #define SAL_MSG_RECREATEHWND         (WM_USER+166)
276 // wParam == newParentHwnd; lParam == oldHwnd; lResult == newhWnd
277 #define SAL_MSG_RECREATECHILDHWND    (WM_USER+167)
278 // wParam == 0; lParam == HWND;
279 #define SAL_MSG_DESTROYHWND         (WM_USER+168)
280 // POSTTIMER-Message; wparam = 0, lParam == time
281 #define SAL_MSG_POSTTIMER           (WM_USER+169)
282 
283 // -----------------
284 // - Helpfunctions -
285 // -----------------
286 
287 inline void SetWindowPtr( HWND hWnd, SalFrame* pThis )
288 {
289 	WinSetWindowULong( hWnd, SAL_FRAME_THIS, (ULONG)pThis );
290 }
291 
292 inline Os2SalFrame* GetWindowPtr( HWND hWnd )
293 {
294 	return (Os2SalFrame*)WinQueryWindowULong( hWnd, SAL_FRAME_THIS );
295 }
296 
297 inline void SetSalObjWindowPtr( HWND hWnd, SalObject* pThis )
298 {
299 	WinSetWindowULong( hWnd, SAL_OBJECT_THIS, (ULONG)pThis );
300 }
301 
302 inline Os2SalObject* GetSalObjWindowPtr( HWND hWnd )
303 {
304 	return (Os2SalObject*)WinQueryWindowULong( hWnd, SAL_OBJECT_THIS );
305 }
306 
307 #endif	// _SV_SALDATA_HXX
308