Commented out unused variables to prevent needless compiler warnings.
[wine] / dlls / comctl32 / pager.c
1 /*
2  * Pager control
3  *
4  * Copyright 1998 Eric Kohl
5  *
6  * NOTES
7  *   This is just a dummy control. An author is needed! Any volunteers?
8  *   I will only improve this control once in a while.
9  *     Eric <ekohl@abo.rhein-zeitung.de>
10  *
11  * TODO:
12  *   - All messages.
13  *   - All notifications.
14  */
15
16 #include "windows.h"
17 #include "commctrl.h"
18 #include "pager.h"
19 #include "win.h"
20 #include "debug.h"
21
22
23 #define PAGER_GetInfoPtr(wndPtr) ((PAGER_INFO *)wndPtr->wExtra[0])
24
25
26 static __inline__ LRESULT
27 PAGER_ForwardMouse (WND *wndPtr, WPARAM32 wParam)
28 {
29     PAGER_INFO *infoPtr = PAGER_GetInfoPtr(wndPtr);
30
31     infoPtr->bForward = (BOOL32)wParam;
32
33     return 0;
34 }
35
36
37 static __inline__ LRESULT
38 PAGER_GetBkColor (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
39 {
40     PAGER_INFO *infoPtr = PAGER_GetInfoPtr(wndPtr);
41
42     return (LRESULT)infoPtr->clrBk;
43 }
44
45
46 static __inline__ LRESULT
47 PAGER_GetBorder (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
48 {
49     PAGER_INFO *infoPtr = PAGER_GetInfoPtr(wndPtr);
50
51     return (LRESULT)infoPtr->nBorder;
52 }
53
54
55 static __inline__ LRESULT
56 PAGER_GetButtonSize (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
57 {
58     PAGER_INFO *infoPtr = PAGER_GetInfoPtr(wndPtr);
59
60     return (LRESULT)infoPtr->nButtonSize;
61 }
62
63
64 static LRESULT
65 PAGER_GetButtonState (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
66 {
67     /* PAGER_INFO *infoPtr = PAGER_GetInfoPtr(wndPtr); */
68
69     FIXME (pager, "empty stub!\n");
70
71     return PGF_INVISIBLE;
72 }
73
74
75 /* << PAGER_GetDropTarget >> */
76
77
78 static __inline__ LRESULT
79 PAGER_GetPos (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
80 {
81     PAGER_INFO *infoPtr = PAGER_GetInfoPtr(wndPtr);
82
83     return infoPtr->nPos;
84 }
85
86
87 static LRESULT
88 PAGER_RecalcSize (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
89 {
90     PAGER_INFO *infoPtr = PAGER_GetInfoPtr(wndPtr);
91     NMPGCALCSIZE nmpgcs;
92
93     if (infoPtr->hwndChild) {
94         ZeroMemory (&nmpgcs, sizeof (NMPGCALCSIZE));
95         nmpgcs.hdr.hwndFrom = wndPtr->hwndSelf;
96         nmpgcs.hdr.idFrom = wndPtr->wIDmenu;
97         nmpgcs.hdr.code = PGN_CALCSIZE;
98         nmpgcs.dwFlag =
99              (wndPtr->dwStyle & PGS_HORZ) ? PGF_CALCWIDTH : PGF_CALCHEIGHT;
100         SendMessage32A (GetParent32 (wndPtr->hwndSelf), WM_NOTIFY,
101                         (WPARAM32)wndPtr->wIDmenu, (LPARAM)&nmpgcs);
102
103         infoPtr->nChildSize =
104              (wndPtr->dwStyle & PGS_HORZ) ? nmpgcs.iWidth : nmpgcs.iHeight;
105
106
107         FIXME (pager, "Child size %d\n", infoPtr->nChildSize);
108
109
110     }
111
112     return 0;
113 }
114
115
116 static __inline__ LRESULT
117 PAGER_SetBkColor (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
118 {
119     PAGER_INFO *infoPtr = PAGER_GetInfoPtr(wndPtr);
120     COLORREF clrTemp = infoPtr->clrBk;
121
122     infoPtr->clrBk = (COLORREF)lParam;
123
124     /* FIXME: redraw */
125
126     return (LRESULT)clrTemp;
127 }
128
129
130 static __inline__ LRESULT
131 PAGER_SetBorder (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
132 {
133     PAGER_INFO *infoPtr = PAGER_GetInfoPtr(wndPtr);
134     INT32 nTemp = infoPtr->nBorder;
135
136     infoPtr->nBorder = (INT32)lParam;
137
138     /* FIXME: redraw */
139
140     return (LRESULT)nTemp;
141 }
142
143
144 static __inline__ LRESULT
145 PAGER_SetButtonSize (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
146 {
147     PAGER_INFO *infoPtr = PAGER_GetInfoPtr(wndPtr);
148     INT32 nTemp = infoPtr->nButtonSize;
149
150     infoPtr->nButtonSize = (INT32)lParam;
151
152     FIXME (pager, "size=%d\n", infoPtr->nButtonSize);
153
154     /* FIXME: redraw */
155
156     return (LRESULT)nTemp;
157 }
158
159
160 static __inline__ LRESULT
161 PAGER_SetChild (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
162 {
163     PAGER_INFO *infoPtr = PAGER_GetInfoPtr(wndPtr);
164
165     infoPtr->hwndChild = IsWindow32 ((HWND32)lParam) ? (HWND32)lParam : 0;
166
167     FIXME (pager, "hwnd=%x\n", infoPtr->hwndChild);
168
169     /* FIXME: redraw */
170     if (infoPtr->hwndChild) {
171         SetParent32 (infoPtr->hwndChild, wndPtr->hwndSelf);
172         SetWindowPos32 (infoPtr->hwndChild, HWND_TOP,
173                         0, 0, 0, 0, SWP_SHOWWINDOW | SWP_NOSIZE);
174     }
175
176     return 0;
177 }
178
179
180 static __inline__ LRESULT
181 PAGER_SetPos (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
182 {
183     PAGER_INFO *infoPtr = PAGER_GetInfoPtr(wndPtr);
184
185     infoPtr->nPos = (INT32)lParam;
186
187     FIXME (pager, "pos=%d\n", infoPtr->nPos);
188
189     /* FIXME: redraw */
190     SetWindowPos32 (infoPtr->hwndChild, HWND_TOP,
191                     0, 0, 0, 0, SWP_SHOWWINDOW | SWP_NOSIZE);
192
193     return 0;
194 }
195
196
197 static LRESULT
198 PAGER_Create (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
199 {
200     PAGER_INFO *infoPtr;
201
202     /* allocate memory for info structure */
203     infoPtr = (PAGER_INFO *)COMCTL32_Alloc (sizeof(PAGER_INFO));
204     wndPtr->wExtra[0] = (DWORD)infoPtr;
205
206     if (infoPtr == NULL) {
207         ERR (pager, "could not allocate info memory!\n");
208         return 0;
209     }
210
211     if ((PAGER_INFO*)wndPtr->wExtra[0] != infoPtr) {
212         ERR (pager, "pointer assignment error!\n");
213         return 0;
214     }
215
216     /* set default settings */
217     infoPtr->hwndChild = (HWND32)NULL;
218     infoPtr->clrBk = GetSysColor32 (COLOR_BTNFACE);
219     infoPtr->nBorder = 0;
220     infoPtr->nButtonSize = 0;
221     infoPtr->nPos = 0;
222
223
224     return 0;
225 }
226
227
228 static LRESULT
229 PAGER_Destroy (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
230 {
231     PAGER_INFO *infoPtr = PAGER_GetInfoPtr(wndPtr);
232
233
234
235
236     /* free pager info data */
237     COMCTL32_Free (infoPtr);
238
239     return 0;
240 }
241
242
243 static LRESULT
244 PAGER_EraseBackground (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
245 {
246     PAGER_INFO *infoPtr = PAGER_GetInfoPtr(wndPtr);
247     HBRUSH32 hBrush = CreateSolidBrush32 (infoPtr->clrBk);
248     RECT32 rect;
249
250     GetClientRect32 (wndPtr->hwndSelf, &rect);
251     FillRect32 ((HDC32)wParam, &rect, hBrush);
252     DeleteObject32 (hBrush);
253
254 /*    return TRUE; */
255     return FALSE;
256 }
257
258
259 static LRESULT
260 PAGER_MouseMove (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
261 {
262     /* PAGER_INFO *infoPtr = PAGER_GetInfoPtr(wndPtr); */
263
264     TRACE (pager, "stub!\n");
265
266     return 0;
267 }
268
269
270 /* << PAGER_Paint >> */
271
272
273 static LRESULT
274 PAGER_Size (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
275 {
276     PAGER_INFO *infoPtr = PAGER_GetInfoPtr(wndPtr);
277     RECT32 rect;
278
279     GetClientRect32 (wndPtr->hwndSelf, &rect);
280     if (infoPtr->hwndChild) {
281         SetWindowPos32 (infoPtr->hwndChild, HWND_TOP, rect.left, rect.top,
282                         rect.right - rect.left, rect.bottom - rect.top,
283                         SWP_SHOWWINDOW);
284 /*      MoveWindow32 (infoPtr->hwndChild, 1, 1, rect.right - 2, rect.bottom-2, TRUE); */
285 /*      UpdateWindow32 (infoPtr->hwndChild); */
286
287     }
288 /*    FillRect32 ((HDC32)wParam, &rect, hBrush); */
289 /*    DeleteObject32 (hBrush); */
290     return TRUE;
291 }
292
293
294
295 LRESULT WINAPI
296 PAGER_WindowProc (HWND32 hwnd, UINT32 uMsg, WPARAM32 wParam, LPARAM lParam)
297 {
298     WND *wndPtr = WIN_FindWndPtr(hwnd);
299
300     switch (uMsg)
301     {
302         case PGM_FORWARDMOUSE:
303             return PAGER_ForwardMouse (wndPtr, wParam);
304
305         case PGM_GETBKCOLOR:
306             return PAGER_GetBkColor (wndPtr, wParam, lParam);
307
308         case PGM_GETBORDER:
309             return PAGER_GetBorder (wndPtr, wParam, lParam);
310
311         case PGM_GETBUTTONSIZE:
312             return PAGER_GetButtonSize (wndPtr, wParam, lParam);
313
314         case PGM_GETBUTTONSTATE:
315             return PAGER_GetButtonState (wndPtr, wParam, lParam);
316
317 /*      case PGM_GETDROPTARGET: */
318
319         case PGM_GETPOS:
320             return PAGER_SetPos (wndPtr, wParam, lParam);
321
322         case PGM_RECALCSIZE:
323             return PAGER_RecalcSize (wndPtr, wParam, lParam);
324
325         case PGM_SETBKCOLOR:
326             return PAGER_SetBkColor (wndPtr, wParam, lParam);
327
328         case PGM_SETBORDER:
329             return PAGER_SetBorder (wndPtr, wParam, lParam);
330
331         case PGM_SETBUTTONSIZE:
332             return PAGER_SetButtonSize (wndPtr, wParam, lParam);
333
334         case PGM_SETCHILD:
335             return PAGER_SetChild (wndPtr, wParam, lParam);
336
337         case PGM_SETPOS:
338             return PAGER_SetPos (wndPtr, wParam, lParam);
339
340         case WM_CREATE:
341             return PAGER_Create (wndPtr, wParam, lParam);
342
343         case WM_DESTROY:
344             return PAGER_Destroy (wndPtr, wParam, lParam);
345
346         case WM_ERASEBKGND:
347             return PAGER_EraseBackground (wndPtr, wParam, lParam);
348
349         case WM_MOUSEMOVE:
350             return PAGER_MouseMove (wndPtr, wParam, lParam);
351
352         case WM_NOTIFY:
353         case WM_COMMAND:
354             return SendMessage32A (wndPtr->parent->hwndSelf, uMsg, wParam, lParam);
355
356 /*      case WM_PAINT: */
357 /*          return PAGER_Paint (wndPtr, wParam); */
358
359         case WM_SIZE:
360             return PAGER_Size (wndPtr, wParam, lParam);
361
362         default:
363             if (uMsg >= WM_USER)
364                 ERR (pager, "unknown msg %04x wp=%08x lp=%08lx\n",
365                      uMsg, wParam, lParam);
366             return DefWindowProc32A (hwnd, uMsg, wParam, lParam);
367     }
368     return 0;
369 }
370
371
372 VOID
373 PAGER_Register (VOID)
374 {
375     WNDCLASS32A wndClass;
376
377     if (GlobalFindAtom32A (WC_PAGESCROLLER32A)) return;
378
379     ZeroMemory (&wndClass, sizeof(WNDCLASS32A));
380     wndClass.style         = CS_GLOBALCLASS | CS_DBLCLKS | CS_SAVEBITS;
381     wndClass.lpfnWndProc   = (WNDPROC32)PAGER_WindowProc;
382     wndClass.cbClsExtra    = 0;
383     wndClass.cbWndExtra    = sizeof(PAGER_INFO *);
384     wndClass.hCursor       = LoadCursor32A (0, IDC_ARROW32A);
385     wndClass.hbrBackground = 0;
386     wndClass.lpszClassName = WC_PAGESCROLLER32A;
387  
388     RegisterClass32A (&wndClass);
389 }
390
391
392 VOID
393 PAGER_Unregister (VOID)
394 {
395     if (GlobalFindAtom32A (WC_PAGESCROLLER32A))
396         UnregisterClass32A (WC_PAGESCROLLER32A, (HINSTANCE32)NULL);
397 }
398