Vote view in save preview, better handling of controller destruction

This commit is contained in:
Simon Robertshaw 2012-01-29 17:12:35 +00:00
parent 680a36549a
commit 80aa7219a2
12 changed files with 87 additions and 47 deletions

View File

@ -75,7 +75,7 @@ int main(int argc, char * argv[])
GameController * gameController = new GameController(); GameController * gameController = new GameController();
engine->ShowWindow(gameController->GetView()); engine->ShowWindow(gameController->GetView());
new ErrorMessage("Error", "This is a test error message"); //new ErrorMessage("Error", "This is a test error message");
SDL_Event event; SDL_Event event;
while(engine->Running()) while(engine->Running())

View File

@ -68,23 +68,20 @@ GameController::~GameController()
{ {
if(search) if(search)
{ {
if(ui::Engine::Ref().GetWindow() == search->GetView())
ui::Engine::Ref().CloseWindow();
delete search; delete search;
} }
if(renderOptions) if(renderOptions)
{ {
if(ui::Engine::Ref().GetWindow() == renderOptions->GetView())
ui::Engine::Ref().CloseWindow();
delete renderOptions; delete renderOptions;
} }
if(loginWindow) if(loginWindow)
{ {
if(ui::Engine::Ref().GetWindow() == loginWindow->GetView())
ui::Engine::Ref().CloseWindow();
delete loginWindow; delete loginWindow;
} }
delete gameView; if(ui::Engine::Ref().GetWindow() == gameView)
{
ui::Engine::Ref().CloseWindow();
}
delete gameModel; delete gameModel;
} }

View File

