1370b324cSopenharmony_ci// PercentPrinter.h
2370b324cSopenharmony_ci
3370b324cSopenharmony_ci#ifndef ZIP7_INC_PERCENT_PRINTER_H
4370b324cSopenharmony_ci#define ZIP7_INC_PERCENT_PRINTER_H
5370b324cSopenharmony_ci
6370b324cSopenharmony_ci#include "../../../Common/StdOutStream.h"
7370b324cSopenharmony_ci
8370b324cSopenharmony_cistruct CPercentPrinterState
9370b324cSopenharmony_ci{
10370b324cSopenharmony_ci  UInt64 Completed;
11370b324cSopenharmony_ci  UInt64 Total;
12370b324cSopenharmony_ci
13370b324cSopenharmony_ci  UInt64 Files;
14370b324cSopenharmony_ci
15370b324cSopenharmony_ci  AString Command;
16370b324cSopenharmony_ci  UString FileName;
17370b324cSopenharmony_ci
18370b324cSopenharmony_ci  void ClearCurState();
19370b324cSopenharmony_ci
20370b324cSopenharmony_ci  CPercentPrinterState():
21370b324cSopenharmony_ci      Completed(0),
22370b324cSopenharmony_ci      Total((UInt64)(Int64)-1),
23370b324cSopenharmony_ci      Files(0)
24370b324cSopenharmony_ci    {}
25370b324cSopenharmony_ci};
26370b324cSopenharmony_ci
27370b324cSopenharmony_ciclass CPercentPrinter: public CPercentPrinterState
28370b324cSopenharmony_ci{
29370b324cSopenharmony_ci  UInt32 _tickStep;
30370b324cSopenharmony_ci  DWORD _prevTick;
31370b324cSopenharmony_ci
32370b324cSopenharmony_ci  AString _s;
33370b324cSopenharmony_ci
34370b324cSopenharmony_ci  AString _printedString;
35370b324cSopenharmony_ci  AString _temp;
36370b324cSopenharmony_ci  UString _tempU;
37370b324cSopenharmony_ci
38370b324cSopenharmony_ci  CPercentPrinterState _printedState;
39370b324cSopenharmony_ci  AString _printedPercents;
40370b324cSopenharmony_ci
41370b324cSopenharmony_ci  void GetPercents();
42370b324cSopenharmony_ci
43370b324cSopenharmony_cipublic:
44370b324cSopenharmony_ci  CStdOutStream *_so;
45370b324cSopenharmony_ci
46370b324cSopenharmony_ci  bool NeedFlush;
47370b324cSopenharmony_ci  unsigned MaxLen;
48370b324cSopenharmony_ci
49370b324cSopenharmony_ci  CPercentPrinter(UInt32 tickStep = 200):
50370b324cSopenharmony_ci      _tickStep(tickStep),
51370b324cSopenharmony_ci      _prevTick(0),
52370b324cSopenharmony_ci      NeedFlush(true),
53370b324cSopenharmony_ci      MaxLen(80 - 1)
54370b324cSopenharmony_ci  {}
55370b324cSopenharmony_ci
56370b324cSopenharmony_ci  ~CPercentPrinter();
57370b324cSopenharmony_ci
58370b324cSopenharmony_ci  void ClosePrint(bool needFlush);
59370b324cSopenharmony_ci  void Print();
60370b324cSopenharmony_ci};
61370b324cSopenharmony_ci
62370b324cSopenharmony_ci#endif
63