diff options
| author | jacob1 <jfu614@gmail.com> | 2012-10-19 19:06:07 (GMT) |
|---|---|---|
| committer | Simon Robertshaw <simon@hardwired.org.uk> | 2012-10-26 14:15:24 (GMT) |
| commit | e2622657f076ef943d051593d0969306daf15f32 (patch) | |
| tree | 1e5b811c3d50552b591c54e9918b22ef661bfdfa /src/game | |
| parent | 63daf67d44c284068a6104221121f466d9790ad9 (diff) | |
| download | powder-e2622657f076ef943d051593d0969306daf15f32.zip powder-e2622657f076ef943d051593d0969306daf15f32.tar.gz | |
ability to reload and resave local saves without retyping name
Diffstat (limited to 'src/game')
| -rw-r--r-- | src/game/GameController.cpp | 24 | ||||
| -rw-r--r-- | src/game/GameModel.cpp | 24 | ||||
| -rw-r--r-- | src/game/GameModel.h | 2 | ||||
| -rw-r--r-- | src/game/GameView.cpp | 12 |
4 files changed, 59 insertions, 3 deletions
diff --git a/src/game/GameController.cpp b/src/game/GameController.cpp index 99315b0..96f966c 100644 --- a/src/game/GameController.cpp +++ b/src/game/GameController.cpp @@ -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) diff --git a/src/game/GameModel.cpp b/src/game/GameModel.cpp index 49e031f..f905a1c 100644 --- a/src/game/GameModel.cpp +++ b/src/game/GameModel.cpp @@ -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()) { diff --git a/src/game/GameModel.h b/src/game/GameModel.h index 311f89c..b4c0bd3 100644 --- a/src/game/GameModel.h +++ b/src/game/GameModel.h @@ -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); diff --git a/src/game/GameView.cpp b/src/game/GameView.cpp index 7ba1fe7..9a2f772 100644 --- a/src/game/GameView.cpp +++ b/src/game/GameView.cpp @@ -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); |
