Release 980822
[wine/multimedia.git] / controls / pager.c
blob60612c2e42afc1d4d68084e4dccab501d615941c
1 /*
2 * Pager control
4 * Copyright 1998 Eric Kohl
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>
11 * TODO:
12 * - All messages.
13 * - All notifications.
16 #include "windows.h"
17 #include "commctrl.h"
18 #include "pager.h"
19 #include "heap.h"
20 #include "win.h"
21 #include "debug.h"
24 #define PAGER_GetInfoPtr(wndPtr) ((PAGER_INFO *)wndPtr->wExtra[0])
27 static __inline__ LRESULT
28 PAGER_ForwardMouse (WND *wndPtr, WPARAM32 wParam)
30 PAGER_INFO *infoPtr = PAGER_GetInfoPtr(wndPtr);
32 infoPtr->bForward = (BOOL32)wParam;
34 return 0;
38 static __inline__ LRESULT
39 PAGER_GetBkColor (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
41 PAGER_INFO *infoPtr = PAGER_GetInfoPtr(wndPtr);
43 return (LRESULT)infoPtr->clrBk;
47 static __inline__ LRESULT
48 PAGER_GetBorder (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
50 PAGER_INFO *infoPtr = PAGER_GetInfoPtr(wndPtr);
52 return (LRESULT)infoPtr->iBorder;
56 static __inline__ LRESULT
57 PAGER_GetButtonSize (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
59 PAGER_INFO *infoPtr = PAGER_GetInfoPtr(wndPtr);
61 return (LRESULT)infoPtr->iButtonSize;
65 // << PAGER_GetButtonState >>
66 // << PAGER_GetDropTarget >>
69 static __inline__ LRESULT
70 PAGER_GetPos (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
72 PAGER_INFO *infoPtr = PAGER_GetInfoPtr(wndPtr);
74 return infoPtr->iPos;
78 static LRESULT
79 PAGER_RecalcSize (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
81 // PAGER_INFO *infoPtr = PAGER_GetInfoPtr(wndPtr);
83 FIXME (pager, "empty stub!\n");
85 return 0;
89 static __inline__ LRESULT
90 PAGER_SetBkColor (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
92 PAGER_INFO *infoPtr = PAGER_GetInfoPtr(wndPtr);
93 COLORREF clrTemp = infoPtr->clrBk;
95 infoPtr->clrBk = (COLORREF)lParam;
97 /* FIXME: redraw */
99 return (LRESULT)clrTemp;
103 static __inline__ LRESULT
104 PAGER_SetBorder (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
106 PAGER_INFO *infoPtr = PAGER_GetInfoPtr(wndPtr);
107 INT32 nTemp = infoPtr->iBorder;
109 infoPtr->iBorder = (INT32)lParam;
111 /* FIXME: redraw */
113 return (LRESULT)nTemp;
117 static __inline__ LRESULT
118 PAGER_SetButtonSize (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
120 PAGER_INFO *infoPtr = PAGER_GetInfoPtr(wndPtr);
121 INT32 nTemp = infoPtr->iButtonSize;
123 infoPtr->iButtonSize = (INT32)lParam;
125 /* FIXME: redraw */
127 return (LRESULT)nTemp;
131 static __inline__ LRESULT
132 PAGER_SetChild (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
134 PAGER_INFO *infoPtr = PAGER_GetInfoPtr(wndPtr);
136 infoPtr->hwndChild = (HWND32)lParam;
138 /* FIXME: redraw */
140 return 0;
144 static __inline__ LRESULT
145 PAGER_SetPos (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
147 PAGER_INFO *infoPtr = PAGER_GetInfoPtr(wndPtr);
149 infoPtr->iPos = (INT32)lParam;
151 /* FIXME: redraw */
153 return 0;
157 static LRESULT
158 PAGER_Create (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
160 PAGER_INFO *infoPtr;
162 /* allocate memory for info structure */
163 infoPtr = (PAGER_INFO *)HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY,
164 sizeof(PAGER_INFO));
165 wndPtr->wExtra[0] = (DWORD)infoPtr;
167 if (infoPtr == NULL) {
168 ERR (pager, "could not allocate info memory!\n");
169 return 0;
172 if ((PAGER_INFO*)wndPtr->wExtra[0] != infoPtr) {
173 ERR (pager, "pointer assignment error!\n");
174 return 0;
177 /* set default settings */
178 infoPtr->hwndChild = 0;
179 infoPtr->clrBk = GetSysColor32 (COLOR_BTNFACE);
180 infoPtr->iBorder = 0;
181 infoPtr->iButtonSize = 0;
182 infoPtr->iPos = 0;
185 return 0;
189 static LRESULT
190 PAGER_Destroy (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
192 PAGER_INFO *infoPtr = PAGER_GetInfoPtr(wndPtr);
197 /* free pager info data */
198 HeapFree (GetProcessHeap (), 0, infoPtr);
200 return 0;
204 static LRESULT
205 PAGER_EraseBackground (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
207 PAGER_INFO *infoPtr = PAGER_GetInfoPtr(wndPtr);
208 HBRUSH32 hBrush = CreateSolidBrush32 (infoPtr->clrBk);
209 RECT32 rect;
211 GetClientRect32 (wndPtr->hwndSelf, &rect);
212 FillRect32 ((HDC32)wParam, &rect, hBrush);
213 DeleteObject32 (hBrush);
214 return TRUE;
218 // << PAGER_MouseMove >>
219 // << PAGER_Paint >>
222 LRESULT WINAPI
223 PAGER_WindowProc (HWND32 hwnd, UINT32 uMsg, WPARAM32 wParam, LPARAM lParam)
225 WND *wndPtr = WIN_FindWndPtr(hwnd);
227 switch (uMsg)
229 case PGM_FORWARDMOUSE:
230 return PAGER_ForwardMouse (wndPtr, wParam);
232 case PGM_GETBKCOLOR:
233 return PAGER_GetBkColor (wndPtr, wParam, lParam);
235 case PGM_GETBORDER:
236 return PAGER_GetBorder (wndPtr, wParam, lParam);
238 case PGM_GETBUTTONSIZE:
239 return PAGER_GetButtonSize (wndPtr, wParam, lParam);
241 // case PGM_GETBUTTONSTATE:
242 // case PGM_GETDROPTARGET:
244 case PGM_GETPOS:
245 return PAGER_SetPos (wndPtr, wParam, lParam);
247 case PGM_RECALCSIZE:
248 return PAGER_RecalcSize (wndPtr, wParam, lParam);
250 case PGM_SETBKCOLOR:
251 return PAGER_SetBkColor (wndPtr, wParam, lParam);
253 case PGM_SETBORDER:
254 return PAGER_SetBorder (wndPtr, wParam, lParam);
256 case PGM_SETBUTTONSIZE:
257 return PAGER_SetButtonSize (wndPtr, wParam, lParam);
259 case PGM_SETCHILD:
260 return PAGER_SetChild (wndPtr, wParam, lParam);
262 case PGM_SETPOS:
263 return PAGER_SetPos (wndPtr, wParam, lParam);
265 case WM_CREATE:
266 return PAGER_Create (wndPtr, wParam, lParam);
268 case WM_DESTROY:
269 return PAGER_Destroy (wndPtr, wParam, lParam);
271 case WM_ERASEBKGND:
272 return PAGER_EraseBackground (wndPtr, wParam, lParam);
274 // case WM_MOUSEMOVE:
275 // return PAGER_MouseMove (wndPtr, wParam, lParam);
277 // case WM_PAINT:
278 // return PAGER_Paint (wndPtr, wParam);
281 default:
282 if (uMsg >= WM_USER)
283 ERR (pager, "unknown msg %04x wp=%08x lp=%08lx\n",
284 uMsg, wParam, lParam);
285 return DefWindowProc32A (hwnd, uMsg, wParam, lParam);
287 return 0;
291 void
292 PAGER_Register (void)
294 WNDCLASS32A wndClass;
296 if (GlobalFindAtom32A (WC_PAGESCROLLER32A)) return;
298 ZeroMemory (&wndClass, sizeof(WNDCLASS32A));
299 wndClass.style = CS_GLOBALCLASS | CS_DBLCLKS | CS_SAVEBITS;
300 wndClass.lpfnWndProc = (WNDPROC32)PAGER_WindowProc;
301 wndClass.cbClsExtra = 0;
302 wndClass.cbWndExtra = sizeof(PAGER_INFO *);
303 wndClass.hCursor = LoadCursor32A (0, IDC_ARROW32A);
304 wndClass.hbrBackground = 0;
305 wndClass.lpszClassName = WC_PAGESCROLLER32A;
307 RegisterClass32A (&wndClass);