Imported Upstream version 9.20
[platform/upstream/7zip.git] / CPP / 7zip / UI / Common / ArchiveOpenCallback.h
1 // ArchiveOpenCallback.h\r
2 \r
3 #ifndef __ARCHIVE_OPEN_CALLBACK_H\r
4 #define __ARCHIVE_OPEN_CALLBACK_H\r
5 \r
6 #include "Common/MyCom.h"\r
7 #include "Common/MyString.h"\r
8 \r
9 #include "Windows/FileFind.h"\r
10 \r
11 #ifndef _NO_CRYPTO\r
12 #include "../../IPassword.h"\r
13 #endif\r
14 #include "../../Archive/IArchive.h"\r
15 \r
16 #ifdef _NO_CRYPTO\r
17 \r
18 #define INTERFACE_IOpenCallbackUI_Crypto(x)\r
19 \r
20 #else\r
21 \r
22 #define INTERFACE_IOpenCallbackUI_Crypto(x) \\r
23   virtual HRESULT Open_CryptoGetTextPassword(BSTR *password) x; \\r
24   virtual HRESULT Open_GetPasswordIfAny(UString &password) x; \\r
25   virtual bool Open_WasPasswordAsked() x; \\r
26   virtual void Open_ClearPasswordWasAskedFlag() x; \\r
27   \r
28 #endif\r
29 \r
30 #define INTERFACE_IOpenCallbackUI(x) \\r
31   virtual HRESULT Open_CheckBreak() x; \\r
32   virtual HRESULT Open_SetTotal(const UInt64 *files, const UInt64 *bytes) x; \\r
33   virtual HRESULT Open_SetCompleted(const UInt64 *files, const UInt64 *bytes) x; \\r
34   INTERFACE_IOpenCallbackUI_Crypto(x)\r
35 \r
36 struct IOpenCallbackUI\r
37 {\r
38   INTERFACE_IOpenCallbackUI(=0)\r
39 };\r
40 \r
41 class COpenCallbackImp:\r
42   public IArchiveOpenCallback,\r
43   public IArchiveOpenVolumeCallback,\r
44   public IArchiveOpenSetSubArchiveName,\r
45   #ifndef _NO_CRYPTO\r
46   public ICryptoGetTextPassword,\r
47   #endif\r
48   public CMyUnknownImp\r
49 {\r
50 public:\r
51   #ifndef _NO_CRYPTO\r
52   MY_UNKNOWN_IMP3(\r
53       IArchiveOpenVolumeCallback,\r
54       ICryptoGetTextPassword,\r
55       IArchiveOpenSetSubArchiveName\r
56       )\r
57   #else\r
58   MY_UNKNOWN_IMP2(\r
59       IArchiveOpenVolumeCallback,\r
60       IArchiveOpenSetSubArchiveName\r
61       )\r
62   #endif\r
63 \r
64   INTERFACE_IArchiveOpenCallback(;)\r
65   INTERFACE_IArchiveOpenVolumeCallback(;)\r
66 \r
67   #ifndef _NO_CRYPTO\r
68   STDMETHOD(CryptoGetTextPassword)(BSTR *password);\r
69   #endif\r
70 \r
71   STDMETHOD(SetSubArchiveName(const wchar_t *name))\r
72   {\r
73     _subArchiveMode = true;\r
74     _subArchiveName = name;\r
75     TotalSize = 0;\r
76     return  S_OK;\r
77   }\r
78 \r
79 private:\r
80   UString _folderPrefix;\r
81   NWindows::NFile::NFind::CFileInfoW _fileInfo;\r
82   bool _subArchiveMode;\r
83   UString _subArchiveName;\r
84 public:\r
85   UStringVector FileNames;\r
86   IOpenCallbackUI *Callback;\r
87   CMyComPtr<IArchiveOpenCallback> ReOpenCallback;\r
88   UInt64 TotalSize;\r
89 \r
90   COpenCallbackImp(): Callback(NULL) {}\r
91   void Init(const UString &folderPrefix, const UString &fileName)\r
92   {\r
93     _folderPrefix = folderPrefix;\r
94     if (!_fileInfo.Find(_folderPrefix + fileName))\r
95       throw 1;\r
96     FileNames.Clear();\r
97     _subArchiveMode = false;\r
98     TotalSize = 0;\r
99   }\r
100   int FindName(const UString &name);\r
101 };\r
102 \r
103 #endif\r