// ProgressUtils.cpp | |
#include "StdAfx.h" | |
#include "ProgressUtils.h" | |
CLocalProgress::CLocalProgress() | |
{ | |
ProgressOffset = InSize = OutSize = 0; | |
SendRatio = SendProgress = true; | |
} | |
void CLocalProgress::Init(IProgress *progress, bool inSizeIsMain) | |
{ | |
_ratioProgress.Release(); | |
_progress = progress; | |
_progress.QueryInterface(IID_ICompressProgressInfo, &_ratioProgress); | |
_inSizeIsMain = inSizeIsMain; | |
} | |
STDMETHODIMP CLocalProgress::SetRatioInfo(const UInt64 *inSize, const UInt64 *outSize) | |
{ | |
UInt64 inSizeNew = InSize, outSizeNew = OutSize; | |
if (inSize) | |
inSizeNew += (*inSize); | |
if (outSize) | |
outSizeNew += (*outSize); | |
if (SendRatio && _ratioProgress) | |
{ | |
RINOK(_ratioProgress->SetRatioInfo(&inSizeNew, &outSizeNew)); | |
} | |
inSizeNew += ProgressOffset; | |
outSizeNew += ProgressOffset; | |
if (SendProgress) | |
return _progress->SetCompleted(_inSizeIsMain ? &inSizeNew : &outSizeNew); | |
return S_OK; | |
} | |
HRESULT CLocalProgress::SetCur() | |
{ | |
return SetRatioInfo(NULL, NULL); | |
} |