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; 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) void C4ComponentHost::FinishLoad(const StdStrBuf & name, C4Group &hGroup)
{ {
Data.EnsureUnicode(); Data.EnsureUnicode();

View File

@ -36,7 +36,6 @@ public:
size_t GetDataSize() const { return Data.getLength(); } size_t GetDataSize() const { return Data.getLength(); }
bool Load(C4Group &hGroup, const char *szFilename, const char *szLanguage=NULL); bool Load(C4Group &hGroup, const char *szFilename, const char *szLanguage=NULL);
bool Load(C4GroupSet &hGroupSet, 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); bool GetLanguageString(const char *szLanguage, class StdStrBuf &rTarget);
protected: protected:
// The component host's Data has changed. This callback can be used by // 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; 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() void C4Language::InitInfos()
{ {
C4Group hGroup; C4Group hGroup;

View File

@ -66,6 +66,9 @@ public:
// Handling of external language packs // Handling of external language packs
int GetPackCount(); int GetPackCount();
C4GroupSet GetPackGroups(C4Group &); 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 // Handling of language info loaded from string tables
int GetInfoCount(); int GetInfoCount();
C4LanguageInfo *GetInfo(int iIndex); C4LanguageInfo *GetInfo(int iIndex);

View File

@ -252,12 +252,12 @@ bool C4Game::OpenScenario()
#endif #endif
// Title // 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)) if (!Title.GetLanguageString(Config.General.LanguageEx, ScenarioTitle))
ScenarioTitle.Copy(C4S.Head.Title); ScenarioTitle.Copy(C4S.Head.Title);
// String tables // 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) // Load parameters (not as network client, because then team info has already been sent by host)
if (!Network.isEnabled() || Network.isHost()) if (!Network.isEnabled() || Network.isHost())
@ -2655,7 +2655,7 @@ bool C4Game::LoadAdditionalSystemGroup(C4Group &parent_group)
if (SysGroup.OpenAsChild(&parent_group, C4CFN_System)) if (SysGroup.OpenAsChild(&parent_group, C4CFN_System))
{ {
C4LangStringTable SysGroupString; C4LangStringTable SysGroupString;
SysGroupString.LoadEx(SysGroup, C4CFN_ScriptStringTbl, Config.General.LanguageEx); C4Language::LoadComponentHost(&SysGroupString, SysGroup, C4CFN_ScriptStringTbl, Config.General.LanguageEx);
// load custom scenario control definitions // load custom scenario control definitions
if (SysGroup.FindEntry(C4CFN_PlayerControls)) if (SysGroup.FindEntry(C4CFN_PlayerControls))
{ {
@ -2797,7 +2797,7 @@ bool C4Game::InitKeyboard()
void C4Game::UpdateLanguage() void C4Game::UpdateLanguage()
{ {
// Reload System.ocg string table // 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() bool C4Game::InitPlayerControlSettings()

View File

@ -94,7 +94,7 @@ namespace C4GameLobby
StdStrBuf sDesc; StdStrBuf sDesc;
// load desc // load desc
C4ComponentHost DefDesc; C4ComponentHost DefDesc;
if (DefDesc.LoadEx(ScenarioFile, C4CFN_ScenarioDesc, Config.General.LanguageEx)) if (C4Language::LoadComponentHost(&DefDesc, ScenarioFile, C4CFN_ScenarioDesc, Config.General.LanguageEx))
{ {
C4RTFFile rtf; C4RTFFile rtf;
rtf.Load(StdBuf(DefDesc.GetData(), SLen(DefDesc.GetData()))); rtf.Load(StdBuf(DefDesc.GetData(), SLen(DefDesc.GetData())));

View File

@ -128,7 +128,7 @@ bool C4MapFolderData::Load(C4Group &hGroup, C4ScenarioListLoader::Folder *pScenL
Clear(); Clear();
// load localization info // load localization info
C4LangStringTable LangTable; 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 // load core data
StdStrBuf Buf; StdStrBuf Buf;
if (!hGroup.LoadEntryString(C4CFN_MapFolderData, &Buf)) return false; if (!hGroup.LoadEntryString(C4CFN_MapFolderData, &Buf)) return false;
@ -483,7 +483,7 @@ bool C4ScenarioListLoader::Entry::Load(C4Group *pFromGrp, const StdStrBuf *psFil
return false; return false;
// Load entry name // Load entry name
C4ComponentHost DefNames; 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)) if (DefNames.GetLanguageString(Config.General.LanguageEx, sName))
fNameLoaded = true; fNameLoaded = true;
// load entry icon // load entry icon
@ -524,7 +524,7 @@ bool C4ScenarioListLoader::Entry::Load(C4Group *pFromGrp, const StdStrBuf *psFil
{ {
// load desc // load desc
C4ComponentHost DefDesc; C4ComponentHost DefDesc;
if (DefDesc.LoadEx(Group, C4CFN_ScenarioDesc, Config.General.LanguageEx)) if (C4Language::LoadComponentHost(&DefDesc, Group, C4CFN_ScenarioDesc, Config.General.LanguageEx))
{ {
C4RTFFile rtf; C4RTFFile rtf;
rtf.Load(StdBuf(DefDesc.GetData(), SLen(DefDesc.GetData()))); rtf.Load(StdBuf(DefDesc.GetData(), SLen(DefDesc.GetData())));

View File

@ -360,7 +360,7 @@ bool C4Def::Load(C4Group &hGroup,
} }
// Read string table // Read string table
StringTable.LoadEx(hGroup, C4CFN_ScriptStringTbl, szLanguage); C4Language::LoadComponentHost(&StringTable, hGroup, C4CFN_ScriptStringTbl, szLanguage);
// Register ID with script engine // Register ID with script engine
::ScriptEngine.RegisterGlobalConstant(id.ToString(), C4VPropList(this)); ::ScriptEngine.RegisterGlobalConstant(id.ToString(), C4VPropList(this));
@ -384,7 +384,7 @@ bool C4Def::Load(C4Group &hGroup,
{ {
// create new // create new
pClonkNames = new C4ComponentHost(); pClonkNames = new C4ComponentHost();
if (!pClonkNames->LoadEx(hGroup, C4CFN_ClonkNames, szLanguage)) if (!C4Language::LoadComponentHost(pClonkNames, hGroup, C4CFN_ClonkNames, szLanguage))
{ {
delete pClonkNames; pClonkNames = NULL; delete pClonkNames; pClonkNames = NULL;
} }

View File

@ -107,7 +107,7 @@ bool C4RankSystem::Load(C4Group &hGroup, const char *szFilenames, int DefRankBas
assert(szFilenames); assert(szLanguage); assert(szFilenames); assert(szLanguage);
// load new // load new
C4ComponentHost Ranks; C4ComponentHost Ranks;
if (!Ranks.LoadEx(hGroup, szFilenames, szLanguage)) return false; if (!C4Language::LoadComponentHost(&Ranks, hGroup, szFilenames, szLanguage)) return false;
size_t iSize = Ranks.GetDataSize(); size_t iSize = Ranks.GetDataSize();
if (!iSize) return false; if (!iSize) return false;
szRankNames=new char[iSize+1]; szRankNames=new char[iSize+1];