From ebb2606de61e38f135ff72fe8a913d47ed1a356b Mon Sep 17 00:00:00 2001 From: WrinklyNinja Date: Tue, 4 Feb 2014 15:50:14 +0000 Subject: [PATCH] Trying a class for the various language parameters. --- src/backend/generators.h | 2 +- src/backend/helpers.cpp | 81 +++++++++++++++++++++++++++++----------- src/backend/helpers.h | 17 +++++++-- src/backend/parsers.h | 4 +- src/gui/editor.cpp | 21 +++++++---- src/gui/ids.cpp | 52 +------------------------- src/gui/ids.h | 16 -------- src/gui/main.cpp | 4 +- src/gui/settings.cpp | 14 +++++-- 9 files changed, 104 insertions(+), 107 deletions(-) diff --git a/src/backend/generators.h b/src/backend/generators.h index d2b18f7d..0c8f524a 100644 --- a/src/backend/generators.h +++ b/src/backend/generators.h @@ -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(); diff --git a/src/backend/helpers.cpp b/src/backend/helpers.cpp index 8c042c97..b0c88bca 100644 --- a/src/backend/helpers.cpp +++ b/src/backend/helpers.cpp @@ -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; } diff --git a/src/backend/helpers.h b/src/backend/helpers.h index 7c5d8a8b..b188a973 100644 --- a/src/backend/helpers.h +++ b/src/backend/helpers.h @@ -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 { diff --git a/src/backend/parsers.h b/src/backend/parsers.h index 12457bc3..f4f91976 100644 --- a/src/backend/parsers.h +++ b/src/backend/parsers.h @@ -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(); - unsigned int lang = boss::GetLangNum(node["lang"].as()); + unsigned int lang = boss::Language(node["lang"].as()).Code(); rhs = boss::MessageContent(str, lang); diff --git a/src/gui/editor.cpp b/src/gui/editor.cpp index 14503069..3357fb85 100644 --- a/src/gui/editor.cpp +++ b/src/gui/editor.cpp @@ -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 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()); } diff --git a/src/gui/ids.cpp b/src/gui/ids.cpp index 2b7cdd55..183f5e37 100644 --- a/src/gui/ids.cpp +++ b/src/gui/ids.cpp @@ -27,14 +27,6 @@ #include #include -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; -} +} \ No newline at end of file diff --git a/src/gui/ids.h b/src/gui/ids.h index 08712bdd..e28fdff9 100644 --- a/src/gui/ids.h +++ b/src/gui/ids.h @@ -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 diff --git a/src/gui/main.cpp b/src/gui/main.cpp index 851713dc..5efea6b1 100644 --- a/src/gui/main.cpp +++ b/src/gui/main.cpp @@ -568,7 +568,7 @@ void Launcher::OnSortPlugins(wxCommandEvent& event) { //Set language. unsigned int lang; if (_settings["Language"]) - lang = GetLangNum(_settings["Language"].as()); + lang = Language(_settings["Language"].as()).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()); + lang = Language(_settings["Language"].as()).Code(); else lang = boss::g_lang_any; diff --git a/src/gui/settings.cpp b/src/gui/settings.cpp index a98308df..c2d19ccf 100644 --- a/src/gui/settings.cpp +++ b/src/gui/settings.cpp @@ -22,6 +22,7 @@ */ #include "settings.h" +#include "../backend/helpers.h" #include "../backend/globals.h" #include #include @@ -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())); + LanguageChoice->SetSelection(boss::Language(_settings["Language"].as()).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();