Module: wine Branch: master Commit: 3a7d3fcc8a00a69ee763195c56e3e47c076b549a URL: http://source.winehq.org/git/wine.git/?a=commit;h=3a7d3fcc8a00a69ee763195c56...
Author: Juan Lang juan.lang@gmail.com Date: Mon Oct 26 15:30:16 2009 -0700
cryptui: Support sorting columns by clicking on their headers.
---
dlls/cryptui/main.c | 72 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 72 insertions(+), 0 deletions(-)
diff --git a/dlls/cryptui/main.c b/dlls/cryptui/main.c index 9807064..a772329 100644 --- a/dlls/cryptui/main.c +++ b/dlls/cryptui/main.c @@ -1062,6 +1062,49 @@ static void cert_mgr_do_export(HWND hwnd) } }
+static int CALLBACK cert_mgr_sort_by_text(HWND lv, int col, int index1, + int index2) +{ + LVITEMW item; + WCHAR buf1[MAX_STRING_LEN]; + WCHAR buf2[MAX_STRING_LEN]; + + item.cchTextMax = sizeof(buf1) / sizeof(buf1[0]); + item.mask = LVIF_TEXT; + item.pszText = buf1; + item.iItem = index1; + item.iSubItem = col; + SendMessageW(lv, LVM_GETITEMW, 0, (LPARAM)&item); + item.pszText = buf2; + item.iItem = index2; + SendMessageW(lv, LVM_GETITEMW, 0, (LPARAM)&item); + return strcmpW(buf1, buf2); +} + +static int CALLBACK cert_mgr_sort_by_subject(LPARAM lp1, LPARAM lp2, LPARAM lp) +{ + return cert_mgr_sort_by_text((HWND)lp, 0, lp1, lp2); +} + +static int CALLBACK cert_mgr_sort_by_issuer(LPARAM lp1, LPARAM lp2, LPARAM lp) +{ + return cert_mgr_sort_by_text((HWND)lp, 1, lp1, lp2); +} + +static int CALLBACK cert_mgr_sort_by_date(LPARAM lp1, LPARAM lp2, LPARAM lp) +{ + PCCERT_CONTEXT cert1 = (PCCERT_CONTEXT)lp1; + PCCERT_CONTEXT cert2 = (PCCERT_CONTEXT)lp2; + return CompareFileTime(&cert1->pCertInfo->NotAfter, + &cert2->pCertInfo->NotAfter); +} + +static int CALLBACK cert_mgr_sort_by_friendly_name(LPARAM lp1, LPARAM lp2, + LPARAM lp) +{ + return cert_mgr_sort_by_text((HWND)lp, 3, lp1, lp2); +} + static LRESULT CALLBACK cert_mgr_dlg_proc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp) { @@ -1141,6 +1184,35 @@ static LRESULT CALLBACK cert_mgr_dlg_proc(HWND hwnd, UINT msg, WPARAM wp, cert_mgr_do_remove(hwnd); break; } + case LVN_COLUMNCLICK: + { + NMLISTVIEW *nmlv = (NMLISTVIEW *)lp; + HWND lv = GetDlgItem(hwnd, IDC_MGR_CERTS); + + /* FIXME: doesn't support swapping sort order between ascending + * and descending. + */ + switch (nmlv->iSubItem) + { + case 0: + SendMessageW(lv, LVM_SORTITEMSEX, (WPARAM)lv, + (LPARAM)cert_mgr_sort_by_subject); + break; + case 1: + SendMessageW(lv, LVM_SORTITEMSEX, (WPARAM)lv, + (LPARAM)cert_mgr_sort_by_issuer); + break; + case 2: + SendMessageW(lv, LVM_SORTITEMS, 0, + (LPARAM)cert_mgr_sort_by_date); + break; + case 3: + SendMessageW(lv, LVM_SORTITEMSEX, (WPARAM)lv, + (LPARAM)cert_mgr_sort_by_friendly_name); + break; + } + break; + } } break; }