summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/client/Client.cpp54
-rw-r--r--src/client/Client.h13
-rw-r--r--src/client/GameSave.cpp8
-rw-r--r--src/client/GameSave.h7
-rw-r--r--src/client/SaveFile.cpp43
-rw-r--r--src/client/SaveFile.h31
-rw-r--r--src/client/SaveInfo.cpp103
-rw-r--r--src/client/SaveInfo.h68
-rw-r--r--src/game/GameController.cpp35
-rw-r--r--src/game/GameController.h4
-rw-r--r--src/game/GameModel.cpp27
-rw-r--r--src/game/GameModel.h10
-rw-r--r--src/interface/SaveButton.cpp81
-rw-r--r--src/interface/SaveButton.h12
-rw-r--r--src/localbrowser/LocalBrowserController.cpp135
-rw-r--r--src/localbrowser/LocalBrowserController.h39
-rw-r--r--src/localbrowser/LocalBrowserModel.cpp131
-rw-r--r--src/localbrowser/LocalBrowserModel.h43
-rw-r--r--src/localbrowser/LocalBrowserModelException.h23
-rw-r--r--src/localbrowser/LocalBrowserView.cpp197
-rw-r--r--src/localbrowser/LocalBrowserView.h40
-rw-r--r--src/preview/PreviewController.cpp2
-rw-r--r--src/preview/PreviewController.h4
-rw-r--r--src/preview/PreviewModel.cpp4
-rw-r--r--src/preview/PreviewModel.h6
-rw-r--r--src/preview/PreviewView.cpp2
-rw-r--r--src/search/SearchController.cpp4
-rw-r--r--src/search/SearchController.h4
-rw-r--r--src/search/SearchModel.cpp12
-rw-r--r--src/search/SearchModel.h12
-rw-r--r--src/search/SearchView.cpp2
-rw-r--r--src/simulation/Particle.cpp27
-rw-r--r--src/simulation/Particle.h19
-rw-r--r--src/simulation/StructProperty.h2
-rw-r--r--src/ssave/SSaveController.cpp6
-rw-r--r--src/ssave/SSaveController.h6
-rw-r--r--src/ssave/SSaveModel.cpp4
-rw-r--r--src/ssave/SSaveModel.h8
-rw-r--r--src/tags/TagsController.cpp4
-rw-r--r--src/tags/TagsController.h6
-rw-r--r--src/tags/TagsModel.cpp4
-rw-r--r--src/tags/TagsModel.h8
42 files changed, 1098 insertions, 152 deletions
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<SaveComment*> * Client::GetComments(int saveID, int start, int count
return commentArray;
}
-std::vector<Save*> * Client::SearchSaves(int start, int count, string query, string sort, std::string category, int & resultCount)
+std::vector<SaveInfo*> * Client::SearchSaves(int start, int count, string query, string sort, std::string category, int & resultCount)
{
lastError = "";
resultCount = 0;
- std::vector<Save*> * saveArray = new std::vector<Save*>();
+ std::vector<SaveInfo*> * saveArray = new std::vector<SaveInfo*>();
std::stringstream urlStream;
char * data;
int dataStatus, dataLength;
@@ -904,7 +926,7 @@ std::vector<Save*> * 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<string> GetStamps();
unsigned char * GetSaveData(int saveID, int saveDate, int & dataLength);
LoginStatus Login(string username, string password, User & user);
void ClearThumbnailRequests();
- std::vector<Save*> * SearchSaves(int start, int count, string query, string sort, string category, int & resultCount);
+ std::vector<SaveInfo*> * SearchSaves(int start, int count, string query, string sort, string category, int & resultCount);
std::vector<SaveComment*> * 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 <vector>
+#include <string>
+#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 <string>
+#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<string> 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<string> tags)
+{
+ this->tags = tags;
+}
+vector<string> 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 <vector>
+#include <string>
+#include <stdlib.h>
+#include <iostream>
+#include <string.h>
+#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<string> tags);
+
+ ~SaveInfo();
+
+ string userName;
+ string name;
+
+ string Description;
+
+ vector<string> 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<string> tags);
+ vector<string> 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<Menu*> 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 <vector>
#include <deque>
-#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<Brush *> 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 <iostream>
#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 <string>
#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 <sstream>
+#include <unistd.h>
+
+#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<std::string> saves;
+ public:
+ RemoveSavesTask(std::vector<std::string> 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<std::string> 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<SaveFile*> 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<SaveFile*> 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; i<stampIDs.size() && i<stampsEnd; i++)
+ {
+ SaveFile * tempSave = Client::Ref().GetStamp(stampIDs[i]);
+ if(tempSave)
+ {
+ savesList.push_back(tempSave);
+ }
+ }
+ notifySavesListChanged();
+}
+
+void LocalBrowserModel::SelectSave(std::string stampID)
+{
+ for(int i = 0; i < selected.size(); i++)
+ {
+ if(selected[i]==stampID)
+ {
+ return;
+ }
+ }
+ selected.push_back(stampID);
+ notifySelectedChanged();
+}
+
+void LocalBrowserModel::DeselectSave(std::string stampID)
+{
+ bool changed = false;
+restart:
+ for(int i = 0; i < selected.size(); i++)
+ {
+ if(selected[i]==stampID)
+ {
+ selected.erase(selected.begin()+i);
+ changed = true;
+ goto restart; //Just ensure all cases are removed.
+ }
+ }
+ if(changed)
+ notifySelectedChanged();
+}
+
+void LocalBrowserModel::notifySelectedChanged()
+{
+ for(int i = 0; i < observers.size(); i++)
+ {
+ LocalBrowserView* cObserver = observers[i];
+ cObserver->NotifySelectedChanged(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 <vector>
+#include <string>
+#include <cmath>
+#include "client/SaveFile.h"
+
+class LocalBrowserView;
+class LocalBrowserModel {
+ vector<std::string> selected;
+ SaveFile * stamp;
+ std::vector<std::string> stampIDs;
+ std::vector<SaveFile*> savesList;
+ std::vector<LocalBrowserView*> 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<SaveFile *> GetSavesList();
+ void UpdateSavesList(int pageNumber);
+ SaveFile * GetSave();
+ void SetSave(SaveFile * newStamp);
+ vector<std::string> 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 <string>
+#include <exception>
+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 <sstream>
+#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<SaveFile*> 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<std::string> 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 <vector>
+#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<ui::SaveButton*> 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 <vector>
#include <pthread.h>
#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<PreviewView*> observers;
- Save * save;
+ SaveInfo * save;
Thumbnail * savePreview;
std::vector<SaveComment*> * saveComments;
void notifyPreviewChanged();
@@ -52,7 +52,7 @@ class PreviewModel {
public:
PreviewModel();
Thumbnail * GetPreview();
- Save * GetSave();
+ SaveInfo * GetSave();
std::vector<SaveComment*> * 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<Save*> * tempSaveList = Client::Ref().SearchSaves((currentPage-1)*20, 20, lastQuery, currentSort=="new"?"date":"votes", category, resultCount);
+ vector<SaveInfo*> * 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<Save*> SearchModel::GetSaveList()
+vector<SaveInfo*> SearchModel::GetSaveList()
{
return saveList;
}
@@ -78,7 +78,7 @@ void SearchModel::Update()
updateSaveListWorking = false;
lastError = "";
saveListLoaded = true;
- vector<Save*> * tempSaveList;
+ vector<SaveInfo*> * 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 <string>
#include <pthread.h>
#include <cmath>
-#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<int> selected;
vector<SearchView*> observers;
- vector<Save*> saveList;
+ vector<SaveInfo*> saveList;
int currentPage;
int resultCount;
bool showOwn;
@@ -45,7 +45,7 @@ public:
void AddObserver(SearchView * observer);
void UpdateSaveList(int pageNumber, std::string query);
- vector<Save*> GetSaveList();
+ vector<SaveInfo*> 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<int> 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<Save*> saves = sender->GetSaveList();
+ vector<SaveInfo*> 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 <cstddef>
+#include "Particle.h"
+
+std::vector<StructProperty> Particle::GetProperties()
+{
+ std::vector<StructProperty> 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 <vector>
#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<StructProperty> GetProperties()
- {
- std::vector<StructProperty> 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<StructProperty> 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 <string>
+
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 <vector>
#include "SSaveView.h"
-#include "search/Save.h"
+#include "client/SaveInfo.h"
using namespace std;
class SSaveView;
class SSaveModel {
vector<SSaveView*> 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 <vector>
-#include "search/Save.h"
+#include "client/SaveInfo.h"
class TagsView;
class TagsModel {
- Save * save;
+ SaveInfo * save;
std::vector<TagsView*> 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();
};