Mercurial > projects > dwt-win
comparison dwt/widgets/Tree.d @ 237:e2affbeb686d
Making tango.sys.win32.Types and dwt.internal.win32.WINTYPES to match common declaration. Make ansi charactars of type ubyte.
author | Frank Benoit <benoit@tionex.de> |
---|---|
date | Thu, 19 Jun 2008 03:25:36 +0200 |
parents | 9c2ceaa48046 |
children | ecb80b2a89e1 |
comparison
equal
deleted
inserted
replaced
236:9c1bb90eba13 | 237:e2affbeb686d |
---|---|
274 } | 274 } |
275 | 275 |
276 TreeItem _getItem (HANDLE hItem) { | 276 TreeItem _getItem (HANDLE hItem) { |
277 TVITEM tvItem; | 277 TVITEM tvItem; |
278 tvItem.mask = OS.TVIF_HANDLE | OS.TVIF_PARAM; | 278 tvItem.mask = OS.TVIF_HANDLE | OS.TVIF_PARAM; |
279 tvItem.hItem = hItem; | 279 tvItem.hItem = cast(HTREEITEM)hItem; |
280 if (OS.SendMessage (handle, OS.TVM_GETITEM, 0, &tvItem) !is 0) { | 280 if (OS.SendMessage (handle, OS.TVM_GETITEM, 0, &tvItem) !is 0) { |
281 return _getItem (tvItem.hItem, tvItem.lParam); | 281 return _getItem (tvItem.hItem, tvItem.lParam); |
282 } | 282 } |
283 return null; | 283 return null; |
284 } | 284 } |
1246 hdItem.mask = OS.HDI_WIDTH; | 1246 hdItem.mask = OS.HDI_WIDTH; |
1247 OS.SendMessage (hwndHeader, OS.HDM_GETITEM, index, &hdItem); | 1247 OS.SendMessage (hwndHeader, OS.HDM_GETITEM, index, &hdItem); |
1248 OS.SetRect (&rect, nmcd.nmcd.rc.left, nmcd.nmcd.rc.top, nmcd.nmcd.rc.left + hdItem.cxy, nmcd.nmcd.rc.bottom); | 1248 OS.SetRect (&rect, nmcd.nmcd.rc.left, nmcd.nmcd.rc.top, nmcd.nmcd.rc.left + hdItem.cxy, nmcd.nmcd.rc.bottom); |
1249 if (OS.COMCTL32_MAJOR < 6 || !OS.IsAppThemed ()) { | 1249 if (OS.COMCTL32_MAJOR < 6 || !OS.IsAppThemed ()) { |
1250 RECT itemRect; | 1250 RECT itemRect; |
1251 if (OS.TreeView_GetItemRect (handle, item.handle, &itemRect, true)) { | 1251 if (OS.TreeView_GetItemRect (handle, cast(HTREEITEM)item.handle, &itemRect, true)) { |
1252 rect.left = Math.min (itemRect.left, rect.right); | 1252 rect.left = Math.min (itemRect.left, rect.right); |
1253 } | 1253 } |
1254 } | 1254 } |
1255 if ((style & DWT.FULL_SELECTION) !is 0) { | 1255 if ((style & DWT.FULL_SELECTION) !is 0) { |
1256 if (!selected) fillBackground (hDC, clrTextBk, &rect); | 1256 if (!selected) fillBackground (hDC, clrTextBk, &rect); |
1383 } else { | 1383 } else { |
1384 hItem = cast(HANDLE) OS.SendMessage (handle, OS.TVM_GETNEXTITEM, OS.TVGN_LASTVISIBLE, 0); | 1384 hItem = cast(HANDLE) OS.SendMessage (handle, OS.TVM_GETNEXTITEM, OS.TVGN_LASTVISIBLE, 0); |
1385 } | 1385 } |
1386 if (hItem !is null) { | 1386 if (hItem !is null) { |
1387 RECT rect; | 1387 RECT rect; |
1388 if (OS.TreeView_GetItemRect (handle, hItem, &rect, false)) { | 1388 if (OS.TreeView_GetItemRect (handle, cast(HTREEITEM)hItem, &rect, false)) { |
1389 top = rect.bottom; | 1389 top = rect.bottom; |
1390 } | 1390 } |
1391 } | 1391 } |
1392 RECT rect; | 1392 RECT rect; |
1393 OS.SetRect (&rect, nmcd.nmcd.rc.left, top, nmcd.nmcd.rc.right, nmcd.nmcd.rc.bottom); | 1393 OS.SetRect (&rect, nmcd.nmcd.rc.left, top, nmcd.nmcd.rc.right, nmcd.nmcd.rc.bottom); |
1438 hItem = getBottomItem (); | 1438 hItem = getBottomItem (); |
1439 } else { | 1439 } else { |
1440 hItem = cast(HANDLE) OS.SendMessage (handle, OS.TVM_GETNEXTITEM, OS.TVGN_LASTVISIBLE, 0); | 1440 hItem = cast(HANDLE) OS.SendMessage (handle, OS.TVM_GETNEXTITEM, OS.TVGN_LASTVISIBLE, 0); |
1441 } | 1441 } |
1442 if (hItem !is null) { | 1442 if (hItem !is null) { |
1443 if (OS.TreeView_GetItemRect (handle, hItem, &rect, false)) { | 1443 if (OS.TreeView_GetItemRect (handle, cast(HTREEITEM)hItem, &rect, false)) { |
1444 height = rect.bottom - rect.top; | 1444 height = rect.bottom - rect.top; |
1445 } | 1445 } |
1446 } | 1446 } |
1447 if (height is 0) { | 1447 if (height is 0) { |
1448 height = OS.SendMessage (handle, OS.TVM_GETITEMHEIGHT, 0, 0); | 1448 height = OS.SendMessage (handle, OS.TVM_GETITEMHEIGHT, 0, 0); |
1494 if (hItem is null) { | 1494 if (hItem is null) { |
1495 hItem = cast(HANDLE) OS.SendMessage (handle, OS.TVM_GETNEXTITEM, OS.TVGN_FIRSTVISIBLE, 0); | 1495 hItem = cast(HANDLE) OS.SendMessage (handle, OS.TVM_GETNEXTITEM, OS.TVGN_FIRSTVISIBLE, 0); |
1496 if (hItem !is null) { | 1496 if (hItem !is null) { |
1497 TVITEM tvItem; | 1497 TVITEM tvItem; |
1498 tvItem.mask = OS.TVIF_HANDLE | OS.TVIF_STATE; | 1498 tvItem.mask = OS.TVIF_HANDLE | OS.TVIF_STATE; |
1499 tvItem.hItem = hItem; | 1499 tvItem.hItem = cast(HTREEITEM)hItem; |
1500 OS.SendMessage (handle, OS.TVM_GETITEM, 0, &tvItem); | 1500 OS.SendMessage (handle, OS.TVM_GETITEM, 0, &tvItem); |
1501 hSelect = hItem; | 1501 hSelect = hItem; |
1502 ignoreDeselect = ignoreSelect = lockSelection = true; | 1502 ignoreDeselect = ignoreSelect = lockSelection = true; |
1503 OS.SendMessage (handle, OS.TVM_SELECTITEM, OS.TVGN_CARET, hItem); | 1503 OS.SendMessage (handle, OS.TVM_SELECTITEM, OS.TVGN_CARET, hItem); |
1504 ignoreDeselect = ignoreSelect = lockSelection = false; | 1504 ignoreDeselect = ignoreSelect = lockSelection = false; |
1741 clearAll (hItem, &tvItem, all); | 1741 clearAll (hItem, &tvItem, all); |
1742 } | 1742 } |
1743 } | 1743 } |
1744 | 1744 |
1745 void clear (HANDLE hItem, TVITEM* tvItem) { | 1745 void clear (HANDLE hItem, TVITEM* tvItem) { |
1746 tvItem.hItem = hItem; | 1746 tvItem.hItem = cast(HTREEITEM)hItem; |
1747 TreeItem item = null; | 1747 TreeItem item = null; |
1748 if (OS.SendMessage (handle, OS.TVM_GETITEM, 0, tvItem) !is 0) { | 1748 if (OS.SendMessage (handle, OS.TVM_GETITEM, 0, tvItem) !is 0) { |
1749 item = tvItem.lParam !is -1 ? items [tvItem.lParam] : null; | 1749 item = tvItem.lParam !is -1 ? items [tvItem.lParam] : null; |
1750 } | 1750 } |
1751 if (item !is null) { | 1751 if (item !is null) { |
1833 HANDLE hItem = cast(HANDLE) OS.SendMessage (handle, OS.TVM_GETNEXTITEM, OS.TVGN_ROOT, 0); | 1833 HANDLE hItem = cast(HANDLE) OS.SendMessage (handle, OS.TVM_GETNEXTITEM, OS.TVGN_ROOT, 0); |
1834 while (hItem !is null) { | 1834 while (hItem !is null) { |
1835 if ((style & DWT.VIRTUAL) is 0 && !painted) { | 1835 if ((style & DWT.VIRTUAL) is 0 && !painted) { |
1836 TVITEM tvItem; | 1836 TVITEM tvItem; |
1837 tvItem.mask = OS.TVIF_HANDLE | OS.TVIF_TEXT; | 1837 tvItem.mask = OS.TVIF_HANDLE | OS.TVIF_TEXT; |
1838 tvItem.hItem = hItem; | 1838 tvItem.hItem = cast(HTREEITEM)hItem; |
1839 tvItem.pszText = OS.LPSTR_TEXTCALLBACK; | 1839 tvItem.pszText = OS.LPSTR_TEXTCALLBACK; |
1840 ignoreCustomDraw = true; | 1840 ignoreCustomDraw = true; |
1841 OS.SendMessage (handle, OS.TVM_SETITEM, 0, &tvItem); | 1841 OS.SendMessage (handle, OS.TVM_SETITEM, 0, &tvItem); |
1842 ignoreCustomDraw = false; | 1842 ignoreCustomDraw = false; |
1843 } | 1843 } |
1844 if (OS.TreeView_GetItemRect (handle, hItem, &rect, true)) { | 1844 if (OS.TreeView_GetItemRect (handle, cast(HTREEITEM)hItem, &rect, true)) { |
1845 width = Math.max (width, rect.right); | 1845 width = Math.max (width, rect.right); |
1846 height += rect.bottom - rect.top; | 1846 height += rect.bottom - rect.top; |
1847 } | 1847 } |
1848 hItem = cast(HANDLE) OS.SendMessage (handle, OS.TVM_GETNEXTITEM, OS.TVGN_NEXTVISIBLE, hItem); | 1848 hItem = cast(HANDLE) OS.SendMessage (handle, OS.TVM_GETNEXTITEM, OS.TVGN_NEXTVISIBLE, hItem); |
1849 } | 1849 } |
2111 HANDLE hNewItem; | 2111 HANDLE hNewItem; |
2112 HANDLE hFirstItem = cast(HANDLE) OS.SendMessage (handle, OS.TVM_GETNEXTITEM, OS.TVGN_CHILD, hParent); | 2112 HANDLE hFirstItem = cast(HANDLE) OS.SendMessage (handle, OS.TVM_GETNEXTITEM, OS.TVGN_CHILD, hParent); |
2113 bool fixParent = hFirstItem is null; | 2113 bool fixParent = hFirstItem is null; |
2114 if (hItem is null) { | 2114 if (hItem is null) { |
2115 TVINSERTSTRUCT tvInsert; | 2115 TVINSERTSTRUCT tvInsert; |
2116 tvInsert.hParent = hParent; | 2116 tvInsert.hParent = cast(HTREEITEM)hParent; |
2117 tvInsert.hInsertAfter = hInsertAfter; | 2117 tvInsert.hInsertAfter = cast(HTREEITEM)hInsertAfter; |
2118 tvInsert.item.lParam = id; | 2118 tvInsert.item.lParam = id; |
2119 tvInsert.item.pszText = OS.LPSTR_TEXTCALLBACK; | 2119 tvInsert.item.pszText = OS.LPSTR_TEXTCALLBACK; |
2120 tvInsert.item.iImage = tvInsert.item.iSelectedImage = cast(HBITMAP) OS.I_IMAGECALLBACK; | 2120 tvInsert.item.iImage = tvInsert.item.iSelectedImage = cast(HBITMAP) OS.I_IMAGECALLBACK; |
2121 tvInsert.item.mask = OS.TVIF_TEXT | OS.TVIF_IMAGE | OS.TVIF_SELECTEDIMAGE | OS.TVIF_HANDLE | OS.TVIF_PARAM; | 2121 tvInsert.item.mask = OS.TVIF_TEXT | OS.TVIF_IMAGE | OS.TVIF_SELECTEDIMAGE | OS.TVIF_HANDLE | OS.TVIF_PARAM; |
2122 if ((style & DWT.CHECK) !is 0) { | 2122 if ((style & DWT.CHECK) !is 0) { |
2137 // OS.SetWindowLong (handle, OS.GWL_STYLE, bits); | 2137 // OS.SetWindowLong (handle, OS.GWL_STYLE, bits); |
2138 // } | 2138 // } |
2139 } else { | 2139 } else { |
2140 TVITEM tvItem; | 2140 TVITEM tvItem; |
2141 tvItem.mask = OS.TVIF_HANDLE | OS.TVIF_PARAM; | 2141 tvItem.mask = OS.TVIF_HANDLE | OS.TVIF_PARAM; |
2142 tvItem.hItem = hNewItem = hItem; | 2142 tvItem.hItem = cast(HTREEITEM)( hNewItem = hItem ); |
2143 tvItem.lParam = id; | 2143 tvItem.lParam = id; |
2144 OS.SendMessage (handle, OS.TVM_SETITEM, 0, &tvItem); | 2144 OS.SendMessage (handle, OS.TVM_SETITEM, 0, &tvItem); |
2145 } | 2145 } |
2146 if (item !is null) { | 2146 if (item !is null) { |
2147 item.handle = hNewItem; | 2147 item.handle = hNewItem; |
2163 * child is added to a visible parent item and redraw the parent. | 2163 * child is added to a visible parent item and redraw the parent. |
2164 */ | 2164 */ |
2165 if (fixParent) { | 2165 if (fixParent) { |
2166 if (drawCount is 0 && OS.IsWindowVisible (handle)) { | 2166 if (drawCount is 0 && OS.IsWindowVisible (handle)) { |
2167 RECT rect; | 2167 RECT rect; |
2168 if (OS.TreeView_GetItemRect (handle, hParent, &rect, false)) { | 2168 if (OS.TreeView_GetItemRect (handle, cast(HTREEITEM)hParent, &rect, false)) { |
2169 OS.InvalidateRect (handle, &rect, true); | 2169 OS.InvalidateRect (handle, &rect, true); |
2170 } | 2170 } |
2171 } | 2171 } |
2172 } | 2172 } |
2173 /* | 2173 /* |
2178 * new area. | 2178 * new area. |
2179 */ | 2179 */ |
2180 if ((style & DWT.VIRTUAL) !is 0) { | 2180 if ((style & DWT.VIRTUAL) !is 0) { |
2181 if (currentItem !is null) { | 2181 if (currentItem !is null) { |
2182 RECT rect; | 2182 RECT rect; |
2183 if (OS.TreeView_GetItemRect (handle, hNewItem, &rect, false)) { | 2183 if (OS.TreeView_GetItemRect (handle, cast(HTREEITEM)hNewItem, &rect, false)) { |
2184 RECT damageRect; | 2184 RECT damageRect; |
2185 bool damaged = cast(bool) OS.GetUpdateRect (handle, &damageRect, true); | 2185 bool damaged = cast(bool) OS.GetUpdateRect (handle, &damageRect, true); |
2186 if (damaged && damageRect.top < rect.bottom) { | 2186 if (damaged && damageRect.top < rect.bottom) { |
2187 static if (OS.IsWinCE) { | 2187 static if (OS.IsWinCE) { |
2188 OS.OffsetRect (&damageRect, 0, rect.bottom - rect.top); | 2188 OS.OffsetRect (&damageRect, 0, rect.bottom - rect.top); |
2346 } | 2346 } |
2347 | 2347 |
2348 void deselect (HANDLE hItem, TVITEM* tvItem, HANDLE hIgnoreItem) { | 2348 void deselect (HANDLE hItem, TVITEM* tvItem, HANDLE hIgnoreItem) { |
2349 while (hItem !is null) { | 2349 while (hItem !is null) { |
2350 if (hItem !is hIgnoreItem) { | 2350 if (hItem !is hIgnoreItem) { |
2351 tvItem.hItem = hItem; | 2351 tvItem.hItem = cast(HTREEITEM)hItem; |
2352 OS.SendMessage (handle, OS.TVM_SETITEM, 0, tvItem); | 2352 OS.SendMessage (handle, OS.TVM_SETITEM, 0, tvItem); |
2353 } | 2353 } |
2354 auto hFirstItem = cast(HANDLE) OS.SendMessage (handle, OS.TVM_GETNEXTITEM, OS.TVGN_CHILD, hItem); | 2354 auto hFirstItem = cast(HANDLE) OS.SendMessage (handle, OS.TVM_GETNEXTITEM, OS.TVGN_CHILD, hItem); |
2355 deselect (hFirstItem, tvItem, hIgnoreItem); | 2355 deselect (hFirstItem, tvItem, hIgnoreItem); |
2356 hItem = cast(HANDLE) OS.SendMessage (handle, OS.TVM_GETNEXTITEM, OS.TVGN_NEXT, hItem); | 2356 hItem = cast(HANDLE) OS.SendMessage (handle, OS.TVM_GETNEXTITEM, OS.TVGN_NEXT, hItem); |
2379 if (item is null) error (DWT.ERROR_NULL_ARGUMENT); | 2379 if (item is null) error (DWT.ERROR_NULL_ARGUMENT); |
2380 if (item.isDisposed ()) error (DWT.ERROR_INVALID_ARGUMENT); | 2380 if (item.isDisposed ()) error (DWT.ERROR_INVALID_ARGUMENT); |
2381 TVITEM tvItem; | 2381 TVITEM tvItem; |
2382 tvItem.mask = OS.TVIF_HANDLE | OS.TVIF_STATE; | 2382 tvItem.mask = OS.TVIF_HANDLE | OS.TVIF_STATE; |
2383 tvItem.stateMask = OS.TVIS_SELECTED; | 2383 tvItem.stateMask = OS.TVIS_SELECTED; |
2384 tvItem.hItem = item.handle; | 2384 tvItem.hItem = cast(HTREEITEM)item.handle; |
2385 OS.SendMessage (handle, OS.TVM_SETITEM, 0, cast(int)&tvItem); | 2385 OS.SendMessage (handle, OS.TVM_SETITEM, 0, cast(int)&tvItem); |
2386 } | 2386 } |
2387 | 2387 |
2388 /** | 2388 /** |
2389 * Deselects all selected items in the receiver. | 2389 * Deselects all selected items in the receiver. |
2399 tvItem.mask = OS.TVIF_HANDLE | OS.TVIF_STATE; | 2399 tvItem.mask = OS.TVIF_HANDLE | OS.TVIF_STATE; |
2400 tvItem.stateMask = OS.TVIS_SELECTED; | 2400 tvItem.stateMask = OS.TVIS_SELECTED; |
2401 if ((style & DWT.SINGLE) !is 0) { | 2401 if ((style & DWT.SINGLE) !is 0) { |
2402 HANDLE hItem = cast(HANDLE) OS.SendMessage (handle, OS.TVM_GETNEXTITEM, OS.TVGN_CARET, 0); | 2402 HANDLE hItem = cast(HANDLE) OS.SendMessage (handle, OS.TVM_GETNEXTITEM, OS.TVGN_CARET, 0); |
2403 if (hItem !is null) { | 2403 if (hItem !is null) { |
2404 tvItem.hItem = hItem; | 2404 tvItem.hItem = cast(HTREEITEM)hItem; |
2405 OS.SendMessage (handle, OS.TVM_SETITEM, 0, &tvItem); | 2405 OS.SendMessage (handle, OS.TVM_SETITEM, 0, &tvItem); |
2406 } | 2406 } |
2407 } else { | 2407 } else { |
2408 auto oldProc = OS.GetWindowLongPtr (handle, OS.GWLP_WNDPROC); | 2408 auto oldProc = OS.GetWindowLongPtr (handle, OS.GWLP_WNDPROC); |
2409 OS.SetWindowLongPtr (handle, OS.GWLP_WNDPROC, cast(LONG_PTR)TreeProc); | 2409 OS.SetWindowLongPtr (handle, OS.GWLP_WNDPROC, cast(LONG_PTR)TreeProc); |
2412 deselect (hItem, &tvItem, null); | 2412 deselect (hItem, &tvItem, null); |
2413 } else { | 2413 } else { |
2414 for (int i=0; i<items.length; i++) { | 2414 for (int i=0; i<items.length; i++) { |
2415 TreeItem item = items [i]; | 2415 TreeItem item = items [i]; |
2416 if (item !is null) { | 2416 if (item !is null) { |
2417 tvItem.hItem = item.handle; | 2417 tvItem.hItem = cast(HTREEITEM)item.handle; |
2418 OS.SendMessage (handle, OS.TVM_SETITEM, 0, &tvItem); | 2418 OS.SendMessage (handle, OS.TVM_SETITEM, 0, &tvItem); |
2419 } | 2419 } |
2420 } | 2420 } |
2421 } | 2421 } |
2422 OS.SetWindowLongPtr (handle, OS.GWLP_WNDPROC, oldProc); | 2422 OS.SetWindowLongPtr (handle, OS.GWLP_WNDPROC, oldProc); |
2582 HANDLE hParent; | 2582 HANDLE hParent; |
2583 bool fixRedraw = false; | 2583 bool fixRedraw = false; |
2584 if ((style & DWT.DOUBLE_BUFFERED) is 0) { | 2584 if ((style & DWT.DOUBLE_BUFFERED) is 0) { |
2585 if (drawCount is 0 && OS.IsWindowVisible (handle)) { | 2585 if (drawCount is 0 && OS.IsWindowVisible (handle)) { |
2586 RECT rect; | 2586 RECT rect; |
2587 fixRedraw = !OS.TreeView_GetItemRect (handle, hItem, &rect, false); | 2587 fixRedraw = !OS.TreeView_GetItemRect (handle, cast(HTREEITEM)hItem, &rect, false); |
2588 } | 2588 } |
2589 } | 2589 } |
2590 if (fixRedraw) { | 2590 if (fixRedraw) { |
2591 hParent = cast(HANDLE) OS.SendMessage (handle, OS.TVM_GETNEXTITEM, OS.TVGN_PARENT, hItem); | 2591 hParent = cast(HANDLE) OS.SendMessage (handle, OS.TVM_GETNEXTITEM, OS.TVGN_PARENT, hItem); |
2592 OS.UpdateWindow (handle); | 2592 OS.UpdateWindow (handle); |
2628 * If the item that was deleted was the last child of a tree item that | 2628 * If the item that was deleted was the last child of a tree item that |
2629 * is visible, redraw the parent item to force the + / - to be updated. | 2629 * is visible, redraw the parent item to force the + / - to be updated. |
2630 */ | 2630 */ |
2631 if (OS.SendMessage (handle, OS.TVM_GETNEXTITEM, OS.TVGN_CHILD, hParent) is 0) { | 2631 if (OS.SendMessage (handle, OS.TVM_GETNEXTITEM, OS.TVGN_CHILD, hParent) is 0) { |
2632 RECT rect; | 2632 RECT rect; |
2633 if (OS.TreeView_GetItemRect (handle, hParent, &rect, false)) { | 2633 if (OS.TreeView_GetItemRect (handle, cast(HTREEITEM)hParent, &rect, false)) { |
2634 OS.InvalidateRect (handle, &rect, true); | 2634 OS.InvalidateRect (handle, &rect, true); |
2635 } | 2635 } |
2636 } | 2636 } |
2637 } | 2637 } |
2638 int count = OS.SendMessage (handle, OS.TVM_GETCOUNT, 0, 0); | 2638 int count = OS.SendMessage (handle, OS.TVM_GETCOUNT, 0, 0); |
3144 int id = nmcd.nmcd.lItemlParam; | 3144 int id = nmcd.nmcd.lItemlParam; |
3145 if ((style & DWT.VIRTUAL) !is 0) { | 3145 if ((style & DWT.VIRTUAL) !is 0) { |
3146 if (id is -1) { | 3146 if (id is -1) { |
3147 TVITEM tvItem; | 3147 TVITEM tvItem; |
3148 tvItem.mask = OS.TVIF_HANDLE | OS.TVIF_PARAM; | 3148 tvItem.mask = OS.TVIF_HANDLE | OS.TVIF_PARAM; |
3149 tvItem.hItem = cast(HANDLE) nmcd.nmcd.dwItemSpec; | 3149 tvItem.hItem = cast(HTREEITEM) nmcd.nmcd.dwItemSpec; |
3150 OS.SendMessage (handle, OS.TVM_GETITEM, 0, &tvItem); | 3150 OS.SendMessage (handle, OS.TVM_GETITEM, 0, &tvItem); |
3151 id = tvItem.lParam; | 3151 id = tvItem.lParam; |
3152 } | 3152 } |
3153 } | 3153 } |
3154 return _getItem (cast(HANDLE) nmcd.nmcd.dwItemSpec, id); | 3154 return _getItem (cast(HANDLE) nmcd.nmcd.dwItemSpec, id); |
3286 } | 3286 } |
3287 int index = 0; | 3287 int index = 0; |
3288 TreeItem [] result = new TreeItem [count]; | 3288 TreeItem [] result = new TreeItem [count]; |
3289 TVITEM tvItem; | 3289 TVITEM tvItem; |
3290 tvItem.mask = OS.TVIF_HANDLE | OS.TVIF_PARAM; | 3290 tvItem.mask = OS.TVIF_HANDLE | OS.TVIF_PARAM; |
3291 tvItem.hItem = hTreeItem; | 3291 tvItem.hItem = cast(HTREEITEM)hTreeItem; |
3292 /* | 3292 /* |
3293 * Feature in Windows. In some cases an expand or collapse message | 3293 * Feature in Windows. In some cases an expand or collapse message |
3294 * can occur from within TVM_DELETEITEM. When this happens, the item | 3294 * can occur from within TVM_DELETEITEM. When this happens, the item |
3295 * being destroyed has been removed from the list of items but has not | 3295 * being destroyed has been removed from the list of items but has not |
3296 * been deleted from the tree. The fix is to check for null items and | 3296 * been deleted from the tree. The fix is to check for null items and |
3298 */ | 3298 */ |
3299 while (tvItem.hItem !is null) { | 3299 while (tvItem.hItem !is null) { |
3300 OS.SendMessage (handle, OS.TVM_GETITEM, 0, &tvItem); | 3300 OS.SendMessage (handle, OS.TVM_GETITEM, 0, &tvItem); |
3301 TreeItem item = _getItem (tvItem.hItem, tvItem.lParam); | 3301 TreeItem item = _getItem (tvItem.hItem, tvItem.lParam); |
3302 if (item !is null) result [index++] = item; | 3302 if (item !is null) result [index++] = item; |
3303 tvItem.hItem = cast(HANDLE) OS.SendMessage (handle, OS.TVM_GETNEXTITEM, OS.TVGN_NEXT, tvItem.hItem); | 3303 tvItem.hItem = cast(HTREEITEM) OS.SendMessage (handle, OS.TVM_GETNEXTITEM, OS.TVGN_NEXT, tvItem.hItem); |
3304 } | 3304 } |
3305 if (index !is count) { | 3305 if (index !is count) { |
3306 TreeItem [] newResult = new TreeItem [index]; | 3306 TreeItem [] newResult = new TreeItem [index]; |
3307 System.arraycopy (result, 0, newResult, 0, index); | 3307 System.arraycopy (result, 0, newResult, 0, index); |
3308 result = newResult; | 3308 result = newResult; |
3371 } | 3371 } |
3372 | 3372 |
3373 int getSelection (HANDLE hItem, TVITEM* tvItem, TreeItem [] selection, int index, int count, bool bigSelection, bool all) { | 3373 int getSelection (HANDLE hItem, TVITEM* tvItem, TreeItem [] selection, int index, int count, bool bigSelection, bool all) { |
3374 while (hItem !is null) { | 3374 while (hItem !is null) { |
3375 if (OS.IsWinCE || bigSelection) { | 3375 if (OS.IsWinCE || bigSelection) { |
3376 tvItem.hItem = hItem; | 3376 tvItem.hItem = cast(HTREEITEM)hItem; |
3377 OS.SendMessage (handle, OS.TVM_GETITEM, 0, tvItem); | 3377 OS.SendMessage (handle, OS.TVM_GETITEM, 0, tvItem); |
3378 if ((tvItem.state & OS.TVIS_SELECTED) !is 0) { | 3378 if ((tvItem.state & OS.TVIS_SELECTED) !is 0) { |
3379 if (selection !is null && index < selection.length) { | 3379 if (selection !is null && index < selection.length) { |
3380 selection [index] = _getItem (hItem, tvItem.lParam); | 3380 selection [index] = _getItem (hItem, tvItem.lParam); |
3381 } | 3381 } |
3383 } | 3383 } |
3384 } else { | 3384 } else { |
3385 int state = OS.SendMessage (handle, OS.TVM_GETITEMSTATE, hItem, OS.TVIS_SELECTED); | 3385 int state = OS.SendMessage (handle, OS.TVM_GETITEMSTATE, hItem, OS.TVIS_SELECTED); |
3386 if ((state & OS.TVIS_SELECTED) !is 0) { | 3386 if ((state & OS.TVIS_SELECTED) !is 0) { |
3387 if (tvItem !is null && selection !is null && index < selection.length) { | 3387 if (tvItem !is null && selection !is null && index < selection.length) { |
3388 tvItem.hItem = hItem; | 3388 tvItem.hItem = cast(HTREEITEM)hItem; |
3389 OS.SendMessage (handle, OS.TVM_GETITEM, 0, tvItem); | 3389 OS.SendMessage (handle, OS.TVM_GETITEM, 0, tvItem); |
3390 selection [index] = _getItem (hItem, tvItem.lParam); | 3390 selection [index] = _getItem (hItem, tvItem.lParam); |
3391 } | 3391 } |
3392 index++; | 3392 index++; |
3393 } | 3393 } |
3427 if ((style & DWT.SINGLE) !is 0) { | 3427 if ((style & DWT.SINGLE) !is 0) { |
3428 HANDLE hItem = cast(HANDLE) OS.SendMessage (handle, OS.TVM_GETNEXTITEM, OS.TVGN_CARET, 0); | 3428 HANDLE hItem = cast(HANDLE) OS.SendMessage (handle, OS.TVM_GETNEXTITEM, OS.TVGN_CARET, 0); |
3429 if (hItem is null) return new TreeItem [0]; | 3429 if (hItem is null) return new TreeItem [0]; |
3430 TVITEM tvItem; | 3430 TVITEM tvItem; |
3431 tvItem.mask = OS.TVIF_HANDLE | OS.TVIF_PARAM | OS.TVIF_STATE; | 3431 tvItem.mask = OS.TVIF_HANDLE | OS.TVIF_PARAM | OS.TVIF_STATE; |
3432 tvItem.hItem = hItem; | 3432 tvItem.hItem = cast(HTREEITEM)hItem; |
3433 OS.SendMessage (handle, OS.TVM_GETITEM, 0, &tvItem); | 3433 OS.SendMessage (handle, OS.TVM_GETITEM, 0, &tvItem); |
3434 if ((tvItem.state & OS.TVIS_SELECTED) is 0) return new TreeItem [0]; | 3434 if ((tvItem.state & OS.TVIS_SELECTED) is 0) return new TreeItem [0]; |
3435 return [_getItem (tvItem.hItem, tvItem.lParam)]; | 3435 return [_getItem (tvItem.hItem, tvItem.lParam)]; |
3436 } | 3436 } |
3437 int count = 0; | 3437 int count = 0; |
3759 bool isItemSelected (NMTVCUSTOMDRAW* nmcd) { | 3759 bool isItemSelected (NMTVCUSTOMDRAW* nmcd) { |
3760 bool selected = false; | 3760 bool selected = false; |
3761 if (OS.IsWindowEnabled (handle)) { | 3761 if (OS.IsWindowEnabled (handle)) { |
3762 TVITEM tvItem; | 3762 TVITEM tvItem; |
3763 tvItem.mask = OS.TVIF_HANDLE | OS.TVIF_STATE; | 3763 tvItem.mask = OS.TVIF_HANDLE | OS.TVIF_STATE; |
3764 tvItem.hItem = cast(HANDLE) nmcd.nmcd.dwItemSpec; | 3764 tvItem.hItem = cast(HTREEITEM)nmcd.nmcd.dwItemSpec; |
3765 OS.SendMessage (handle, OS.TVM_GETITEM, 0, &tvItem); | 3765 OS.SendMessage (handle, OS.TVM_GETITEM, 0, &tvItem); |
3766 if ((tvItem.state & (OS.TVIS_SELECTED | OS.TVIS_DROPHILITED)) !is 0) { | 3766 if ((tvItem.state & (OS.TVIS_SELECTED | OS.TVIS_DROPHILITED)) !is 0) { |
3767 selected = true; | 3767 selected = true; |
3768 /* | 3768 /* |
3769 * Feature in Windows. When the mouse is pressed and the | 3769 * Feature in Windows. When the mouse is pressed and the |
3823 void redrawSelection () { | 3823 void redrawSelection () { |
3824 if ((style & DWT.SINGLE) !is 0) { | 3824 if ((style & DWT.SINGLE) !is 0) { |
3825 HANDLE hItem = cast(HANDLE) OS.SendMessage (handle, OS.TVM_GETNEXTITEM, OS.TVGN_CARET, 0); | 3825 HANDLE hItem = cast(HANDLE) OS.SendMessage (handle, OS.TVM_GETNEXTITEM, OS.TVGN_CARET, 0); |
3826 if (hItem !is null) { | 3826 if (hItem !is null) { |
3827 RECT rect; | 3827 RECT rect; |
3828 if (OS.TreeView_GetItemRect (handle, hItem, &rect, false)) { | 3828 if (OS.TreeView_GetItemRect (handle, cast(HTREEITEM)hItem, &rect, false)) { |
3829 OS.InvalidateRect (handle, &rect, true); | 3829 OS.InvalidateRect (handle, &rect, true); |
3830 } | 3830 } |
3831 } | 3831 } |
3832 } else { | 3832 } else { |
3833 HANDLE hItem = cast(HANDLE) OS.SendMessage (handle, OS.TVM_GETNEXTITEM, OS.TVGN_FIRSTVISIBLE, 0); | 3833 HANDLE hItem = cast(HANDLE) OS.SendMessage (handle, OS.TVM_GETNEXTITEM, OS.TVGN_FIRSTVISIBLE, 0); |
3847 state = tvItem.state; | 3847 state = tvItem.state; |
3848 } else { | 3848 } else { |
3849 state = OS.SendMessage (handle, OS.TVM_GETITEMSTATE, hItem, OS.TVIS_SELECTED); | 3849 state = OS.SendMessage (handle, OS.TVM_GETITEMSTATE, hItem, OS.TVIS_SELECTED); |
3850 } | 3850 } |
3851 if ((state & OS.TVIS_SELECTED) !is 0) { | 3851 if ((state & OS.TVIS_SELECTED) !is 0) { |
3852 if (OS.TreeView_GetItemRect (handle, hItem, &rect, false)) { | 3852 if (OS.TreeView_GetItemRect (handle, cast(HTREEITEM)hItem, &rect, false)) { |
3853 OS.InvalidateRect (handle, &rect, true); | 3853 OS.InvalidateRect (handle, &rect, true); |
3854 } | 3854 } |
3855 } | 3855 } |
3856 hItem = cast(HANDLE) OS.SendMessage (handle, OS.TVM_GETNEXTITEM, OS.TVGN_NEXTVISIBLE, hItem); | 3856 hItem = cast(HANDLE) OS.SendMessage (handle, OS.TVM_GETNEXTITEM, OS.TVGN_NEXTVISIBLE, hItem); |
3857 index++; | 3857 index++; |
3867 } | 3867 } |
3868 | 3868 |
3869 void releaseItem (HANDLE hItem, TVITEM* tvItem, bool release) { | 3869 void releaseItem (HANDLE hItem, TVITEM* tvItem, bool release) { |
3870 if (hItem is hAnchor) hAnchor = null; | 3870 if (hItem is hAnchor) hAnchor = null; |
3871 if (hItem is hInsert) hInsert = null; | 3871 if (hItem is hInsert) hInsert = null; |
3872 tvItem.hItem = hItem; | 3872 tvItem.hItem = cast(HTREEITEM)hItem; |
3873 if (OS.SendMessage (handle, OS.TVM_GETITEM, 0, tvItem) !is 0) { | 3873 if (OS.SendMessage (handle, OS.TVM_GETITEM, 0, tvItem) !is 0) { |
3874 if (tvItem.lParam !is -1) { | 3874 if (tvItem.lParam !is -1) { |
3875 if (tvItem.lParam < lastID) lastID = tvItem.lParam; | 3875 if (tvItem.lParam < lastID) lastID = tvItem.lParam; |
3876 if (release) { | 3876 if (release) { |
3877 TreeItem item = items [tvItem.lParam]; | 3877 TreeItem item = items [tvItem.lParam]; |
4108 bool expanded = false; | 4108 bool expanded = false; |
4109 TVITEM tvItem; | 4109 TVITEM tvItem; |
4110 tvItem.mask = OS.TVIF_HANDLE | OS.TVIF_PARAM; | 4110 tvItem.mask = OS.TVIF_HANDLE | OS.TVIF_PARAM; |
4111 if (!redraw && (style & DWT.VIRTUAL) !is 0) { | 4111 if (!redraw && (style & DWT.VIRTUAL) !is 0) { |
4112 if (OS.IsWinCE) { | 4112 if (OS.IsWinCE) { |
4113 tvItem.hItem = hParent; | 4113 tvItem.hItem = cast(HTREEITEM)hParent; |
4114 tvItem.mask = OS.TVIF_STATE; | 4114 tvItem.mask = OS.TVIF_STATE; |
4115 OS.SendMessage (handle, OS.TVM_GETITEM, 0, cast(int)&tvItem); | 4115 OS.SendMessage (handle, OS.TVM_GETITEM, 0, cast(int)&tvItem); |
4116 expanded = (tvItem.state & OS.TVIS_EXPANDED) !is 0; | 4116 expanded = (tvItem.state & OS.TVIS_EXPANDED) !is 0; |
4117 } else { | 4117 } else { |
4118 /* | 4118 /* |
4124 int state = OS.SendMessage (handle, OS.TVM_GETITEMSTATE, hParent, OS.TVIS_EXPANDED); | 4124 int state = OS.SendMessage (handle, OS.TVM_GETITEMSTATE, hParent, OS.TVIS_EXPANDED); |
4125 expanded = (state & OS.TVIS_EXPANDED) !is 0; | 4125 expanded = (state & OS.TVIS_EXPANDED) !is 0; |
4126 } | 4126 } |
4127 } | 4127 } |
4128 while (hItem !is null) { | 4128 while (hItem !is null) { |
4129 tvItem.hItem = hItem; | 4129 tvItem.hItem = cast(HTREEITEM)hItem; |
4130 OS.SendMessage (handle, OS.TVM_GETITEM, 0, &tvItem); | 4130 OS.SendMessage (handle, OS.TVM_GETITEM, 0, &tvItem); |
4131 hItem = cast(HANDLE) OS.SendMessage (handle, OS.TVM_GETNEXTITEM, OS.TVGN_NEXT, hItem); | 4131 hItem = cast(HANDLE) OS.SendMessage (handle, OS.TVM_GETNEXTITEM, OS.TVGN_NEXT, hItem); |
4132 TreeItem item = tvItem.lParam !is -1 ? items [tvItem.lParam] : null; | 4132 TreeItem item = tvItem.lParam !is -1 ? items [tvItem.lParam] : null; |
4133 if (item !is null && !item.isDisposed ()) { | 4133 if (item !is null && !item.isDisposed ()) { |
4134 item.dispose (); | 4134 item.dispose (); |
4138 } | 4138 } |
4139 } | 4139 } |
4140 if ((style & DWT.VIRTUAL) !is 0) { | 4140 if ((style & DWT.VIRTUAL) !is 0) { |
4141 for (int i=itemCount; i<count; i++) { | 4141 for (int i=itemCount; i<count; i++) { |
4142 if (expanded) ignoreShrink = true; | 4142 if (expanded) ignoreShrink = true; |
4143 createItem (null, hParent, cast(HANDLE) OS.TVI_LAST, null); | 4143 createItem (null, hParent, cast(HTREEITEM) OS.TVI_LAST, null); |
4144 if (expanded) ignoreShrink = false; | 4144 if (expanded) ignoreShrink = false; |
4145 } | 4145 } |
4146 } else { | 4146 } else { |
4147 shrink = true; | 4147 shrink = true; |
4148 int extra = Math.max (4, (count + 3) / 4 * 4); | 4148 int extra = Math.max (4, (count + 3) / 4 * 4); |
4149 TreeItem [] newItems = new TreeItem [items.length + extra]; | 4149 TreeItem [] newItems = new TreeItem [items.length + extra]; |
4150 System.arraycopy (items, 0, newItems, 0, items.length); | 4150 System.arraycopy (items, 0, newItems, 0, items.length); |
4151 items = newItems; | 4151 items = newItems; |
4152 for (int i=itemCount; i<count; i++) { | 4152 for (int i=itemCount; i<count; i++) { |
4153 new TreeItem (this, DWT.NONE, hParent, cast(HANDLE) OS.TVI_LAST, null); | 4153 new TreeItem (this, DWT.NONE, hParent, cast(HTREEITEM) OS.TVI_LAST, null); |
4154 } | 4154 } |
4155 } | 4155 } |
4156 if (redraw) { | 4156 if (redraw) { |
4157 OS.DefWindowProc (handle, OS.WM_SETREDRAW, 1, 0); | 4157 OS.DefWindowProc (handle, OS.WM_SETREDRAW, 1, 0); |
4158 OS.InvalidateRect (handle, null, true); | 4158 OS.InvalidateRect (handle, null, true); |
4209 return columnCount is 0 && scrollWidth is 0 ? handle : hwndParent; | 4209 return columnCount is 0 && scrollWidth is 0 ? handle : hwndParent; |
4210 } | 4210 } |
4211 | 4211 |
4212 void select (HANDLE hItem, TVITEM* tvItem) { | 4212 void select (HANDLE hItem, TVITEM* tvItem) { |
4213 while (hItem !is null) { | 4213 while (hItem !is null) { |
4214 tvItem.hItem = hItem; | 4214 tvItem.hItem = cast(HTREEITEM)hItem; |
4215 OS.SendMessage (handle, OS.TVM_SETITEM, 0, tvItem); | 4215 OS.SendMessage (handle, OS.TVM_SETITEM, 0, tvItem); |
4216 auto hFirstItem = cast(HANDLE) OS.SendMessage (handle, OS.TVM_GETNEXTITEM, OS.TVGN_CHILD, hItem); | 4216 auto hFirstItem = cast(HANDLE) OS.SendMessage (handle, OS.TVM_GETNEXTITEM, OS.TVGN_CHILD, hItem); |
4217 select (hFirstItem, tvItem); | 4217 select (hFirstItem, tvItem); |
4218 hItem = cast(HANDLE) OS.SendMessage (handle, OS.TVM_GETNEXTITEM, OS.TVGN_NEXT, hItem); | 4218 hItem = cast(HANDLE) OS.SendMessage (handle, OS.TVM_GETNEXTITEM, OS.TVGN_NEXT, hItem); |
4219 } | 4219 } |
4301 } | 4301 } |
4302 TVITEM tvItem; | 4302 TVITEM tvItem; |
4303 tvItem.mask = OS.TVIF_HANDLE | OS.TVIF_STATE; | 4303 tvItem.mask = OS.TVIF_HANDLE | OS.TVIF_STATE; |
4304 tvItem.stateMask = OS.TVIS_SELECTED; | 4304 tvItem.stateMask = OS.TVIS_SELECTED; |
4305 tvItem.state = OS.TVIS_SELECTED; | 4305 tvItem.state = OS.TVIS_SELECTED; |
4306 tvItem.hItem = item.handle; | 4306 tvItem.hItem = cast(HTREEITEM)item.handle; |
4307 OS.SendMessage (handle, OS.TVM_SETITEM, 0, cast(int)&tvItem); | 4307 OS.SendMessage (handle, OS.TVM_SETITEM, 0, cast(int)&tvItem); |
4308 } | 4308 } |
4309 | 4309 |
4310 /** | 4310 /** |
4311 * Selects all of the items in the receiver. | 4311 * Selects all of the items in the receiver. |
4332 select (hItem, &tvItem); | 4332 select (hItem, &tvItem); |
4333 } else { | 4333 } else { |
4334 for (int i=0; i<items.length; i++) { | 4334 for (int i=0; i<items.length; i++) { |
4335 TreeItem item = items [i]; | 4335 TreeItem item = items [i]; |
4336 if (item !is null) { | 4336 if (item !is null) { |
4337 tvItem.hItem = item.handle; | 4337 tvItem.hItem = cast(HTREEITEM)item.handle; |
4338 OS.SendMessage (handle, OS.TVM_SETITEM, 0, &tvItem); | 4338 OS.SendMessage (handle, OS.TVM_SETITEM, 0, &tvItem); |
4339 } | 4339 } |
4340 } | 4340 } |
4341 } | 4341 } |
4342 OS.SetWindowLongPtr (handle, OS.GWLP_WNDPROC, oldProc); | 4342 OS.SetWindowLongPtr (handle, OS.GWLP_WNDPROC, oldProc); |
4753 if (redraw) { | 4753 if (redraw) { |
4754 if (drawCount is 1) { | 4754 if (drawCount is 1) { |
4755 int count = OS.SendMessage (handle, OS.TVM_GETCOUNT, 0, 0); | 4755 int count = OS.SendMessage (handle, OS.TVM_GETCOUNT, 0, 0); |
4756 if (count is 0) { | 4756 if (count is 0) { |
4757 TVINSERTSTRUCT tvInsert; | 4757 TVINSERTSTRUCT tvInsert; |
4758 tvInsert.hInsertAfter = cast(HANDLE) OS.TVI_FIRST; | 4758 tvInsert.hInsertAfter = cast(HTREEITEM) OS.TVI_FIRST; |
4759 hItem = cast(HANDLE) OS.SendMessage (handle, OS.TVM_INSERTITEM, 0, &tvInsert); | 4759 hItem = cast(HANDLE) OS.SendMessage (handle, OS.TVM_INSERTITEM, 0, &tvInsert); |
4760 } | 4760 } |
4761 OS.DefWindowProc (handle, OS.WM_SETREDRAW, 1, 0); | 4761 OS.DefWindowProc (handle, OS.WM_SETREDRAW, 1, 0); |
4762 updateScrollBar (); | 4762 updateScrollBar (); |
4763 } | 4763 } |
4841 while (index < selection.length) { | 4841 while (index < selection.length) { |
4842 TreeItem item = selection [index]; | 4842 TreeItem item = selection [index]; |
4843 if (item !is null && item.handle is hItem) break; | 4843 if (item !is null && item.handle is hItem) break; |
4844 index++; | 4844 index++; |
4845 } | 4845 } |
4846 tvItem.hItem = hItem; | 4846 tvItem.hItem = cast(HTREEITEM)hItem; |
4847 OS.SendMessage (handle, OS.TVM_GETITEM, 0, &tvItem); | 4847 OS.SendMessage (handle, OS.TVM_GETITEM, 0, &tvItem); |
4848 if ((tvItem.state & OS.TVIS_SELECTED) !is 0) { | 4848 if ((tvItem.state & OS.TVIS_SELECTED) !is 0) { |
4849 if (index is selection.length) { | 4849 if (index is selection.length) { |
4850 tvItem.state = 0; | 4850 tvItem.state = 0; |
4851 OS.SendMessage (handle, OS.TVM_SETITEM, 0, &tvItem); | 4851 OS.SendMessage (handle, OS.TVM_SETITEM, 0, &tvItem); |
4966 if (hOldItem is hNewItem) { | 4966 if (hOldItem is hNewItem) { |
4967 TVITEM tvItem; | 4967 TVITEM tvItem; |
4968 tvItem.mask = OS.TVIF_HANDLE | OS.TVIF_STATE; | 4968 tvItem.mask = OS.TVIF_HANDLE | OS.TVIF_STATE; |
4969 tvItem.state = OS.TVIS_SELECTED; | 4969 tvItem.state = OS.TVIS_SELECTED; |
4970 tvItem.stateMask = OS.TVIS_SELECTED; | 4970 tvItem.stateMask = OS.TVIS_SELECTED; |
4971 tvItem.hItem = hNewItem; | 4971 tvItem.hItem = cast(HTREEITEM)hNewItem; |
4972 OS.SendMessage (handle, OS.TVM_SETITEM, 0, &tvItem); | 4972 OS.SendMessage (handle, OS.TVM_SETITEM, 0, &tvItem); |
4973 showItem (hNewItem); | 4973 showItem (hNewItem); |
4974 } | 4974 } |
4975 } | 4975 } |
4976 if ((style & DWT.SINGLE) !is 0) return; | 4976 if ((style & DWT.SINGLE) !is 0) return; |
4991 int index = 0; | 4991 int index = 0; |
4992 while (index < length) { | 4992 while (index < length) { |
4993 if (items [index] is item) break; | 4993 if (items [index] is item) break; |
4994 index++; | 4994 index++; |
4995 } | 4995 } |
4996 tvItem.hItem = item.handle; | 4996 tvItem.hItem = cast(HTREEITEM)item.handle; |
4997 OS.SendMessage (handle, OS.TVM_GETITEM, 0, &tvItem); | 4997 OS.SendMessage (handle, OS.TVM_GETITEM, 0, &tvItem); |
4998 if ((tvItem.state & OS.TVIS_SELECTED) !is 0) { | 4998 if ((tvItem.state & OS.TVIS_SELECTED) !is 0) { |
4999 if (index is length) { | 4999 if (index is length) { |
5000 tvItem.state = 0; | 5000 tvItem.state = 0; |
5001 OS.SendMessage (handle, OS.TVM_SETITEM, 0, &tvItem); | 5001 OS.SendMessage (handle, OS.TVM_SETITEM, 0, &tvItem); |
5139 OS.SendMessage (handle, OS.WM_SETREDRAW, 0, 0); | 5139 OS.SendMessage (handle, OS.WM_SETREDRAW, 0, 0); |
5140 } | 5140 } |
5141 } else { | 5141 } else { |
5142 bool scroll = true; | 5142 bool scroll = true; |
5143 RECT itemRect; | 5143 RECT itemRect; |
5144 if (OS.TreeView_GetItemRect (handle, hItem, &itemRect, true)) { | 5144 if (OS.TreeView_GetItemRect (handle, cast(HTREEITEM)hItem, &itemRect, true)) { |
5145 forceResize (); | 5145 forceResize (); |
5146 RECT rect; | 5146 RECT rect; |
5147 OS.GetClientRect (handle, &rect); | 5147 OS.GetClientRect (handle, &rect); |
5148 POINT pt; | 5148 POINT pt; |
5149 pt.x = itemRect.left; | 5149 pt.x = itemRect.left; |
5166 } | 5166 } |
5167 } | 5167 } |
5168 } | 5168 } |
5169 if (hwndParent !is null) { | 5169 if (hwndParent !is null) { |
5170 RECT itemRect; | 5170 RECT itemRect; |
5171 if (OS.TreeView_GetItemRect (handle, hItem, &itemRect, true)) { | 5171 if (OS.TreeView_GetItemRect (handle, cast(HTREEITEM)hItem, &itemRect, true)) { |
5172 forceResize (); | 5172 forceResize (); |
5173 RECT rect; | 5173 RECT rect; |
5174 OS.GetClientRect (hwndParent, &rect); | 5174 OS.GetClientRect (hwndParent, &rect); |
5175 OS.MapWindowPoints (hwndParent, handle, cast(POINT*) &rect, 2); | 5175 OS.MapWindowPoints (hwndParent, handle, cast(POINT*) &rect, 2); |
5176 POINT pt; | 5176 POINT pt; |
5334 } | 5334 } |
5335 | 5335 |
5336 /*public*/ void sort () { | 5336 /*public*/ void sort () { |
5337 checkWidget (); | 5337 checkWidget (); |
5338 if ((style & DWT.VIRTUAL) !is 0) return; | 5338 if ((style & DWT.VIRTUAL) !is 0) return; |
5339 sort ( cast(HANDLE) OS.TVI_ROOT, false); | 5339 sort ( cast(HTREEITEM) OS.TVI_ROOT, false); |
5340 } | 5340 } |
5341 | 5341 |
5342 void sort (HANDLE hParent, bool all) { | 5342 void sort (HANDLE hParent, bool all) { |
5343 int itemCount = OS.SendMessage (handle, OS.TVM_GETCOUNT, 0, 0); | 5343 int itemCount = OS.SendMessage (handle, OS.TVM_GETCOUNT, 0, 0); |
5344 if (itemCount is 0 || itemCount is 1) return; | 5344 if (itemCount is 0 || itemCount is 1) return; |
5349 } else { | 5349 } else { |
5350 //Callback compareCallback = new Callback (this, "CompareFunc", 3); | 5350 //Callback compareCallback = new Callback (this, "CompareFunc", 3); |
5351 //int lpfnCompare = compareCallback.getAddress (); | 5351 //int lpfnCompare = compareCallback.getAddress (); |
5352 sThis = this; | 5352 sThis = this; |
5353 TVSORTCB psort; | 5353 TVSORTCB psort; |
5354 psort.hParent = hParent; | 5354 psort.hParent = cast(HTREEITEM)hParent; |
5355 psort.lpfnCompare = &CompareFunc; | 5355 psort.lpfnCompare = &CompareFunc; |
5356 psort.lParam = sortColumn is null ? 0 : indexOf (sortColumn); | 5356 psort.lParam = sortColumn is null ? 0 : indexOf (sortColumn); |
5357 OS.SendMessage (handle, OS.TVM_SORTCHILDRENCB, all ? 1 : 0, &psort); | 5357 OS.SendMessage (handle, OS.TVM_SORTCHILDRENCB, all ? 1 : 0, &psort); |
5358 sThis = null; | 5358 sThis = null; |
5359 //compareCallback.dispose (); | 5359 //compareCallback.dispose (); |
5779 if (hItem !is null) { | 5779 if (hItem !is null) { |
5780 hAnchor = hItem; | 5780 hAnchor = hItem; |
5781 OS.SendMessage (handle, OS.TVM_ENSUREVISIBLE, 0, hItem); | 5781 OS.SendMessage (handle, OS.TVM_ENSUREVISIBLE, 0, hItem); |
5782 TVITEM tvItem; | 5782 TVITEM tvItem; |
5783 tvItem.mask = OS.TVIF_HANDLE | OS.TVIF_STATE | OS.TVIF_PARAM; | 5783 tvItem.mask = OS.TVIF_HANDLE | OS.TVIF_STATE | OS.TVIF_PARAM; |
5784 tvItem.hItem = hItem; | 5784 tvItem.hItem = cast(HTREEITEM)hItem; |
5785 if ((style & DWT.CHECK) !is 0) { | 5785 if ((style & DWT.CHECK) !is 0) { |
5786 tvItem.stateMask = OS.TVIS_STATEIMAGEMASK; | 5786 tvItem.stateMask = OS.TVIS_STATEIMAGEMASK; |
5787 OS.SendMessage (handle, OS.TVM_GETITEM, 0, &tvItem); | 5787 OS.SendMessage (handle, OS.TVM_GETITEM, 0, &tvItem); |
5788 int state = tvItem.state >> 12; | 5788 int state = tvItem.state >> 12; |
5789 if ((state & 0x1) !is 0) { | 5789 if ((state & 0x1) !is 0) { |
5935 TVITEM tvItem; | 5935 TVITEM tvItem; |
5936 tvItem.mask = OS.TVIF_HANDLE | OS.TVIF_STATE; | 5936 tvItem.mask = OS.TVIF_HANDLE | OS.TVIF_STATE; |
5937 tvItem.stateMask = OS.TVIS_SELECTED; | 5937 tvItem.stateMask = OS.TVIS_SELECTED; |
5938 auto hDeselectItem = hItem; | 5938 auto hDeselectItem = hItem; |
5939 RECT rect1; | 5939 RECT rect1; |
5940 if (!OS.TreeView_GetItemRect (handle, hAnchor, &rect1, false)) { | 5940 if (!OS.TreeView_GetItemRect (handle, cast(HTREEITEM)hAnchor, &rect1, false)) { |
5941 hAnchor = hItem; | 5941 hAnchor = hItem; |
5942 OS.TreeView_GetItemRect (handle, hAnchor, &rect1, false); | 5942 OS.TreeView_GetItemRect (handle, cast(HTREEITEM)hAnchor, &rect1, false); |
5943 } | 5943 } |
5944 RECT rect2; | 5944 RECT rect2; |
5945 OS.TreeView_GetItemRect (handle, hDeselectItem, &rect2, false); | 5945 OS.TreeView_GetItemRect (handle, cast(HTREEITEM)hDeselectItem, &rect2, false); |
5946 int flags = rect1.top < rect2.top ? OS.TVGN_PREVIOUSVISIBLE : OS.TVGN_NEXTVISIBLE; | 5946 int flags = rect1.top < rect2.top ? OS.TVGN_PREVIOUSVISIBLE : OS.TVGN_NEXTVISIBLE; |
5947 while (hDeselectItem !is hAnchor) { | 5947 while (hDeselectItem !is hAnchor) { |
5948 tvItem.hItem = hDeselectItem; | 5948 tvItem.hItem = cast(HTREEITEM)hDeselectItem; |
5949 OS.SendMessage (handle, OS.TVM_SETITEM, 0, &tvItem); | 5949 OS.SendMessage (handle, OS.TVM_SETITEM, 0, &tvItem); |
5950 hDeselectItem = cast(HANDLE) OS.SendMessage (handle, OS.TVM_GETNEXTITEM, flags, hDeselectItem); | 5950 hDeselectItem = cast(HANDLE) OS.SendMessage (handle, OS.TVM_GETNEXTITEM, flags, hDeselectItem); |
5951 } | 5951 } |
5952 auto hSelectItem = hAnchor; | 5952 auto hSelectItem = hAnchor; |
5953 OS.TreeView_GetItemRect (handle, hNewItem, &rect1, false); | 5953 OS.TreeView_GetItemRect (handle, cast(HTREEITEM)hNewItem, &rect1, false); |
5954 OS.TreeView_GetItemRect (handle, hSelectItem, &rect2, false); | 5954 OS.TreeView_GetItemRect (handle, cast(HTREEITEM)hSelectItem, &rect2, false); |
5955 tvItem.state = OS.TVIS_SELECTED; | 5955 tvItem.state = OS.TVIS_SELECTED; |
5956 flags = rect1.top < rect2.top ? OS.TVGN_PREVIOUSVISIBLE : OS.TVGN_NEXTVISIBLE; | 5956 flags = rect1.top < rect2.top ? OS.TVGN_PREVIOUSVISIBLE : OS.TVGN_NEXTVISIBLE; |
5957 while (hSelectItem !is hNewItem) { | 5957 while (hSelectItem !is hNewItem) { |
5958 tvItem.hItem = hSelectItem; | 5958 tvItem.hItem = cast(HTREEITEM)hSelectItem; |
5959 OS.SendMessage (handle, OS.TVM_SETITEM, 0, &tvItem); | 5959 OS.SendMessage (handle, OS.TVM_SETITEM, 0, &tvItem); |
5960 hSelectItem = cast(HANDLE) OS.SendMessage (handle, OS.TVM_GETNEXTITEM, flags, hSelectItem); | 5960 hSelectItem = cast(HANDLE) OS.SendMessage (handle, OS.TVM_GETNEXTITEM, flags, hSelectItem); |
5961 } | 5961 } |
5962 tvItem.hItem = hNewItem; | 5962 tvItem.hItem = cast(HTREEITEM)hNewItem; |
5963 OS.SendMessage (handle, OS.TVM_SETITEM, 0, &tvItem); | 5963 OS.SendMessage (handle, OS.TVM_SETITEM, 0, &tvItem); |
5964 tvItem.mask = OS.TVIF_HANDLE | OS.TVIF_PARAM; | 5964 tvItem.mask = OS.TVIF_HANDLE | OS.TVIF_PARAM; |
5965 tvItem.hItem = hNewItem; | 5965 tvItem.hItem = cast(HTREEITEM)hNewItem; |
5966 OS.SendMessage (handle, OS.TVM_GETITEM, 0, &tvItem); | 5966 OS.SendMessage (handle, OS.TVM_GETITEM, 0, &tvItem); |
5967 Event event = new Event (); | 5967 Event event = new Event (); |
5968 event.item = _getItem (hNewItem, tvItem.lParam); | 5968 event.item = _getItem (hNewItem, tvItem.lParam); |
5969 postEvent (DWT.Selection, event); | 5969 postEvent (DWT.Selection, event); |
5970 return new LRESULT (code); | 5970 return new LRESULT (code); |
5974 HANDLE hItem = cast(HANDLE) OS.SendMessage (handle, OS.TVM_GETNEXTITEM, OS.TVGN_CARET, 0); | 5974 HANDLE hItem = cast(HANDLE) OS.SendMessage (handle, OS.TVM_GETNEXTITEM, OS.TVGN_CARET, 0); |
5975 if (hItem !is null) { | 5975 if (hItem !is null) { |
5976 TVITEM tvItem; | 5976 TVITEM tvItem; |
5977 tvItem.mask = OS.TVIF_HANDLE | OS.TVIF_STATE; | 5977 tvItem.mask = OS.TVIF_HANDLE | OS.TVIF_STATE; |
5978 tvItem.stateMask = OS.TVIS_SELECTED; | 5978 tvItem.stateMask = OS.TVIS_SELECTED; |
5979 tvItem.hItem = hItem; | 5979 tvItem.hItem = cast(HTREEITEM)hItem; |
5980 OS.SendMessage (handle, OS.TVM_GETITEM, 0, &tvItem); | 5980 OS.SendMessage (handle, OS.TVM_GETITEM, 0, &tvItem); |
5981 bool oldSelected = (tvItem.state & OS.TVIS_SELECTED) !is 0; | 5981 bool oldSelected = (tvItem.state & OS.TVIS_SELECTED) !is 0; |
5982 HANDLE hNewItem; | 5982 HANDLE hNewItem; |
5983 switch (wParam) { | 5983 switch (wParam) { |
5984 case OS.VK_UP: | 5984 case OS.VK_UP: |
6002 OS.GetClientRect (handle, &clientRect); | 6002 OS.GetClientRect (handle, &clientRect); |
6003 hNewItem = cast(HANDLE) OS.SendMessage (handle, OS.TVM_GETNEXTITEM, OS.TVGN_FIRSTVISIBLE, 0); | 6003 hNewItem = cast(HANDLE) OS.SendMessage (handle, OS.TVM_GETNEXTITEM, OS.TVGN_FIRSTVISIBLE, 0); |
6004 do { | 6004 do { |
6005 auto hVisible = cast(HANDLE) OS.SendMessage (handle, OS.TVM_GETNEXTITEM, OS.TVGN_NEXTVISIBLE, hNewItem); | 6005 auto hVisible = cast(HANDLE) OS.SendMessage (handle, OS.TVM_GETNEXTITEM, OS.TVGN_NEXTVISIBLE, hNewItem); |
6006 if (hVisible is null) break; | 6006 if (hVisible is null) break; |
6007 if (!OS.TreeView_GetItemRect (handle, hVisible, &rect, false)) break; | 6007 if (!OS.TreeView_GetItemRect (handle, cast(HTREEITEM)hVisible, &rect, false)) break; |
6008 if (rect.bottom > clientRect.bottom) break; | 6008 if (rect.bottom > clientRect.bottom) break; |
6009 if ((hNewItem = hVisible) is hItem) { | 6009 if ((hNewItem = hVisible) is hItem) { |
6010 OS.SendMessage (handle, OS.WM_VSCROLL, OS.SB_PAGEDOWN, 0); | 6010 OS.SendMessage (handle, OS.WM_VSCROLL, OS.SB_PAGEDOWN, 0); |
6011 } | 6011 } |
6012 } while (hNewItem !is null); | 6012 } while (hNewItem !is null); |
6016 break; | 6016 break; |
6017 default: | 6017 default: |
6018 } | 6018 } |
6019 if (hNewItem !is null) { | 6019 if (hNewItem !is null) { |
6020 OS.SendMessage (handle, OS.TVM_ENSUREVISIBLE, 0, hNewItem); | 6020 OS.SendMessage (handle, OS.TVM_ENSUREVISIBLE, 0, hNewItem); |
6021 tvItem.hItem = hNewItem; | 6021 tvItem.hItem = cast(HTREEITEM)hNewItem; |
6022 OS.SendMessage (handle, OS.TVM_GETITEM, 0, &tvItem); | 6022 OS.SendMessage (handle, OS.TVM_GETITEM, 0, &tvItem); |
6023 bool newSelected = (tvItem.state & OS.TVIS_SELECTED) !is 0; | 6023 bool newSelected = (tvItem.state & OS.TVIS_SELECTED) !is 0; |
6024 bool redraw = !newSelected && drawCount is 0 && OS.IsWindowVisible (handle); | 6024 bool redraw = !newSelected && drawCount is 0 && OS.IsWindowVisible (handle); |
6025 if (redraw) { | 6025 if (redraw) { |
6026 OS.UpdateWindow (handle); | 6026 OS.UpdateWindow (handle); |
6031 OS.SendMessage (handle, OS.TVM_SELECTITEM, OS.TVGN_CARET, hNewItem); | 6031 OS.SendMessage (handle, OS.TVM_SELECTITEM, OS.TVGN_CARET, hNewItem); |
6032 ignoreSelect = false; | 6032 ignoreSelect = false; |
6033 hSelect = null; | 6033 hSelect = null; |
6034 if (oldSelected) { | 6034 if (oldSelected) { |
6035 tvItem.state = OS.TVIS_SELECTED; | 6035 tvItem.state = OS.TVIS_SELECTED; |
6036 tvItem.hItem = hItem; | 6036 tvItem.hItem = cast(HTREEITEM)hItem; |
6037 OS.SendMessage (handle, OS.TVM_SETITEM, 0, &tvItem); | 6037 OS.SendMessage (handle, OS.TVM_SETITEM, 0, &tvItem); |
6038 } | 6038 } |
6039 if (!newSelected) { | 6039 if (!newSelected) { |
6040 tvItem.state = 0; | 6040 tvItem.state = 0; |
6041 tvItem.hItem = hNewItem; | 6041 tvItem.hItem = cast(HTREEITEM)hNewItem; |
6042 OS.SendMessage (handle, OS.TVM_SETITEM, 0, &tvItem); | 6042 OS.SendMessage (handle, OS.TVM_SETITEM, 0, &tvItem); |
6043 } | 6043 } |
6044 if (redraw) { | 6044 if (redraw) { |
6045 RECT rect1, rect2; | 6045 RECT rect1, rect2; |
6046 bool fItemRect = (style & DWT.FULL_SELECTION) is 0; | 6046 bool fItemRect = (style & DWT.FULL_SELECTION) is 0; |
6047 if (hooks (DWT.EraseItem) || hooks (DWT.PaintItem)) fItemRect = false; | 6047 if (hooks (DWT.EraseItem) || hooks (DWT.PaintItem)) fItemRect = false; |
6048 if (!OS.IsWinCE && OS.WIN32_VERSION >= OS.VERSION (6, 0)) fItemRect = false; | 6048 if (!OS.IsWinCE && OS.WIN32_VERSION >= OS.VERSION (6, 0)) fItemRect = false; |
6049 OS.TreeView_GetItemRect (handle, hItem, &rect1, fItemRect); | 6049 OS.TreeView_GetItemRect (handle, cast(HTREEITEM)hItem, &rect1, fItemRect); |
6050 OS.TreeView_GetItemRect (handle, hNewItem, &rect2, fItemRect); | 6050 OS.TreeView_GetItemRect (handle, cast(HTREEITEM)hNewItem, &rect2, fItemRect); |
6051 OS.DefWindowProc (handle, OS.WM_SETREDRAW, 1, 0); | 6051 OS.DefWindowProc (handle, OS.WM_SETREDRAW, 1, 0); |
6052 OS.InvalidateRect (handle, &rect1, true); | 6052 OS.InvalidateRect (handle, &rect1, true); |
6053 OS.InvalidateRect (handle, &rect2, true); | 6053 OS.InvalidateRect (handle, &rect2, true); |
6054 OS.UpdateWindow (handle); | 6054 OS.UpdateWindow (handle); |
6055 } | 6055 } |
6201 fixSelection = true; | 6201 fixSelection = true; |
6202 tvItem.stateMask = OS.TVIS_SELECTED; | 6202 tvItem.stateMask = OS.TVIS_SELECTED; |
6203 auto hNext = cast(HANDLE) OS.SendMessage (handle, OS.TVM_GETNEXTITEM, OS.TVGN_NEXTVISIBLE, lpht.hItem); | 6203 auto hNext = cast(HANDLE) OS.SendMessage (handle, OS.TVM_GETNEXTITEM, OS.TVGN_NEXTVISIBLE, lpht.hItem); |
6204 while (hNext !is null) { | 6204 while (hNext !is null) { |
6205 if (hNext is hAnchor) hAnchor = null; | 6205 if (hNext is hAnchor) hAnchor = null; |
6206 tvItem.hItem = hNext; | 6206 tvItem.hItem = cast(HTREEITEM)hNext; |
6207 OS.SendMessage (handle, OS.TVM_GETITEM, 0, &tvItem); | 6207 OS.SendMessage (handle, OS.TVM_GETITEM, 0, &tvItem); |
6208 if ((tvItem.state & OS.TVIS_SELECTED) !is 0) deselected = true; | 6208 if ((tvItem.state & OS.TVIS_SELECTED) !is 0) deselected = true; |
6209 tvItem.state = 0; | 6209 tvItem.state = 0; |
6210 OS.SendMessage (handle, OS.TVM_SETITEM, 0, &tvItem); | 6210 OS.SendMessage (handle, OS.TVM_SETITEM, 0, &tvItem); |
6211 HANDLE hItem = hNext = cast(HANDLE) OS.SendMessage (handle, OS.TVM_GETNEXTITEM, OS.TVGN_NEXTVISIBLE, hNext); | 6211 HANDLE hItem = hNext = cast(HANDLE) OS.SendMessage (handle, OS.TVM_GETNEXTITEM, OS.TVGN_NEXTVISIBLE, hNext); |
6243 if ((bits & OS.TVS_FULLROWSELECT) is 0) { | 6243 if ((bits & OS.TVS_FULLROWSELECT) is 0) { |
6244 if (OS.SendMessage (handle, OS.TVM_GETIMAGELIST, OS.TVSIL_NORMAL, 0) is 0) { | 6244 if (OS.SendMessage (handle, OS.TVM_GETIMAGELIST, OS.TVSIL_NORMAL, 0) is 0) { |
6245 auto hItem = cast(HANDLE) OS.SendMessage (handle, OS.TVM_GETNEXTITEM, OS.TVGN_CARET, 0); | 6245 auto hItem = cast(HANDLE) OS.SendMessage (handle, OS.TVM_GETNEXTITEM, OS.TVGN_CARET, 0); |
6246 if (hItem !is null) { | 6246 if (hItem !is null) { |
6247 RECT rect; | 6247 RECT rect; |
6248 if (OS.TreeView_GetItemRect (handle, hItem, &rect, false)) { | 6248 if (OS.TreeView_GetItemRect (handle, cast(HTREEITEM)hItem, &rect, false)) { |
6249 OS.InvalidateRect (handle, &rect, true); | 6249 OS.InvalidateRect (handle, &rect, true); |
6250 } | 6250 } |
6251 } | 6251 } |
6252 } | 6252 } |
6253 } | 6253 } |
6357 } | 6357 } |
6358 | 6358 |
6359 /* Get the selected state of the last selected item */ | 6359 /* Get the selected state of the last selected item */ |
6360 auto hOldItem = cast(HANDLE) OS.SendMessage (handle, OS.TVM_GETNEXTITEM, OS.TVGN_CARET, 0); | 6360 auto hOldItem = cast(HANDLE) OS.SendMessage (handle, OS.TVM_GETNEXTITEM, OS.TVGN_CARET, 0); |
6361 if ((style & DWT.MULTI) !is 0) { | 6361 if ((style & DWT.MULTI) !is 0) { |
6362 tvItem.hItem = hOldItem; | 6362 tvItem.hItem = cast(HTREEITEM)hOldItem; |
6363 OS.SendMessage (handle, OS.TVM_GETITEM, 0, &tvItem); | 6363 OS.SendMessage (handle, OS.TVM_GETITEM, 0, &tvItem); |
6364 | 6364 |
6365 /* Check for CONTROL or drag selection */ | 6365 /* Check for CONTROL or drag selection */ |
6366 if (hittestSelected || (wParam & OS.MK_CONTROL) !is 0) { | 6366 if (hittestSelected || (wParam & OS.MK_CONTROL) !is 0) { |
6367 /* | 6367 /* |
6440 if ((style & DWT.SINGLE) !is 0) { | 6440 if ((style & DWT.SINGLE) !is 0) { |
6441 if (hOldItem is hNewItem) { | 6441 if (hOldItem is hNewItem) { |
6442 tvItem.mask = OS.TVIF_HANDLE | OS.TVIF_STATE; | 6442 tvItem.mask = OS.TVIF_HANDLE | OS.TVIF_STATE; |
6443 tvItem.state = OS.TVIS_SELECTED; | 6443 tvItem.state = OS.TVIS_SELECTED; |
6444 tvItem.stateMask = OS.TVIS_SELECTED; | 6444 tvItem.stateMask = OS.TVIS_SELECTED; |
6445 tvItem.hItem = hNewItem; | 6445 tvItem.hItem = cast(HTREEITEM)hNewItem; |
6446 OS.SendMessage (handle, OS.TVM_SETITEM, 0, &tvItem); | 6446 OS.SendMessage (handle, OS.TVM_SETITEM, 0, &tvItem); |
6447 } | 6447 } |
6448 } | 6448 } |
6449 | 6449 |
6450 /* Reselect the last item that was unselected */ | 6450 /* Reselect the last item that was unselected */ |
6473 } | 6473 } |
6474 RECT rect1, rect2; | 6474 RECT rect1, rect2; |
6475 bool fItemRect = (style & DWT.FULL_SELECTION) is 0; | 6475 bool fItemRect = (style & DWT.FULL_SELECTION) is 0; |
6476 if (hooks (DWT.EraseItem) || hooks (DWT.PaintItem)) fItemRect = false; | 6476 if (hooks (DWT.EraseItem) || hooks (DWT.PaintItem)) fItemRect = false; |
6477 if (!OS.IsWinCE && OS.WIN32_VERSION >= OS.VERSION (6, 0)) fItemRect = false; | 6477 if (!OS.IsWinCE && OS.WIN32_VERSION >= OS.VERSION (6, 0)) fItemRect = false; |
6478 OS.TreeView_GetItemRect (handle, hOldItem, &rect1, fItemRect); | 6478 OS.TreeView_GetItemRect (handle, cast(HTREEITEM)hOldItem, &rect1, fItemRect); |
6479 OS.TreeView_GetItemRect (handle, hNewItem, &rect2, fItemRect); | 6479 OS.TreeView_GetItemRect (handle, cast(HTREEITEM)hNewItem, &rect2, fItemRect); |
6480 OS.DefWindowProc (handle, OS.WM_SETREDRAW, 1, 0); | 6480 OS.DefWindowProc (handle, OS.WM_SETREDRAW, 1, 0); |
6481 OS.InvalidateRect (handle, &rect1, true); | 6481 OS.InvalidateRect (handle, &rect1, true); |
6482 OS.InvalidateRect (handle, &rect2, true); | 6482 OS.InvalidateRect (handle, &rect2, true); |
6483 OS.UpdateWindow (handle); | 6483 OS.UpdateWindow (handle); |
6484 } | 6484 } |
6494 deselect (hItem, &tvItem, hNewItem); | 6494 deselect (hItem, &tvItem, hNewItem); |
6495 } else { | 6495 } else { |
6496 for (int i=0; i<items.length; i++) { | 6496 for (int i=0; i<items.length; i++) { |
6497 TreeItem item = items [i]; | 6497 TreeItem item = items [i]; |
6498 if (item !is null && item.handle !is hNewItem) { | 6498 if (item !is null && item.handle !is hNewItem) { |
6499 tvItem.hItem = item.handle; | 6499 tvItem.hItem = cast(HTREEITEM)item.handle; |
6500 OS.SendMessage (handle, OS.TVM_SETITEM, 0, &tvItem); | 6500 OS.SendMessage (handle, OS.TVM_SETITEM, 0, &tvItem); |
6501 } | 6501 } |
6502 } | 6502 } |
6503 } | 6503 } |
6504 tvItem.hItem = hNewItem; | 6504 tvItem.hItem = cast(HTREEITEM)hNewItem; |
6505 tvItem.state = OS.TVIS_SELECTED; | 6505 tvItem.state = OS.TVIS_SELECTED; |
6506 OS.SendMessage (handle, OS.TVM_SETITEM, 0, &tvItem); | 6506 OS.SendMessage (handle, OS.TVM_SETITEM, 0, &tvItem); |
6507 OS.SetWindowLongPtr (handle, OS.GWLP_WNDPROC, oldProc); | 6507 OS.SetWindowLongPtr (handle, OS.GWLP_WNDPROC, oldProc); |
6508 if ((wParam & OS.MK_SHIFT) !is 0) { | 6508 if ((wParam & OS.MK_SHIFT) !is 0) { |
6509 RECT rect1; | 6509 RECT rect1; |
6510 if (hAnchor is null) hAnchor = hNewItem; | 6510 if (hAnchor is null) hAnchor = hNewItem; |
6511 if (OS.TreeView_GetItemRect (handle, hAnchor, &rect1, false)) { | 6511 if (OS.TreeView_GetItemRect (handle, cast(HTREEITEM)hAnchor, &rect1, false)) { |
6512 RECT rect2; | 6512 RECT rect2; |
6513 if (OS.TreeView_GetItemRect (handle, hNewItem, &rect2, false)) { | 6513 if (OS.TreeView_GetItemRect (handle, cast(HTREEITEM)hNewItem, &rect2, false)) { |
6514 int flags = rect1.top < rect2.top ? OS.TVGN_NEXTVISIBLE : OS.TVGN_PREVIOUSVISIBLE; | 6514 int flags = rect1.top < rect2.top ? OS.TVGN_NEXTVISIBLE : OS.TVGN_PREVIOUSVISIBLE; |
6515 tvItem.state = OS.TVIS_SELECTED; | 6515 tvItem.state = OS.TVIS_SELECTED; |
6516 auto hItem = tvItem.hItem = hAnchor; | 6516 auto hItem = tvItem.hItem = cast(HTREEITEM)hAnchor; |
6517 OS.SendMessage (handle, OS.TVM_SETITEM, 0, &tvItem); | 6517 OS.SendMessage (handle, OS.TVM_SETITEM, 0, &tvItem); |
6518 while (hItem !is hNewItem) { | 6518 while (hItem !is hNewItem) { |
6519 tvItem.hItem = hItem; | 6519 tvItem.hItem = hItem; |
6520 OS.SendMessage (handle, OS.TVM_SETITEM, 0, &tvItem); | 6520 OS.SendMessage (handle, OS.TVM_SETITEM, 0, &tvItem); |
6521 hItem = cast(HANDLE) OS.SendMessage (handle, OS.TVM_GETNEXTITEM, flags, hItem); | 6521 hItem = cast(HTREEITEM) OS.SendMessage (handle, OS.TVM_GETNEXTITEM, flags, hItem); |
6522 } | 6522 } |
6523 } | 6523 } |
6524 } | 6524 } |
6525 } | 6525 } |
6526 } | 6526 } |
6528 } | 6528 } |
6529 if ((wParam & OS.MK_SHIFT) is 0) hAnchor = hNewItem; | 6529 if ((wParam & OS.MK_SHIFT) is 0) hAnchor = hNewItem; |
6530 | 6530 |
6531 /* Issue notification */ | 6531 /* Issue notification */ |
6532 if (!gestureCompleted) { | 6532 if (!gestureCompleted) { |
6533 tvItem.hItem = hNewItem; | 6533 tvItem.hItem = cast(HTREEITEM)hNewItem; |
6534 tvItem.mask = OS.TVIF_HANDLE | OS.TVIF_PARAM; | 6534 tvItem.mask = OS.TVIF_HANDLE | OS.TVIF_PARAM; |
6535 OS.SendMessage (handle, OS.TVM_GETITEM, 0, &tvItem); | 6535 OS.SendMessage (handle, OS.TVM_GETITEM, 0, &tvItem); |
6536 Event event = new Event (); | 6536 Event event = new Event (); |
6537 event.item = _getItem (tvItem.hItem, tvItem.lParam); | 6537 event.item = _getItem (tvItem.hItem, tvItem.lParam); |
6538 postEvent (DWT.Selection, event); | 6538 postEvent (DWT.Selection, event); |
6681 } | 6681 } |
6682 return LRESULT.ZERO; | 6682 return LRESULT.ZERO; |
6683 } | 6683 } |
6684 | 6684 |
6685 override LRESULT WM_PAINT (int wParam, int lParam) { | 6685 override LRESULT WM_PAINT (int wParam, int lParam) { |
6686 | |
6686 if (shrink && !ignoreShrink) { | 6687 if (shrink && !ignoreShrink) { |
6687 /* Resize the item array to fit the last item */ | 6688 /* Resize the item array to fit the last item */ |
6688 int count = items.length - 1; | 6689 int count = items.length - 1; |
6689 while (count >= 0) { | 6690 while (count >= 0) { |
6690 if (items [count] !is null) break; | 6691 if (items [count] !is null) break; |