Juan Lang : cryptui: Implement browsing for a filename in the export wizard .

Alexandre Julliard julliard at winehq.org
Mon Jan 26 10:13:38 CST 2009


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

Author: Juan Lang <juan.lang at gmail.com>
Date:   Fri Jan 23 11:29:59 2009 -0800

cryptui: Implement browsing for a filename in the export wizard.

---

 dlls/cryptui/cryptui_En.rc |    6 +++
 dlls/cryptui/cryptuires.h  |    6 +++
 dlls/cryptui/main.c        |   93 ++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 105 insertions(+), 0 deletions(-)

diff --git a/dlls/cryptui/cryptui_En.rc b/dlls/cryptui/cryptui_En.rc
index c970c58..91164b6 100644
--- a/dlls/cryptui/cryptui_En.rc
+++ b/dlls/cryptui/cryptui_En.rc
@@ -147,6 +147,12 @@ STRINGTABLE DISCARDABLE
     IDS_EXPORT_FILE_TITLE "Export Filename"
     IDS_EXPORT_FILE_SUBTITLE "Specify the name of the file in which the content will be saved."
     IDS_EXPORT_FILE_EXISTS "The specified file already exists.  Do you want to replace it?"
+    IDS_EXPORT_FILTER_CERT "DER-Encoded Binary X.509 (*.cer)"
+    IDS_EXPORT_FILTER_BASE64_CERT "Base64-Encoded X.509 (*.cer)"
+    IDS_EXPORT_FILTER_CRL "Certificate Revocation List (*.crl)"
+    IDS_EXPORT_FILTER_CTL "Certificate Trust List (*.stl)"
+    IDS_EXPORT_FILTER_CMS "CMS/PKCS #7 Messages (*.p7b)"
+    IDS_EXPORT_FILTER_PFX "Personal Information Exchange (*.pfx)"
 }
 
 IDD_GENERAL DIALOG DISCARDABLE 0, 0, 255, 236
diff --git a/dlls/cryptui/cryptuires.h b/dlls/cryptui/cryptuires.h
index ee6f5a1..7384314 100644
--- a/dlls/cryptui/cryptuires.h
+++ b/dlls/cryptui/cryptuires.h
@@ -146,6 +146,12 @@
 #define IDS_EXPORT_FILE_TITLE 1203
 #define IDS_EXPORT_FILE_SUBTITLE 1204
 #define IDS_EXPORT_FILE_EXISTS 1205
+#define IDS_EXPORT_FILTER_CERT 1206
+#define IDS_EXPORT_FILTER_BASE64_CERT 1207
+#define IDS_EXPORT_FILTER_CRL 1208
+#define IDS_EXPORT_FILTER_CTL 1209
+#define IDS_EXPORT_FILTER_CMS 1210
+#define IDS_EXPORT_FILTER_PFX 1211
 
 #define IDD_GENERAL 100
 #define IDD_DETAIL 101
diff --git a/dlls/cryptui/main.c b/dlls/cryptui/main.c
index adeb58a..f7b9304 100644
--- a/dlls/cryptui/main.c
+++ b/dlls/cryptui/main.c
@@ -5718,6 +5718,74 @@ static BOOL export_validate_filename(HWND hwnd, struct ExportWizData *data,
     return ret;
 }
 
