Subversion Repositories spk

Rev

Rev 104 | Rev 197 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
104 cycrow 1
#include "Languages.h"
2
 
3
#include <stdarg.h>
4
 
5
CLanguages *CLanguages::_pInstance = NULL;
6
 
122 cycrow 7
 
8
void CLanguages::DEBUG_AddDefaultTexts()
104 cycrow 9
{
122 cycrow 10
	if (_lTexts)
11
	{
12
		_pDefaultLang = &(*_lTexts)[44];
13
 
14
		{
15
			LangPage &page = (*_pDefaultLang)[LS_STARTUP];
16
			page[LANGSTARTUP_ANOTHERINSTANCE_TITLE] = "Another Instance Detected";
17
			page[LANGSTARTUP_ANOTHERINSTANCE] = "Another instance of the plugin manager is already running";
18
			page[LANGSTARTUP_LOCKEDDIR_TITLE] = "Directory Locked";
19
			page[LANGSTARTUP_LOCKEDDIR] = "ERROR: The game directory:\n%s\n\nIs locked and unable to add/remove any plugins";
20
			page[LANGSTARTUP_PROTECTEDDIR] = "";
21
		}
22
 
23
		{
24
			LangPage &page = (*_pDefaultLang)[LS_DIRECTORY];
25
			page[LANGDIR_TITLE] = "Directory Control";
26
		}
27
	}
104 cycrow 28
}
29
 
122 cycrow 30
 
31
CLanguages::CLanguages() : 
32
	_iLanguage(-1),
33
	_pDefaultLang(NULL),
34
	_pCurrentLang(NULL)
35
{
36
	_lTexts = new LangTexts();
37
}
38
 
104 cycrow 39
CLanguages::~CLanguages()
40
{
122 cycrow 41
	delete _lTexts;
42
	_pDefaultLang = NULL;
43
	_pCurrentLang = NULL;
104 cycrow 44
}
45
 
46
CLanguages *CLanguages::Instance()
47
{
48
	if ( !_pInstance ) {
49
		_pInstance = new CLanguages();
122 cycrow 50
		_pInstance->DEBUG_AddDefaultTexts();
104 cycrow 51
	}
52
 
53
	return _pInstance;
54
}
55
 
56
void CLanguages::Release()
57
{
58
	if ( _pInstance ) {
59
		delete _pInstance;
60
		_pInstance = NULL;
61
	}
62
}
63
 
122 cycrow 64
void CLanguages::SetLanguage(int lang) 
65
{ 
66
	_iLanguage = lang; 
67
	_pCurrentLang = NULL;
68
	if (_lTexts)
69
	{
70
		auto itr = _lTexts->find(lang);
71
		if (itr != _lTexts->end())
72
			_pCurrentLang = &itr->second;
73
	}
74
}
104 cycrow 75
 
122 cycrow 76
 
104 cycrow 77
Utils::String CLanguages::findText(int section, int id)
78
{
122 cycrow 79
	LangPages *text = _pCurrentLang;
80
	if (!text) text = _pDefaultLang;
81
	if (!text) text = _findLanguageText();
82
 
83
	Utils::String out;
84
	if (_findText(text, section, id, &out))
85
		return out;
86
 
87
	if (_pDefaultLang && text != _pDefaultLang)
104 cycrow 88
	{
122 cycrow 89
		if (_findText(_pDefaultLang, section, id, &out))
90
			return out;
104 cycrow 91
	}
92
 
122 cycrow 93
	return _error(section, id);
104 cycrow 94
}
95
 
122 cycrow 96
bool CLanguages::_findText(LangPages *texts, int section, int id, Utils::String *out) const
104 cycrow 97
{
122 cycrow 98
	if (texts)
99
	{
100
		auto itr = texts->find(section);
101
		if (itr != texts->end())
104 cycrow 102
		{
122 cycrow 103
			LangPage *m = &itr->second;
104
			auto itr2 = m->find(id);
105
			if (itr2 != m->end())
106
			{
107
				if (out)
108
					(*out) = itr2->second;
109
				return true;
110
			}
104 cycrow 111
		}
112
	}
113
 
122 cycrow 114
	return false;
115
}
116
 
117
LangPages *CLanguages::_findLanguageText(int id) const
118
{
119
	if ( id == -1 ) id = _iLanguage;
120
 
121
	if ( _lTexts ) {
122
		auto itr = _lTexts->find(id);
123
		if (itr != _lTexts->end())
124
			return &itr->second;
125
	}
126
 
104 cycrow 127
	return NULL;
128
}
122 cycrow 129
 
130
Utils::String CLanguages::_error(int section, int id) const
131
{
132
	return "ReadText" + Utils::String::Number(section) + "-" + Utils::String::Number(id);
133
}