diff --git a/dlls/cryptui/cryptui_En.rc b/dlls/cryptui/cryptui_En.rc index 08e79e6b677..70ed0f1c611 100644 --- a/dlls/cryptui/cryptui_En.rc +++ b/dlls/cryptui/cryptui_En.rc @@ -58,6 +58,7 @@ STRINGTABLE DISCARDABLE IDS_PROP_ENHKEY_USAGE "Enhanced key usage (property)" IDS_PROP_FRIENDLY_NAME "Friendly name" IDS_PROP_DESCRIPTION "Description" + IDS_CERTIFICATE_PROPERTIES "Certificate Properties" IDS_PURPOSE_SERVER_AUTH "Ensures the identify of a remote computer" IDS_PURPOSE_CLIENT_AUTH "Proves your identity to a remote computer" IDS_PURPOSE_CODE_SIGNING "Ensures software came from software publisher\nProtects software from alteration after publication" @@ -147,3 +148,25 @@ BEGIN PUSHBUTTON "Close", IDOK,103,216,70,14 PUSHBUTTON "More &Info", IDC_CPS,177,216,70,14 END + +IDD_CERT_PROPERTIES_GENERAL DIALOG DISCARDABLE 0, 0, 255, 236 +CAPTION "General" +STYLE WS_VISIBLE +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Friendly name:", stc1, 6,14,60,14 + EDITTEXT IDC_FRIENDLY_NAME, 60,12,191,14, ES_AUTOHSCROLL|WS_TABSTOP + LTEXT "&Description:", stc2, 6,32,60,14 + EDITTEXT IDC_DESCRIPTION, 60,30,191,14, ES_AUTOVSCROLL|ES_MULTILINE|WS_TABSTOP|WS_VSCROLL + GROUPBOX "Certificate purposes", grp1,6,48,245,165, BS_GROUPBOX + AUTORADIOBUTTON "&Enable all purposes for this certificate", + IDC_ENABLE_ALL_PURPOSES, 12,58,180,14, BS_AUTORADIOBUTTON|WS_TABSTOP + AUTORADIOBUTTON "D&isable all purposes for this certificate", + IDC_DISABLE_ALL_PURPOSES, 12,70,180,14, BS_AUTORADIOBUTTON + AUTORADIOBUTTON "Enable &only the following purposes for this certificate:", + IDC_ENABLE_SELECTED_PURPOSES, 12,82,180,14, BS_AUTORADIOBUTTON + CONTROL "", IDC_CERTIFICATE_USAGES,"SysListView32", + LVS_REPORT|LVS_NOCOLUMNHEADER|LVS_SINGLESEL|WS_CHILD|WS_VISIBLE|WS_TABSTOP|WS_BORDER, + 24,100,220,90 + PUSHBUTTON "Add &Purpose...", IDC_ADD_PURPOSE,184,194,60,14 +END diff --git a/dlls/cryptui/cryptuires.h b/dlls/cryptui/cryptuires.h index 66206d08bd6..eb26e1506ee 100644 --- a/dlls/cryptui/cryptuires.h +++ b/dlls/cryptui/cryptuires.h @@ -55,6 +55,7 @@ #define IDS_PROP_ENHKEY_USAGE 1035 #define IDS_PROP_FRIENDLY_NAME 1036 #define IDS_PROP_DESCRIPTION 1037 +#define IDS_CERTIFICATE_PROPERTIES 1038 #define IDS_PURPOSE_SERVER_AUTH 1100 #define IDS_PURPOSE_CLIENT_AUTH 1101 @@ -87,6 +88,7 @@ #define IDD_DETAIL 101 #define IDD_HIERARCHY 102 #define IDD_USERNOTICE 103 +#define IDD_CERT_PROPERTIES_GENERAL 104 #define IDB_SMALL_ICONS 200 #define IDB_CERT 201 @@ -116,4 +118,12 @@ #define IDC_USERNOTICE 2300 #define IDC_CPS 2301 +#define IDC_FRIENDLY_NAME 2400 +#define IDC_DESCRIPTION 2401 +#define IDC_ENABLE_ALL_PURPOSES 2402 +#define IDC_DISABLE_ALL_PURPOSES 2403 +#define IDC_ENABLE_SELECTED_PURPOSES 2404 +#define IDC_CERTIFICATE_USAGES 2405 +#define IDC_ADD_PURPOSE 2406 + #endif /* ndef __CRYPTUIRES_H_ */ diff --git a/dlls/cryptui/main.c b/dlls/cryptui/main.c index 43c5992f119..2767b5b0df8 100644 --- a/dlls/cryptui/main.c +++ b/dlls/cryptui/main.c @@ -1554,6 +1554,76 @@ static void create_cert_details_list(HWND hwnd, struct detail_data *data) set_fields_selection(hwnd, data, 0); } +#define MAX_FRIENDLY_NAME 40 +#define MAX_DESCRIPTION 255 + +static LRESULT CALLBACK cert_properties_general_dlg_proc(HWND hwnd, UINT msg, + WPARAM wp, LPARAM lp) +{ + PROPSHEETPAGEW *page; + struct detail_data *data; + + TRACE("(%p, %08x, %08lx, %08lx)\n", hwnd, msg, wp, lp); + + switch (msg) + { + case WM_INITDIALOG: + { + HWND description = GetDlgItem(hwnd, IDC_DESCRIPTION); + + page = (PROPSHEETPAGEW *)lp; + data = (struct detail_data *)page->lParam; + SendMessageW(GetDlgItem(hwnd, IDC_FRIENDLY_NAME), EM_SETLIMITTEXT, + MAX_FRIENDLY_NAME, 0); + SendMessageW(description, EM_SETLIMITTEXT, MAX_DESCRIPTION, 0); + ShowScrollBar(description, SB_VERT, FALSE); + FIXME("set general properties\n"); + SetWindowLongPtrW(hwnd, DWLP_USER, (LPARAM)data); + break; + } + case WM_COMMAND: + switch (HIWORD(wp)) + { + case BN_CLICKED: + switch (LOWORD(wp)) + { + case IDC_ADD_PURPOSE: + FIXME("show add purpose dialog\n"); + break; + } + break; + } + break; + } + return 0; +} + +static void show_edit_cert_properties_dialog(HWND parent, + struct detail_data *data) +{ + PROPSHEETHEADERW hdr; + PROPSHEETPAGEW page; /* FIXME: need to add a cross-certificate page */ + + TRACE("(%p)\n", data); + + memset(&page, 0, sizeof(PROPSHEETPAGEW)); + page.dwSize = sizeof(page); + page.hInstance = hInstance; + page.u.pszTemplate = MAKEINTRESOURCEW(IDD_CERT_PROPERTIES_GENERAL); + page.pfnDlgProc = cert_properties_general_dlg_proc; + page.lParam = (LPARAM)data; + + memset(&hdr, 0, sizeof(hdr)); + hdr.dwSize = sizeof(hdr); + hdr.hwndParent = parent; + hdr.dwFlags = PSH_PROPSHEETPAGE; + hdr.hInstance = hInstance; + hdr.pszCaption = MAKEINTRESOURCEW(IDS_CERTIFICATE_PROPERTIES); + hdr.u3.ppsp = &page; + hdr.nPages = 1; + PropertySheetW(&hdr); +} + static void free_detail_fields(struct detail_data *data) { DWORD i; @@ -1649,8 +1719,19 @@ static LRESULT CALLBACK detail_dlg_proc(HWND hwnd, UINT msg, WPARAM wp, FIXME("call CryptUIWizExport\n"); break; case IDC_EDITPROPERTIES: - FIXME("show edit properties dialog\n"); + { + HWND cb = GetDlgItem(hwnd, IDC_DETAIL_SELECT); + int curSel; + + curSel = SendMessageW(cb, CB_GETCURSEL, 0, 0); + /* Actually, any index will do, since they all store the same + * data value + */ + data = (struct detail_data *)SendMessageW(cb, CB_GETITEMDATA, + curSel, 0); + show_edit_cert_properties_dialog(GetParent(hwnd), data); break; + } case ((CBN_SELCHANGE << 16) | IDC_DETAIL_SELECT): refresh_details_view(hwnd); break;