diff options
| author | spycrab <spycrab@users.noreply.github.com> | 2018-11-08 11:54:56 +0100 |
|---|---|---|
| committer | spycrab <spycrab@users.noreply.github.com> | 2018-11-08 11:54:56 +0100 |
| commit | 1595a9bdcdf6a4eefdf3d82b5aa2001d97c26f29 (patch) | |
| tree | 68adba7fb97f9eddcd308ce68456eb2b0dd036f2 /Source/Core | |
| parent | 80259b019b476b4a932342ca7593799c9abdfefb (diff) | |
Updater: Show progress in taskbar
Diffstat (limited to 'Source/Core')
| -rw-r--r-- | Source/Core/Updater/Main.cpp | 7 | ||||
| -rw-r--r-- | Source/Core/Updater/UI.cpp | 22 | ||||
| -rw-r--r-- | Source/Core/Updater/UI.h | 2 |
3 files changed, 19 insertions, 12 deletions
diff --git a/Source/Core/Updater/Main.cpp b/Source/Core/Updater/Main.cpp index 0fe78505cf..10ae9aadd4 100644 --- a/Source/Core/Updater/Main.cpp +++ b/Source/Core/Updater/Main.cpp @@ -656,14 +656,9 @@ bool PerformUpdate(const TodoList& todo, const std::string& install_base_path, void FatalError(const std::string& message) { - auto wide_message = UTF8ToUTF16(message); - - MessageBox(nullptr, - (L"A fatal error occured and the updater cannot continue:\n " + wide_message).c_str(), - L"Error", MB_ICONERROR); - fprintf(log_fp, "%s\n", message.c_str()); + UI::Error(message); UI::Stop(); } } // namespace diff --git a/Source/Core/Updater/UI.cpp b/Source/Core/Updater/UI.cpp index 7f4e5cb1b2..43abd0362a 100644 --- a/Source/Core/Updater/UI.cpp +++ b/Source/Core/Updater/UI.cpp @@ -5,6 +5,7 @@ #include "Updater/UI.h" #include <CommCtrl.h> +#include <ShObjIdl.h> #include <string> @@ -16,6 +17,7 @@ namespace HWND window_handle = nullptr; HWND label_handle = nullptr; HWND progressbar_handle = nullptr; +ITaskbarList3* taskbar_list = nullptr; Common::Flag running; Common::Flag request_stop; @@ -44,6 +46,8 @@ bool Init() if (!window_handle) return false; + CoCreateInstance(CLSID_TaskbarList, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&taskbar_list)); + label_handle = CreateWindow(L"STATIC", NULL, WS_VISIBLE | WS_CHILD, 5, 5, 500, 25, window_handle, nullptr, nullptr, 0); @@ -80,6 +84,7 @@ void SetMarquee(bool marquee) { SetWindowLong(progressbar_handle, GWL_STYLE, PROGRESSBAR_FLAGS | (marquee ? PBS_MARQUEE : 0)); SendMessage(progressbar_handle, PBM_SETMARQUEE, marquee, 0); + taskbar_list->SetProgressState(window_handle, marquee ? TBPF_INDETERMINATE : TBPF_NORMAL); } void ResetProgress() @@ -88,15 +93,22 @@ void ResetProgress() SetMarquee(true); } -void SetProgress(int current, int total) +void Error(const std::string& text) { - SendMessage(progressbar_handle, PBM_SETRANGE32, 0, total); - SendMessage(progressbar_handle, PBM_SETPOS, current, 0); + auto wide_text = UTF8ToUTF16(text); + + MessageBox(nullptr, + (L"A fatal error occured and the updater cannot continue:\n " + wide_text).c_str(), + L"Error", MB_ICONERROR); + + taskbar_list->SetProgressState(window_handle, TBPF_ERROR); } -void IncrementProgress(int amount) +void SetProgress(int current, int total) { - SendMessage(progressbar_handle, PBM_DELTAPOS, amount, 0); + SendMessage(progressbar_handle, PBM_SETRANGE32, 0, total); + SendMessage(progressbar_handle, PBM_SETPOS, current, 0); + taskbar_list->SetProgressValue(window_handle, current, total); } void SetDescription(const std::string& text) diff --git a/Source/Core/Updater/UI.h b/Source/Core/Updater/UI.h index 3e22ceb0c8..6b892f5b27 100644 --- a/Source/Core/Updater/UI.h +++ b/Source/Core/Updater/UI.h @@ -9,11 +9,11 @@ namespace UI { void MessageLoop(); +void Error(const std::string& text); void Stop(); void SetDescription(const std::string& text); void SetMarquee(bool marquee); void ResetProgress(); void SetProgress(int current, int total); -void IncrementProgress(int amount); } // namespace UI |
