diff --git a/src/tasks/TaskWindow.cpp b/src/tasks/TaskWindow.cpp index a5ef3eb96..4c9e9c97f 100644 --- a/src/tasks/TaskWindow.cpp +++ b/src/tasks/TaskWindow.cpp @@ -3,6 +3,7 @@ #include "Task.h" #include "gui/interface/Label.h" +#include "gui/interface/ProgressBar.h" #include "gui/interface/Engine.h" #include "gui/dialogues/ErrorMessage.h" #include "gui/Style.h" @@ -32,6 +33,9 @@ TaskWindow::TaskWindow(String title_, Task * task_, bool closeOnDone): statusLabel->Appearance.VerticalAlign = ui::Appearance::AlignMiddle; AddComponent(statusLabel); + progressBar = new ui::ProgressBar(Position + Vec2{ 1, Size.Y-16 }, Vec2{ Size.X, 17 }); + AddComponent(progressBar); + MakeActiveWindow(); task->AddTaskListener(this); @@ -71,6 +75,8 @@ void TaskWindow::NotifyProgress(Task * task) progressStatus = String::Build(progress, "%"); else progressStatus = "Please wait..."; + progressBar->SetProgress(progress); + progressBar->SetStatus(progressStatus); } void TaskWindow::OnTick(float dt) @@ -88,39 +94,4 @@ void TaskWindow::OnDraw() Graphics * g = GetGraphics(); g->DrawFilledRect(RectSized(Position - Vec2{ 1, 1 }, Size + Vec2{ 2, 2 }), 0x000000_rgb); g->DrawRect(RectSized(Position, Size), 0xFFFFFF_rgb); - - g->DrawLine(Position + Vec2{ 0, Size.Y-17 }, Position + Vec2{ Size.X - 1, Size.Y-17 }, 0xFFFFFF_rgb); - - ui::Colour progressBarColour = style::Colour::WarningTitle; - - if(progress!=-1) - { - if(progress > 0) - { - if(progress > 100) - progress = 100; - float size = float(Size.X-4)*(float(progress)/100.0f); // TIL... - size = std::min(std::max(size, 0.0f), float(Size.X-4)); - g->DrawFilledRect(RectSized(Position + Vec2{ 2, Size.Y-15 }, Vec2{ int(size), 13 }), progressBarColour.NoAlpha()); - } - } else { - int size = 40, rsize = 0; - float position = float(Size.X-4)*(intermediatePos/100.0f); - if(position + size - 1 > Size.X-4) - { - size = (Size.X-4)-int(position)+1; - rsize = 40-size; - } - g->DrawFilledRect(RectSized(Position + Vec2{ 2 + int(position), Size.Y-15 }, Vec2{ size, 13 }), progressBarColour.NoAlpha()); - if(rsize) - { - g->DrawFilledRect(RectSized(Position + Vec2{ 2, Size.Y-15 }, Vec2{ rsize, 13 }), progressBarColour.NoAlpha()); - } - } - g->BlendText(Position + Vec2{ ((Size.X-(Graphics::TextSize(progressStatus).X - 1))/2), Size.Y-13 }, progressStatus, progress<50 ? 0xFFFFFF_rgb .WithAlpha(255) : 0x000000_rgb .WithAlpha(255)); } - -TaskWindow::~TaskWindow() { - delete task; -} - diff --git a/src/tasks/TaskWindow.h b/src/tasks/TaskWindow.h index d70c0a6ce..1cdbd7d9c 100644 --- a/src/tasks/TaskWindow.h +++ b/src/tasks/TaskWindow.h @@ -1,21 +1,24 @@ #pragma once #include "gui/interface/Window.h" #include "tasks/TaskListener.h" +#include namespace ui { class Label; + class ProgressBar; } class Task; class TaskWindow: public ui::Window, public TaskListener { - Task * task; + std::unique_ptr task; String title; int progress; float intermediatePos; bool done; bool closeOnDone; - ui::Label * statusLabel; + ui::Label *statusLabel{}; + ui::ProgressBar *progressBar{}; String progressStatus; public: TaskWindow(String title_, Task * task_, bool closeOnDone = true); @@ -26,5 +29,4 @@ public: void OnTick(float dt) override; void OnDraw() override; void Exit(); - virtual ~TaskWindow(); };