ReactOS 0.4.16-dev-2284-g3529151
CSortableHeader Struct Reference

#include <CSortableHeader.hpp>

Collaboration diagram for CSortableHeader:

Classes

struct  SortContext
 

Public Member Functions

INT CompareFunc (LPARAM lParam1, LPARAM lParam2, SortContext *ctx)
 
void ColumnClick (CListView &listView, LPNMLISTVIEW pnmv)
 
void ReapplySorting (CListView &listView)
 
void ApplySorting (CListView &listView, INT nHeaderID)
 

Static Public Member Functions

static INT CALLBACK s_CompareFunc (LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
 

Private Attributes

int m_LastHeaderID = 0
 
bool m_Ascending = true
 

Detailed Description

Definition at line 8 of file CSortableHeader.hpp.

Member Function Documentation

◆ ApplySorting()

void CSortableHeader::ApplySorting ( CListView listView,
INT  nHeaderID 
)
inline

Definition at line 77 of file CSortableHeader.hpp.

78 {
79 HWND hHeader = (HWND)listView.SendMessage(LVM_GETHEADER, 0, 0);
80 HDITEMW hColumn;
81 ZeroMemory(&hColumn, sizeof(hColumn));
82
83 /* If the sorting column changed, remove the sorting style from the old column */
84 if ((m_LastHeaderID != -1) && (m_LastHeaderID != nHeaderID))
85 {
86 m_Ascending = TRUE; // also reset sorting method to ascending
87 hColumn.mask = HDI_FORMAT;
88 Header_GetItem(hHeader, m_LastHeaderID, &hColumn);
89 hColumn.fmt &= ~(HDF_SORTUP | HDF_SORTDOWN);
90 Header_SetItem(hHeader, m_LastHeaderID, &hColumn);
91 }
92
93 /* Set the sorting style to the new column */
94 hColumn.mask = HDI_FORMAT;
95 Header_GetItem(hHeader, nHeaderID, &hColumn);
96
97 hColumn.fmt &= ~(HDF_SORTDOWN | HDF_SORTUP);
98 hColumn.fmt |= (m_Ascending ? HDF_SORTUP : HDF_SORTDOWN);
99 Header_SetItem(hHeader, nHeaderID, &hColumn);
100
101 /* Sort the list, using the current values of nHeaderID and bIsAscending */
102 SortContext ctx = {this, &listView, nHeaderID};
103 listView.SortItems(s_CompareFunc, &ctx);
104 }
BOOL SortItems(PFNLVCOMPARE pfnCompare, PVOID lParam)
Definition: rosctrls.h:141
#define TRUE
Definition: types.h:120
HANDLE HWND
Definition: compat.h:19
#define ZeroMemory
Definition: minwinbase.h:31
#define Header_GetItem(hwndHD, i, phdi)
Definition: commctrl.h:751
#define LVM_GETHEADER
Definition: commctrl.h:2655
#define Header_SetItem(hwndHD, i, phdi)
Definition: commctrl.h:758
#define HDF_SORTUP
Definition: commctrl.h:724
#define HDI_FORMAT
Definition: commctrl.h:705
#define HDF_SORTDOWN
Definition: commctrl.h:725
static INT CALLBACK s_CompareFunc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
UINT mask
Definition: commctrl.h:684
int fmt
Definition: commctrl.h:689

Referenced by ColumnClick(), and ReapplySorting().

◆ ColumnClick()

void CSortableHeader::ColumnClick ( CListView listView,
LPNMLISTVIEW  pnmv 
)
inline

Definition at line 55 of file CSortableHeader.hpp.

56 {
57 if ((listView.GetWindowLongPtr(GWL_STYLE) & ~LVS_NOSORTHEADER) == 0)
58 return;
59
60 ApplySorting(listView, pnmv->iSubItem);
61
62 /* Save new values */
65 }
#define LVS_NOSORTHEADER
Definition: commctrl.h:2290
void ApplySorting(CListView &listView, INT nHeaderID)
#define GWL_STYLE
Definition: winuser.h:863

Referenced by CCertMgrProperties::OnHeaderClicked().

◆ CompareFunc()

INT CSortableHeader::CompareFunc ( LPARAM  lParam1,
LPARAM  lParam2,
SortContext ctx 
)
inline

Definition at line 30 of file CSortableHeader.hpp.

31 {
32 const INT iSubItem = ctx->iSubItem;
33#define MAX_STR_LEN 256
34
35 CStringW Item1, Item2;
36 LVFINDINFOW IndexInfo;
37 INT Index;
38
39 IndexInfo.flags = LVFI_PARAM;
40
41 IndexInfo.lParam = lParam1;
42 Index = ctx->lvw->FindItem(-1, &IndexInfo);
43 ctx->lvw->GetItemText(Index, iSubItem, Item1.GetBuffer(MAX_STR_LEN), MAX_STR_LEN);
44 Item1.ReleaseBuffer();
45
46 IndexInfo.lParam = lParam2;
47 Index = ctx->lvw->FindItem(-1, &IndexInfo);
48 ctx->lvw->GetItemText(Index, iSubItem, Item2.GetBuffer(MAX_STR_LEN), MAX_STR_LEN);
49 Item2.ReleaseBuffer();
50
51 return m_Ascending ? Item1.Compare(Item2) : Item2.Compare(Item1);
52 }
#define MAX_STR_LEN
CAtlStringW CStringW
Definition: atlstr.h:130
#define LVFI_PARAM
Definition: commctrl.h:2441
LPARAM lParam
Definition: commctrl.h:2463
int32_t INT
Definition: typedefs.h:58
_In_ WDFCOLLECTION _In_ ULONG Index

◆ ReapplySorting()

void CSortableHeader::ReapplySorting ( CListView listView)
inline

Definition at line 68 of file CSortableHeader.hpp.

69 {
70 if (m_LastHeaderID != -1)
71 {
73 }
74 }

Referenced by CCertMgrProperties::OnStoreChanged().

◆ s_CompareFunc()

static INT CALLBACK CSortableHeader::s_CompareFunc ( LPARAM  lParam1,
LPARAM  lParam2,
LPARAM  lParamSort 
)
inlinestatic

Definition at line 23 of file CSortableHeader.hpp.

24 {
25 SortContext *ctx = ((SortContext *)lParamSort);
26 return ctx->hdr->CompareFunc(lParam1, lParam2, ctx);
27 }

Referenced by ApplySorting().

Member Data Documentation

◆ m_Ascending

bool CSortableHeader::m_Ascending = true
private

Definition at line 12 of file CSortableHeader.hpp.

Referenced by ApplySorting(), ColumnClick(), and CompareFunc().

◆ m_LastHeaderID

int CSortableHeader::m_LastHeaderID = 0
private

Definition at line 11 of file CSortableHeader.hpp.

Referenced by ApplySorting(), ColumnClick(), and ReapplySorting().


The documentation for this struct was generated from the following file: