mirror of
https://github.com/The-Powder-Toy/The-Powder-Toy.git
synced 2025-08-29 19:00:33 +02:00
Replace Error notification with exception for Tags model
This commit is contained in:
@@ -10,7 +10,7 @@
|
|||||||
#include "login/LoginController.h"
|
#include "login/LoginController.h"
|
||||||
#include "interface/Point.h"
|
#include "interface/Point.h"
|
||||||
#include "dialogues/ErrorMessage.h"
|
#include "dialogues/ErrorMessage.h"
|
||||||
#include "SaveLoadException.h"
|
#include "GameModelException.h"
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
@@ -39,7 +39,7 @@ public:
|
|||||||
{
|
{
|
||||||
cc->gameModel->SetSave(new Save(*(cc->search->GetLoadedSave())));
|
cc->gameModel->SetSave(new Save(*(cc->search->GetLoadedSave())));
|
||||||
}
|
}
|
||||||
catch(SaveLoadException & ex)
|
catch(GameModelException & ex)
|
||||||
{
|
{
|
||||||
new ErrorMessage("Cannot open save", ex.what());
|
new ErrorMessage("Cannot open save", ex.what());
|
||||||
}
|
}
|
||||||
|
@@ -8,7 +8,7 @@
|
|||||||
#include "EllipseBrush.h"
|
#include "EllipseBrush.h"
|
||||||
#include "client/Client.h"
|
#include "client/Client.h"
|
||||||
#include "game/DecorationTool.h"
|
#include "game/DecorationTool.h"
|
||||||
#include "SaveLoadException.h"
|
#include "GameModelException.h"
|
||||||
|
|
||||||
GameModel::GameModel():
|
GameModel::GameModel():
|
||||||
activeTools({NULL, NULL, NULL}),
|
activeTools({NULL, NULL, NULL}),
|
||||||
@@ -262,7 +262,7 @@ void GameModel::SetSave(Save * newSave)
|
|||||||
if(returnVal){
|
if(returnVal){
|
||||||
delete currentSave;
|
delete currentSave;
|
||||||
currentSave = NULL;
|
currentSave = NULL;
|
||||||
throw SaveLoadException(returnVal==2?"Save from newer version":"Save data corrupt");
|
throw GameModelException(returnVal==2?"Save from newer version":"Save data corrupt");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
notifySaveChanged();
|
notifySaveChanged();
|
||||||
|
26
src/game/GameModelException.h
Normal file
26
src/game/GameModelException.h
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
/*
|
||||||
|
* SaveLoadException.h
|
||||||
|
*
|
||||||
|
* Created on: Mar 29, 2012
|
||||||
|
* Author: Simon
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef SAVELOADEXCEPTION_H_
|
||||||
|
#define SAVELOADEXCEPTION_H_
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
#include <exception>
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
struct GameModelException: public exception {
|
||||||
|
string message;
|
||||||
|
public:
|
||||||
|
GameModelException(string message_): message(message_) {}
|
||||||
|
const char * what() const throw()
|
||||||
|
{
|
||||||
|
return message.c_str();
|
||||||
|
}
|
||||||
|
~GameModelException() throw() {};
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* SAVELOADEXCEPTION_H_ */
|
@@ -8,6 +8,7 @@
|
|||||||
#include "TagsModel.h"
|
#include "TagsModel.h"
|
||||||
#include "TagsView.h"
|
#include "TagsView.h"
|
||||||
#include "client/Client.h"
|
#include "client/Client.h"
|
||||||
|
#include "TagsModelException.h"
|
||||||
|
|
||||||
TagsModel::TagsModel():
|
TagsModel::TagsModel():
|
||||||
save(NULL)
|
save(NULL)
|
||||||
@@ -40,8 +41,7 @@ void TagsModel::RemoveTag(string tag)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
lastError = Client::Ref().GetLastError();
|
throw TagsModelException(Client::Ref().GetLastError());
|
||||||
notifyError();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -59,8 +59,7 @@ void TagsModel::AddTag(string tag)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
lastError = Client::Ref().GetLastError();
|
throw TagsModelException(Client::Ref().GetLastError());
|
||||||
notifyError();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -79,14 +78,6 @@ void TagsModel::notifyTagsChanged()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void TagsModel::notifyError()
|
|
||||||
{
|
|
||||||
for(int i = 0; i < observers.size(); i++)
|
|
||||||
{
|
|
||||||
observers[i]->NotifyError(this);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
TagsModel::~TagsModel() {
|
TagsModel::~TagsModel() {
|
||||||
// TODO Auto-generated destructor stub
|
// TODO Auto-generated destructor stub
|
||||||
}
|
}
|
||||||
|
@@ -14,10 +14,8 @@
|
|||||||
class TagsView;
|
class TagsView;
|
||||||
class TagsModel {
|
class TagsModel {
|
||||||
Save * save;
|
Save * save;
|
||||||
string lastError;
|
|
||||||
std::vector<TagsView*> observers;
|
std::vector<TagsView*> observers;
|
||||||
void notifyTagsChanged();
|
void notifyTagsChanged();
|
||||||
void notifyError();
|
|
||||||
public:
|
public:
|
||||||
TagsModel();
|
TagsModel();
|
||||||
void AddObserver(TagsView * observer);
|
void AddObserver(TagsView * observer);
|
||||||
@@ -25,7 +23,6 @@ public:
|
|||||||
void RemoveTag(string tag);
|
void RemoveTag(string tag);
|
||||||
void AddTag(string tag);
|
void AddTag(string tag);
|
||||||
Save * GetSave();
|
Save * GetSave();
|
||||||
string GetLastError(){ return lastError; }
|
|
||||||
virtual ~TagsModel();
|
virtual ~TagsModel();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
23
src/tags/TagsModelException.h
Normal file
23
src/tags/TagsModelException.h
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
/*
|
||||||
|
* TagsModelException.h
|
||||||
|
*
|
||||||
|
* Created on: Mar 29, 2012
|
||||||
|
* Author: Simon
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef TAGSMODELEXCEPTION_H_
|
||||||
|
#define TAGSMODELEXCEPTION_H_
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
#include <exception>
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
class TagsModelException {
|
||||||
|
string message;
|
||||||
|
public:
|
||||||
|
TagsModelException(string message_): message(message_) {};
|
||||||
|
const char * what() const throw() { return message.c_str(); };
|
||||||
|
~TagsModelException() throw() {};
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* TAGSMODELEXCEPTION_H_ */
|
@@ -11,6 +11,7 @@
|
|||||||
#include "dialogues/ErrorMessage.h"
|
#include "dialogues/ErrorMessage.h"
|
||||||
#include "TagsController.h"
|
#include "TagsController.h"
|
||||||
#include "TagsModel.h"
|
#include "TagsModel.h"
|
||||||
|
#include "TagsModelException.h"
|
||||||
|
|
||||||
TagsView::TagsView():
|
TagsView::TagsView():
|
||||||
ui::Window(ui::Point(-1, -1), ui::Point(195, 250))
|
ui::Window(ui::Point(-1, -1), ui::Point(195, 250))
|
||||||
@@ -46,11 +47,6 @@ void TagsView::OnDraw()
|
|||||||
g->drawrect(Position.X, Position.Y, Size.X, Size.Y, 255, 255, 255, 255);
|
g->drawrect(Position.X, Position.Y, Size.X, Size.Y, 255, 255, 255, 255);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TagsView::NotifyError(TagsModel * sender)
|
|
||||||
{
|
|
||||||
new ErrorMessage("Error", sender->GetLastError());
|
|
||||||
}
|
|
||||||
|
|
||||||
void TagsView::NotifyTagsChanged(TagsModel * sender)
|
void TagsView::NotifyTagsChanged(TagsModel * sender)
|
||||||
{
|
{
|
||||||
for(int i = 0; i < tags.size(); i++)
|
for(int i = 0; i < tags.size(); i++)
|
||||||
@@ -69,7 +65,14 @@ void TagsView::NotifyTagsChanged(TagsModel * sender)
|
|||||||
DeleteTagAction(TagsView * _v, string tag) { v = _v; this->tag = tag; }
|
DeleteTagAction(TagsView * _v, string tag) { v = _v; this->tag = tag; }
|
||||||
void ActionCallback(ui::Button * sender)
|
void ActionCallback(ui::Button * sender)
|
||||||
{
|
{
|
||||||
v->c->RemoveTag(tag);
|
try
|
||||||
|
{
|
||||||
|
v->c->RemoveTag(tag);
|
||||||
|
}
|
||||||
|
catch(TagsModelException & ex)
|
||||||
|
{
|
||||||
|
new ErrorMessage("Could not remove tag", ex.what());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -108,7 +111,15 @@ void TagsView::OnKeyPress(int key, Uint16 character, bool shift, bool ctrl, bool
|
|||||||
case KEY_RETURN:
|
case KEY_RETURN:
|
||||||
if(IsFocused(tagInput))
|
if(IsFocused(tagInput))
|
||||||
{
|
{
|
||||||
c->AddTag(tagInput->GetText());
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
c->AddTag(tagInput->GetText());
|
||||||
|
}
|
||||||
|
catch(TagsModelException & ex)
|
||||||
|
{
|
||||||
|
new ErrorMessage("Could not add tag", ex.what());
|
||||||
|
}
|
||||||
tagInput->SetText("");
|
tagInput->SetText("");
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@@ -25,7 +25,6 @@ class TagsView: public ui::Window {
|
|||||||
public:
|
public:
|
||||||
TagsView();
|
TagsView();
|
||||||
virtual void OnDraw();
|
virtual void OnDraw();
|
||||||
void NotifyError(TagsModel * sender);
|
|
||||||
void AttachController(TagsController * c_) { c = c_; };
|
void AttachController(TagsController * c_) { c = c_; };
|
||||||
virtual void OnKeyPress(int key, Uint16 character, bool shift, bool ctrl, bool alt);
|
virtual void OnKeyPress(int key, Uint16 character, bool shift, bool ctrl, bool alt);
|
||||||
void NotifyTagsChanged(TagsModel * sender);
|
void NotifyTagsChanged(TagsModel * sender);
|
||||||
|
Reference in New Issue
Block a user