mirror of
https://github.com/The-Powder-Toy/The-Powder-Toy.git
synced 2025-09-02 12:32:40 +02:00
ability to reload and resave local saves without retyping name
This commit is contained in:
@@ -925,9 +925,25 @@ void GameController::OpenLocalSaveWindow()
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
SaveFile tempSave("");
|
std::string filename = "";
|
||||||
|
if (gameModel->GetFile())
|
||||||
|
filename = gameModel->GetFile()->GetDisplayName();
|
||||||
|
SaveFile tempSave(filename);
|
||||||
tempSave.SetGameSave(gameSave);
|
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());
|
gameModel->SetSave(gameModel->GetSave());
|
||||||
}
|
}
|
||||||
|
else if(gameModel->GetFile() && gameModel->GetFile()->GetGameSave())
|
||||||
|
{
|
||||||
|
gameModel->SetSaveFile(gameModel->GetFile());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string GameController::ElementResolve(int type)
|
std::string GameController::ElementResolve(int type)
|
||||||
|
@@ -22,6 +22,7 @@ GameModel::GameModel():
|
|||||||
currentBrush(0),
|
currentBrush(0),
|
||||||
currentUser(0, ""),
|
currentUser(0, ""),
|
||||||
currentSave(NULL),
|
currentSave(NULL),
|
||||||
|
currentFile(NULL),
|
||||||
colourSelector(false),
|
colourSelector(false),
|
||||||
clipboard(NULL),
|
clipboard(NULL),
|
||||||
stamp(NULL),
|
stamp(NULL),
|
||||||
@@ -159,6 +160,8 @@ GameModel::~GameModel()
|
|||||||
delete stamp;
|
delete stamp;
|
||||||
if(currentSave)
|
if(currentSave)
|
||||||
delete currentSave;
|
delete currentSave;
|
||||||
|
if(currentFile)
|
||||||
|
delete currentFile;
|
||||||
//if(activeTools)
|
//if(activeTools)
|
||||||
// delete[] activeTools;
|
// delete[] activeTools;
|
||||||
}
|
}
|
||||||
@@ -536,6 +539,9 @@ void GameModel::SetSave(SaveInfo * newSave)
|
|||||||
else
|
else
|
||||||
currentSave = new SaveInfo(*newSave);
|
currentSave = new SaveInfo(*newSave);
|
||||||
}
|
}
|
||||||
|
if(currentFile)
|
||||||
|
delete currentFile;
|
||||||
|
currentFile = NULL;
|
||||||
|
|
||||||
if(currentSave && currentSave->GetGameSave())
|
if(currentSave && currentSave->GetGameSave())
|
||||||
{
|
{
|
||||||
@@ -558,9 +564,25 @@ void GameModel::SetSave(SaveInfo * newSave)
|
|||||||
UpdateQuickOptions();
|
UpdateQuickOptions();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SaveFile * GameModel::GetFile()
|
||||||
|
{
|
||||||
|
return currentFile;
|
||||||
|
}
|
||||||
|
|
||||||
void GameModel::SetSaveFile(SaveFile * newSave)
|
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())
|
if(newSave && newSave->GetGameSave())
|
||||||
{
|
{
|
||||||
|
@@ -57,6 +57,7 @@ private:
|
|||||||
int currentBrush;
|
int currentBrush;
|
||||||
vector<Brush *> brushList;
|
vector<Brush *> brushList;
|
||||||
SaveInfo * currentSave;
|
SaveInfo * currentSave;
|
||||||
|
SaveFile * currentFile;
|
||||||
Simulation * sim;
|
Simulation * sim;
|
||||||
Renderer * ren;
|
Renderer * ren;
|
||||||
Tool * lastTool;
|
Tool * lastTool;
|
||||||
@@ -143,6 +144,7 @@ public:
|
|||||||
|
|
||||||
void SetVote(int direction);
|
void SetVote(int direction);
|
||||||
SaveInfo * GetSave();
|
SaveInfo * GetSave();
|
||||||
|
SaveFile * GetFile();
|
||||||
Brush * GetBrush();
|
Brush * GetBrush();
|
||||||
void SetSave(SaveInfo * newSave);
|
void SetSave(SaveInfo * newSave);
|
||||||
void SetSaveFile(SaveFile * newSave);
|
void SetSaveFile(SaveFile * newSave);
|
||||||
|
@@ -847,6 +847,18 @@ void GameView::NotifySaveChanged(GameModel * sender)
|
|||||||
tagSimulationButton->SetText("[no tags set]");
|
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
|
else
|
||||||
{
|
{
|
||||||
((SplitButton*)saveSimulationButton)->SetShowSplit(false);
|
((SplitButton*)saveSimulationButton)->SetShowSplit(false);
|
||||||
|
@@ -37,10 +37,11 @@ public:
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
LocalSaveActivity::LocalSaveActivity(SaveFile save) :
|
LocalSaveActivity::LocalSaveActivity(SaveFile save, FileSavedCallback * callback) :
|
||||||
WindowActivity(ui::Point(-1, -1), ui::Point(220, 200)),
|
WindowActivity(ui::Point(-1, -1), ui::Point(220, 200)),
|
||||||
thumbnail(NULL),
|
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:");
|
ui::Label * titleLabel = new ui::Label(ui::Point(4, 5), ui::Point(Size.X-8, 16), "Save to computer:");
|
||||||
titleLabel->SetTextColour(style::Colour::InformationTitle);
|
titleLabel->SetTextColour(style::Colour::InformationTitle);
|
||||||
@@ -117,6 +118,7 @@ void LocalSaveActivity::saveWrite(std::string finalFilename)
|
|||||||
mkdir(LOCAL_SAVE_DIR, 0755);
|
mkdir(LOCAL_SAVE_DIR, 0755);
|
||||||
#endif
|
#endif
|
||||||
Client::Ref().WriteFile(save.GetGameSave()->Serialise(), finalFilename);
|
Client::Ref().WriteFile(save.GetGameSave()->Serialise(), finalFilename);
|
||||||
|
callback->FileSaved(&save);
|
||||||
}
|
}
|
||||||
|
|
||||||
void LocalSaveActivity::OnDraw()
|
void LocalSaveActivity::OnDraw()
|
||||||
|
@@ -11,6 +11,14 @@ namespace ui
|
|||||||
|
|
||||||
class Thumbnail;
|
class Thumbnail;
|
||||||
|
|
||||||
|
class FileSavedCallback
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
FileSavedCallback() {}
|
||||||
|
virtual ~FileSavedCallback() {}
|
||||||
|
virtual void FileSaved(SaveFile * file) {}
|
||||||
|
};
|
||||||
|
|
||||||
class LocalSaveActivity: public WindowActivity, public ThumbnailListener
|
class LocalSaveActivity: public WindowActivity, public ThumbnailListener
|
||||||
{
|
{
|
||||||
SaveFile save;
|
SaveFile save;
|
||||||
@@ -20,8 +28,9 @@ class LocalSaveActivity: public WindowActivity, public ThumbnailListener
|
|||||||
class SaveAction;
|
class SaveAction;
|
||||||
friend class CancelAction;
|
friend class CancelAction;
|
||||||
friend class SaveAction;
|
friend class SaveAction;
|
||||||
|
FileSavedCallback * callback;
|
||||||
public:
|
public:
|
||||||
LocalSaveActivity(SaveFile save);
|
LocalSaveActivity(SaveFile save, FileSavedCallback * callback);
|
||||||
void saveWrite(std::string finalFilename);
|
void saveWrite(std::string finalFilename);
|
||||||
virtual void Save();
|
virtual void Save();
|
||||||
virtual void OnDraw();
|
virtual void OnDraw();
|
||||||
|
Reference in New Issue
Block a user