1 // ProgressUtils.cpp
2
3 #include "StdAfx.h"
4
5 #include "ProgressUtils.h"
6
CLocalProgress()7 CLocalProgress::CLocalProgress():
8 ProgressOffset(0),
9 InSize(0),
10 OutSize(0),
11 SendRatio(true),
12 SendProgress(true)
13 {}
14
Init(IProgress * progress,bool inSizeIsMain)15 void CLocalProgress::Init(IProgress *progress, bool inSizeIsMain)
16 {
17 _ratioProgress.Release();
18 _progress = progress;
19 _progress.QueryInterface(IID_ICompressProgressInfo, &_ratioProgress);
20 _inSizeIsMain = inSizeIsMain;
21 }
22
SetRatioInfo(const UInt64 * inSize,const UInt64 * outSize)23 STDMETHODIMP CLocalProgress::SetRatioInfo(const UInt64 *inSize, const UInt64 *outSize)
24 {
25 UInt64 inSize2 = InSize;
26 UInt64 outSize2 = OutSize;
27
28 if (inSize)
29 inSize2 += (*inSize);
30 if (outSize)
31 outSize2 += (*outSize);
32
33 if (SendRatio && _ratioProgress)
34 {
35 RINOK(_ratioProgress->SetRatioInfo(&inSize2, &outSize2));
36 }
37
38 if (SendProgress)
39 {
40 inSize2 += ProgressOffset;
41 outSize2 += ProgressOffset;
42 return _progress->SetCompleted(_inSizeIsMain ? &inSize2 : &outSize2);
43 }
44
45 return S_OK;
46 }
47
SetCur()48 HRESULT CLocalProgress::SetCur()
49 {
50 return SetRatioInfo(NULL, NULL);
51 }
52