Authors: Chris Morgan <cmorgan@wpi.edu>, James Abbatiello <abbeyj@wpi.edu>
Implemented LISTVIEW_SortItems() and LISTVIEW_CallBackCompare()
This commit is contained in:
parent
a79cc39ffa
commit
75b217712f
|
@ -15,7 +15,6 @@
|
||||||
* LISTVIEW_Notify : most notifications from children (editbox and header)
|
* LISTVIEW_Notify : most notifications from children (editbox and header)
|
||||||
*
|
*
|
||||||
* Data structure:
|
* Data structure:
|
||||||
* LISTVIEW_SortItems : empty stub
|
|
||||||
* LISTVIEW_SetItemCount : empty stub
|
* LISTVIEW_SetItemCount : empty stub
|
||||||
*
|
*
|
||||||
* Unicode:
|
* Unicode:
|
||||||
|
@ -5068,12 +5067,44 @@ static LRESULT LISTVIEW_SetTextColor (HWND hwnd, COLORREF clrText)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***
|
||||||
|
* DESCRIPTION:
|
||||||
|
* Callback internally used by LISTVIEW_SortItems()
|
||||||
|
*
|
||||||
|
* PARAMETER(S):
|
||||||
|
* [I] LPVOID : first LISTVIEW_ITEM to compare
|
||||||
|
* [I] LPVOID : second LISTVIEW_ITEM to compare
|
||||||
|
* [I] LPARAM : HWND of control
|
||||||
|
*
|
||||||
|
* RETURN:
|
||||||
|
* if first comes before second : negative
|
||||||
|
* if first comes after second : positive
|
||||||
|
* if first and second are equivalent : zero
|
||||||
|
*/
|
||||||
|
static INT WINAPI LISTVIEW_CallBackCompare(
|
||||||
|
LPVOID first,
|
||||||
|
LPVOID second,
|
||||||
|
LPARAM lParam)
|
||||||
|
{
|
||||||
|
/* Forward the call to the client defined callback */
|
||||||
|
HWND hwnd = (HWND)lParam;
|
||||||
|
LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongA(hwnd, 0);
|
||||||
|
|
||||||
|
return (infoPtr->pfnCompare)(
|
||||||
|
((LISTVIEW_ITEM *)first)->lParam,
|
||||||
|
((LISTVIEW_ITEM *)second)->lParam,
|
||||||
|
infoPtr->lParamSort);
|
||||||
|
}
|
||||||
|
|
||||||
/***
|
/***
|
||||||
* DESCRIPTION:
|
* DESCRIPTION:
|
||||||
* Sorts the listview items.
|
* Sorts the listview items.
|
||||||
*
|
*
|
||||||
* PARAMETER(S):
|
* PARAMETER(S):
|
||||||
* [I] HWND : window handle
|
* [I] HWND : window handle
|
||||||
|
* [I] WPARAM : application-defined value
|
||||||
|
* [I] LPARAM : pointer to comparision callback
|
||||||
*
|
*
|
||||||
* RETURN:
|
* RETURN:
|
||||||
* SUCCESS : TRUE
|
* SUCCESS : TRUE
|
||||||
|
@ -5081,9 +5112,47 @@ static LRESULT LISTVIEW_SetTextColor (HWND hwnd, COLORREF clrText)
|
||||||
*/
|
*/
|
||||||
static LRESULT LISTVIEW_SortItems(HWND hwnd, WPARAM wParam, LPARAM lParam)
|
static LRESULT LISTVIEW_SortItems(HWND hwnd, WPARAM wParam, LPARAM lParam)
|
||||||
{
|
{
|
||||||
FIXME("empty stub!\n");
|
LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongA(hwnd, 0);
|
||||||
|
HDPA hdpaSubItems;
|
||||||
|
LISTVIEW_ITEM *lpItem;
|
||||||
|
int nCount, i;
|
||||||
|
HDPA sortList;
|
||||||
|
|
||||||
|
if (!infoPtr || !infoPtr->hdpaItems)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
nCount = GETITEMCOUNT(infoPtr);
|
||||||
|
// if there are 0 or 1 items, there is no need to sort
|
||||||
|
if (nCount > 1)
|
||||||
|
{
|
||||||
|
sortList = DPA_Create(nCount);
|
||||||
|
|
||||||
return TRUE;
|
infoPtr->pfnCompare = (PFNLVCOMPARE)lParam;
|
||||||
|
infoPtr->lParamSort = (LPARAM)wParam;
|
||||||
|
|
||||||
|
// append pointers one by one to sortList
|
||||||
|
for (i = 0; i < nCount; i++)
|
||||||
|
{
|
||||||
|
if ((hdpaSubItems = (HDPA) DPA_GetPtr(infoPtr->hdpaItems, i)))
|
||||||
|
if ((lpItem = (LISTVIEW_ITEM *) DPA_GetPtr(hdpaSubItems, 0)))
|
||||||
|
DPA_InsertPtr(sortList, nCount + 1, lpItem);
|
||||||
|
}
|
||||||
|
|
||||||
|
// sort the sortList
|
||||||
|
DPA_Sort(sortList, LISTVIEW_CallBackCompare, hwnd);
|
||||||
|
|
||||||
|
// copy the pointers back
|
||||||
|
for (i = 0; i < nCount; i++)
|
||||||
|
{
|
||||||
|
if ((hdpaSubItems = (HDPA) DPA_GetPtr(infoPtr->hdpaItems, i)) &&
|
||||||
|
(lpItem = (LISTVIEW_ITEM *) DPA_GetPtr(sortList, i)))
|
||||||
|
DPA_SetPtr(hdpaSubItems, 0, lpItem);
|
||||||
|
}
|
||||||
|
|
||||||
|
DPA_Destroy(sortList);
|
||||||
|
}
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/***
|
/***
|
||||||
|
|
|
@ -53,7 +53,9 @@ typedef struct tagLISTVIEW_INFO
|
||||||
BOOL bFocus;
|
BOOL bFocus;
|
||||||
DWORD dwExStyle; /* extended listview style */
|
DWORD dwExStyle; /* extended listview style */
|
||||||
HDPA hdpaItems;
|
HDPA hdpaItems;
|
||||||
|
PFNLVCOMPARE pfnCompare;
|
||||||
|
LPARAM lParamSort;
|
||||||
|
|
||||||
} LISTVIEW_INFO;
|
} LISTVIEW_INFO;
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue