// ExtractCallbackSfx.h #ifndef __EXTRACT_CALLBACK_SFX_H #define __EXTRACT_CALLBACK_SFX_H #include "resource.h" #include "../../../Windows/ResourceString.h" #include "../../Archive/IArchive.h" #include "../../Common/FileStreams.h" #include "../../ICoder.h" #include "../../UI/FileManager/LangUtils.h" #ifndef _NO_PROGRESS #include "../../UI/FileManager/ProgressDialog.h" #endif #include "../../UI/Common/ArchiveOpenCallback.h" class CExtractCallbackImp: public IArchiveExtractCallback, public IOpenCallbackUI, public CMyUnknownImp { public: MY_UNKNOWN_IMP INTERFACE_IArchiveExtractCallback(;) INTERFACE_IOpenCallbackUI(;) private: CMyComPtr _archiveHandler; FString _directoryPath; UString _filePath; FString _diskFilePath; bool _extractMode; struct CProcessedFileInfo { FILETIME MTime; bool IsDir; UInt32 Attributes; } _processedFileInfo; COutFileStream *_outFileStreamSpec; CMyComPtr _outFileStream; UString _itemDefaultName; FILETIME _defaultMTime; UInt32 _defaultAttributes; void CreateComplexDirectory(const UStringVector &dirPathParts); public: #ifndef _NO_PROGRESS CProgressDialog ProgressDialog; #endif bool _isCorrupt; UString _message; void Init(IInArchive *archiveHandler, const FString &directoryPath, const UString &itemDefaultName, const FILETIME &defaultMTime, UInt32 defaultAttributes); #ifndef _NO_PROGRESS HRESULT StartProgressDialog(const UString &title, NWindows::CThread &thread) { ProgressDialog.Create(title, thread, 0); { ProgressDialog.SetText(LangString(IDS_PROGRESS_EXTRACTING)); } ProgressDialog.Show(SW_SHOWNORMAL); return S_OK; } virtual ~CExtractCallbackImp() { ProgressDialog.Destroy(); } #endif }; #endif