Release 980913
[wine/multimedia.git] / dlls / comctl32 / treeview.c
bloba4eac4720acc32b90b65688e2487a463e7f86c94
1 /*
2 * Treeview 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 "treeview.h"
19 #include "heap.h"
20 #include "win.h"
21 #include "debug.h"
24 #define TREEVIEW_GetInfoPtr(wndPtr) ((TREEVIEW_INFO *)wndPtr->wExtra[0])
28 static LRESULT
29 TREEVIEW_GetImageList (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
31 TREEVIEW_INFO *infoPtr = TREEVIEW_GetInfoPtr(wndPtr);
33 switch ((INT32)wParam) {
34 case TVSIL_NORMAL:
35 return (LRESULT)infoPtr->himlNormal;
37 case TVSIL_STATE:
38 return (LRESULT)infoPtr->himlState;
41 return (LRESULT)NULL;
47 static LRESULT
48 TREEVIEW_SetImageList (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
50 TREEVIEW_INFO *infoPtr = TREEVIEW_GetInfoPtr(wndPtr);
51 HIMAGELIST himlTemp;
53 switch ((INT32)wParam) {
54 case TVSIL_NORMAL:
55 himlTemp = infoPtr->himlNormal;
56 infoPtr->himlNormal = (HIMAGELIST)lParam;
57 return (LRESULT)himlTemp;
59 case TVSIL_STATE:
60 himlTemp = infoPtr->himlState;
61 infoPtr->himlState = (HIMAGELIST)lParam;
62 return (LRESULT)himlTemp;
65 return (LRESULT)NULL;
70 static LRESULT
71 TREEVIEW_Create (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
73 TREEVIEW_INFO *infoPtr;
75 /* allocate memory for info structure */
76 infoPtr = (TREEVIEW_INFO *)HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY,
77 sizeof(TREEVIEW_INFO));
78 wndPtr->wExtra[0] = (DWORD)infoPtr;
80 if (infoPtr == NULL) {
81 ERR (treeview, "could not allocate info memory!\n");
82 return 0;
85 if ((TREEVIEW_INFO*)wndPtr->wExtra[0] != infoPtr) {
86 ERR (treeview, "pointer assignment error!\n");
87 return 0;
90 /* set default settings */
91 infoPtr->clrBk = GetSysColor32 (COLOR_WINDOW);
92 infoPtr->clrText = GetSysColor32 (COLOR_BTNTEXT);
93 infoPtr->himlNormal = NULL;
94 infoPtr->himlState = NULL;
97 return 0;
101 static LRESULT
102 TREEVIEW_Destroy (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
104 TREEVIEW_INFO *infoPtr = TREEVIEW_GetInfoPtr(wndPtr);
109 /* free tree view info data */
110 HeapFree (GetProcessHeap (), 0, infoPtr);
112 return 0;
116 static LRESULT
117 TREEVIEW_EraseBackground (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
119 TREEVIEW_INFO *infoPtr = TREEVIEW_GetInfoPtr(wndPtr);
120 HBRUSH32 hBrush = CreateSolidBrush32 (infoPtr->clrBk);
121 RECT32 rect;
123 GetClientRect32 (wndPtr->hwndSelf, &rect);
124 FillRect32 ((HDC32)wParam, &rect, hBrush);
125 DeleteObject32 (hBrush);
126 return TRUE;
131 LRESULT WINAPI
132 TREEVIEW_WindowProc (HWND32 hwnd, UINT32 uMsg, WPARAM32 wParam, LPARAM lParam)
134 WND *wndPtr = WIN_FindWndPtr(hwnd);
136 switch (uMsg)
139 case TVM_INSERTITEM32A:
140 FIXME (treeview, "Unimplemented msg TVM_INSERTITEM32A\n");
141 return 0;
143 case TVM_INSERTITEM32W:
144 FIXME (treeview, "Unimplemented msg TVM_INSERTITEM32W\n");
145 return 0;
147 case TVM_DELETEITEM:
148 FIXME (treeview, "Unimplemented msg TVM_DELETEITEM\n");
149 return 0;
151 case TVM_EXPAND:
152 FIXME (treeview, "Unimplemented msg TVM_EXPAND\n");
153 return 0;
155 case TVM_GETITEMRECT:
156 FIXME (treeview, "Unimplemented msg TVM_GETITEMRECT\n");
157 return 0;
159 case TVM_GETCOUNT:
160 FIXME (treeview, "Unimplemented msg TVM_GETCOUNT\n");
161 return 0;
163 case TVM_GETINDENT:
164 FIXME (treeview, "Unimplemented msg TVM_GETINDENT\n");
165 return 0;
167 case TVM_SETINDENT:
168 FIXME (treeview, "Unimplemented msg TVM_SETINDENT\n");
169 return 0;
171 case TVM_GETIMAGELIST:
172 return TREEVIEW_GetImageList (wndPtr, wParam, lParam);
174 case TVM_SETIMAGELIST:
175 return TREEVIEW_SetImageList (wndPtr, wParam, lParam);
177 case TVM_GETNEXTITEM:
178 FIXME (treeview, "Unimplemented msg TVM_GETNEXTITEM\n");
179 return 0;
181 case TVM_SELECTITEM:
182 FIXME (treeview, "Unimplemented msg TVM_SELECTITEM \n");
183 return 0;
185 case TVM_GETITEM32A:
186 FIXME (treeview, "Unimplemented msg TVM_GETITEM32A\n");
187 return 0;
189 case TVM_GETITEM32W:
190 FIXME (treeview, "Unimplemented msg TVM_GETITEM32W\n");
191 return 0;
193 case TVM_SETITEM32A:
194 FIXME (treeview, "Unimplemented msg TVM_SETITEM32A\n");
195 return 0;
197 case TVM_SETITEM32W:
198 FIXME (treeview, "Unimplemented msg TVM_SETITEM32W\n");
199 return 0;
201 case TVM_EDITLABEL32A:
202 FIXME (treeview, "Unimplemented msg TVM_EDITLABEL32A\n");
203 return 0;
205 case TVM_EDITLABEL32W:
206 FIXME (treeview, "Unimplemented msg TVM_EDITLABEL32W\n");
207 return 0;
209 case TVM_GETEDITCONTROL:
210 FIXME (treeview, "Unimplemented msg TVM_GETEDITCONTROL\n");
211 return 0;
213 case TVM_GETVISIBLECOUNT:
214 FIXME (treeview, "Unimplemented msg TVM_GETVISIBLECOUNT\n");
215 return 0;
217 case TVM_HITTEST:
218 FIXME (treeview, "Unimplemented msg TVM_HITTEST\n");
219 return 0;
221 case TVM_CREATEDRAGIMAGE:
222 FIXME (treeview, "Unimplemented msg TVM_CREATEDRAGIMAGE\n");
223 return 0;
225 case TVM_SORTCHILDREN:
226 FIXME (treeview, "Unimplemented msg TVM_SORTCHILDREN\n");
227 return 0;
229 case TVM_ENSUREVISIBLE:
230 FIXME (treeview, "Unimplemented msg TVM_ENSUREVISIBLE\n");
231 return 0;
233 case TVM_SORTCHILDRENCB:
234 FIXME (treeview, "Unimplemented msg TVM_SORTCHILDRENCB\n");
235 return 0;
237 case TVM_ENDEDITLABELNOW:
238 FIXME (treeview, "Unimplemented msg TVM_ENDEDITLABELNOW\n");
239 return 0;
241 case TVM_GETISEARCHSTRING32A:
242 FIXME (treeview, "Unimplemented msg TVM_GETISEARCHSTRING32A\n");
243 return 0;
245 case TVM_GETISEARCHSTRING32W:
246 FIXME (treeview, "Unimplemented msg TVM_GETISEARCHSTRING32W\n");
247 return 0;
249 case TVM_SETTOOLTIPS:
250 FIXME (treeview, "Unimplemented msg TVM_SETTOOLTIPS\n");
251 return 0;
253 case TVM_GETTOOLTIPS:
254 FIXME (treeview, "Unimplemented msg TVM_GETTOOLTIPS\n");
255 return 0;
257 case WM_CREATE:
258 return TREEVIEW_Create (wndPtr, wParam, lParam);
260 case WM_DESTROY:
261 return TREEVIEW_Destroy (wndPtr, wParam, lParam);
263 // case EM_ENABLE:
265 case WM_ERASEBKGND:
266 return TREEVIEW_EraseBackground (wndPtr, wParam, lParam);
268 case WM_GETDLGCODE:
269 return DLGC_WANTARROWS | DLGC_WANTCHARS;
271 // case WM_PAINT:
272 // return TREEVIEW_Paint (wndPtr, wParam);
274 // case WM_SETFONT:
276 // case WM_TIMER:
278 // case WM_VSCROLL:
280 default:
281 if (uMsg >= WM_USER)
282 FIXME (treeview, "Unknown msg %04x wp=%08x lp=%08lx\n",
283 uMsg, wParam, lParam);
284 return DefWindowProc32A (hwnd, uMsg, wParam, lParam);
286 return 0;
290 void
291 TREEVIEW_Register (void)
293 WNDCLASS32A wndClass;
295 TRACE (treeview,"\n");
297 if (GlobalFindAtom32A (WC_TREEVIEW32A)) return;
299 ZeroMemory (&wndClass, sizeof(WNDCLASS32A));
300 wndClass.style = CS_GLOBALCLASS | CS_DBLCLKS;
301 wndClass.lpfnWndProc = (WNDPROC32)TREEVIEW_WindowProc;
302 wndClass.cbClsExtra = 0;
303 wndClass.cbWndExtra = sizeof(TREEVIEW_INFO *);
304 wndClass.hCursor = LoadCursor32A (0, IDC_ARROW32A);
305 wndClass.hbrBackground = 0;
306 wndClass.lpszClassName = WC_TREEVIEW32A;
308 RegisterClass32A (&wndClass);