Trying a class for the various language parameters.

This commit is contained in:
WrinklyNinja
2014-02-04 15:50:14 +00:00
parent 41988d931e
commit ebb2606de6
9 changed files with 104 additions and 107 deletions
+1 -1
View File
@@ -661,7 +661,7 @@ namespace YAML {
inline Emitter& operator << (Emitter& out, const boss::MessageContent& rhs) {
out << BeginMap;
out << Key << "lang" << Value << boss::GetLangString(rhs.Language());
out << Key << "lang" << Value << boss::Language(rhs.Language()).ISOCode();
out << Key << "str" << Value << rhs.Str();
+59 -22
View File
@@ -232,30 +232,67 @@ namespace boss {
return "file:///" + file.string(); //Seems that we don't need to worry about encoding, tested with Unicode paths.
}
std::string GetLangString(const unsigned int num) {
if (num == g_lang_english)
return "eng";
else if (num == g_lang_spanish)
return "spa";
else if (num == g_lang_russian)
return "rus";
else if (num == g_lang_french)
return "fra";
else
return "";
Language::Language(const unsigned int code) : _code(code) {
if (_code == g_lang_any) {
_name = "None Specified";
_isoCode = "";
}
else if (_code == g_lang_english) {
_name = "English";
_isoCode = "eng";
}
else if (_code == g_lang_spanish) {
_name = "Español";
_isoCode = "spa";
}
else if (_code == g_lang_russian) {
_name = "Русский";
_isoCode = "rus";
}
else if (_code == g_lang_french) {
_name = "Français";
_isoCode = "fra";
}
}
unsigned int GetLangNum(const std::string& str) {
if (boost::iequals(str, "eng"))
return g_lang_english;
else if (boost::iequals(str, "spa"))
return g_lang_spanish;
else if (boost::iequals(str, "rus"))
return g_lang_russian;
else if (boost::iequals(str, "fra"))
return g_lang_french;
else
return g_lang_any;
Language::Language(const std::string& nameOrISOCode) {
if (nameOrISOCode == "English" || nameOrISOCode == "eng") {
_name = "English";
_isoCode = "eng";
_code = g_lang_english;
}
else if (nameOrISOCode == "Español" || nameOrISOCode == "spa") {
_name = "Español";
_isoCode = "spa";
_code = g_lang_english;
}
else if (nameOrISOCode == "Русский" || nameOrISOCode == "rus") {
_name = "Русский";
_isoCode = "rus";
_code = g_lang_english;
}
else if (nameOrISOCode == "Français" || nameOrISOCode == "fra") {
_name = "Français";
_isoCode = "fra";
_code = g_lang_french;
}
else {
_name = "None Specified";
_isoCode = "";
_code = g_lang_any;
}
}
unsigned int Language::Code() const {
return _code;
}
std::string Language::Name() const {
return _name;
}
std::string Language::ISOCode() const {
return _isoCode;
}
+14 -3
View File
@@ -65,9 +65,20 @@ namespace boss {
//Turns an absolute filesystem path into a valid file:// URL.
std::string ToFileURL(const boost::filesystem::path& file);
//Converts between BOSS's global const value and the ISO 639-3 value for a language.
std::string GetLangString(const unsigned int num);
unsigned int GetLangNum(const std::string& str);
//Language class for simpler language support.
class Language {
public:
Language(const unsigned int code);
Language(const std::string& nameOrISOCode);
unsigned int Code() const;
std::string Name() const;
std::string ISOCode() const;
private:
unsigned int _code;
std::string _isoCode;
std::string _name;
};
//Version class for more robust version comparisons.
class Version {
+2 -2
View File
@@ -154,7 +154,7 @@ namespace YAML {
static Node encode(const boss::MessageContent& rhs) {
Node node;
node["str"] = rhs.Str();
node["lang"] = boss::GetLangString(rhs.Language());
node["lang"] = boss::Language(rhs.Language()).ISOCode();
return node;
}
@@ -164,7 +164,7 @@ namespace YAML {
return false;
std::string str = node["str"].as<std::string>();
unsigned int lang = boss::GetLangNum(node["lang"].as<std::string>());
unsigned int lang = boss::Language(node["lang"].as<std::string>()).Code();
rhs = boss::MessageContent(str, lang);
+14 -7
View File
@@ -103,7 +103,7 @@ wxString MessageList::OnGetItemText(long item, long column) const {
} else if (column == 2) {
return FromUTF8(_messages[item].Condition());
} else {
return Language[ GetLangIndex(boss::GetLangString(_messages[item].ChooseContent(_language).Language())) ];
return FromUTF8(boss::Language(_messages[item].ChooseContent(_language).Language()).Name());
}
}
@@ -1033,9 +1033,16 @@ wxString FileEditDialog::GetCondition() const {
MessageEditDialog::MessageEditDialog(wxWindow *parent, const wxString& title) : wxDialog(parent, wxID_ANY, title, wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER) {
wxArrayString languages;
languages.Add(FromUTF8(boss::Language(boss::g_lang_any).Name()));
languages.Add(FromUTF8(boss::Language(boss::g_lang_english).Name()));
languages.Add(FromUTF8(boss::Language(boss::g_lang_spanish).Name()));
languages.Add(FromUTF8(boss::Language(boss::g_lang_russian).Name()));
languages.Add(FromUTF8(boss::Language(boss::g_lang_french).Name()));
//Initialise controls.
_type = new wxChoice(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, 3, Type);
_language = new wxChoice(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, LanguageSize, Language);
_language = new wxChoice(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, languages);
_condition = new wxTextCtrl(this, wxID_ANY);
_str = new wxTextCtrl(this, wxID_ANY);
@@ -1130,7 +1137,7 @@ void MessageEditDialog::SetMessage(const boss::Message& message) {
vector<boss::MessageContent> contents = message.Content();
for (size_t i=0, max=contents.size(); i < max; ++i) {
_content->InsertItem(i, Language[ GetLangIndex(boss::GetLangString(contents[i].Language())) ]);
_content->InsertItem(i, FromUTF8(boss::Language(contents[i].Language()).Name()));
_content->SetItem(i, 1, FromUTF8(contents[i].Str()));
}
}
@@ -1152,7 +1159,7 @@ boss::Message MessageEditDialog::GetMessage() const {
for (size_t i=0, max=_content->GetItemCount(); i < max; ++i) {
string str = string(_content->GetItemText(i, 1).ToUTF8());
unsigned int lang = GetLangIndex(_content->GetItemText(i, 0));
unsigned int lang = boss::Language(string(_content->GetItemText(i, 0).ToUTF8())).Code();
contents.push_back(boss::MessageContent(str, lang));
}
@@ -1161,7 +1168,7 @@ boss::Message MessageEditDialog::GetMessage() const {
}
void MessageEditDialog::OnSelect(wxListEvent& event) {
_language->SetSelection(GetLangIndex(_content->GetItemText(event.GetIndex(), 0)));
_language->SetSelection(boss::Language(string(_content->GetItemText(event.GetIndex(), 0).ToUTF8())).Code());
_str->SetValue(_content->GetItemText(event.GetIndex(), 1));
editBtn->Enable(true);
removeBtn->Enable(true);
@@ -1169,7 +1176,7 @@ void MessageEditDialog::OnSelect(wxListEvent& event) {
void MessageEditDialog::OnAdd(wxCommandEvent& event) {
long i = _content->GetItemCount();
_content->InsertItem(i, Language[_language->GetSelection()]);
_content->InsertItem(i, FromUTF8(boss::Language(_language->GetSelection()).Name()));
_content->SetItem(i, 1, _str->GetValue());
}
@@ -1184,7 +1191,7 @@ void MessageEditDialog::OnEdit(wxCommandEvent& event) {
return;
}
long i = _content->GetFirstSelected();
_content->SetItem(i, 0, Language[_language->GetSelection()]);
_content->SetItem(i, 0, FromUTF8(boss::Language(_language->GetSelection()).Name()));
_content->SetItem(i, 1, _str->GetValue());
}
+1 -51
View File
@@ -27,14 +27,6 @@
#include <boost/algorithm/string.hpp>
#include <boost/locale.hpp>
const wxString Language[LanguageSize] = {
translate("None Specified"),
wxT("English"),
wxString::FromUTF8("Español"),
wxString::FromUTF8("Русский"),
wxString::FromUTF8("Français"),
};
wxString translate(const std::string& str) {
return wxString::FromUTF8(boost::locale::translate(str).str().c_str());
}
@@ -45,46 +37,4 @@ wxString FromUTF8(const std::string& str) {
wxString FromUTF8(const boost::format& f) {
return FromUTF8(f.str());
}
unsigned int GetLangIndex(const std::string& str) {
if (boost::iequals(str, "eng"))
return 1;
else if (boost::iequals(str, "spa"))
return 2;
else if (boost::iequals(str, "rus"))
return 3;
else if (boost::iequals(str, "fra"))
return 4;
else
return 0;
}
std::string GetLangStringFromIndex(const unsigned int index) {
if (index == 1)
return "eng";
else if (index == 2)
return "spa";
else if (index == 3)
return "rus";
else if (index == 4)
return "fra";
else
return "";
}
unsigned int GetLangNum(const wxString& str) {
for (int i = 0; i < LanguageSize; ++i) {
if (str == Language[i])
return GetLangNum(GetLangStringFromIndex(i));
}
return boss::g_lang_any;
}
unsigned int GetLangIndex(const wxString& str) {
for (int i = 0; i < LanguageSize; ++i) {
if (str == Language[i])
return i;
}
return 0;
}
}
-16
View File
@@ -74,26 +74,10 @@ enum {
BUTTON_MoveDown,
};
const unsigned int LanguageSize = 5;
extern const wxString Language[LanguageSize];
wxString translate(const std::string& str);
wxString FromUTF8(const std::string& str);
wxString FromUTF8(const boost::format& f);
//Get the index in the above array of the language corresponding to a given ISO 639-3 code.
unsigned int GetLangIndex(const std::string& str);
//Get the index in the above array of one of its strings.
unsigned int GetLangIndex(const wxString& str);
//Get the ISO 639-3 code corresponding to the language at a given index in the above array.
std::string GetLangStringFromIndex(const unsigned int index);
//Get the BOSS constant for the language string in the above array.
unsigned int GetLangNum(const wxString& str);
#endif
+2 -2
View File
@@ -568,7 +568,7 @@ void Launcher::OnSortPlugins(wxCommandEvent& event) {
//Set language.
unsigned int lang;
if (_settings["Language"])
lang = GetLangNum(_settings["Language"].as<string>());
lang = Language(_settings["Language"].as<string>()).Code();
else
lang = boss::g_lang_any;
@@ -926,7 +926,7 @@ void Launcher::OnEditMetadata(wxCommandEvent& event) {
//Set language.
unsigned int lang;
if (_settings["Language"])
lang = GetLangNum(_settings["Language"].as<string>());
lang = Language(_settings["Language"].as<string>()).Code();
else
lang = boss::g_lang_any;
+11 -3
View File
@@ -22,6 +22,7 @@
*/
#include "settings.h"
#include "../backend/helpers.h"
#include "../backend/globals.h"
#include <boost/algorithm/string.hpp>
#include <boost/log/trivial.hpp>
@@ -49,9 +50,16 @@ SettingsFrame::SettingsFrame(wxWindow *parent, const wxString& title, YAML::Node
Games.Add(FromUTF8(_games[i].Name()));
}
wxArrayString languages;
languages.Add(FromUTF8(boss::Language(boss::g_lang_any).Name()));
languages.Add(FromUTF8(boss::Language(boss::g_lang_english).Name()));
languages.Add(FromUTF8(boss::Language(boss::g_lang_spanish).Name()));
languages.Add(FromUTF8(boss::Language(boss::g_lang_russian).Name()));
languages.Add(FromUTF8(boss::Language(boss::g_lang_french).Name()));
//Initialise controls.
GameChoice = new wxChoice(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, Games);
LanguageChoice = new wxChoice(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, LanguageSize, Language);
LanguageChoice = new wxChoice(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, languages);
DebugVerbosityChoice = new wxChoice(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, 4, DebugVerbosity);
gamesList = new wxListView(this, LIST_Games, wxDefaultPosition, wxDefaultSize, wxLC_REPORT|wxLC_SINGLE_SEL);
@@ -146,7 +154,7 @@ void SettingsFrame::SetDefaultValues() {
BOOST_LOG_TRIVIAL(debug) << "Setting default values for BOSS's settings.";
if (_settings["Language"]) {
LanguageChoice->SetSelection(GetLangIndex(_settings["Language"].as<string>()));
LanguageChoice->SetSelection(boss::Language(_settings["Language"].as<string>()).Code());
}
if (_settings["Game"]) {
@@ -202,7 +210,7 @@ void SettingsFrame::OnQuit(wxCommandEvent& event) {
else
_settings["Game"] = _games[GameChoice->GetSelection() - 1].FolderName();
_settings["Language"] = GetLangStringFromIndex(LanguageChoice->GetSelection());
_settings["Language"] = boss::Language(LanguageChoice->GetSelection()).ISOCode();
_settings["Debug Verbosity"] = DebugVerbosityChoice->GetSelection();