[INF] Remove remnants of XboxVmp driver which has its own INF file
[reactos.git] / dll / shellext / zipfldr / CZipPassword.cpp
1 /*
2 * PROJECT: ReactOS Zip Shell Extension
3 * LICENSE: GPL-2.0+ (https://spdx.org/licenses/GPL-2.0+)
4 * PURPOSE: Ask the user for a password
5 * COPYRIGHT: Copyright 2019 Mark Jansen (mark.jansen@reactos.org)
6 */
7
8 #include "precomp.h"
9
10 class CZipPassword : public CDialogImpl<CZipPassword>
11 {
12 private:
13 CStringA m_Filename;
14 CStringA* m_pPassword;
15 public:
16 CZipPassword(const char* filename, CStringA* Password)
17 :m_pPassword(Password)
18 {
19 if (filename != NULL)
20 m_Filename = filename;
21 }
22
23 LRESULT OnInitDialog(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
24 {
25 CenterWindow(GetParent());
26
27 /* No filename, so this is the question before starting to extract */
28 if (m_Filename.IsEmpty())
29 {
30 CStringA message(MAKEINTRESOURCE(IDS_PASSWORD_ZIP_TEXT));
31 ::SetDlgItemTextA(m_hWnd, IDC_MESSAGE, message);
32 ::ShowWindow(GetDlgItem(IDSKIP), SW_HIDE);
33 }
34 else
35 {
36 CStringA message;
37 message.FormatMessage(IDS_PASSWORD_FILE_TEXT, m_Filename.GetString());
38 ::SetDlgItemTextA(m_hWnd, IDC_MESSAGE, message);
39 }
40 return TRUE;
41 }
42
43 LRESULT OnButton(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
44 {
45 if (wID == IDOK)
46 {
47 HWND item = GetDlgItem(IDC_PASSWORD);
48 int len = ::GetWindowTextLengthA(item);
49 len = ::GetDlgItemTextA(m_hWnd, IDC_PASSWORD, m_pPassword->GetBuffer(len+1), len+1);
50 m_pPassword->ReleaseBuffer(len);
51 }
52 EndDialog(wID);
53 return 0;
54 }
55
56 public:
57 enum { IDD = IDD_PASSWORD };
58
59 BEGIN_MSG_MAP(CZipPassword)
60 MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
61 COMMAND_ID_HANDLER(IDOK, OnButton)
62 COMMAND_ID_HANDLER(IDSKIP, OnButton)
63 COMMAND_ID_HANDLER(IDCANCEL, OnButton)
64 END_MSG_MAP()
65 };
66
67 eZipPasswordResponse _CZipAskPassword(HWND hDlg, const char* filename, CStringA& Password)
68 {
69 if (filename)
70 filename = PathFindFileNameA(filename);
71 CZipPassword password(filename, &Password);
72 INT_PTR Result = password.DoModal(hDlg);
73 switch (Result)
74 {
75 case IDOK: return eAccept;
76 case IDSKIP: return eSkip;
77 default:
78 case IDCANCEL: return eAbort;
79 }
80 }