\r
CBrowseRefsDlg::CBrowseRefsDlg(CString cmdPath, CWnd* pParent /*=NULL*/)\r
: CResizableStandAloneDialog(CBrowseRefsDlg::IDD, pParent),\r
- m_cmdPath(cmdPath)\r
+ m_cmdPath(cmdPath),\r
+ m_currSortCol(-1),\r
+ m_currSortDesc(false)\r
{\r
\r
}\r
class CRefLeafListCompareFunc\r
{\r
public:\r
- CRefLeafListCompareFunc(CListCtrl* pList, int col):m_col(col),m_pList(pList){}\r
+ CRefLeafListCompareFunc(CListCtrl* pList, int col, bool desc):m_col(col),m_desc(desc),m_pList(pList){}\r
\r
static int CALLBACK StaticCompare(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)\r
{\r
\r
int Compare(CShadowTree* pLeft, CShadowTree* pRight)\r
{\r
+ int result=CompareNoDesc(pLeft,pRight);\r
+ if(m_desc)\r
+ return -result;\r
+ return result;\r
+ }\r
+\r
+ int CompareNoDesc(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
+ bool m_desc;\r
CListCtrl* m_pList;\r
\r
\r
LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);\r
*pResult = 0;\r
\r
- CRefLeafListCompareFunc compareFunc(&m_ListRefLeafs,pNMLV->iSubItem);\r
+ if(m_currSortCol == pNMLV->iSubItem)\r
+ m_currSortDesc = !m_currSortDesc;\r
+ else\r
+ {\r
+ m_currSortCol = pNMLV->iSubItem;\r
+ m_currSortDesc = false;\r
+ }\r
+\r
+ CRefLeafListCompareFunc compareFunc(&m_ListRefLeafs, m_currSortCol, m_currSortDesc);\r
m_ListRefLeafs.SortItemsEx(&CRefLeafListCompareFunc::StaticCompare, (DWORD_PTR)&compareFunc);\r
}\r