|
1 // ProgressDialog.h |
|
2 |
|
3 #ifndef __PROGRESSDIALOG_H |
|
4 #define __PROGRESSDIALOG_H |
|
5 |
|
6 #include "resource.h" |
|
7 |
|
8 #include "Windows/Control/Dialog.h" |
|
9 #include "Windows/Control/ProgressBar.h" |
|
10 #include "Windows/Synchronization.h" |
|
11 |
|
12 class CProgressSynch |
|
13 { |
|
14 NWindows::NSynchronization::CCriticalSection _criticalSection; |
|
15 bool _stopped; |
|
16 bool _paused; |
|
17 UINT64 _total; |
|
18 UINT64 _completed; |
|
19 public: |
|
20 CProgressSynch(): _stopped(false), _paused(false), _total(1), _completed(0) {} |
|
21 |
|
22 bool GetStopped() |
|
23 { |
|
24 NWindows::NSynchronization::CCriticalSectionLock lock(_criticalSection); |
|
25 return _stopped; |
|
26 } |
|
27 void SetStopped(bool value) |
|
28 { |
|
29 NWindows::NSynchronization::CCriticalSectionLock lock(_criticalSection); |
|
30 _stopped = value; |
|
31 } |
|
32 bool GetPaused() |
|
33 { |
|
34 NWindows::NSynchronization::CCriticalSectionLock lock(_criticalSection); |
|
35 return _paused; |
|
36 } |
|
37 void SetPaused(bool value) |
|
38 { |
|
39 NWindows::NSynchronization::CCriticalSectionLock lock(_criticalSection); |
|
40 _paused = value; |
|
41 } |
|
42 void SetProgress(UINT64 total, UINT64 completed) |
|
43 { |
|
44 NWindows::NSynchronization::CCriticalSectionLock lock(_criticalSection); |
|
45 _total = total; |
|
46 _completed = completed; |
|
47 } |
|
48 void SetPos(UINT64 completed) |
|
49 { |
|
50 NWindows::NSynchronization::CCriticalSectionLock lock(_criticalSection); |
|
51 _completed = completed; |
|
52 } |
|
53 void GetProgress(UINT64 &total, UINT64 &completed) |
|
54 { |
|
55 NWindows::NSynchronization::CCriticalSectionLock lock(_criticalSection); |
|
56 total = _total; |
|
57 completed = _completed; |
|
58 } |
|
59 }; |
|
60 |
|
61 class CU64ToI32Converter |
|
62 { |
|
63 UINT64 _numShiftBits; |
|
64 public: |
|
65 void Init(UINT64 _range); |
|
66 int Count(UINT64 aValue); |
|
67 }; |
|
68 |
|
69 // class CProgressDialog: public NWindows::NControl::CModelessDialog |
|
70 |
|
71 class CProgressDialog: public NWindows::NControl::CModalDialog |
|
72 { |
|
73 private: |
|
74 UINT_PTR _timer; |
|
75 |
|
76 UString _title; |
|
77 CU64ToI32Converter _converter; |
|
78 UINT64 _peviousPos; |
|
79 UINT64 _range; |
|
80 NWindows::NControl::CProgressBar m_ProgressBar; |
|
81 |
|
82 int _prevPercentValue; |
|
83 |
|
84 bool OnTimer(WPARAM timerID, LPARAM callback); |
|
85 void SetRange(UINT64 range); |
|
86 void SetPos(UINT64 pos); |
|
87 virtual bool OnInit(); |
|
88 virtual void OnCancel(); |
|
89 NWindows::NSynchronization::CManualResetEvent _dialogCreatedEvent; |
|
90 #ifndef _SFX |
|
91 void AddToTitle(LPCWSTR string); |
|
92 #endif |
|
93 bool OnButtonClicked(int buttonID, HWND buttonHWND); |
|
94 public: |
|
95 CProgressSynch ProgressSynch; |
|
96 |
|
97 #ifndef _SFX |
|
98 HWND MainWindow; |
|
99 UString MainTitle; |
|
100 UString MainAddTitle; |
|
101 ~CProgressDialog(); |
|
102 #endif |
|
103 |
|
104 CProgressDialog(): _timer(0) |
|
105 #ifndef _SFX |
|
106 ,MainWindow(0) |
|
107 #endif |
|
108 {} |
|
109 |
|
110 void WaitCreating() { _dialogCreatedEvent.Lock(); } |
|
111 |
|
112 |
|
113 INT_PTR Create(const UString &title, HWND wndParent = 0) |
|
114 { |
|
115 _title = title; |
|
116 return CModalDialog::Create(IDD_DIALOG_PROGRESS, wndParent); |
|
117 } |
|
118 |
|
119 static const UINT kCloseMessage; |
|
120 |
|
121 virtual bool OnMessage(UINT message, WPARAM wParam, LPARAM lParam); |
|
122 |
|
123 void MyClose() |
|
124 { |
|
125 PostMessage(kCloseMessage); |
|
126 }; |
|
127 }; |
|
128 |
|
129 #endif |