@ -9,36 +9,29 @@
namespace ui { namespace ui {
SaveButton::SaveButton(Window* parent_state, Save * save):
Component(parent_state),
save(save),
thumbnail(NULL),
isMouseInside(false),
isButtonDown(false),
actionCallback(NULL)
{
}
SaveButton::SaveButton(Point position, Point size, Save * save): SaveButton::SaveButton(Point position, Point size, Save * save):
Component(position, size), Component(position, size),
save(save), save(save),
thumbnail(NULL), thumbnail(NULL),
isMouseInside(false), isMouseInside(false),
isButtonDown(false), isButtonDown(false),
actionCallback(NULL) actionCallback(NULL),
voteColour(255, 0, 0)
{ {
if(save->votesUp==0)
voteRatio = 0.0f;
else if(save->votesDown==0)
voteRatio = 1.0f;
else
voteRatio = 1.0f-(float)(((float)(save->votesDown))/((float)(save->votesUp)));
if(voteRatio < 0.0f)
voteRatio = 0.0f;
if(voteRatio > 1.0f) //Not possible, but just in case the server were to give a negative value or something
voteRatio = 1.0f;
}
SaveButton::SaveButton(Save * save): voteColour.Red = (1.0f-voteRatio)*255;
Component(), voteColour.Green = voteRatio*255;
save(save),
thumbnail(NULL),
isMouseInside(false),
isButtonDown(false),
actionCallback(NULL)
{
} }
@ -68,9 +61,9 @@ void SaveButton::Tick(float dt)
{ {
scaleFactorY = ((float)(Size.Y-25))/((float)thumbnail->Size.Y); scaleFactorY = ((float)(Size.Y-25))/((float)thumbnail->Size.Y);
} }
if(thumbnail->Size.X > Size.X) if(thumbnail->Size.X > Size.X-3)
{ {
scaleFactorX = ((float)Size.X)/((float)thumbnail->Size.X); scaleFactorX = ((float)Size.X-3)/((float)thumbnail->Size.X);
} }
if(scaleFactorY < 1.0f || scaleFactorX < 1.0f) if(scaleFactorY < 1.0f || scaleFactorX < 1.0f)
{ {
@ -90,16 +83,32 @@ void SaveButton::Draw(const Point& screenPos)
{ {
Graphics * g = ui::Engine::Ref().g; Graphics * g = ui::Engine::Ref().g;
float scaleFactor; float scaleFactor;
ui::Point thumbBoxSize(0, 0);
if(thumbnail) if(thumbnail)
{ {
g->draw_image(thumbnail->Data, screenPos.X+(Size.X-thumbnail->Size.X)/2, screenPos.Y+((Size.Y-25)-thumbnail->Size.Y)/2, thumbnail->Size.X, thumbnail->Size.Y, 255); thumbBoxSize = ui::Point(thumbnail->Size.X, thumbnail->Size.Y);
g->drawrect(screenPos.X+(Size.X-thumbnail->Size.X)/2, screenPos.Y+((Size.Y-25)-thumbnail->Size.Y)/2, thumbnail->Size.X, thumbnail->Size.Y, 180, 180, 180, 255); if(save->id)
g->draw_image(thumbnail->Data, screenPos.X-3+(Size.X-thumbBoxSize.X)/2, screenPos.Y+(Size.Y-25-thumbBoxSize.Y)/2, thumbnail->Size.X, thumbnail->Size.Y, 255);
else
g->draw_image(thumbnail->Data, screenPos.X+(Size.X-thumbBoxSize.X)/2, screenPos.Y+(Size.Y-25-thumbBoxSize.Y)/2, thumbnail->Size.X, thumbnail->Size.Y, 255);
} }
else else
{ {
scaleFactor = (Size.Y-25)/((float)YRES); scaleFactor = (Size.Y-25)/((float)YRES);
g->drawrect(screenPos.X+(Size.X-((float)XRES)*scaleFactor)/2, screenPos.Y+((Size.Y-21)-((float)YRES)*scaleFactor)/2, ((float)XRES)*scaleFactor, ((float)YRES)*scaleFactor, 180, 180, 180, 255); thumbBoxSize = ui::Point(((float)XRES)*scaleFactor, ((float)YRES)*scaleFactor);
}
if(save->id)
{
g->drawrect(screenPos.X-3+(Size.X-thumbBoxSize.X)/2, screenPos.Y+(Size.Y-21-thumbBoxSize.Y)/2, thumbBoxSize.X, thumbBoxSize.Y, 180, 180, 180, 255);
g->drawrect(screenPos.X-3+thumbBoxSize.X+(Size.X-thumbBoxSize.X)/2, screenPos.Y+(Size.Y-21-thumbBoxSize.Y)/2, 6, thumbBoxSize.Y, 180, 180, 180, 255);
int voteBar = max(10.0f, ((float)(thumbBoxSize.Y))*voteRatio);
g->fillrect(screenPos.X-3+thumbBoxSize.X+(Size.X-thumbBoxSize.X)/2, screenPos.Y+(thumbBoxSize.Y-voteBar)+(Size.Y-21-thumbBoxSize.Y)/2, 6, voteBar, voteColour.Red, voteColour.Green, voteColour.Blue, 255);
}
else
{
g->drawrect(screenPos.X+(Size.X-thumbBoxSize.X)/2, screenPos.Y+(Size.Y-21-thumbBoxSize.Y)/2, thumbBoxSize.X, thumbBoxSize.Y, 180, 180, 180, 255);
} }
if(isMouseInside) if(isMouseInside)

View File

@ -7,6 +7,7 @@
#include "search/Save.h" #include "search/Save.h"
#include "Graphics.h" #include "Graphics.h"
#include "search/Thumbnail.h" #include "search/Thumbnail.h"
#include "interface/Colour.h"
namespace ui namespace ui
{ {
@ -23,11 +24,7 @@ class SaveButton : public Component
Save * save; Save * save;
Thumbnail * thumbnail; Thumbnail * thumbnail;
public: public:
SaveButton(Window* parent_state, Save * save);
SaveButton(Point position, Point size, Save * save); SaveButton(Point position, Point size, Save * save);
SaveButton(Save * save);
virtual ~SaveButton(); virtual ~SaveButton();
virtual void OnMouseClick(int x, int y, unsigned int button); virtual void OnMouseClick(int x, int y, unsigned int button);
@ -45,6 +42,8 @@ public:
void SetActionCallback(SaveButtonAction * action); void SetActionCallback(SaveButtonAction * action);
protected: protected:
bool isButtonDown, state, isMouseInside; bool isButtonDown, state, isMouseInside;
float voteRatio;
Colour voteColour;
SaveButtonAction * actionCallback; SaveButtonAction * actionCallback;
}; };
} }

View File

@ -44,8 +44,10 @@ void LoginController::Exit()
} }
LoginController::~LoginController() { LoginController::~LoginController() {
if(loginView) if(ui::Engine::Ref().GetWindow() == loginView)
delete loginView; {
ui::Engine::Ref().CloseWindow();
}
delete loginModel; delete loginModel;
} }

View File

@ -55,7 +55,10 @@ void PreviewController::Exit()
} }
PreviewController::~PreviewController() { PreviewController::~PreviewController() {
delete previewView; if(ui::Engine::Ref().GetWindow() == previewView)
{
ui::Engine::Ref().CloseWindow();
}
delete previewModel; delete previewModel;
} }

View File

