|  | /* | 
|  | * Drag List control | 
|  | * | 
|  | * Copyright 1999 Eric Kohl | 
|  | * | 
|  | * This library is free software; you can redistribute it and/or | 
|  | * modify it under the terms of the GNU Lesser General Public | 
|  | * License as published by the Free Software Foundation; either | 
|  | * version 2.1 of the License, or (at your option) any later version. | 
|  | * | 
|  | * This library is distributed in the hope that it will be useful, | 
|  | * but WITHOUT ANY WARRANTY; without even the implied warranty of | 
|  | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU | 
|  | * Lesser General Public License for more details. | 
|  | * | 
|  | * You should have received a copy of the GNU Lesser General Public | 
|  | * License along with this library; if not, write to the Free Software | 
|  | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | 
|  | * | 
|  | * NOTES | 
|  | *   This is just a dummy control. An author is needed! Any volunteers? | 
|  | *   I will only improve this control once in a while. | 
|  | *     Eric <ekohl@abo.rhein-zeitung.de> | 
|  | * | 
|  | * TODO: | 
|  | *   - Everything. | 
|  | */ | 
|  |  | 
|  | #include "commctrl.h" | 
|  | #include "wine/debug.h" | 
|  |  | 
|  | WINE_DEFAULT_DEBUG_CHANNEL(commctrl); | 
|  |  | 
|  |  | 
|  | static DWORD dwLastScrollTime = 0; | 
|  |  | 
|  | /*********************************************************************** | 
|  | *		MakeDragList (COMCTL32.13) | 
|  | */ | 
|  | BOOL WINAPI MakeDragList (HWND hwndLB) | 
|  | { | 
|  | FIXME("(%p)\n", hwndLB); | 
|  |  | 
|  |  | 
|  | return FALSE; | 
|  | } | 
|  |  | 
|  | /*********************************************************************** | 
|  | *		DrawInsert (COMCTL32.15) | 
|  | */ | 
|  | VOID WINAPI DrawInsert (HWND hwndParent, HWND hwndLB, INT nItem) | 
|  | { | 
|  | FIXME("(%p %p %d)\n", hwndParent, hwndLB, nItem); | 
|  |  | 
|  |  | 
|  | } | 
|  |  | 
|  | /*********************************************************************** | 
|  | *		LBItemFromPt (COMCTL32.14) | 
|  | */ | 
|  | INT WINAPI LBItemFromPt (HWND hwndLB, POINT pt, BOOL bAutoScroll) | 
|  | { | 
|  | RECT rcClient; | 
|  | INT nIndex; | 
|  | DWORD dwScrollTime; | 
|  |  | 
|  | FIXME("(%p %ld x %ld %s)\n", | 
|  | hwndLB, pt.x, pt.y, bAutoScroll ? "TRUE" : "FALSE"); | 
|  |  | 
|  | ScreenToClient (hwndLB, &pt); | 
|  | GetClientRect (hwndLB, &rcClient); | 
|  | nIndex = (INT)SendMessageA (hwndLB, LB_GETTOPINDEX, 0, 0); | 
|  |  | 
|  | if (PtInRect (&rcClient, pt)) | 
|  | { | 
|  | /* point is inside -- get the item index */ | 
|  | while (TRUE) | 
|  | { | 
|  | if (SendMessageA (hwndLB, LB_GETITEMRECT, nIndex, (LPARAM)&rcClient) == LB_ERR) | 
|  | return -1; | 
|  |  | 
|  | if (PtInRect (&rcClient, pt)) | 
|  | return nIndex; | 
|  |  | 
|  | nIndex++; | 
|  | } | 
|  | } | 
|  | else | 
|  | { | 
|  | /* point is outside */ | 
|  | if (!bAutoScroll) | 
|  | return -1; | 
|  |  | 
|  | if ((pt.x > rcClient.right) || (pt.x < rcClient.left)) | 
|  | return -1; | 
|  |  | 
|  | if (pt.y < 0) | 
|  | nIndex--; | 
|  | else | 
|  | nIndex++; | 
|  |  | 
|  | dwScrollTime = GetTickCount (); | 
|  |  | 
|  | if ((dwScrollTime - dwLastScrollTime) < 200) | 
|  | return -1; | 
|  |  | 
|  | dwLastScrollTime = dwScrollTime; | 
|  |  | 
|  | SendMessageA (hwndLB, LB_SETTOPINDEX, (WPARAM)nIndex, 0); | 
|  | } | 
|  |  | 
|  | return -1; | 
|  | } | 
|  |  | 
|  |  | 
|  | #if 0 | 
|  | static LRESULT CALLBACK | 
|  | DRAGLIST_WindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) | 
|  | { | 
|  |  | 
|  | return FALSE; | 
|  | } | 
|  | #endif | 
|  |  | 
|  |  | 
|  |  |