ability to reload and resave local saves without retyping name

This commit is contained in:
jacob1 2012-10-19 15:06:07 -04:00 committed by Simon Robertshaw
parent 63daf67d44
commit e2622657f0
6 changed files with 73 additions and 6 deletions

View File

@ -925,9 +925,25 @@ void GameController::OpenLocalSaveWindow()
}
else
{
SaveFile tempSave("");
std::string filename = "";
if (gameModel->GetFile())
filename = gameModel->GetFile()->GetDisplayName();
SaveFile tempSave(filename);
tempSave.SetGameSave(gameSave);
new LocalSaveActivity(tempSave);
class LocalSaveCallback: public FileSavedCallback
{
GameController * c;
public:
LocalSaveCallback(GameController * _c): c(_c) {}
virtual ~LocalSaveCallback() {};
virtual void FileSaved(SaveFile* file)
{
c->gameModel->SetSaveFile(file);
}
};
new LocalSaveActivity(tempSave, new LocalSaveCallback(this));
}
}
@ -1193,6 +1209,10 @@ void GameController::ReloadSim()
{
gameModel->SetSave(gameModel->GetSave());
}
else if(gameModel->GetFile() && gameModel->GetFile()->GetGameSave())
{
gameModel->SetSaveFile(gameModel->GetFile());
}
}
std::string GameController::ElementResolve(int type)

View File

@ -22,6 +22,7 @@ GameModel::GameModel():
currentBrush(0),
currentUser(0, ""),
currentSave(NULL),
currentFile(NULL),
colourSelector(false),
clipboard(NULL),
stamp(NULL),
@ -159,6 +160,8 @@ GameModel::~GameModel()
delete stamp;
if(currentSave)
delete currentSave;
if(currentFile)
delete currentFile;
//if(activeTools)
// delete[] activeTools;
}
@ -536,6 +539,9 @@ void GameModel::SetSave(SaveInfo * newSave)
else
currentSave = new SaveInfo(*newSave);
}
if(currentFile)
delete currentFile;
currentFile = NULL;
if(currentSave && currentSave->GetGameSave())
{
@ -558,9 +564,25 @@ void GameModel::SetSave(SaveInfo * newSave)
UpdateQuickOptions();
}
SaveFile * GameModel::GetFile()
{
return currentFile;
}
void GameModel::SetSaveFile(SaveFile * newSave)
{
SetSave(NULL);
if(currentFile != newSave)
{
if(currentFile)
delete currentFile;
if(newSave == NULL)
currentFile = NULL;
else
currentFile = new SaveFile(*newSave);
}
if (currentSave)
delete currentSave;
currentSave = NULL;
if(newSave && newSave->GetGameSave())
{

View File

@ -57,6 +57,7 @@ private:
int currentBrush;
vector<Brush *> brushList;
SaveInfo * currentSave;
SaveFile * currentFile;
Simulation * sim;
Renderer * ren;
Tool * lastTool;
@ -143,6 +144,7 @@ public:
void SetVote(int direction);
SaveInfo * GetSave();
SaveFile * GetFile();
Brush * GetBrush();
void SetSave(SaveInfo * newSave);
void SetSaveFile(SaveFile * newSave);

View File

@ -847,6 +847,18 @@ void GameView::NotifySaveChanged(GameModel * sender)
tagSimulationButton->SetText("[no tags set]");
}
}
else if (sender->GetFile())
{
((SplitButton*)saveSimulationButton)->SetShowSplit(false);
saveSimulationButton->SetText(sender->GetFile()->GetDisplayName());
reloadButton->Enabled = true;
upVoteButton->Enabled = false;
upVoteButton->Appearance.BackgroundInactive = (ui::Colour(0, 0, 0));
downVoteButton->Enabled = false;
upVoteButton->Appearance.BackgroundInactive = (ui::Colour(0, 0, 0));
tagSimulationButton->Enabled = false;
tagSimulationButton->SetText("[no tags set]");
}
else
{
((SplitButton*)saveSimulationButton)->SetShowSplit(false);

View File

@ -37,10 +37,11 @@ public:
}
};
LocalSaveActivity::LocalSaveActivity(SaveFile save) :
LocalSaveActivity::LocalSaveActivity(SaveFile save, FileSavedCallback * callback) :
WindowActivity(ui::Point(-1, -1), ui::Point(220, 200)),
thumbnail(NULL),
save(save)
save(save),
callback(callback)
{
ui::Label * titleLabel = new ui::Label(ui::Point(4, 5), ui::Point(Size.X-8, 16), "Save to computer:");
titleLabel->SetTextColour(style::Colour::InformationTitle);
@ -117,6 +118,7 @@ void LocalSaveActivity::saveWrite(std::string finalFilename)
mkdir(LOCAL_SAVE_DIR, 0755);
#endif
Client::Ref().WriteFile(save.GetGameSave()->Serialise(), finalFilename);
callback->FileSaved(&save);
}
void LocalSaveActivity::OnDraw()

View File

@ -11,6 +11,14 @@ namespace ui
class Thumbnail;
class FileSavedCallback
{
public:
FileSavedCallback() {}
virtual ~FileSavedCallback() {}
virtual void FileSaved(SaveFile * file) {}
};
class LocalSaveActivity: public WindowActivity, public ThumbnailListener
{
SaveFile save;
@ -20,8 +28,9 @@ class LocalSaveActivity: public WindowActivity, public ThumbnailListener
class SaveAction;
friend class CancelAction;
friend class SaveAction;
FileSavedCallback * callback;
public:
LocalSaveActivity(SaveFile save);
LocalSaveActivity(SaveFile save, FileSavedCallback * callback);
void saveWrite(std::string finalFilename);
virtual void Save();
virtual void OnDraw();