From 61ed6e0276d580515d0acf5ddb96b1db95b9b191 Mon Sep 17 00:00:00 2001 From: Simon Robertshaw Date: Thu, 7 Jun 2012 14:23:26 +0100 Subject: Rename Save class to SaveInfo, introduce SaveFile for hanlding of local data (stamps and local saves). Rename Stamps browser to LocalBrowser, ready for sharing code with the local save browser diff --git a/src/client/Client.cpp b/src/client/Client.cpp index 886dfbb..23a487c 100644 --- a/src/client/Client.cpp +++ b/src/client/Client.cpp @@ -22,7 +22,7 @@ #include "interface/Point.h" -#include "search/Save.h" +#include "client/SaveInfo.h" Client::Client(): authUser(0, "") @@ -153,9 +153,11 @@ User Client::GetAuthUser() return authUser; } -RequestStatus Client::UploadSave(Save * save) +RequestStatus Client::UploadSave(SaveInfo * save) { lastError = ""; + int gameDataLength; + char * gameData = NULL; int dataStatus; char * data; int dataLength = 0; @@ -163,9 +165,23 @@ RequestStatus Client::UploadSave(Save * save) userIDStream << authUser.ID; if(authUser.ID) { + if(!save->GetGameSave()) + { + lastError = "Empty game save"; + return RequestFailure; + } + + gameData = save->GetGameSave()->Serialise(gameDataLength); + + if(!gameData) + { + lastError = "Cannot upload game save"; + return RequestFailure; + } + char * postNames[] = { "Name", "Description", "Data:save.bin", "Publish", NULL }; - char * postDatas[] = { (char *)(save->name.c_str()), (char *)(save->Description.c_str()), (char *)(save->GetData()), (char *)(save->Published?"Public":"Private") }; - int postLengths[] = { save->name.length(), save->Description.length(), save->GetDataLength(), save->Published?6:7 }; + char * postDatas[] = { (char *)(save->name.c_str()), (char *)(save->Description.c_str()), gameData, (char *)(save->Published?"Public":"Private") }; + int postLengths[] = { save->name.length(), save->Description.length(), gameDataLength, save->Published?6:7 }; //std::cout << postNames[0] << " " << postDatas[0] << " " << postLengths[0] << std::endl; data = http_multipart_post("http://" SERVER "/Save.api", postNames, postDatas, postLengths, (char *)(userIDStream.str().c_str()), NULL, (char *)(authUser.SessionID.c_str()), &dataStatus, &dataLength); } @@ -178,6 +194,7 @@ RequestStatus Client::UploadSave(Save * save) { if(strncmp((const char *)data, "OK", 2)!=0) { + if(gameData) free(gameData); free(data); lastError = std::string((const char *)data); return RequestFailure; @@ -198,16 +215,18 @@ RequestStatus Client::UploadSave(Save * save) } } free(data); + if(gameData) free(gameData); return RequestOkay; } else if(data) { free(data); } + if(gameData) free(gameData); return RequestFailure; } -Save * Client::GetStamp(string stampID) +SaveFile * Client::GetStamp(string stampID) { std::ifstream stampFile; stampFile.open(string(STAMPS_DIR PATH_SEP + stampID + ".stm").c_str(), ios::binary); @@ -221,10 +240,10 @@ Save * Client::GetStamp(string stampID) stampFile.read((char *)tempData, fileSize); stampFile.close(); - - Save * tempSave = new Save(0, 0, 0, 0, "", stampID); - tempSave->SetData(tempData, fileSize); - return tempSave; + SaveFile * file = new SaveFile(string(STAMPS_DIR PATH_SEP + stampID + ".stm").c_str()); + GameSave * tempSave = new GameSave((char *)tempData, fileSize); + file->SetGameSave(tempSave); + return file; } else { @@ -245,7 +264,7 @@ void Client::DeleteStamp(string stampID) } } -string Client::AddStamp(Save * saveData) +string Client::AddStamp(GameSave * saveData) { unsigned t=(unsigned)time(NULL); if (lastStampTime!=t) @@ -267,9 +286,12 @@ string Client::AddStamp(Save * saveData) mkdir(STAMPS_DIR, 0755); #endif + int gameDataLength; + char * gameData = saveData->Serialise(gameDataLength); + std::ofstream stampStream; stampStream.open(string(STAMPS_DIR PATH_SEP + saveID.str()+".stm").c_str(), ios::binary); - stampStream.write((const char *)saveData->data, saveData->dataLength); + stampStream.write((const char *)gameData, gameDataLength); stampStream.close(); stampIDs.push_back(saveID.str()); @@ -683,7 +705,7 @@ failure: return RequestFailure; } -Save * Client::GetSave(int saveID, int saveDate) +SaveInfo * Client::GetSave(int saveID, int saveDate) { lastError = ""; std::stringstream urlStream; @@ -733,7 +755,7 @@ Save * Client::GetSave(int saveID, int saveDate) tempTags.push_back(tempTag.Value()); } - Save * tempSave = new Save( + SaveInfo * tempSave = new SaveInfo( tempID.Value(), tempDate.Value(), tempScoreUp.Value(), @@ -849,11 +871,11 @@ std::vector * Client::GetComments(int saveID, int start, int count return commentArray; } -std::vector * Client::SearchSaves(int start, int count, string query, string sort, std::string category, int & resultCount) +std::vector * Client::SearchSaves(int start, int count, string query, string sort, std::string category, int & resultCount) { lastError = ""; resultCount = 0; - std::vector * saveArray = new std::vector(); + std::vector * saveArray = new std::vector(); std::stringstream urlStream; char * data; int dataStatus, dataLength; @@ -904,7 +926,7 @@ std::vector * Client::SearchSaves(int start, int count, string query, str json::String tempUsername = savesArray[j]["Username"]; json::String tempName = savesArray[j]["Name"]; saveArray->push_back( - new Save( + new SaveInfo( tempID.Value(), tempDate.Value(), tempScoreUp.Value(), diff --git a/src/client/Client.h b/src/client/Client.h index b00ea93..53f0e79 100644 --- a/src/client/Client.h +++ b/src/client/Client.h @@ -9,7 +9,8 @@ #include "HTTP.h" #include "preview/Comment.h" #include "search/Thumbnail.h" -#include "search/Save.h" +#include "client/SaveInfo.h" +#include "client/SaveFile.h" #include "Singleton.h" #include "User.h" @@ -52,21 +53,21 @@ public: ~Client(); RequestStatus ExecVote(int saveID, int direction); - RequestStatus UploadSave(Save * save); + RequestStatus UploadSave(SaveInfo * save); - Save * GetStamp(string stampID); + SaveFile * GetStamp(string stampID); void DeleteStamp(string stampID); - string AddStamp(Save * saveData); + string AddStamp(GameSave * saveData); vector GetStamps(); unsigned char * GetSaveData(int saveID, int saveDate, int & dataLength); LoginStatus Login(string username, string password, User & user); void ClearThumbnailRequests(); - std::vector * SearchSaves(int start, int count, string query, string sort, string category, int & resultCount); + std::vector * SearchSaves(int start, int count, string query, string sort, string category, int & resultCount); std::vector * GetComments(int saveID, int start, int count); Thumbnail * GetPreview(int saveID, int saveDate); Thumbnail * GetThumbnail(int saveID, int saveDate); - Save * GetSave(int saveID, int saveDate); + SaveInfo * GetSave(int saveID, int saveDate); RequestStatus DeleteSave(int saveID); RequestStatus ReportSave(int saveID, std::string message); RequestStatus UnpublishSave(int saveID); diff --git a/src/client/GameSave.cpp b/src/client/GameSave.cpp index 9c7cf5e..8ad03a2 100644 --- a/src/client/GameSave.cpp +++ b/src/client/GameSave.cpp @@ -11,7 +11,7 @@ #include "Config.h" #include "bson/BSON.h" #include "GameSave.h" -#include "SimulationData.h" +#include "simulation/SimulationData.h" GameSave::GameSave(GameSave & save) : waterEEnabled(save.waterEEnabled), @@ -23,7 +23,8 @@ airMode(save.airMode), signs(save.signs) { setSize(save.width, save.height); - + + particlesCount = save.particlesCount; copy(save.particles, save.particles+NPART, particles); copy(save.blockMapPtr, save.blockMapPtr+((height/CELL)*(width/CELL)), blockMapPtr); copy(save.fanVelXPtr, save.fanVelXPtr+((height/CELL)*(width/CELL)), fanVelXPtr); @@ -52,6 +53,7 @@ void GameSave::setSize(int newWidth, int newHeight) this->width = (newWidth/CELL)*CELL; this->height = (newHeight/CELL)*CELL; + particlesCount = 0; particles = new Particle[NPART]; blockMap = new unsigned char*[height/CELL]; blockMapPtr = new unsigned char[(height/CELL)*(width/CELL)]; @@ -1458,4 +1460,4 @@ GameSave::~GameSave() delete[] fanVelY; } } -} \ No newline at end of file +} diff --git a/src/client/GameSave.h b/src/client/GameSave.h index 2978f52..283ed4e 100644 --- a/src/client/GameSave.h +++ b/src/client/GameSave.h @@ -9,8 +9,13 @@ #define The_Powder_Toy_GameSave_h #include +#include +#include "Config.h" #include "Misc.h" -#include "simulation/StorageClasses.h" +#include "simulation/Sign.h" +#include "simulation/Particle.h" + +using namespace std; struct ParseException: public exception { enum ParseResult { OK = 0, Corrupt, WrongVersion, InvalidDimensions, InternalError, MissingElement }; diff --git a/src/client/SaveFile.cpp b/src/client/SaveFile.cpp new file mode 100644 index 0000000..6675aae --- /dev/null +++ b/src/client/SaveFile.cpp @@ -0,0 +1,43 @@ +/* + * SaveFile.cpp + * + * Created on: Jun 6, 2012 + * Author: Simon + */ + +#include "SaveFile.h" + +SaveFile::SaveFile(SaveFile & save): + gameSave(NULL) +{ + if(save.gameSave) + gameSave = new GameSave(*save.gameSave); +} + +SaveFile::SaveFile(string filename): + filename(filename), + gameSave(NULL) + { + //Load file +} + +GameSave * SaveFile::GetGameSave() +{ + return gameSave; +} + +void SaveFile::SetGameSave(GameSave * save) +{ + gameSave = save; +} + +string SaveFile::GetName() +{ + return filename; +} + +SaveFile::~SaveFile() { + if(gameSave) + delete gameSave; +} + diff --git a/src/client/SaveFile.h b/src/client/SaveFile.h new file mode 100644 index 0000000..8b4005a --- /dev/null +++ b/src/client/SaveFile.h @@ -0,0 +1,31 @@ +/* + * SaveFile.h + * + * Created on: Jun 6, 2012 + * Author: Simon + */ + +#ifndef SAVEFILE_H_ +#define SAVEFILE_H_ + +#include +#include "GameSave.h" + +using namespace std; + +class SaveFile { +public: + SaveFile(SaveFile & save); + SaveFile(string filename); + + GameSave * GetGameSave(); + void SetGameSave(GameSave * save); + string GetName(); + + virtual ~SaveFile(); +private: + GameSave * gameSave; + string filename; +}; + +#endif /* SAVEFILE_H_ */ diff --git a/src/client/SaveInfo.cpp b/src/client/SaveInfo.cpp new file mode 100644 index 0000000..4e096ef --- /dev/null +++ b/src/client/SaveInfo.cpp @@ -0,0 +1,103 @@ +/* + * Save.cpp + * + * Created on: Jan 26, 2012 + * Author: Simon + */ + +#include "client/SaveInfo.h" +#include "client/Client.h" + +SaveInfo::SaveInfo(SaveInfo & save) : + userName(save.userName), name(save.name), Description(save.Description), date( + save.date), Published(save.Published), id(save.id), votesUp( + save.votesUp), votesDown(save.votesDown), gameSave(NULL), vote(save.vote), tags(save.tags) { + if(save.gameSave) + gameSave = new GameSave(*save.gameSave); +} + +SaveInfo::SaveInfo(int _id, int _date, int _votesUp, int _votesDown, string _userName, + string _name) : + id(_id), votesUp(_votesUp), votesDown(_votesDown), userName(_userName), name( + _name), Description("No description provided"), date(_date), Published( + true), gameSave(NULL), vote(0), tags() { +} + +SaveInfo::SaveInfo(int _id, int date_, int _votesUp, int _votesDown, int _vote, string _userName, + string _name, string description_, bool published_, vector tags_) : + id(_id), votesUp(_votesUp), votesDown(_votesDown), userName(_userName), name( + _name), Description(description_), date(date_), Published( + published_), gameSave(NULL), vote(_vote), tags(tags_) { +} + +SaveInfo::~SaveInfo() +{ + if(gameSave) + { + delete gameSave; + } +} + +void SaveInfo::SetName(string name) { + this->name = name; +} +string SaveInfo::GetName() { + return name; +} + +void SaveInfo::SetVote(int vote) +{ + this->vote = vote; +} +int SaveInfo::GetVote() +{ + return vote; +} + +void SaveInfo::SetUserName(string userName) { + this->userName = userName; +} + +string SaveInfo::GetUserName() { + return userName; +} + +void SaveInfo::SetID(int id) { + this->id = id; +} +int SaveInfo::GetID() { + return id; +} + +void SaveInfo::SetVotesUp(int votesUp) { + this->votesUp = votesUp; +} +int SaveInfo::GetVotesUp() { + return votesUp; +} + +void SaveInfo::SetVotesDown(int votesDown) { + this->votesDown = votesDown; +} +int SaveInfo::GetVotesDown() { + return votesDown; +} + +void SaveInfo::SetTags(vector tags) +{ + this->tags = tags; +} +vector SaveInfo::GetTags() +{ + return tags; +} + +GameSave * SaveInfo::GetGameSave() +{ + return gameSave; +} + +void SaveInfo::SetGameSave(GameSave * saveGame) +{ + gameSave = saveGame; +} diff --git a/src/client/SaveInfo.h b/src/client/SaveInfo.h new file mode 100644 index 0000000..5360f90 --- /dev/null +++ b/src/client/SaveInfo.h @@ -0,0 +1,68 @@ +#ifndef SAVE_H +#define SAVE_H + +#include +#include +#include +#include +#include +#include "GameSave.h" + +using namespace std; + +class SaveInfo +{ +private: +public: + int id; + int date; + int votesUp, votesDown; + bool Favourite; + + GameSave * gameSave; + + SaveInfo(SaveInfo & save); + + SaveInfo(int _id, int _date, int _votesUp, int _votesDown, string _userName, string _name); + + SaveInfo(int _id, int date_, int _votesUp, int _votesDown, int _vote, string _userName, string _name, string description_, bool published_, vector tags); + + ~SaveInfo(); + + string userName; + string name; + + string Description; + + vector tags; + + int vote; + + bool Published; + + void SetName(string name); + string GetName(); + + void SetUserName(string userName); + string GetUserName(); + + void SetID(int id); + int GetID(); + + void SetVote(int vote); + int GetVote(); + + void SetVotesUp(int votesUp); + int GetVotesUp(); + + void SetVotesDown(int votesDown); + int GetVotesDown(); + + void SetTags(vector tags); + vector GetTags(); + + GameSave * GetGameSave(); + void SetGameSave(GameSave * gameSave); +}; + +#endif // SAVE_H diff --git a/src/game/GameController.cpp b/src/game/GameController.cpp index dff6c18..01cf1de 100644 --- a/src/game/GameController.cpp +++ b/src/game/GameController.cpp @@ -4,7 +4,7 @@ #include "Config.h" #include "GameController.h" #include "GameModel.h" -#include "search/Save.h" +#include "client/SaveInfo.h" #include "search/SearchController.h" #include "render/RenderController.h" #include "login/LoginController.h" @@ -37,7 +37,7 @@ public: { try { - cc->gameModel->SetSave(new Save(*(cc->search->GetLoadedSave()))); + cc->gameModel->SetSave(new SaveInfo(*(cc->search->GetLoadedSave()))); } catch(GameModelException & ex) { @@ -79,7 +79,7 @@ public: { if(cc->ssave->GetSaveUploaded()) { - cc->gameModel->SetSave(new Save(*(cc->ssave->GetSave()))); + cc->gameModel->SetSave(new SaveInfo(*(cc->ssave->GetSave()))); } //cc->gameModel->SetUser(cc->loginWindow->GetUser()); @@ -93,7 +93,7 @@ public: TagsCallback(GameController * cc_) { cc = cc_; } virtual void ControllerExit() { - cc->gameModel->SetSave(new Save(*(cc->tagsWindow->GetSave()))); + cc->gameModel->SetSave(new SaveInfo(*(cc->tagsWindow->GetSave()))); } }; @@ -104,9 +104,9 @@ public: StampsCallback(GameController * cc_) { cc = cc_; } virtual void ControllerExit() { - if(cc->stamps->GetStamp()) + if(cc->localBrowser->GetSave()) { - cc->gameModel->SetStamp(cc->stamps->GetStamp()); + cc->gameModel->SetStamp(cc->localBrowser->GetSave()->GetGameSave()); } else cc->gameModel->SetStamp(NULL); @@ -501,8 +501,8 @@ void GameController::OpenTags() void GameController::OpenStamps() { - stamps = new StampsController(new StampsCallback(this)); - ui::Engine::Ref().ShowWindow(stamps->GetView()); + localBrowser = new LocalBrowserController(new StampsCallback(this)); + ui::Engine::Ref().ShowWindow(localBrowser->GetView()); } void GameController::OpenOptions() @@ -529,25 +529,23 @@ void GameController::OpenSaveWindow() { if(gameModel->GetUser().ID) { - GameSave * tempSave = gameModel->GetSimulation()->Save(); - if(!tempSave) + GameSave * gameSave = gameModel->GetSimulation()->Save(); + if(!gameSave) { new ErrorMessage("Error", "Unable to build save."); } else { - int dataSize; - unsigned char * tempData = (unsigned char*)tempSave->Serialise(dataSize); if(gameModel->GetSave()) { - Save tempSave(*gameModel->GetSave()); - tempSave.SetData(tempData, dataSize); + SaveInfo tempSave(*gameModel->GetSave()); + tempSave.SetGameSave(gameSave); ssave = new SSaveController(new SSaveCallback(this), tempSave); } else { - Save tempSave(0, 0, 0, 0, gameModel->GetUser().Username, ""); - tempSave.SetData(tempData, dataSize); + SaveInfo tempSave(0, 0, 0, 0, gameModel->GetUser().Username, ""); + tempSave.SetGameSave(gameSave); ssave = new SSaveController(new SSaveCallback(this), tempSave); } ui::Engine::Ref().ShowWindow(ssave->GetView()); @@ -584,10 +582,9 @@ void GameController::ClearSim() void GameController::ReloadSim() { - if(gameModel->GetSave() && gameModel->GetSave()->GetData()) + if(gameModel->GetSave() && gameModel->GetSave()->GetGameSave()) { - GameSave * newSave = new GameSave((char*)gameModel->GetSave()->GetData(), gameModel->GetSave()->GetDataLength()); - gameModel->GetSimulation()->Load(newSave); + gameModel->GetSimulation()->Load(gameModel->GetSave()->GetGameSave()); } } diff --git a/src/game/GameController.h b/src/game/GameController.h index bb6e61a..25705bc 100644 --- a/src/game/GameController.h +++ b/src/game/GameController.h @@ -12,7 +12,7 @@ #include "ssave/SSaveController.h" #include "tags/TagsController.h" #include "console/ConsoleController.h" -#include "stamps/StampsController.h" +#include "localbrowser/LocalBrowserController.h" //#include "cat/TPTScriptInterface.h" #include "cat/LuaScriptInterface.h" #include "options/OptionsController.h" @@ -36,7 +36,7 @@ private: SSaveController * ssave; ConsoleController * console; TagsController * tagsWindow; - StampsController * stamps; + LocalBrowserController * localBrowser; OptionsController * options; CommandInterface * commandInterface; public: diff --git a/src/game/GameModel.cpp b/src/game/GameModel.cpp index 966eca7..9e655f9 100644 --- a/src/game/GameModel.cpp +++ b/src/game/GameModel.cpp @@ -263,20 +263,19 @@ vector GameModel::GetMenuList() return menuList; } -Save * GameModel::GetSave() +SaveInfo * GameModel::GetSave() { return currentSave; } -void GameModel::SetSave(Save * newSave) +void GameModel::SetSave(SaveInfo * newSave) { if(currentSave) delete currentSave; currentSave = newSave; if(currentSave) { - GameSave * newSave = new GameSave((char*)currentSave->GetData(), currentSave->GetDataLength()); - int returnVal = sim->Load(newSave); + int returnVal = sim->Load(currentSave->GetGameSave()); if(returnVal){ delete currentSave; currentSave = NULL; @@ -430,15 +429,11 @@ void GameModel::ClearSimulation() sim->clear_sim(); } -void GameModel::SetStamp(Save * save) +void GameModel::SetStamp(GameSave * save) { if(stamp) delete stamp; - try { - stamp = new GameSave((char*)save->GetData(), save->GetDataLength()); - } catch (ParseException& e) { - stamp = NULL; - } + stamp = new GameSave(*save); notifyStampChanged(); } @@ -446,16 +441,8 @@ void GameModel::AddStamp(GameSave * save) { if(stamp) delete stamp; - stamp = save; - - char * saveData; - int saveSize; - saveData = save->Serialise(saveSize); - Save * tempSave = new Save(0, 0, 0, 0, "", ""); - tempSave->SetData((unsigned char*)saveData, saveSize); - Client::Ref().AddStamp(tempSave); - delete tempSave; - + stamp = new GameSave(*save); + Client::Ref().AddStamp(save); notifyClipboardChanged(); } diff --git a/src/game/GameModel.h b/src/game/GameModel.h index c038493..5c8b0aa 100644 --- a/src/game/GameModel.h +++ b/src/game/GameModel.h @@ -3,7 +3,7 @@ #include #include -#include "search/Save.h" +#include "client/SaveInfo.h" #include "simulation/Simulation.h" #include "interface/Colour.h" #include "Renderer.h" @@ -43,7 +43,7 @@ private: Menu * activeMenu; int currentBrush; vector brushList; - Save * currentSave; + SaveInfo * currentSave; Simulation * sim; Renderer * ren; Tool * activeTools[3]; @@ -78,9 +78,9 @@ public: ui::Colour GetColourSelectorColour(); void SetVote(int direction); - Save * GetSave(); + SaveInfo * GetSave(); Brush * GetBrush(); - void SetSave(Save * newSave); + void SetSave(SaveInfo * newSave); void AddObserver(GameView * observer); Tool * GetActiveTool(int selection); void SetActiveTool(int selection, Tool * tool); @@ -110,7 +110,7 @@ public: ui::Point GetZoomPosition(); void SetZoomWindowPosition(ui::Point position); ui::Point GetZoomWindowPosition(); - void SetStamp(Save * newStamp); + void SetStamp(GameSave * newStamp); void AddStamp(GameSave * save); void SetClipboard(GameSave * save); void Log(string message); diff --git a/src/interface/SaveButton.cpp b/src/interface/SaveButton.cpp index 0848ff5..e1aeac5 100644 --- a/src/interface/SaveButton.cpp +++ b/src/interface/SaveButton.cpp @@ -1,7 +1,7 @@ #include #include "SaveButton.h" -#include "search/Save.h" +#include "client/SaveInfo.h" #include "Graphics.h" #include "Engine.h" #include "client/Client.h" @@ -9,8 +9,9 @@ namespace ui { -SaveButton::SaveButton(Point position, Point size, Save * save): +SaveButton::SaveButton(Point position, Point size, SaveInfo * save): Component(position, size), + file(NULL), save(save), thumbnail(NULL), isMouseInside(false), @@ -50,6 +51,30 @@ SaveButton::SaveButton(Point position, Point size, Save * save): } } +SaveButton::SaveButton(Point position, Point size, SaveFile * file): + Component(position, size), + save(NULL), + file(file), + thumbnail(NULL), + isMouseInside(false), + isButtonDown(false), + actionCallback(NULL), + voteColour(255, 0, 0), + selectable(false), + selected(false) +{ + if(file) + { + name = file->GetName(); + if(Graphics::textwidth((char *)name.c_str()) > Size.X) + { + int position = Graphics::textwidthx((char *)name.c_str(), Size.X - 22); + name = name.erase(position, name.length()-position); + name += "..."; + } + } +} + SaveButton::~SaveButton() { if(thumbnail) @@ -58,25 +83,45 @@ SaveButton::~SaveButton() delete actionCallback; if(save) delete save; + if(file) + delete file; } void SaveButton::Tick(float dt) { Thumbnail * tempThumb; float scaleFactorY = 1.0f, scaleFactorX = 1.0f; - if(!thumbnail && save) + if(!thumbnail) { - if(save->GetID()) + if(save) { - tempThumb = Client::Ref().GetThumbnail(save->GetID(), 0); - if(tempThumb) + if(!save->GetGameSave() && save->GetID()) + { + tempThumb = Client::Ref().GetThumbnail(save->GetID(), 0); + if(tempThumb) + { + thumbnail = new Thumbnail(*tempThumb); //Store a local copy of the thumbnail + } + } + else if(save->GetGameSave()) + { + thumbnail = SaveRenderer::Ref().Render(save->GetGameSave()); + } + else { - thumbnail = new Thumbnail(*tempThumb); //Store a local copy of the thumbnail + thumbnail = NULL; } } - else + if(file) { - thumbnail = SaveRenderer::Ref().Render(save->GetData(), save->GetDataLength()); + if(file->GetGameSave()) + { + thumbnail = SaveRenderer::Ref().Render(file->GetGameSave()); + } + else + { + thumbnail = NULL; + } } if(thumbnail && thumbnail->Data) { @@ -115,7 +160,7 @@ void SaveButton::Draw(const Point& screenPos) if(thumbnail) { thumbBoxSize = ui::Point(thumbnail->Size.X, thumbnail->Size.Y); - if(save->id) + if(save && save->id) g->draw_image(thumbnail->Data, screenPos.X-3+(Size.X-thumbBoxSize.X)/2, screenPos.Y+(Size.Y-21-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-21-thumbBoxSize.Y)/2, thumbnail->Size.X, thumbnail->Size.Y, 255); @@ -158,6 +203,22 @@ void SaveButton::Draw(const Point& screenPos) g->drawtext(screenPos.X+(Size.X-Graphics::textwidth((char *)save->userName.c_str()))/2, screenPos.Y+Size.Y - 10, save->userName, 100, 130, 160, 255); } } + if(file) + { + if(isMouseInside) + g->drawrect(screenPos.X+(Size.X-thumbBoxSize.X)/2, screenPos.Y+(Size.Y-21-thumbBoxSize.Y)/2, thumbBoxSize.X, thumbBoxSize.Y, 210, 230, 255, 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) + { + g->drawtext(screenPos.X+(Size.X-Graphics::textwidth((char *)name.c_str()))/2, screenPos.Y+Size.Y - 21, name, 255, 255, 255, 255); + } + else + { + g->drawtext(screenPos.X+(Size.X-Graphics::textwidth((char *)name.c_str()))/2, screenPos.Y+Size.Y - 21, name, 180, 180, 180, 255); + } + } if(isMouseInside && selectable) { diff --git a/src/interface/SaveButton.h b/src/interface/SaveButton.h index f456639..2220f1c 100644 --- a/src/interface/SaveButton.h +++ b/src/interface/SaveButton.h @@ -4,7 +4,8 @@ #include #include "Component.h" -#include "search/Save.h" +#include "client/SaveFile.h" +#include "client/SaveInfo.h" #include "Graphics.h" #include "search/Thumbnail.h" #include "interface/Colour.h" @@ -22,11 +23,13 @@ public: class SaveButton : public Component { - Save * save; + SaveFile * file; + SaveInfo * save; Thumbnail * thumbnail; std::string name; public: - SaveButton(Point position, Point size, Save * save); + SaveButton(Point position, Point size, SaveInfo * save); + SaveButton(Point position, Point size, SaveFile * file); virtual ~SaveButton(); virtual void OnMouseClick(int x, int y, unsigned int button); @@ -43,7 +46,8 @@ public: void SetSelectable(bool selectable_) { selectable = selectable_; } bool GetSelectable() { return selectable; } - Save * GetSave() { return save; } + SaveInfo * GetSave() { return save; } + SaveFile * GetSaveFile() { return file; } inline bool GetState() { return state; } virtual void DoAction(); virtual void DoSelection(); diff --git a/src/localbrowser/LocalBrowserController.cpp b/src/localbrowser/LocalBrowserController.cpp new file mode 100644 index 0000000..a66715a --- /dev/null +++ b/src/localbrowser/LocalBrowserController.cpp @@ -0,0 +1,135 @@ +/* + * StampsController.cpp + * + * Created on: Mar 29, 2012 + * Author: Simon + */ +#include +#include + +#include "client/Client.h" +#include "LocalBrowserController.h" +#include "interface/Engine.h" +#include "dialogues/ConfirmPrompt.h" +#include "tasks/TaskWindow.h" +#include "tasks/Task.h" + +#include "LocalBrowserModel.h" +#include "LocalBrowserView.h" + +LocalBrowserController::LocalBrowserController(ControllerCallback * callback): + HasDone(false) +{ + browserModel = new LocalBrowserModel(); + browserView = new LocalBrowserView(); + browserView->AttachController(this); + browserModel->AddObserver(browserView); + + this->callback = callback; + + browserModel->UpdateSavesList(1); +} + +void LocalBrowserController::OpenSave(SaveFile * save) +{ + browserModel->SetSave(save); +} + +SaveFile * LocalBrowserController::GetSave() +{ + return browserModel->GetSave(); +} + +void LocalBrowserController::RemoveSelected() +{ + class RemoveSelectedConfirmation: public ConfirmDialogueCallback { + public: + LocalBrowserController * c; + RemoveSelectedConfirmation(LocalBrowserController * c_) { c = c_; } + virtual void ConfirmCallback(ConfirmPrompt::DialogueResult result) { + if (result == ConfirmPrompt::ResultOkay) + c->removeSelectedC(); + } + virtual ~RemoveSelectedConfirmation() { } + }; + + std::stringstream desc; + desc << "Are you sure you want to delete " << browserModel->GetSelected().size() << " saves"; + if(browserModel->GetSelected().size()>1) + desc << "s"; + new ConfirmPrompt("Delete saves", desc.str(), new RemoveSelectedConfirmation(this)); +} + +void LocalBrowserController::removeSelectedC() +{ + class RemoveSavesTask : public Task + { + std::vector saves; + public: + RemoveSavesTask(std::vector saves_) { saves = saves_; } + virtual void doWork() + { + for(int i = 0; i < saves.size(); i++) + { + std::stringstream saveName; + saveName << "Deleting save [" << saves[i] << "] ..."; + notifyStatus(saveName.str()); + Client::Ref().DeleteStamp(saves[i]); + usleep(100*1000); + notifyProgress((float(i+1)/float(saves.size())*100)); + } + } + }; + + std::vector selected = browserModel->GetSelected(); + new TaskWindow("Removing saves", new RemoveSavesTask(selected)); + ClearSelection(); + browserModel->UpdateSavesList(browserModel->GetPageNum()); +} + +void LocalBrowserController::ClearSelection() +{ + browserModel->ClearSelected(); +} + +void LocalBrowserController::NextPage() +{ + if(browserModel->GetPageNum()>1) + browserModel->UpdateSavesList(browserModel->GetPageNum()-1); +} + +void LocalBrowserController::PrevPage() +{ + if(browserModel->GetPageNum() <= browserModel->GetPageCount()) + browserModel->UpdateSavesList(browserModel->GetPageNum()+1); +} + +void LocalBrowserController::Update() +{ + if(browserModel->GetSave()) + { + Exit(); + } +} + +void LocalBrowserController::Selected(std::string saveName, bool selected) +{ + if(selected) + browserModel->SelectSave(saveName); + else + browserModel->DeselectSave(saveName); +} + +void LocalBrowserController::Exit() +{ + if(ui::Engine::Ref().GetWindow() == browserView) + ui::Engine::Ref().CloseWindow(); + if(callback) + callback->ControllerExit(); + HasDone = true; +} + +LocalBrowserController::~LocalBrowserController() { + // TODO Auto-generated destructor stub +} + diff --git a/src/localbrowser/LocalBrowserController.h b/src/localbrowser/LocalBrowserController.h new file mode 100644 index 0000000..233ff9c --- /dev/null +++ b/src/localbrowser/LocalBrowserController.h @@ -0,0 +1,39 @@ +/* + * StampsController.h + * + * Created on: Mar 29, 2012 + * Author: Simon + */ + +#ifndef STAMPSCONTROLLER_H_ +#define STAMPSCONTROLLER_H_ + +#include "Controller.h" +#include "LocalBrowserView.h" +#include "client/SaveInfo.h" + +class LocalBrowserView; +class LocalBrowserModel; +class LocalBrowserController { + ControllerCallback * callback; + LocalBrowserView * browserView; + LocalBrowserModel * browserModel; +public: + bool HasDone; + LocalBrowserController(ControllerCallback * callback); + LocalBrowserView * GetView() {return browserView;} + SaveFile * GetSave(); + void RemoveSelected(); + void removeSelectedC(); + void ClearSelection(); + void Selected(std::string stampID, bool selected); + void OpenSave(SaveFile * stamp); + void SetStamp(); + void NextPage(); + void PrevPage(); + void Update(); + void Exit(); + virtual ~LocalBrowserController(); +}; + +#endif /* STAMPSCONTROLLER_H_ */ diff --git a/src/localbrowser/LocalBrowserModel.cpp b/src/localbrowser/LocalBrowserModel.cpp new file mode 100644 index 0000000..ca75874 --- /dev/null +++ b/src/localbrowser/LocalBrowserModel.cpp @@ -0,0 +1,131 @@ +/* + * StampsModel.cpp + * + * Created on: Mar 29, 2012 + * Author: Simon + */ + +#include "LocalBrowserModel.h" +#include "LocalBrowserView.h" +#include "client/Client.h" +#include "LocalBrowserModelException.h" + +LocalBrowserModel::LocalBrowserModel(): + stamp(NULL), + currentPage(1) +{ + // TODO Auto-generated constructor stub + stampIDs = Client::Ref().GetStamps(); +} + + +std::vector LocalBrowserModel::GetSavesList() +{ + return savesList; +} + +void LocalBrowserModel::AddObserver(LocalBrowserView * observer) +{ + observers.push_back(observer); + observer->NotifySavesListChanged(this); + observer->NotifyPageChanged(this); +} + +void LocalBrowserModel::notifySavesListChanged() +{ + for(int i = 0; i < observers.size(); i++) + { + observers[i]->NotifySavesListChanged(this); + } +} + +void LocalBrowserModel::notifyPageChanged() +{ + for(int i = 0; i < observers.size(); i++) + { + observers[i]->NotifyPageChanged(this); + } +} + +SaveFile * LocalBrowserModel::GetSave() +{ + return stamp; +} + +void LocalBrowserModel::SetSave(SaveFile * newStamp) +{ + if(stamp) + delete stamp; + stamp = new SaveFile(*newStamp); +} + +void LocalBrowserModel::UpdateSavesList(int pageNumber) +{ + std::vector tempSavesList = savesList; + savesList.clear(); + currentPage = pageNumber; + notifyPageChanged(); + notifySavesListChanged(); + /*notifyStampsListChanged(); + for(int i = 0; i < tempStampsList.size(); i++) + { + delete tempStampsList[i]; + }*/ + + int stampsEnd = pageNumber*20; + + for(int i = stampsEnd-20; iNotifySelectedChanged(this); + } +} + +LocalBrowserModel::~LocalBrowserModel() { + if(stamp) + delete stamp; +} + diff --git a/src/localbrowser/LocalBrowserModel.h b/src/localbrowser/LocalBrowserModel.h new file mode 100644 index 0000000..531cc9b --- /dev/null +++ b/src/localbrowser/LocalBrowserModel.h @@ -0,0 +1,43 @@ +/* + * StampsModel.h + * + * Created on: Mar 29, 2012 + * Author: Simon + */ + +#ifndef STAMPSMODEL_H_ +#define STAMPSMODEL_H_ + +#include +#include +#include +#include "client/SaveFile.h" + +class LocalBrowserView; +class LocalBrowserModel { + vector selected; + SaveFile * stamp; + std::vector stampIDs; + std::vector savesList; + std::vector observers; + int currentPage; + void notifySavesListChanged(); + void notifyPageChanged(); + void notifySelectedChanged(); +public: + LocalBrowserModel(); + int GetPageCount() { return max(1, (int)(ceil(stampIDs.size()/16))); } + int GetPageNum() { return currentPage; } + void AddObserver(LocalBrowserView * observer); + std::vector GetSavesList(); + void UpdateSavesList(int pageNumber); + SaveFile * GetSave(); + void SetSave(SaveFile * newStamp); + vector GetSelected() { return selected; } + void ClearSelected() { selected.clear(); notifySelectedChanged(); } + void SelectSave(std::string stampID); + void DeselectSave(std::string stampID); + virtual ~LocalBrowserModel(); +}; + +#endif /* STAMPSMODEL_H_ */ diff --git a/src/localbrowser/LocalBrowserModelException.h b/src/localbrowser/LocalBrowserModelException.h new file mode 100644 index 0000000..087f7df --- /dev/null +++ b/src/localbrowser/LocalBrowserModelException.h @@ -0,0 +1,23 @@ +/* + * StampsModelException.h + * + * Created on: Mar 29, 2012 + * Author: Simon + */ + +#ifndef STAMPSMODELEXCEPTION_H_ +#define STAMPSMODELEXCEPTION_H_ + +#include +#include +using namespace std; + +class LocalBrowserModelException { + string message; +public: + LocalBrowserModelException(string message_): message(message_) {}; + const char * what() const throw() { return message.c_str(); }; + ~LocalBrowserModelException() throw() {}; +}; + +#endif /* STAMPSMODELEXCEPTION_H_ */ diff --git a/src/localbrowser/LocalBrowserView.cpp b/src/localbrowser/LocalBrowserView.cpp new file mode 100644 index 0000000..82182f4 --- /dev/null +++ b/src/localbrowser/LocalBrowserView.cpp @@ -0,0 +1,197 @@ +/* + * StampsView.cpp + * + * Created on: Mar 29, 2012 + * Author: Simon + */ + +#include +#include "client/Client.h" +#include "LocalBrowserView.h" + +#include "dialogues/ErrorMessage.h" +#include "LocalBrowserController.h" +#include "LocalBrowserModel.h" +#include "LocalBrowserModelException.h" + +LocalBrowserView::LocalBrowserView(): + ui::Window(ui::Point(0, 0), ui::Point(XRES+BARSIZE, YRES+MENUSIZE)) +{ + nextButton = new ui::Button(ui::Point(XRES+BARSIZE-52, YRES+MENUSIZE-18), ui::Point(50, 16), "Next \x95"); + previousButton = new ui::Button(ui::Point(1, YRES+MENUSIZE-18), ui::Point(50, 16), "\x96 Prev"); + infoLabel = new ui::Label(ui::Point(51, YRES+MENUSIZE-18), ui::Point(XRES+BARSIZE-102, 16), "Loading..."); + AddComponent(infoLabel); + AddComponent(nextButton); + AddComponent(previousButton); + + class NextPageAction : public ui::ButtonAction + { + LocalBrowserView * v; + public: + NextPageAction(LocalBrowserView * _v) { v = _v; } + void ActionCallback(ui::Button * sender) + { + v->c->NextPage(); + } + }; + nextButton->SetActionCallback(new NextPageAction(this)); + nextButton->Appearance.HorizontalAlign = ui::Appearance::AlignRight; nextButton->Appearance.VerticalAlign = ui::Appearance::AlignBottom; + + class PrevPageAction : public ui::ButtonAction + { + LocalBrowserView * v; + public: + PrevPageAction(LocalBrowserView * _v) { v = _v; } + void ActionCallback(ui::Button * sender) + { + v->c->PrevPage(); + } + }; + previousButton->SetActionCallback(new PrevPageAction(this)); + previousButton->Appearance.HorizontalAlign = ui::Appearance::AlignLeft; previousButton->Appearance.VerticalAlign = ui::Appearance::AlignBottom; + + class RemoveSelectedAction : public ui::ButtonAction + { + LocalBrowserView * v; + public: + RemoveSelectedAction(LocalBrowserView * _v) { v = _v; } + void ActionCallback(ui::Button * sender) + { + v->c->RemoveSelected(); + } + }; + + removeSelected = new ui::Button(ui::Point((((XRES+BARSIZE)-100)/2), YRES+MENUSIZE-18), ui::Point(100, 16), "Delete"); + removeSelected->Visible = false; + removeSelected->SetActionCallback(new RemoveSelectedAction(this)); + AddComponent(removeSelected); +} + +void LocalBrowserView::OnTick(float dt) +{ + c->Update(); +} + +void LocalBrowserView::NotifyPageChanged(LocalBrowserModel * sender) +{ + std::stringstream pageInfo; + pageInfo << "Page " << sender->GetPageNum() << " of " << sender->GetPageCount(); + infoLabel->SetText(pageInfo.str()); + if(sender->GetPageNum() == 1) + { + previousButton->Visible = false; + } + else + { + previousButton->Visible = true; + } + if(sender->GetPageNum() == sender->GetPageCount()) + { + nextButton->Visible = false; + } + else + { + nextButton->Visible = true; + } +} + +void LocalBrowserView::NotifySavesListChanged(LocalBrowserModel * sender) +{ + int i = 0; + int buttonWidth, buttonHeight, saveX = 0, saveY = 0, savesX = 5, savesY = 4, buttonPadding = 2; + int buttonAreaWidth, buttonAreaHeight, buttonXOffset, buttonYOffset; + + vector saves = sender->GetSavesList(); + for(i = 0; i < stampButtons.size(); i++) + { + RemoveComponent(stampButtons[i]); + delete stampButtons[i]; + } + stampButtons.clear(); + buttonXOffset = 0; + buttonYOffset = 50; + buttonAreaWidth = Size.X; + buttonAreaHeight = Size.Y - buttonYOffset - 18; + buttonWidth = (buttonAreaWidth/savesX) - buttonPadding*2; + buttonHeight = (buttonAreaHeight/savesY) - buttonPadding*2; + class SaveOpenAction: public ui::SaveButtonAction + { + LocalBrowserView * v; + public: + SaveOpenAction(LocalBrowserView * _v) { v = _v; } + virtual void ActionCallback(ui::SaveButton * sender) + { + if(sender->GetSaveFile()) + v->c->OpenSave(sender->GetSaveFile()); + } + virtual void SelectedCallback(ui::SaveButton * sender) + { + if(sender->GetSaveFile()) + v->c->Selected(sender->GetSaveFile()->GetName(), sender->GetSelected()); + } + }; + for(i = 0; i < saves.size(); i++) + { + if(saveX == savesX) + { + if(saveY == savesY-1) + break; + saveX = 0; + saveY++; + } + ui::SaveButton * saveButton; + saveButton = new ui::SaveButton( + ui::Point( + buttonXOffset + buttonPadding + saveX*(buttonWidth+buttonPadding*2), + buttonYOffset + buttonPadding + saveY*(buttonHeight+buttonPadding*2) + ), + ui::Point(buttonWidth, buttonHeight), + saves[i]); + saveButton->SetSelectable(true); + saveButton->SetActionCallback(new SaveOpenAction(this)); + stampButtons.push_back(saveButton); + AddComponent(saveButton); + saveX++; + } +} + +void LocalBrowserView::NotifySelectedChanged(LocalBrowserModel * sender) +{ + vector selected = sender->GetSelected(); + for(int j = 0; j < stampButtons.size(); j++) + { + stampButtons[j]->SetSelected(false); + for(int i = 0; i < selected.size(); i++) + { + if(stampButtons[j]->GetSaveFile()->GetName()==selected[i]) + stampButtons[j]->SetSelected(true); + } + } + + if(selected.size()) + { + removeSelected->Visible = true; + } + else + removeSelected->Visible = false; +} + +void LocalBrowserView::OnMouseWheel(int x, int y, int d) +{ + if(!d) + return; + if(d<0) + c->NextPage(); + else + c->PrevPage(); +} +void LocalBrowserView::OnKeyPress(int key, Uint16 character, bool shift, bool ctrl, bool alt) +{ + if(key==KEY_ESCAPE) + c->Exit(); +} + +LocalBrowserView::~LocalBrowserView() { + // TODO Auto-generated destructor stub +} + diff --git a/src/localbrowser/LocalBrowserView.h b/src/localbrowser/LocalBrowserView.h new file mode 100644 index 0000000..3f197e0 --- /dev/null +++ b/src/localbrowser/LocalBrowserView.h @@ -0,0 +1,40 @@ +/* + * StampsView.h + * + * Created on: Mar 29, 2012 + * Author: Simon + */ + +#ifndef STAMPSVIEW_H_ +#define STAMPSVIEW_H_ + +#include +#include "interface/Window.h" +#include "interface/Button.h" +#include "interface/Textbox.h" +#include "interface/Label.h" +#include "interface/SaveButton.h" + +class LocalBrowserController; +class LocalBrowserModel; +class LocalBrowserView: public ui::Window { + LocalBrowserController * c; + std::vector stampButtons; + ui::Button * previousButton; + ui::Button * nextButton; + ui::Label * infoLabel; + ui::Button * removeSelected; +public: + LocalBrowserView(); + //virtual void OnDraw(); + virtual void OnTick(float dt); + void AttachController(LocalBrowserController * c_) { c = c_; }; + void NotifyPageChanged(LocalBrowserModel * sender); + void NotifySavesListChanged(LocalBrowserModel * sender); + void NotifySelectedChanged(LocalBrowserModel * sender); + virtual void OnMouseWheel(int x, int y, int d); + virtual void OnKeyPress(int key, Uint16 character, bool shift, bool ctrl, bool alt); + virtual ~LocalBrowserView(); +}; + +#endif /* STAMPSVIEW_H_ */ diff --git a/src/preview/PreviewController.cpp b/src/preview/PreviewController.cpp index a6e21c6..227ab45 100644 --- a/src/preview/PreviewController.cpp +++ b/src/preview/PreviewController.cpp @@ -40,7 +40,7 @@ void PreviewController::Update() } } -Save * PreviewController::GetSave() +SaveInfo * PreviewController::GetSave() { return previewModel->GetSave(); } diff --git a/src/preview/PreviewController.h b/src/preview/PreviewController.h index e1b0295..680a8f7 100644 --- a/src/preview/PreviewController.h +++ b/src/preview/PreviewController.h @@ -11,7 +11,7 @@ #include "preview/PreviewModel.h" #include "preview/PreviewView.h" #include "Controller.h" -#include "search/Save.h" +#include "client/SaveInfo.h" class PreviewModel; class PreviewView; @@ -28,7 +28,7 @@ public: void OpenInBrowser(); void Report(std::string message); bool GetDoOpen(); - Save * GetSave(); + SaveInfo * GetSave(); PreviewView * GetView() { return previewView; } void Update(); void FavouriteSave(); diff --git a/src/preview/PreviewModel.cpp b/src/preview/PreviewModel.cpp index 267571e..de6c6e8 100644 --- a/src/preview/PreviewModel.cpp +++ b/src/preview/PreviewModel.cpp @@ -42,7 +42,7 @@ void * PreviewModel::updateSaveCommentsTHelper(void * obj) void * PreviewModel::updateSaveInfoT() { - Save * tempSave = Client::Ref().GetSave(tSaveID, tSaveDate); + SaveInfo * tempSave = Client::Ref().GetSave(tSaveID, tSaveDate); updateSaveInfoFinished = true; return tempSave; } @@ -134,7 +134,7 @@ Thumbnail * PreviewModel::GetPreview() return savePreview; } -Save * PreviewModel::GetSave() +SaveInfo * PreviewModel::GetSave() { return save; } diff --git a/src/preview/PreviewModel.h b/src/preview/PreviewModel.h index 26b6822..af94af3 100644 --- a/src/preview/PreviewModel.h +++ b/src/preview/PreviewModel.h @@ -11,7 +11,7 @@ #include #include #include "PreviewView.h" -#include "search/Save.h" +#include "client/SaveInfo.h" #include "preview/Comment.h" #include "search/Thumbnail.h" @@ -21,7 +21,7 @@ class PreviewView; class PreviewModel { bool doOpen; vector observers; - Save * save; + SaveInfo * save; Thumbnail * savePreview; std::vector * saveComments; void notifyPreviewChanged(); @@ -52,7 +52,7 @@ class PreviewModel { public: PreviewModel(); Thumbnail * GetPreview(); - Save * GetSave(); + SaveInfo * GetSave(); std::vector * GetComments(); void AddObserver(PreviewView * observer); void UpdateSave(int saveID, int saveDate); diff --git a/src/preview/PreviewView.cpp b/src/preview/PreviewView.cpp index d48a5a5..4e0716b 100644 --- a/src/preview/PreviewView.cpp +++ b/src/preview/PreviewView.cpp @@ -162,7 +162,7 @@ void PreviewView::OnMouseDown(int x, int y, unsigned button) void PreviewView::NotifySaveChanged(PreviewModel * sender) { - Save * save = sender->GetSave(); + SaveInfo * save = sender->GetSave(); if(save) { votesUp = save->votesUp; diff --git a/src/search/SearchController.cpp b/src/search/SearchController.cpp index ec5f805..aff9636 100644 --- a/src/search/SearchController.cpp +++ b/src/search/SearchController.cpp @@ -21,7 +21,7 @@ public: { if(cc->activePreview->GetDoOpen() && cc->activePreview->GetSave()) { - cc->searchModel->SetLoadedSave(new Save(*(cc->activePreview->GetSave()))); + cc->searchModel->SetLoadedSave(new SaveInfo(*(cc->activePreview->GetSave()))); } } }; @@ -45,7 +45,7 @@ SearchController::SearchController(ControllerCallback * callback): //windowPanel.AddChild(); } -Save * SearchController::GetLoadedSave() +SaveInfo * SearchController::GetLoadedSave() { return searchModel->GetLoadedSave(); } diff --git a/src/search/SearchController.h b/src/search/SearchController.h index ae13431..16b4039 100644 --- a/src/search/SearchController.h +++ b/src/search/SearchController.h @@ -6,7 +6,7 @@ #include "SearchView.h" #include "preview/PreviewController.h" #include "Controller.h" -#include "Save.h" +#include "client/SaveInfo.h" class SearchView; class SearchModel; @@ -43,7 +43,7 @@ public: void RemoveSelected(); void UnpublishSelected(); void FavouriteSelected(); - Save * GetLoadedSave(); + SaveInfo * GetLoadedSave(); }; #endif // SEARCHCONTROLLER_H diff --git a/src/search/SearchModel.cpp b/src/search/SearchModel.cpp index 76d0bb7..112adba 100644 --- a/src/search/SearchModel.cpp +++ b/src/search/SearchModel.cpp @@ -1,5 +1,5 @@ #include "SearchModel.h" -#include "Save.h" +#include "client/SaveInfo.h" #include "client/Client.h" @@ -28,7 +28,7 @@ void * SearchModel::updateSaveListT() category = "Favourites"; if(showOwn && Client::Ref().GetAuthUser().ID) category = "by:"+Client::Ref().GetAuthUser().Username; - vector * tempSaveList = Client::Ref().SearchSaves((currentPage-1)*20, 20, lastQuery, currentSort=="new"?"date":"votes", category, resultCount); + vector * tempSaveList = Client::Ref().SearchSaves((currentPage-1)*20, 20, lastQuery, currentSort=="new"?"date":"votes", category, resultCount); updateSaveListFinished = true; return tempSaveList; } @@ -55,16 +55,16 @@ void SearchModel::UpdateSaveList(int pageNumber, std::string query) } } -void SearchModel::SetLoadedSave(Save * save) +void SearchModel::SetLoadedSave(SaveInfo * save) { loadedSave = save; } -Save * SearchModel::GetLoadedSave(){ +SaveInfo * SearchModel::GetLoadedSave(){ return loadedSave; } -vector SearchModel::GetSaveList() +vector SearchModel::GetSaveList() { return saveList; } @@ -78,7 +78,7 @@ void SearchModel::Update() updateSaveListWorking = false; lastError = ""; saveListLoaded = true; - vector * tempSaveList; + vector * tempSaveList; pthread_join(updateSaveListThread, (void**)(&tempSaveList)); saveList = *tempSaveList; delete tempSaveList; diff --git a/src/search/SearchModel.h b/src/search/SearchModel.h index fef9f6a..831e141 100644 --- a/src/search/SearchModel.h +++ b/src/search/SearchModel.h @@ -5,7 +5,7 @@ #include #include #include -#include "Save.h" +#include "client/SaveInfo.h" #include "SearchView.h" using namespace std; @@ -14,13 +14,13 @@ class SearchView; class SearchModel { private: - Save * loadedSave; + SaveInfo * loadedSave; string currentSort; string lastQuery; string lastError; vector selected; vector observers; - vector saveList; + vector saveList; int currentPage; int resultCount; bool showOwn; @@ -45,7 +45,7 @@ public: void AddObserver(SearchView * observer); void UpdateSaveList(int pageNumber, std::string query); - vector GetSaveList(); + vector GetSaveList(); string GetLastError() { return lastError; } int GetPageCount() { return max(1, (int)(ceil(resultCount/16))); } int GetPageNum() { return currentPage; } @@ -56,8 +56,8 @@ public: bool GetShowOwn() { return showOwn; } void SetShowFavourite(bool show) { if(show!=showFavourite) { showFavourite = show; } notifyShowFavouriteChanged(); } bool GetShowFavourite() { return showFavourite; } - void SetLoadedSave(Save * save); - Save * GetLoadedSave(); + void SetLoadedSave(SaveInfo * save); + SaveInfo * GetLoadedSave(); bool GetSavesLoaded() { return saveListLoaded; } vector GetSelected() { return selected; } void ClearSelected() { selected.clear(); notifySelectedChanged(); } diff --git a/src/search/SearchView.cpp b/src/search/SearchView.cpp index bf4418a..47392fa 100644 --- a/src/search/SearchView.cpp +++ b/src/search/SearchView.cpp @@ -286,7 +286,7 @@ void SearchView::NotifySaveListChanged(SearchModel * sender) int buttonWidth, buttonHeight, saveX = 0, saveY = 0, savesX = 5, savesY = 4, buttonPadding = 2; int buttonAreaWidth, buttonAreaHeight, buttonXOffset, buttonYOffset; - vector saves = sender->GetSaveList(); + vector saves = sender->GetSaveList(); Client::Ref().ClearThumbnailRequests(); for(i = 0; i < saveButtons.size(); i++) { diff --git a/src/simulation/Particle.cpp b/src/simulation/Particle.cpp new file mode 100644 index 0000000..115ed95 --- /dev/null +++ b/src/simulation/Particle.cpp @@ -0,0 +1,27 @@ +/* + * Particle.cpp + * + * Created on: Jun 6, 2012 + * Author: Simon + */ + +#include +#include "Particle.h" + +std::vector Particle::GetProperties() +{ + std::vector properties; + properties.push_back(StructProperty("type", StructProperty::ParticleType, offsetof(Particle, type))); + properties.push_back(StructProperty("life", StructProperty::ParticleType, offsetof(Particle, life))); + properties.push_back(StructProperty("ctype", StructProperty::ParticleType, offsetof(Particle, ctype))); + properties.push_back(StructProperty("x", StructProperty::Float, offsetof(Particle, x))); + properties.push_back(StructProperty("y", StructProperty::Float, offsetof(Particle, y))); + properties.push_back(StructProperty("vx", StructProperty::Float, offsetof(Particle, vx))); + properties.push_back(StructProperty("vy", StructProperty::Float, offsetof(Particle, vy))); + properties.push_back(StructProperty("temp", StructProperty::Float, offsetof(Particle, temp))); + properties.push_back(StructProperty("flags", StructProperty::UInteger, offsetof(Particle, flags))); + properties.push_back(StructProperty("tmp", StructProperty::Integer, offsetof(Particle, tmp))); + properties.push_back(StructProperty("tmp2", StructProperty::Integer, offsetof(Particle, tmp2))); + properties.push_back(StructProperty("dcolour", StructProperty::UInteger, offsetof(Particle, dcolour))); + return properties; +} diff --git a/src/simulation/Particle.h b/src/simulation/Particle.h index 91a1315..bb0297e 100644 --- a/src/simulation/Particle.h +++ b/src/simulation/Particle.h @@ -9,6 +9,7 @@ #ifndef The_Powder_Toy_Particle_h #define The_Powder_Toy_Particle_h +#include #include "StructProperty.h" struct Particle @@ -24,23 +25,7 @@ struct Particle unsigned int dcolour; /** Returns a list of properties, their type and offset within the structure that can be changed by higher-level processes refering to them by name such as Lua or the property tool **/ - static std::vector GetProperties() - { - std::vector properties; - properties.push_back(StructProperty("type", StructProperty::ParticleType, offsetof(Particle, type))); - properties.push_back(StructProperty("life", StructProperty::ParticleType, offsetof(Particle, life))); - properties.push_back(StructProperty("ctype", StructProperty::ParticleType, offsetof(Particle, ctype))); - properties.push_back(StructProperty("x", StructProperty::Float, offsetof(Particle, x))); - properties.push_back(StructProperty("y", StructProperty::Float, offsetof(Particle, y))); - properties.push_back(StructProperty("vx", StructProperty::Float, offsetof(Particle, vx))); - properties.push_back(StructProperty("vy", StructProperty::Float, offsetof(Particle, vy))); - properties.push_back(StructProperty("temp", StructProperty::Float, offsetof(Particle, temp))); - properties.push_back(StructProperty("flags", StructProperty::UInteger, offsetof(Particle, flags))); - properties.push_back(StructProperty("tmp", StructProperty::Integer, offsetof(Particle, tmp))); - properties.push_back(StructProperty("tmp2", StructProperty::Integer, offsetof(Particle, tmp2))); - properties.push_back(StructProperty("dcolour", StructProperty::UInteger, offsetof(Particle, dcolour))); - return properties; - } + static std::vector GetProperties(); }; #endif diff --git a/src/simulation/StructProperty.h b/src/simulation/StructProperty.h index ddea96b..832e83b 100644 --- a/src/simulation/StructProperty.h +++ b/src/simulation/StructProperty.h @@ -9,6 +9,8 @@ #ifndef The_Powder_Toy_StructProperty_h #define The_Powder_Toy_StructProperty_h +#include + struct StructProperty { enum PropertyType { ParticleType, Colour, Integer, UInteger, Float, String }; diff --git a/src/ssave/SSaveController.cpp b/src/ssave/SSaveController.cpp index 191a18c..3a6c3d4 100644 --- a/src/ssave/SSaveController.cpp +++ b/src/ssave/SSaveController.cpp @@ -7,14 +7,14 @@ #include "SSaveController.h" -SSaveController::SSaveController(ControllerCallback * callback, Save save): +SSaveController::SSaveController(ControllerCallback * callback, SaveInfo save): HasExited(false) { ssaveView = new SSaveView(); ssaveView->AttachController(this); ssaveModel = new SSaveModel(); ssaveModel->AddObserver(ssaveView); - ssaveModel->SetSave(new Save(save)); + ssaveModel->SetSave(new SaveInfo(save)); this->callback = callback; } @@ -24,7 +24,7 @@ void SSaveController::UploadSave(std::string saveName, std::string saveDescripti ssaveModel->UploadSave(saveName, saveDescription, publish); } -Save * SSaveController::GetSave() +SaveInfo * SSaveController::GetSave() { return ssaveModel->GetSave(); } diff --git a/src/ssave/SSaveController.h b/src/ssave/SSaveController.h index d1b2388..b8010e0 100644 --- a/src/ssave/SSaveController.h +++ b/src/ssave/SSaveController.h @@ -11,7 +11,7 @@ #include "SSaveModel.h" #include "SSaveView.h" #include "Controller.h" -#include "search/Save.h" +#include "client/SaveInfo.h" class SSaveView; class SSaveModel; @@ -21,8 +21,8 @@ class SSaveController { ControllerCallback * callback; public: bool HasExited; - SSaveController(ControllerCallback * callback, Save save); - Save * GetSave(); + SSaveController(ControllerCallback * callback, SaveInfo save); + SaveInfo * GetSave(); bool GetSaveUploaded(); void Exit(); void Update(); diff --git a/src/ssave/SSaveModel.cpp b/src/ssave/SSaveModel.cpp index 820c185..4933144 100644 --- a/src/ssave/SSaveModel.cpp +++ b/src/ssave/SSaveModel.cpp @@ -51,13 +51,13 @@ void SSaveModel::UploadSave(std::string saveName, std::string saveDescription, b notifySaveUploadChanged(); } -void SSaveModel::SetSave(Save * save) +void SSaveModel::SetSave(SaveInfo * save) { this->save = save; notifySaveChanged(); } -Save * SSaveModel::GetSave() +SaveInfo * SSaveModel::GetSave() { return this->save; } diff --git a/src/ssave/SSaveModel.h b/src/ssave/SSaveModel.h index b2631bb..e83944b 100644 --- a/src/ssave/SSaveModel.h +++ b/src/ssave/SSaveModel.h @@ -11,14 +11,14 @@ #include #include "SSaveView.h" -#include "search/Save.h" +#include "client/SaveInfo.h" using namespace std; class SSaveView; class SSaveModel { vector observers; - Save * save; + SaveInfo * save; void notifySaveChanged(); void notifySaveUploadChanged(); bool saveUploaded; @@ -26,8 +26,8 @@ public: SSaveModel(); void AddObserver(SSaveView * observer); void Update(); - Save * GetSave(); - void SetSave(Save * save); + SaveInfo * GetSave(); + void SetSave(SaveInfo * save); void UploadSave(std::string saveName, std::string saveDescription, bool publish); bool GetSaveUploaded(); virtual ~SSaveModel(); diff --git a/src/tags/TagsController.cpp b/src/tags/TagsController.cpp index ee8f924..26596fb 100644 --- a/src/tags/TagsController.cpp +++ b/src/tags/TagsController.cpp @@ -11,7 +11,7 @@ #include "TagsModel.h" #include "TagsView.h" -TagsController::TagsController(ControllerCallback * callback, Save * save): +TagsController::TagsController(ControllerCallback * callback, SaveInfo * save): HasDone(false) { tagsModel = new TagsModel(); @@ -24,7 +24,7 @@ TagsController::TagsController(ControllerCallback * callback, Save * save): this->callback = callback; } -Save * TagsController::GetSave() +SaveInfo * TagsController::GetSave() { return tagsModel->GetSave(); } diff --git a/src/tags/TagsController.h b/src/tags/TagsController.h index 0ab337f..2aa1be7 100644 --- a/src/tags/TagsController.h +++ b/src/tags/TagsController.h @@ -10,7 +10,7 @@ #include "Controller.h" #include "TagsView.h" -#include "search/Save.h" +#include "client/SaveInfo.h" class TagsView; class TagsModel; @@ -20,9 +20,9 @@ class TagsController { TagsModel * tagsModel; public: bool HasDone; - TagsController(ControllerCallback * callback, Save * save); + TagsController(ControllerCallback * callback, SaveInfo * save); TagsView * GetView() {return tagsView;} - Save * GetSave(); + SaveInfo * GetSave(); void RemoveTag(string tag); void AddTag(string tag); void Exit(); diff --git a/src/tags/TagsModel.cpp b/src/tags/TagsModel.cpp index 838dba0..3b5ee1d 100644 --- a/src/tags/TagsModel.cpp +++ b/src/tags/TagsModel.cpp @@ -17,13 +17,13 @@ TagsModel::TagsModel(): } -void TagsModel::SetSave(Save * save) +void TagsModel::SetSave(SaveInfo * save) { this->save = save; notifyTagsChanged(); } -Save * TagsModel::GetSave() +SaveInfo * TagsModel::GetSave() { return save; } diff --git a/src/tags/TagsModel.h b/src/tags/TagsModel.h index c00db8d..9d3d53b 100644 --- a/src/tags/TagsModel.h +++ b/src/tags/TagsModel.h @@ -9,20 +9,20 @@ #define TAGSMODEL_H_ #include -#include "search/Save.h" +#include "client/SaveInfo.h" class TagsView; class TagsModel { - Save * save; + SaveInfo * save; std::vector observers; void notifyTagsChanged(); public: TagsModel(); void AddObserver(TagsView * observer); - void SetSave(Save * save); + void SetSave(SaveInfo * save); void RemoveTag(string tag); void AddTag(string tag); - Save * GetSave(); + SaveInfo * GetSave(); virtual ~TagsModel(); }; -- cgit v0.9.2-21-gd62e