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