Rev 197 | Blame | Compare with Previous | Last modification | View Log | RSS feed
#include "Languages.h"
#include <stdarg.h>
#include "SpkFile.h"
CLanguages *CLanguages::_pInstance = NULL;
void CLanguages::DEBUG_AddDefaultTexts()
{
if (_lTexts)
{
_pDefaultLang = &(*_lTexts)[44];
{
LangPage &page = (*_pDefaultLang)[LS_STARTUP];
page[LANGSTARTUP_ANOTHERINSTANCE_TITLE] = L"Another Instance Detected";
page[LANGSTARTUP_ANOTHERINSTANCE] = L"Another instance of the plugin manager is already running";
page[LANGSTARTUP_LOCKEDDIR_TITLE] = L"Directory Locked";
page[LANGSTARTUP_LOCKEDDIR] = L"ERROR: The game directory:\n%s\n\nIs locked and unable to add/remove any plugins";
page[LANGSTARTUP_PROTECTEDDIR] = L"";
}
{
LangPage &page = (*_pDefaultLang)[LS_DIRECTORY];
page[LANGDIR_TITLE] = L"Directory Control";
}
{
LangPage& page = (*_pDefaultLang)[LS_SCRIPTTYPE];
page[CSpkFile::SCRIPTTYPE_LIBRARY] = L"Library";
page[CSpkFile::SCRIPTTYPE_UPDATE] = L"Package Update";
page[CSpkFile::SCRIPTTYPE_CUSTOMSTART] = L"Custom Start";
page[CSpkFile::SCRIPTTYPE_PATCH] = L"Patch";
page[CSpkFile::SCRIPTTYPE_FAKEPATCH] = L"Fake Patch";
page[CSpkFile::SCRIPTTYPE_CUSTOM] = L"Custom";
page[CSpkFile::SCRIPTTYPE_NAVIGATION] = L"Navigation";
page[CSpkFile::SCRIPTTYPE_COMBAT] = L"Combat";
page[CSpkFile::SCRIPTTYPE_MISSION] = L"Mission";
page[CSpkFile::SCRIPTTYPE_ALPLUGIN] = L"AL Plugin";
page[CSpkFile::SCRIPTTYPE_HOTKEY] = L"Hotkey";
page[CSpkFile::SCRIPTTYPE_SHIPUPGRADE] = L"Ship Upgrade";
page[CSpkFile::SCRIPTTYPE_SHIPCOMMAND] = L"Ship Command";
page[CSpkFile::SCRIPTTYPE_STATIONCOMMAND] = L"Station Command";
page[CSpkFile::SCRIPTTYPE_FLEET] = L"Fleet Management";
page[CSpkFile::SCRIPTTYPE_TRADE] = L"Trade";
page[CSpkFile::SCRIPTTYPE_PIRACY] = L"Piracy";
page[CSpkFile::SCRIPTTYPE_CHEAT] = L"Cheat";
page[CSpkFile::SCRIPTTYPE_EXTENSION] = L"Extension Mods";
page[CSpkFile::SCRIPTTYPE_REBALANCE] = L"Rebalance";
page[CSpkFile::SCRIPTTYPE_FIX] = L"Vanilla Fix";
page[CSpkFile::SCRIPTTYPE_GENERALMOD] = L"General Mod";
page[CSpkFile::SCRIPTTYPE_TOTAL] = L"Totel Conversion";
page[CSpkFile::SCRIPTTYPE_WINGCOMMAND] = L"Wing Command";
page[CSpkFile::SCRIPTTYPE_OTHER] = L"Other";
}
}
}
CLanguages::CLanguages() :
_iLanguage(-1),
_pDefaultLang(nullptr),
_pCurrentLang(nullptr),
_langStack(nullptr)
{
_lTexts = new LangTexts();
_langStack = new std::vector<int>();
}
CLanguages::~CLanguages()
{
delete _lTexts;
_pDefaultLang = NULL;
_pCurrentLang = NULL;
if (_langStack)
{
delete _langStack;
_langStack = nullptr;
}
}
CLanguages *CLanguages::Instance()
{
if ( !_pInstance ) {
_pInstance = new CLanguages();
_pInstance->DEBUG_AddDefaultTexts();
}
return _pInstance;
}
void CLanguages::Release()
{
if ( _pInstance ) {
delete _pInstance;
_pInstance = NULL;
}
}
void CLanguages::setLanguage(int lang)
{
_iLanguage = lang;
_pCurrentLang = NULL;
if (_lTexts)
{
auto itr = _lTexts->find(lang);
if (itr != _lTexts->end())
_pCurrentLang = &itr->second;
}
}
void CLanguages::pushLanguage(int lang)
{
if (_iLanguage != lang)
{
if (!_langStack)
_langStack = new std::vector<int>();
_langStack->push_back(_iLanguage);
setLanguage(lang);
}
}
void CLanguages::popLanguage()
{
if (!_langStack ||_langStack->empty())
return;
setLanguage(_langStack->back());
_langStack->pop_back();
}
Utils::WString CLanguages::findText(int section, int id)
{
LangPages *text = _pCurrentLang;
if (!text) text = _pDefaultLang;
if (!text) text = _findLanguageText();
Utils::WString out;
if (_findText(text, section, id, &out))
return out;
if (_pDefaultLang && text != _pDefaultLang)
{
if (_findText(_pDefaultLang, section, id, &out))
return out;
}
return _error(section, id);
}
bool CLanguages::_findText(LangPages *texts, int section, int id, Utils::WString *out) const
{
if (texts)
{
auto itr = texts->find(section);
if (itr != texts->end())
{
LangPage *m = &itr->second;
auto itr2 = m->find(id);
if (itr2 != m->end())
{
if (out)
(*out) = itr2->second;
return true;
}
}
}
return false;
}
LangPages *CLanguages::_findLanguageText(int id) const
{
if ( id == -1 ) id = _iLanguage;
if ( _lTexts ) {
auto itr = _lTexts->find(id);
if (itr != _lTexts->end())
return &itr->second;
}
return NULL;
}
Utils::WString CLanguages::_error(int section, int id) const
{
return L"ReadText" + Utils::WString::Number(section) + "-" + Utils::WString::Number(id);
}