+static const WCHAR export_filter_cert[] = { '*','.','c','e','r',0 };
+static const WCHAR export_filter_crl[] = { '*','.','c','r','l',0 };
+static const WCHAR export_filter_ctl[] = { '*','.','s','t','l',0 };
+static const WCHAR export_filter_cms[] = { '*','.','p','7','b',0 };
+static const WCHAR export_filter_pfx[] = { '*','.','p','f','x',0 };
+
+static WCHAR *make_export_file_filter(DWORD exportFormat, DWORD subjectChoice)
+{
+    int baseLen, allLen, totalLen = 2, baseID;
+    LPWSTR filter = NULL, baseFilter, all;
+    LPCWSTR filterStr;
+
+    switch (exportFormat)
+    {
+    case CRYPTUI_WIZ_EXPORT_FORMAT_BASE64:
+        baseID = IDS_EXPORT_FILTER_BASE64_CERT;
+        filterStr = export_filter_cert;
+        break;
+    case CRYPTUI_WIZ_EXPORT_FORMAT_PFX:
+        baseID = IDS_EXPORT_FILTER_PFX;
+        filterStr = export_filter_pfx;
+        break;
+    case CRYPTUI_WIZ_EXPORT_FORMAT_PKCS7:
+        baseID = IDS_EXPORT_FILTER_CMS;
+        filterStr = export_filter_cms;
+        break;
+    default:
+        switch (subjectChoice)
+        {
+        case CRYPTUI_WIZ_EXPORT_CRL_CONTEXT:
+            baseID = IDS_EXPORT_FILTER_CRL;
+            filterStr = export_filter_crl;
+            break;
+        case CRYPTUI_WIZ_EXPORT_CTL_CONTEXT:
+            baseID = IDS_EXPORT_FILTER_CTL;
+            filterStr = export_filter_ctl;
+            break;
+        default:
+            baseID = IDS_EXPORT_FILTER_CERT;
+            filterStr = export_filter_cert;
+            break;
+        }
+    }
+    baseLen = LoadStringW(hInstance, baseID, (LPWSTR)&baseFilter, 0);
+    totalLen += baseLen + strlenW(filterStr) + 2;
+    allLen = LoadStringW(hInstance, IDS_IMPORT_FILTER_ALL, (LPWSTR)&all, 0);
+    totalLen += allLen + strlenW(filter_all) + 2;
+    filter = HeapAlloc(GetProcessHeap(), 0, totalLen * sizeof(WCHAR));
+    if (filter)
+    {
+        LPWSTR ptr;
+
+        ptr = filter;
+        memcpy(ptr, baseFilter, baseLen * sizeof(WCHAR));
+        ptr += baseLen;
+        *ptr++ = 0;
+        strcpyW(ptr, filterStr);
+        ptr += strlenW(filterStr) + 1;
+        memcpy(ptr, all, allLen * sizeof(WCHAR));
+        ptr += allLen;
+        *ptr++ = 0;
+        strcpyW(ptr, filter_all);
+        ptr += strlenW(filter_all) + 1;
+        *ptr++ = 0;
+    }
+    return filter;
+}
+
 static LRESULT CALLBACK export_file_dlg_proc(HWND hwnd, UINT msg, WPARAM wp,
  LPARAM lp)
 {
@@ -5808,6 +5876,31 @@ static LRESULT CALLBACK export_file_dlg_proc(HWND hwnd, UINT msg, WPARAM wp,
         }
         break;
     }
+    case WM_COMMAND:
+        switch (wp)
+        {
+        case IDC_EXPORT_BROWSE_FILE:
+        {
+            OPENFILENAMEW ofn;
+            WCHAR fileBuf[MAX_PATH];
+
+            data = (struct ExportWizData *)GetWindowLongPtrW(hwnd, DWLP_USER);
+            memset(&ofn, 0, sizeof(ofn));
+            ofn.lStructSize = sizeof(ofn);
+            ofn.hwndOwner = hwnd;
+            ofn.lpstrFilter = make_export_file_filter(data->exportFormat,
+             data->pExportInfo->dwSubjectChoice);
+            ofn.lpstrFile = fileBuf;
+            ofn.nMaxFile = sizeof(fileBuf) / sizeof(fileBuf[0]);
+            fileBuf[0] = 0;
+            if (GetSaveFileNameW(&ofn))
+                SendMessageW(GetDlgItem(hwnd, IDC_EXPORT_FILENAME), WM_SETTEXT,
+                 0, (LPARAM)ofn.lpstrFile);
+            HeapFree(GetProcessHeap(), 0, (LPWSTR)ofn.lpstrFilter);
+            break;
+        }
+        }
+        break;
     }
     return ret;
 }




More information about the wine-cvs mailing list