From eea433f14192e2d36a84494a85762b06787dfcf5 Mon Sep 17 00:00:00 2001 From: Marc Zinnschlag Date: Tue, 26 Nov 2013 10:37:58 +0100 Subject: [PATCH] restore last played character selection across sessions --- apps/openmw/mwgui/savegamedialog.cpp | 12 ++++++++++-- apps/openmw/mwstate/statemanagerimp.cpp | 8 ++++++++ files/settings-default.cfg | 7 +++++-- 3 files changed, 23 insertions(+), 4 deletions(-) diff --git a/apps/openmw/mwgui/savegamedialog.cpp b/apps/openmw/mwgui/savegamedialog.cpp index 2ce0f0fbf..8ec6dbfcf 100644 --- a/apps/openmw/mwgui/savegamedialog.cpp +++ b/apps/openmw/mwgui/savegamedialog.cpp @@ -1,10 +1,13 @@ #include "savegamedialog.hpp" #include "widgets.hpp" +#include + +#include + #include "../mwbase/statemanager.hpp" #include "../mwbase/environment.hpp" - #include "../mwstate/character.hpp" namespace @@ -93,6 +96,9 @@ namespace MWGui mCurrentCharacter = mgr->getCurrentCharacter (false); + std::string directory = + Misc::StringUtils::lowerCase (Settings::Manager::getString ("character", "Saves")); + mCharacterSelection->removeAllItems(); for (MWBase::StateManager::CharacterIterator it = mgr->characterBegin(); it != mgr->characterEnd(); ++it) @@ -105,7 +111,9 @@ namespace MWGui mCharacterSelection->addItem (title.str()); - if (mCurrentCharacter == &*it) + if (mCurrentCharacter == &*it || + (!mCurrentCharacter && directory==Misc::StringUtils::lowerCase ( + it->begin()->mPath.parent_path().filename().string()))) mCharacterSelection->setIndexSelected(mCharacterSelection->getItemCount()-1); } } diff --git a/apps/openmw/mwstate/statemanagerimp.cpp b/apps/openmw/mwstate/statemanagerimp.cpp index 4cb97ed50..97f8b8e55 100644 --- a/apps/openmw/mwstate/statemanagerimp.cpp +++ b/apps/openmw/mwstate/statemanagerimp.cpp @@ -4,6 +4,8 @@ #include #include +#include + #include "../mwbase/environment.hpp" #include "../mwbase/world.hpp" #include "../mwbase/journal.hpp" @@ -114,6 +116,9 @@ void MWState::StateManager::saveGame (const std::string& description, const Slot slot->mProfile.save (writer); writer.endRecord ("SAVE"); writer.close(); + + Settings::Manager::setString ("character", "Saves", + slot->mPath.parent_path().filename().string()); } void MWState::StateManager::loadGame (const Character *character, const Slot *slot) @@ -137,6 +142,9 @@ void MWState::StateManager::loadGame (const Character *character, const Slot *sl mCharacterManager.setCurrentCharacter(character); mState = State_Running; + + Settings::Manager::setString ("character", "Saves", + slot->mPath.parent_path().filename().string()); } MWState::Character *MWState::StateManager::getCurrentCharacter (bool create) diff --git a/files/settings-default.cfg b/files/settings-default.cfg index f191430df..b3b186142 100644 --- a/files/settings-default.cfg +++ b/files/settings-default.cfg @@ -1,4 +1,4 @@ -# WARNING: Editing this file might have no effect, as these +# WARNING: Editing this file might have no effect, as these # settings are overwritten by your user settings file. [Video] @@ -13,7 +13,7 @@ screen = 0 # Valid values: # OpenGL Rendering Subsystem # Direct3D9 Rendering Subsystem -render system = +render system = # Valid values: # none @@ -169,3 +169,6 @@ ui y multiplier = 1.0 [Game] # Always use the most powerful attack when striking with a weapon (chop, slash or thrust) best attack = false + +[Saves] +character = \ No newline at end of file