+\r
+class CRefLeafListCompareFunc\r
+{\r
+public:\r
+ CRefLeafListCompareFunc(CListCtrl* pList, int col):m_col(col),m_pList(pList){}\r
+\r
+ static int CALLBACK StaticCompare(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)\r
+ {\r
+ return ((CRefLeafListCompareFunc*)lParamSort)->Compare(lParam1,lParam2);\r
+ }\r
+\r
+ int Compare(LPARAM lParam1, LPARAM lParam2)\r
+ {\r
+ return Compare(\r
+ (CShadowTree*)m_pList->GetItemData(lParam1), \r
+ (CShadowTree*)m_pList->GetItemData(lParam2));\r
+ }\r
+\r
+ int Compare(CShadowTree* pLeft, CShadowTree* pRight)\r
+ {\r
+ switch(m_col)\r
+ {\r
+ case CBrowseRefsDlg::eCol_Name: return pLeft->GetRefName().CompareNoCase(pRight->GetRefName());\r
+ break;\r
+ case CBrowseRefsDlg::eCol_Date: return pLeft->m_csDate_Iso8601.CompareNoCase(pRight->m_csDate_Iso8601);\r
+ break;\r
+ case CBrowseRefsDlg::eCol_Msg: return pLeft->m_csSubject.CompareNoCase(pRight->m_csSubject);\r
+ break;\r
+ case CBrowseRefsDlg::eCol_Hash: return pLeft->m_csRefHash.CompareNoCase(pRight->m_csRefHash);\r
+ break;\r
+ }\r
+ return 0;\r
+ }\r
+\r
+ int m_col;\r
+ CListCtrl* m_pList;\r
+\r
+\r
+};\r
+\r
+void CBrowseRefsDlg::OnLvnColumnclickListRefLeafs(NMHDR *pNMHDR, LRESULT *pResult)\r
+{\r
+ LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);\r
+ *pResult = 0;\r
+\r
+ CRefLeafListCompareFunc compareFunc(&m_ListRefLeafs,pNMLV->iSubItem);\r
+ m_ListRefLeafs.SortItemsEx(&CRefLeafListCompareFunc::StaticCompare, (DWORD_PTR)&compareFunc);\r
+}\r