diff options
| author | Simon Robertshaw <simon@hardwired.org.uk> | 2012-06-21 14:49:32 (GMT) |
|---|---|---|
| committer | Simon Robertshaw <simon@hardwired.org.uk> | 2012-06-21 14:49:32 (GMT) |
| commit | 550f6e28e012ceba8df9274fc71c7fbddfd90530 (patch) | |
| tree | f4047461c04db78e0d8c8b0a81125c6030074908 /src/tasks/TaskWindow.cpp | |
| parent | 8fc3325b1c55a84d29c3b4fafe242af279c09fe5 (diff) | |
| download | powder-550f6e28e012ceba8df9274fc71c7fbddfd90530.zip powder-550f6e28e012ceba8df9274fc71c7fbddfd90530.tar.gz | |
Stage 1 of update process completed
Diffstat (limited to 'src/tasks/TaskWindow.cpp')
| -rw-r--r-- | src/tasks/TaskWindow.cpp | 56 |
1 files changed, 43 insertions, 13 deletions
diff --git a/src/tasks/TaskWindow.cpp b/src/tasks/TaskWindow.cpp index c705d36..910e11a 100644 --- a/src/tasks/TaskWindow.cpp +++ b/src/tasks/TaskWindow.cpp @@ -5,28 +5,37 @@ * Author: Simon */ +#include <sstream> #include "interface/Label.h" #include "TaskWindow.h" +#include "dialogues/ErrorMessage.h" +#include "Style.h" #include "Task.h" TaskWindow::TaskWindow(std::string title_, Task * task_, bool closeOnDone): task(task_), title(title_), - ui::Window(ui::Point(-1, -1), ui::Point(300, 200)), + ui::Window(ui::Point(-1, -1), ui::Point(240, 60)), progress(0), done(false), - closeOnDone(closeOnDone) + closeOnDone(closeOnDone), + progressStatus("0%") { - ui::Label * tempLabel = new ui::Label(ui::Point(3, 3), ui::Point(Size.X-6, 16), title); + ui::Label * tempLabel = new ui::Label(ui::Point(4, 5), ui::Point(Size.X-8, 15), title); + tempLabel->Appearance.HorizontalAlign = ui::Appearance::AlignLeft; + tempLabel->Appearance.VerticalAlign = ui::Appearance::AlignMiddle; + tempLabel->SetTextColour(style::Colour::WarningTitle); AddComponent(tempLabel); - statusLabel = new ui::Label(ui::Point(3, 19), ui::Point(Size.X-6, 16), ""); + statusLabel = new ui::Label(ui::Point(4, 23), ui::Point(Size.X-8, 15), ""); + statusLabel->Appearance.HorizontalAlign = ui::Appearance::AlignLeft; + statusLabel->Appearance.VerticalAlign = ui::Appearance::AlignMiddle; AddComponent(statusLabel); ui::Engine::Ref().ShowWindow(this); - task->SetTaskListener(this); + task->AddTaskListener(this); task->Start(); } @@ -35,6 +44,11 @@ void TaskWindow::NotifyStatus(Task * task) statusLabel->SetText(task->GetStatus()); } +void TaskWindow::NotifyError(Task * task) +{ + new ErrorMessage("Error", task->GetError()); +} + void TaskWindow::NotifyDone(Task * task) { if(closeOnDone) @@ -53,6 +67,16 @@ void TaskWindow::Exit() void TaskWindow::NotifyProgress(Task * task) { progress = task->GetProgress(); + std::stringstream pStream; + if(progress>-1) + { + pStream << progress << "%"; + } + else + { + pStream << "Please wait..."; + } + progressStatus = pStream.str(); } void TaskWindow::OnTick(float dt) @@ -69,26 +93,32 @@ void TaskWindow::OnDraw() g->clearrect(Position.X-2, Position.Y-2, Size.X+3, Size.Y+3); g->drawrect(Position.X, Position.Y, Size.X, Size.Y, 255, 255, 255, 255); - g->drawrect(Position.X + 20, Position.Y + 36, Size.X-40, 24, 255, 255, 255, 255); + g->draw_line(Position.X, Position.Y + Size.Y-17, Position.X + Size.X - 1, Position.Y + Size.Y-17, 255, 255, 255, 255); + + ui::Colour progressBarColour = style::Colour::WarningTitle; if(progress!=-1) { - float size = float(Size.X-40)*(float(progress)/100.0f); // TIL... - g->fillrect(Position.X + 20, Position.Y + 36, size, 24, 255, 255, 255, 255); + float size = float(Size.X-4)*(float(progress)/100.0f); // TIL... + g->fillrect(Position.X + 2, Position.Y + Size.Y-15, size, 13, progressBarColour.Red, progressBarColour.Green, progressBarColour.Blue, 255); } else { int size = 40, rsize = 0; - float position = float(Size.X-40)*(intermediatePos/100.0f); - if(position + size > Size.X-40) + float position = float(Size.X-4)*(intermediatePos/100.0f); + if(position + size - 1 > Size.X-4) { - size = (Size.X-40)-position; + size = (Size.X-4)-position+1; rsize = 40-size; } - g->fillrect(Position.X + 20 + position, Position.Y + 36, size, 24, 255, 255, 255, 255); + g->fillrect(Position.X + 2 + position, Position.Y + Size.Y-15, size, 13, progressBarColour.Red, progressBarColour.Green, progressBarColour.Blue, 255); if(rsize) { - g->fillrect(Position.X + 20, Position.Y + 36, rsize, 24, 255, 255, 255, 255); + g->fillrect(Position.X + 2, Position.Y + Size.Y-15, rsize, 13, progressBarColour.Red, progressBarColour.Green, progressBarColour.Blue, 255); } } + if(progress<50) + g->drawtext(Position.X + ((Size.X-Graphics::textwidth(progressStatus.c_str()))/2), Position.Y + Size.Y-13, progressStatus, 255, 255, 255, 255); + else + g->drawtext(Position.X + ((Size.X-Graphics::textwidth(progressStatus.c_str()))/2), Position.Y + Size.Y-13, progressStatus, 0, 0, 0, 255); } TaskWindow::~TaskWindow() { |
