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.
stable-5.4
Nicolas Hake 2013-10-29 21:32:21 +01:00
parent 924e0538fc
commit 4ebf67754c
9 changed files with 22 additions and 18 deletions

View File

@ -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();

View File

@ -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

View File

@ -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;

View File

@ -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);

View File

@ -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()

View File

@ -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())));

View File

@ -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())));

View File

@ -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;
}

View File

@ -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];