Juan Lang : cryptui: Add an add purpose dialog.

Alexandre Julliard julliard at winehq.org
Fri Dec 19 11:19:24 CST 2008


Module: wine
Branch: master
Commit: 356596561c3ef3cf94fe86a01e512a0665c0b870
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=356596561c3ef3cf94fe86a01e512a0665c0b870

Author: Juan Lang <juan.lang at gmail.com>
Date:   Thu Dec 18 14:04:30 2008 -0800

cryptui: Add an add purpose dialog.

---

 dlls/cryptui/cryptui_En.rc |   11 ++++++++
 dlls/cryptui/cryptuires.h  |    3 ++
 dlls/cryptui/main.c        |   59 ++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 73 insertions(+), 0 deletions(-)

diff --git a/dlls/cryptui/cryptui_En.rc b/dlls/cryptui/cryptui_En.rc
index 70ed0f1..5dcb98a 100644
--- a/dlls/cryptui/cryptui_En.rc
+++ b/dlls/cryptui/cryptui_En.rc
@@ -170,3 +170,14 @@ BEGIN
     24,100,220,90
   PUSHBUTTON "Add &Purpose...", IDC_ADD_PURPOSE,184,194,60,14
 END
+
+IDD_ADD_CERT_PURPOSE DIALOG DISCARDABLE 0,0,200,68
+CAPTION "Add Purpose"
+FONT 8, "MS Shell Dlg"
+BEGIN
+  LTEXT "Add the object identifier (OID) for the certificate purpose you wish to add:",
+    stc1, 6,6,190,28
+  EDITTEXT IDC_NEW_PURPOSE, 6,28,190,14, ES_AUTOVSCROLL|ES_MULTILINE|WS_TABSTOP|WS_VSCROLL
+  PUSHBUTTON "OK", IDOK, 33,48,60,14
+  PUSHBUTTON "Cancel", IDCANCEL, 100,48,60,14
+END
diff --git a/dlls/cryptui/cryptuires.h b/dlls/cryptui/cryptuires.h
index eb26e15..a311531 100644
--- a/dlls/cryptui/cryptuires.h
+++ b/dlls/cryptui/cryptuires.h
@@ -89,6 +89,7 @@
 #define IDD_HIERARCHY 102
 #define IDD_USERNOTICE 103
 #define IDD_CERT_PROPERTIES_GENERAL 104
+#define IDD_ADD_CERT_PURPOSE 105
 
 #define IDB_SMALL_ICONS 200
 #define IDB_CERT 201
@@ -126,4 +127,6 @@
 #define IDC_CERTIFICATE_USAGES 2405
 #define IDC_ADD_PURPOSE 2406
 
+#define IDC_NEW_PURPOSE 2500
+
 #endif /* ndef __CRYPTUIRES_H_ */
diff --git a/dlls/cryptui/main.c b/dlls/cryptui/main.c
index dc1c807..e26bf55 100644
--- a/dlls/cryptui/main.c
+++ b/dlls/cryptui/main.c
@@ -1593,6 +1593,59 @@ static void add_purpose(HWND hwnd, LPCSTR oid)
     }
 }
 
+#define MAX_PURPOSE 255
+
+static LRESULT CALLBACK add_purpose_dlg_proc(HWND hwnd, UINT msg,
+ WPARAM wp, LPARAM lp)
+{
+    LRESULT ret = 0;
+    char buf[MAX_PURPOSE + 1];
+
+    switch (msg)
+    {
+    case WM_INITDIALOG:
+        SendMessageW(GetDlgItem(hwnd, IDC_NEW_PURPOSE), EM_SETLIMITTEXT,
+         MAX_PURPOSE, 0);
+        ShowScrollBar(GetDlgItem(hwnd, IDC_NEW_PURPOSE), SB_VERT, FALSE);
+        SetWindowLongPtrW(hwnd, DWLP_USER, lp);
+        break;
+    case WM_COMMAND:
+        switch (HIWORD(wp))
+        {
+        case BN_CLICKED:
+            switch (LOWORD(wp))
+            {
+            case IDOK:
+                SendMessageA(GetDlgItem(hwnd, IDC_NEW_PURPOSE), WM_GETTEXT,
+                 sizeof(buf) / sizeof(buf[0]), (LPARAM)buf);
+                if (!buf[0])
+                {
+                    /* An empty purpose is the same as cancelling */
+                    EndDialog(hwnd, IDCANCEL);
+                    ret = TRUE;
+                }
+                else
+                {
+                    HWND parent = (HWND)GetWindowLongPtrW(hwnd, DWLP_USER);
+
+                    FIXME("validate %s\n", debugstr_a(buf));
+                    add_purpose(parent, buf);
+                    EndDialog(hwnd, wp);
+                    ret = TRUE;
+                }
+                break;
+            case IDCANCEL:
+                EndDialog(hwnd, wp);
+                ret = TRUE;
+                break;
+            }
+            break;
+        }
+        break;
+    }
+    return ret;
+}
+
 static WCHAR *get_cert_property_as_string(PCCERT_CONTEXT cert, DWORD prop)
 {
     WCHAR *name = NULL;
@@ -1862,6 +1915,12 @@ static LRESULT CALLBACK cert_properties_general_dlg_proc(HWND hwnd, UINT msg,
         case BN_CLICKED:
             switch (LOWORD(wp))
             {
+            case IDC_ADD_PURPOSE:
+                if (DialogBoxParamW(hInstance,
+                 MAKEINTRESOURCEW(IDD_ADD_CERT_PURPOSE), hwnd,
+                 add_purpose_dlg_proc, (LPARAM)hwnd) == IDOK)
+                    SendMessageW(GetParent(hwnd), PSM_CHANGED, (WPARAM)hwnd, 0);
+                break;
             case IDC_ENABLE_ALL_PURPOSES:
             case IDC_DISABLE_ALL_PURPOSES:
             case IDC_ENABLE_SELECTED_PURPOSES:




More information about the wine-cvs mailing list