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