@ -118,6 +118,7 @@ void PreviewModel::Update()
{ {
if(updateSavePreviewFinished) if(updateSavePreviewFinished)
{ {
updateSavePreviewWorking = false;
pthread_join(updateSavePreviewThread, (void**)(&savePreview)); pthread_join(updateSavePreviewThread, (void**)(&savePreview));
notifyPreviewChanged(); notifyPreviewChanged();
} }
@ -127,6 +128,7 @@ void PreviewModel::Update()
{ {
if(updateSaveInfoFinished) if(updateSaveInfoFinished)
{ {
updateSaveInfoWorking = false;
pthread_join(updateSaveInfoThread, (void**)(&save)); pthread_join(updateSaveInfoThread, (void**)(&save));
notifySaveChanged(); notifySaveChanged();
} }

View File

@ -31,11 +31,11 @@ PreviewView::PreviewView():
openButton->SetActionCallback(new OpenAction(this)); openButton->SetActionCallback(new OpenAction(this));
AddComponent(openButton); AddComponent(openButton);
saveNameLabel = new ui::Label(ui::Point(5, (YRES/2)+5), ui::Point(100, 16), ""); saveNameLabel = new ui::Label(ui::Point(5, (YRES/2)+15), ui::Point(100, 16), "");
saveNameLabel->SetAlignment(AlignLeft, AlignBottom); saveNameLabel->SetAlignment(AlignLeft, AlignBottom);
AddComponent(saveNameLabel); AddComponent(saveNameLabel);
authorDateLabel = new ui::Label(ui::Point(5, (YRES/2)+5+14), ui::Point(100, 16), ""); authorDateLabel = new ui::Label(ui::Point(5, (YRES/2)+15+14), ui::Point(100, 16), "");
authorDateLabel->SetAlignment(AlignLeft, AlignBottom); authorDateLabel->SetAlignment(AlignLeft, AlignBottom);
AddComponent(authorDateLabel); AddComponent(authorDateLabel);
} }
@ -55,6 +55,20 @@ void PreviewView::OnDraw()
} }
g->drawrect(Position.X, Position.Y, XRES/2, YRES/2, 255, 255, 255, 100); g->drawrect(Position.X, Position.Y, XRES/2, YRES/2, 255, 255, 255, 100);
g->draw_line(Position.X+XRES/2, Position.Y, Position.X+XRES/2, Position.Y+Size.Y, 255, 255, 255, XRES+BARSIZE); g->draw_line(Position.X+XRES/2, Position.Y, Position.X+XRES/2, Position.Y+Size.Y, 255, 255, 255, XRES+BARSIZE);
g->draw_line(Position.X+1, Position.Y+10+YRES/2, Position.X-2+XRES/2, Position.Y+10+YRES/2, 100, 100, 100, XRES+BARSIZE);
float factor;
if(!votesUp && !votesDown)
return;
else
factor = (float)(((float)(XRES/2))/((float)(votesUp+votesDown)));
g->fillrect(Position.X, Position.Y+YRES/2, XRES/2, 10, 200, 50, 50, 255);
g->fillrect(Position.X, Position.Y+YRES/2, (int)(((float)votesUp)*factor), 10, 50, 200, 50, 255);
g->fillrect(Position.X, Position.Y+(YRES/2), 14, 10, 0, 0, 0, 100);
g->fillrect(Position.X+(XRES/2)-14, Position.Y+(YRES/2), 14, 10, 0, 0, 0, 100);
g->draw_icon(Position.X+2, Position.Y+(YRES/2)+2, IconVoteUp);
g->draw_icon(Position.X+(XRES/2)-12, Position.Y+(YRES/2), IconVoteDown);
} }
void PreviewView::OnTick(float dt) void PreviewView::OnTick(float dt)
@ -73,11 +87,15 @@ void PreviewView::NotifySaveChanged(PreviewModel * sender)
Save * save = sender->GetSave(); Save * save = sender->GetSave();
if(save) if(save)
{ {
votesUp = save->votesUp;
votesDown = save->votesDown;
saveNameLabel->SetText(save->name); saveNameLabel->SetText(save->name);
authorDateLabel->SetText("\bgAuthor:\bw " + save->userName + " \bgDate:\bw "); authorDateLabel->SetText("\bgAuthor:\bw " + save->userName + " \bgDate:\bw ");
} }
else else
{ {
votesUp = 0;
votesDown = 0;
saveNameLabel->SetText(""); saveNameLabel->SetText("");
authorDateLabel->SetText(""); authorDateLabel->SetText("");
} }

View File

@ -22,6 +22,8 @@ class PreviewView: public ui::Window {
ui::Button * openButton; ui::Button * openButton;
ui::Label * saveNameLabel; ui::Label * saveNameLabel;
ui::Label * authorDateLabel; ui::Label * authorDateLabel;
int votesUp;
int votesDown;
public: public:
void AttachController(PreviewController * controller) { c = controller;} void AttachController(PreviewController * controller) { c = controller;}
PreviewView(); PreviewView();

View File

@ -57,7 +57,10 @@ void RenderController::Exit()
} }
RenderController::~RenderController() { RenderController::~RenderController() {
delete renderView; if(ui::Engine::Ref().GetWindow() == renderView)
{
ui::Engine::Ref().CloseWindow();
}
delete renderModel; delete renderModel;
} }

View File

@ -11,12 +11,13 @@ using namespace std;
class Save class Save
{ {
private: private:
public:
int id; int id;
int date; int date;
int votesUp, votesDown; int votesUp, votesDown;
unsigned char * data; unsigned char * data;
int dataLength; int dataLength;
public:
Save(Save & save); Save(Save & save);
Save(int _id, int _date, int _votesUp, int _votesDown, string _userName, string _name); Save(int _id, int _date, int _votesUp, int _votesDown, string _userName, string _name);

View File

@ -68,9 +68,13 @@ void SearchController::Exit()
SearchController::~SearchController() SearchController::~SearchController()
{ {
if(activePreview)
delete activePreview;
if(ui::Engine::Ref().GetWindow() == searchView)
{
ui::Engine::Ref().CloseWindow();
}
delete searchModel; delete searchModel;
if(searchView)
delete searchView;
} }
void SearchController::DoSearch(std::string query) void SearchController::DoSearch(std::string query)