Use a proper ProgressBar in UpdateActivity
Can't have the update window not use my fancy clip rect progress bars, see 04455ada1c
.
This commit is contained in:
parent
e2743a2be1
commit
eb29915243
@ -3,6 +3,7 @@
|
|||||||
#include "Task.h"
|
#include "Task.h"
|
||||||
|
|
||||||
#include "gui/interface/Label.h"
|
#include "gui/interface/Label.h"
|
||||||
|
#include "gui/interface/ProgressBar.h"
|
||||||
#include "gui/interface/Engine.h"
|
#include "gui/interface/Engine.h"
|
||||||
#include "gui/dialogues/ErrorMessage.h"
|
#include "gui/dialogues/ErrorMessage.h"
|
||||||
#include "gui/Style.h"
|
#include "gui/Style.h"
|
||||||
@ -32,6 +33,9 @@ TaskWindow::TaskWindow(String title_, Task * task_, bool closeOnDone):
|
|||||||
statusLabel->Appearance.VerticalAlign = ui::Appearance::AlignMiddle;
|
statusLabel->Appearance.VerticalAlign = ui::Appearance::AlignMiddle;
|
||||||
AddComponent(statusLabel);
|
AddComponent(statusLabel);
|
||||||
|
|
||||||
|
progressBar = new ui::ProgressBar(Position + Vec2{ 1, Size.Y-16 }, Vec2{ Size.X, 17 });
|
||||||
|
AddComponent(progressBar);
|
||||||
|
|
||||||
MakeActiveWindow();
|
MakeActiveWindow();
|
||||||
|
|
||||||
task->AddTaskListener(this);
|
task->AddTaskListener(this);
|
||||||
@ -71,6 +75,8 @@ void TaskWindow::NotifyProgress(Task * task)
|
|||||||
progressStatus = String::Build(progress, "%");
|
progressStatus = String::Build(progress, "%");
|
||||||
else
|
else
|
||||||
progressStatus = "Please wait...";
|
progressStatus = "Please wait...";
|
||||||
|
progressBar->SetProgress(progress);
|
||||||
|
progressBar->SetStatus(progressStatus);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TaskWindow::OnTick(float dt)
|
void TaskWindow::OnTick(float dt)
|
||||||
@ -88,39 +94,4 @@ void TaskWindow::OnDraw()
|
|||||||
Graphics * g = GetGraphics();
|
Graphics * g = GetGraphics();
|
||||||
g->DrawFilledRect(RectSized(Position - Vec2{ 1, 1 }, Size + Vec2{ 2, 2 }), 0x000000_rgb);
|
g->DrawFilledRect(RectSized(Position - Vec2{ 1, 1 }, Size + Vec2{ 2, 2 }), 0x000000_rgb);
|
||||||
g->DrawRect(RectSized(Position, Size), 0xFFFFFF_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;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
@ -1,21 +1,24 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
#include "gui/interface/Window.h"
|
#include "gui/interface/Window.h"
|
||||||
#include "tasks/TaskListener.h"
|
#include "tasks/TaskListener.h"
|
||||||
|
#include <memory>
|
||||||
|
|
||||||
namespace ui
|
namespace ui
|
||||||
{
|
{
|
||||||
class Label;
|
class Label;
|
||||||
|
class ProgressBar;
|
||||||
}
|
}
|
||||||
|
|
||||||
class Task;
|
class Task;
|
||||||
class TaskWindow: public ui::Window, public TaskListener {
|
class TaskWindow: public ui::Window, public TaskListener {
|
||||||
Task * task;
|
std::unique_ptr<Task> task;
|
||||||
String title;
|
String title;
|
||||||
int progress;
|
int progress;
|
||||||
float intermediatePos;
|
float intermediatePos;
|
||||||
bool done;
|
bool done;
|
||||||
bool closeOnDone;
|
bool closeOnDone;
|
||||||
ui::Label * statusLabel;
|
ui::Label *statusLabel{};
|
||||||
|
ui::ProgressBar *progressBar{};
|
||||||
String progressStatus;
|
String progressStatus;
|
||||||
public:
|
public:
|
||||||
TaskWindow(String title_, Task * task_, bool closeOnDone = true);
|
TaskWindow(String title_, Task * task_, bool closeOnDone = true);
|
||||||
@ -26,5 +29,4 @@ public:
|
|||||||
void OnTick(float dt) override;
|
void OnTick(float dt) override;
|
||||||
void OnDraw() override;
|
void OnDraw() override;
|
||||||
void Exit();
|
void Exit();
|
||||||
virtual ~TaskWindow();
|
|
||||||
};
|
};
|
||||||
|
Reference in New Issue
Block a user