[RAPPS] Set header style when sorting by column

This commit is contained in:
Alexander Shaposhnikov 2018-02-09 00:41:55 +02:00
parent f0c7f862d4
commit b698067e35
No known key found for this signature in database
GPG key ID: 2BC6459908479EFC

View file

@ -388,14 +388,17 @@ class CAppsListView :
}; };
BOOL bHasAllChecked; BOOL bHasAllChecked;
BOOL bAscending; BOOL bIsAscending;
BOOL bHasCheckboxes; BOOL bHasCheckboxes;
INT nLastHeaderID;
public: public:
CAppsListView() : CAppsListView() :
bHasAllChecked(FALSE), bHasAllChecked(FALSE),
bAscending(TRUE), bIsAscending(TRUE),
bHasCheckboxes(FALSE) bHasCheckboxes(FALSE),
nLastHeaderID(-1)
{ {
} }
@ -415,11 +418,40 @@ public:
VOID ColumnClick(LPNMLISTVIEW pnmv) VOID ColumnClick(LPNMLISTVIEW pnmv)
{ {
SortContext ctx = {this, pnmv->iSubItem}; HWND hHeader;
HDITEMW hColumn;
INT nHeaderID = pnmv->iSubItem;
if ((GetWindowLongPtr(GWL_STYLE) & ~LVS_NOSORTHEADER) == 0)
return;
hHeader = (HWND) SendMessage(LVM_GETHEADER, 0, 0);
ZeroMemory(&hColumn, sizeof(hColumn));
/* If the sorting column changed, remove the sorting style from the old column */
if ((nLastHeaderID != -1) && (nLastHeaderID != nHeaderID))
{
hColumn.mask = HDI_FORMAT;
Header_GetItem(hHeader, nLastHeaderID, &hColumn);
hColumn.fmt &= ~(HDF_SORTUP | HDF_SORTDOWN);
Header_SetItem(hHeader, nLastHeaderID, &hColumn);
}
/* Set the sorting style to the new column */
hColumn.mask = HDI_FORMAT;
Header_GetItem(hHeader, nHeaderID, &hColumn);
hColumn.fmt &= (bIsAscending ? ~HDF_SORTDOWN : ~HDF_SORTUP);
hColumn.fmt |= (bIsAscending ? HDF_SORTUP : HDF_SORTDOWN);
Header_SetItem(hHeader, nHeaderID, &hColumn);
/* Sort the list, using the current values of nHeaderID and bIsAscending */
SortContext ctx = {this, nHeaderID};
SortItems(s_CompareFunc, &ctx); SortItems(s_CompareFunc, &ctx);
bAscending = !bAscending; /* Save new values */
nLastHeaderID = nHeaderID;
bIsAscending = !bIsAscending;
} }
PVOID GetLParam(INT Index) PVOID GetLParam(INT Index)
@ -507,7 +539,7 @@ public:
GetItemText(Index, iSubItem, Item2.GetBuffer(MAX_STR_LEN), MAX_STR_LEN); GetItemText(Index, iSubItem, Item2.GetBuffer(MAX_STR_LEN), MAX_STR_LEN);
Item2.ReleaseBuffer(); Item2.ReleaseBuffer();
if (bAscending) if (bIsAscending)
return Item2 == Item1; return Item2 == Item1;
else else
return Item1 == Item2; return Item1 == Item2;