diff options
Diffstat (limited to 'CPP/7zip/UI/FileManager/PanelCrc.cpp')
-rw-r--r-- | CPP/7zip/UI/FileManager/PanelCrc.cpp | 52 |
1 files changed, 41 insertions, 11 deletions
diff --git a/CPP/7zip/UI/FileManager/PanelCrc.cpp b/CPP/7zip/UI/FileManager/PanelCrc.cpp index 227c4533..7b918a02 100644 --- a/CPP/7zip/UI/FileManager/PanelCrc.cpp +++ b/CPP/7zip/UI/FileManager/PanelCrc.cpp @@ -139,18 +139,44 @@ DWORD CDirEnumerator::GetNextFile(NFind::CFileInfo &fi, bool &filled, FString &r class CThreadCrc: public CProgressThreadVirt { + bool ResultsWereShown; + bool WasFinished; + HRESULT ProcessVirt(); + virtual void ProcessWasFinished_GuiVirt(); public: CDirEnumerator Enumerator; CHashBundle Hash; + FString FirstFilePath; void SetStatus(const UString &s); void AddErrorMessage(DWORD systemError, const FChar *name); + void ShowFinalResults(HWND hwnd); + + CThreadCrc(): + ResultsWereShown(false), + WasFinished(false) + {} }; +void CThreadCrc::ShowFinalResults(HWND hwnd) +{ + if (WasFinished) + if (!ResultsWereShown) + { + ResultsWereShown = true; + ShowHashResults(Hash, fs2us(FirstFilePath), hwnd); + } +} + +void CThreadCrc::ProcessWasFinished_GuiVirt() +{ + ShowFinalResults(*this); +} + void CThreadCrc::AddErrorMessage(DWORD systemError, const FChar *name) { - ProgressDialog.Sync.AddError_Code_Name(systemError, fs2us(Enumerator.BasePrefix + name)); + Sync.AddError_Code_Name(systemError, fs2us(Enumerator.BasePrefix + name)); Hash.NumErrors++; } @@ -162,7 +188,7 @@ void CThreadCrc::SetStatus(const UString &s2) s.Add_Space_if_NotEmpty(); s += fs2us(Enumerator.BasePrefix); } - ProgressDialog.Sync.Set_Status(s); + Sync.Set_Status(s); } HRESULT CThreadCrc::ProcessVirt() @@ -173,7 +199,7 @@ HRESULT CThreadCrc::ProcessVirt() if (!buf.Allocate(kBufSize)) return E_OUTOFMEMORY; - CProgressSync &sync = ProgressDialog.Sync; + CProgressSync &sync = Sync; SetStatus(LangString(IDS_SCANNING)); @@ -233,7 +259,6 @@ HRESULT CThreadCrc::ProcessVirt() Enumerator.Init(); FString tempPath; - FString firstFilePath; bool isFirstFile = true; UInt64 errorsFilesSize = 0; @@ -264,7 +289,7 @@ HRESULT CThreadCrc::ProcessVirt() } if (isFirstFile) { - firstFilePath = path; + FirstFilePath = path; isFirstFile = false; } sync.Set_FilePath(fs2us(path)); @@ -303,12 +328,13 @@ HRESULT CThreadCrc::ProcessVirt() SetStatus(L""); CProgressMessageBoxPair &pair = GetMessagePair(Hash.NumErrors != 0); - AddHashBundleRes(pair.Message, Hash, fs2us(firstFilePath)); + WasFinished = true; LangString(IDS_CHECKSUM_INFORMATION, pair.Title); return S_OK; } + HRESULT CApp::CalculateCrc2(const UString &methodName) { unsigned srcPanelIndex = GetFocusedPanelIndex(); @@ -338,6 +364,7 @@ HRESULT CApp::CalculateCrc2(const UString &methodName) { CThreadCrc t; + { UStringVector methods; methods.Add(methodName); @@ -360,17 +387,20 @@ HRESULT CApp::CalculateCrc2(const UString &methodName) t.Enumerator.EnterToDirs = !GetFlatMode(); - t.ProgressDialog.ShowCompressionInfo = false; + t.ShowCompressionInfo = false; UString title = LangString(IDS_CHECKSUM_CALCULATING); - t.ProgressDialog.MainWindow = _window; - t.ProgressDialog.MainTitle = "7-Zip"; // LangString(IDS_APP_TITLE); - t.ProgressDialog.MainAddTitle = title; - t.ProgressDialog.MainAddTitle.Add_Space(); + t.MainWindow = _window; + t.MainTitle = "7-Zip"; // LangString(IDS_APP_TITLE); + t.MainAddTitle = title; + t.MainAddTitle.Add_Space(); RINOK(t.Create(title, _window)); + + t.ShowFinalResults(_window); } + RefreshTitleAlways(); return S_OK; } |