From 4ebf67754c8d1b31c6e7fcc78c7060873cb8fb58 Mon Sep 17 00:00:00 2001 From: Nicolas Hake Date: Tue, 29 Oct 2013 21:32:21 +0100 Subject: [PATCH] Move C4ComponentHost::LoadEx to C4Language To make C4ComponentHost more reusable, move C4Language dependencies out of the class. LoadEx isn't really suited to reside in C4Language, but it's better to have it there, since all C4Language consumers also use C4ComponentHost; the reverse isn't true. --- src/c4group/C4ComponentHost.cpp | 6 ------ src/c4group/C4ComponentHost.h | 1 - src/c4group/C4Language.cpp | 8 ++++++++ src/c4group/C4Language.h | 3 +++ src/game/C4Game.cpp | 8 ++++---- src/gui/C4GameLobby.cpp | 2 +- src/gui/C4StartupScenSelDlg.cpp | 6 +++--- src/object/C4Def.cpp | 4 ++-- src/player/C4RankSystem.cpp | 2 +- 9 files changed, 22 insertions(+), 18 deletions(-) diff --git a/src/c4group/C4ComponentHost.cpp b/src/c4group/C4ComponentHost.cpp index a498e829b..55d3621e3 100644 --- a/src/c4group/C4ComponentHost.cpp +++ b/src/c4group/C4ComponentHost.cpp @@ -105,12 +105,6 @@ bool C4ComponentHost::Load(C4GroupSet &hGroupSet, return false; } -bool C4ComponentHost::LoadEx(C4Group &hGroup, const char *szFilename, const char *szLanguage) -{ - C4GroupSet hGroups = Languages.GetPackGroups(hGroup); - return Load(hGroups, szFilename, szLanguage); -} - void C4ComponentHost::FinishLoad(const StdStrBuf & name, C4Group &hGroup) { Data.EnsureUnicode(); diff --git a/src/c4group/C4ComponentHost.h b/src/c4group/C4ComponentHost.h index b5c23f21d..4bc76fca2 100644 --- a/src/c4group/C4ComponentHost.h +++ b/src/c4group/C4ComponentHost.h @@ -36,7 +36,6 @@ public: size_t GetDataSize() const { return Data.getLength(); } bool Load(C4Group &hGroup, const char *szFilename, const char *szLanguage=NULL); bool Load(C4GroupSet &hGroupSet, const char *szFilename, const char *szLanguage=NULL); - bool LoadEx(C4Group &hGroup, const char *szFilename, const char *szLanguage=NULL); bool GetLanguageString(const char *szLanguage, class StdStrBuf &rTarget); protected: // The component host's Data has changed. This callback can be used by diff --git a/src/c4group/C4Language.cpp b/src/c4group/C4Language.cpp index 64a804b9a..33b1b6092 100644 --- a/src/c4group/C4Language.cpp +++ b/src/c4group/C4Language.cpp @@ -373,6 +373,14 @@ C4GroupSet C4Language::GetPackGroups(C4Group & hGroup) return r; } +bool C4Language::LoadComponentHost(C4ComponentHost *host, C4Group &hGroup, const char *szFilename, const char *szLanguage) +{ + assert(host); + if (!host) return false; + C4GroupSet hGroups = ::Languages.GetPackGroups(hGroup); + return host->Load(hGroups, szFilename, szLanguage); +} + void C4Language::InitInfos() { C4Group hGroup; diff --git a/src/c4group/C4Language.h b/src/c4group/C4Language.h index 53a565c67..d06d8dbb6 100644 --- a/src/c4group/C4Language.h +++ b/src/c4group/C4Language.h @@ -66,6 +66,9 @@ public: // Handling of external language packs int GetPackCount(); C4GroupSet GetPackGroups(C4Group &); + // Load a C4ComponentHost from all loaded language packs + static bool LoadComponentHost(C4ComponentHost *host, C4Group &hGroup, const char *szFilename, const char *szLanguage); + // Handling of language info loaded from string tables int GetInfoCount(); C4LanguageInfo *GetInfo(int iIndex); diff --git a/src/game/C4Game.cpp b/src/game/C4Game.cpp index 2e3bcdf58..64e45a154 100644 --- a/src/game/C4Game.cpp +++ b/src/game/C4Game.cpp @@ -252,12 +252,12 @@ bool C4Game::OpenScenario() #endif // Title - Title.LoadEx(ScenarioFile, C4CFN_Title, Config.General.LanguageEx); + C4Language::LoadComponentHost(&Title, ScenarioFile, C4CFN_Title, Config.General.LanguageEx); if (!Title.GetLanguageString(Config.General.LanguageEx, ScenarioTitle)) ScenarioTitle.Copy(C4S.Head.Title); // String tables - ScenarioLangStringTable.LoadEx(ScenarioFile, C4CFN_ScriptStringTbl, Config.General.LanguageEx); + C4Language::LoadComponentHost(&ScenarioLangStringTable, ScenarioFile, C4CFN_ScriptStringTbl, Config.General.LanguageEx); // Load parameters (not as network client, because then team info has already been sent by host) if (!Network.isEnabled() || Network.isHost()) @@ -2655,7 +2655,7 @@ bool C4Game::LoadAdditionalSystemGroup(C4Group &parent_group) if (SysGroup.OpenAsChild(&parent_group, C4CFN_System)) { C4LangStringTable SysGroupString; - SysGroupString.LoadEx(SysGroup, C4CFN_ScriptStringTbl, Config.General.LanguageEx); + C4Language::LoadComponentHost(&SysGroupString, SysGroup, C4CFN_ScriptStringTbl, Config.General.LanguageEx); // load custom scenario control definitions if (SysGroup.FindEntry(C4CFN_PlayerControls)) { @@ -2797,7 +2797,7 @@ bool C4Game::InitKeyboard() void C4Game::UpdateLanguage() { // Reload System.ocg string table - MainSysLangStringTable.LoadEx(Application.SystemGroup, C4CFN_ScriptStringTbl, Config.General.LanguageEx); + C4Language::LoadComponentHost(&MainSysLangStringTable, Application.SystemGroup, C4CFN_ScriptStringTbl, Config.General.LanguageEx); } bool C4Game::InitPlayerControlSettings() diff --git a/src/gui/C4GameLobby.cpp b/src/gui/C4GameLobby.cpp index 615d560dc..dc6f60ea9 100644 --- a/src/gui/C4GameLobby.cpp +++ b/src/gui/C4GameLobby.cpp @@ -94,7 +94,7 @@ namespace C4GameLobby StdStrBuf sDesc; // load desc C4ComponentHost DefDesc; - if (DefDesc.LoadEx(ScenarioFile, C4CFN_ScenarioDesc, Config.General.LanguageEx)) + if (C4Language::LoadComponentHost(&DefDesc, ScenarioFile, C4CFN_ScenarioDesc, Config.General.LanguageEx)) { C4RTFFile rtf; rtf.Load(StdBuf(DefDesc.GetData(), SLen(DefDesc.GetData()))); diff --git a/src/gui/C4StartupScenSelDlg.cpp b/src/gui/C4StartupScenSelDlg.cpp index 072b1ede4..67f0b3b6f 100644 --- a/src/gui/C4StartupScenSelDlg.cpp +++ b/src/gui/C4StartupScenSelDlg.cpp @@ -128,7 +128,7 @@ bool C4MapFolderData::Load(C4Group &hGroup, C4ScenarioListLoader::Folder *pScenL Clear(); // load localization info C4LangStringTable LangTable; - bool fHasLangTable = !!LangTable.LoadEx(hGroup, C4CFN_ScriptStringTbl, Config.General.LanguageEx); + bool fHasLangTable = C4Language::LoadComponentHost(&LangTable, hGroup, C4CFN_ScriptStringTbl, Config.General.LanguageEx); // load core data StdStrBuf Buf; if (!hGroup.LoadEntryString(C4CFN_MapFolderData, &Buf)) return false; @@ -483,7 +483,7 @@ bool C4ScenarioListLoader::Entry::Load(C4Group *pFromGrp, const StdStrBuf *psFil return false; // Load entry name C4ComponentHost DefNames; - if (DefNames.LoadEx(Group, C4CFN_Title, Config.General.LanguageEx)) + if (C4Language::LoadComponentHost(&DefNames, Group, C4CFN_Title, Config.General.LanguageEx)) if (DefNames.GetLanguageString(Config.General.LanguageEx, sName)) fNameLoaded = true; // load entry icon @@ -524,7 +524,7 @@ bool C4ScenarioListLoader::Entry::Load(C4Group *pFromGrp, const StdStrBuf *psFil { // load desc C4ComponentHost DefDesc; - if (DefDesc.LoadEx(Group, C4CFN_ScenarioDesc, Config.General.LanguageEx)) + if (C4Language::LoadComponentHost(&DefDesc, Group, C4CFN_ScenarioDesc, Config.General.LanguageEx)) { C4RTFFile rtf; rtf.Load(StdBuf(DefDesc.GetData(), SLen(DefDesc.GetData()))); diff --git a/src/object/C4Def.cpp b/src/object/C4Def.cpp index 36a84a6b8..daceb0e34 100644 --- a/src/object/C4Def.cpp +++ b/src/object/C4Def.cpp @@ -360,7 +360,7 @@ bool C4Def::Load(C4Group &hGroup, } // Read string table - StringTable.LoadEx(hGroup, C4CFN_ScriptStringTbl, szLanguage); + C4Language::LoadComponentHost(&StringTable, hGroup, C4CFN_ScriptStringTbl, szLanguage); // Register ID with script engine ::ScriptEngine.RegisterGlobalConstant(id.ToString(), C4VPropList(this)); @@ -384,7 +384,7 @@ bool C4Def::Load(C4Group &hGroup, { // create new pClonkNames = new C4ComponentHost(); - if (!pClonkNames->LoadEx(hGroup, C4CFN_ClonkNames, szLanguage)) + if (!C4Language::LoadComponentHost(pClonkNames, hGroup, C4CFN_ClonkNames, szLanguage)) { delete pClonkNames; pClonkNames = NULL; } diff --git a/src/player/C4RankSystem.cpp b/src/player/C4RankSystem.cpp index 7c1cb8419..c2348e3b0 100644 --- a/src/player/C4RankSystem.cpp +++ b/src/player/C4RankSystem.cpp @@ -107,7 +107,7 @@ bool C4RankSystem::Load(C4Group &hGroup, const char *szFilenames, int DefRankBas assert(szFilenames); assert(szLanguage); // load new C4ComponentHost Ranks; - if (!Ranks.LoadEx(hGroup, szFilenames, szLanguage)) return false; + if (!C4Language::LoadComponentHost(&Ranks, hGroup, szFilenames, szLanguage)) return false; size_t iSize = Ranks.GetDataSize(); if (!iSize) return false; szRankNames=new char[iSize+1];