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