From ccd889e1da3774affaecba94dcc061a13248379f Mon Sep 17 00:00:00 2001 From: SimoneN64 Date: Sun, 22 Oct 2023 15:42:48 +0200 Subject: [PATCH] Implemented italian and english --- src/frontend/Language.cpp | 8 +++---- src/frontend/Language.hpp | 4 +--- src/frontend/imgui/Settings.cpp | 37 ++++++++++++++++++--------------- src/frontend/imgui/Settings.hpp | 2 +- src/frontend/imgui/Window.cpp | 22 +++++++++++--------- 5 files changed, 38 insertions(+), 35 deletions(-) diff --git a/src/frontend/Language.cpp b/src/frontend/Language.cpp index 4b5481b8..9473d250 100644 --- a/src/frontend/Language.cpp +++ b/src/frontend/Language.cpp @@ -1,10 +1,10 @@ #include namespace Language { -void SetLanguage(const std::array& lang, int selectedLang) { - switch (selectedLang) { - case AvailableLangs::ENGLISH: std::copy(english.begin(), english.end(), lang.begin()); break; - case AvailableLangs::ITALIAN: std::copy(italian.begin(), italian.end(), lang.begin()); break; +void SetLanguage(std::array& lang, int selectedLang) { + switch (selectedLang) { + case AvailableLangs::ENGLISH: lang = english; break; + case AvailableLangs::ITALIAN: lang = italian; break; default: Util::panic("Language not supported, index {}\n", selectedLang); } } diff --git a/src/frontend/Language.hpp b/src/frontend/Language.hpp index c8fee815..606b5006 100644 --- a/src/frontend/Language.hpp +++ b/src/frontend/Language.hpp @@ -23,8 +23,6 @@ enum StringID { SETTINGS_OPTION_LOCK_CHANNELS, SETTINGS_OPTION_ENABLE_JIT, SETTINGS_OPTION_LANGUAGE, - LANGUAGE_ENGLISH, - LANGUAGE_ITALIAN, STRING_COUNT }; @@ -81,5 +79,5 @@ static const std::array languages = { "Italiano" }; -void SetLanguage(const std::array& lang, int selectedLang); +void SetLanguage(std::array& lang, int selectedLang); } \ No newline at end of file diff --git a/src/frontend/imgui/Settings.cpp b/src/frontend/imgui/Settings.cpp index 1a8432db..a1985778 100644 --- a/src/frontend/imgui/Settings.cpp +++ b/src/frontend/imgui/Settings.cpp @@ -5,6 +5,7 @@ #include namespace fs = std::filesystem; +#define GET_TRANSLATED_STRING(x) languageStrings[(x)].c_str() #define checknestedjsonentry(name, type, param1, param2, defaultVal) \ do { \ @@ -100,45 +101,45 @@ Settings::~Settings() { void Settings::RenderWidget(bool& show) { if(show) { - ImGui::OpenPopup("Settings"); - if(ImGui::BeginPopupModal(languageStrings[Language::EMULATION_ITEM_SETTINGS].c_str(), &show)) { + ImGui::OpenPopup(GET_TRANSLATED_STRING(Language::EMULATION_ITEM_SETTINGS)); + if(ImGui::BeginPopupModal(GET_TRANSLATED_STRING(Language::EMULATION_ITEM_SETTINGS), &show)) { enum class SelectedSetting { CPU, Audio, Interface, COUNT }; static SelectedSetting selectedSetting = SelectedSetting::CPU; const char *categories[(int)SelectedSetting::COUNT] = { - languageStrings[Language::SETTINGS_CATEGORY_CPU].c_str(), - languageStrings[Language::SETTINGS_CATEGORY_AUDIO].c_str(), - languageStrings[Language::SETTINGS_CATEGORY_INTERFACE].c_str() }; + GET_TRANSLATED_STRING(Language::SETTINGS_CATEGORY_CPU), + GET_TRANSLATED_STRING(Language::SETTINGS_CATEGORY_AUDIO), + GET_TRANSLATED_STRING(Language::SETTINGS_CATEGORY_INTERFACE)}; - CreateComboList("##", (int*)&selectedSetting, categories, (int)SelectedSetting::COUNT); + CreateComboList("##categories", (int*)&selectedSetting, categories, (int)SelectedSetting::COUNT); ImGui::Separator(); switch (selectedSetting) { case SelectedSetting::Audio: - ImGui::Checkbox(languageStrings[Language::SETTINGS_OPTION_LOCK_CHANNELS].c_str(), &lockChannels); - ImGui::Checkbox(languageStrings[Language::SETTINGS_OPTION_MUTE].c_str(), &mute); + ImGui::Checkbox(GET_TRANSLATED_STRING(Language::SETTINGS_OPTION_LOCK_CHANNELS), &lockChannels); + ImGui::Checkbox(GET_TRANSLATED_STRING(Language::SETTINGS_OPTION_MUTE), &mute); if(mute) { volumeL = 0; volumeR = 0; ImGui::BeginDisabled(); - ImGui::SliderFloat(languageStrings[Language::SETTINGS_OPTION_VOLUME_L].c_str(), &oldVolumeL, 0, 1, "%.2f", ImGuiSliderFlags_NoInput); + ImGui::SliderFloat(GET_TRANSLATED_STRING(Language::SETTINGS_OPTION_VOLUME_L), &oldVolumeL, 0, 1, "%.2f", ImGuiSliderFlags_NoInput); if (lockChannels) { oldVolumeR = oldVolumeL; } - ImGui::SliderFloat(languageStrings[Language::SETTINGS_OPTION_VOLUME_R].c_str(), &oldVolumeR, 0, 1, "%.2f", ImGuiSliderFlags_NoInput); + ImGui::SliderFloat(GET_TRANSLATED_STRING(Language::SETTINGS_OPTION_VOLUME_R), &oldVolumeR, 0, 1, "%.2f", ImGuiSliderFlags_NoInput); ImGui::EndDisabled(); } else { volumeL = oldVolumeL; volumeR = oldVolumeR; - ImGui::SliderFloat(languageStrings[Language::SETTINGS_OPTION_VOLUME_L].c_str(), &volumeL, 0, 1, "%.2f", ImGuiSliderFlags_NoInput); + ImGui::SliderFloat(GET_TRANSLATED_STRING(Language::SETTINGS_OPTION_VOLUME_L), &volumeL, 0, 1, "%.2f", ImGuiSliderFlags_NoInput); if (!lockChannels) { - ImGui::SliderFloat(languageStrings[Language::SETTINGS_OPTION_VOLUME_R].c_str(), &volumeR, 0, 1, "%.2f", ImGuiSliderFlags_NoInput); + ImGui::SliderFloat(GET_TRANSLATED_STRING(Language::SETTINGS_OPTION_VOLUME_R), &volumeR, 0, 1, "%.2f", ImGuiSliderFlags_NoInput); } else { volumeR = volumeL; ImGui::BeginDisabled(); - ImGui::SliderFloat(languageStrings[Language::SETTINGS_OPTION_VOLUME_R].c_str(), &volumeR, 0, 1, "%.2f", ImGuiSliderFlags_NoInput); + ImGui::SliderFloat(GET_TRANSLATED_STRING(Language::SETTINGS_OPTION_VOLUME_R), &volumeR, 0, 1, "%.2f", ImGuiSliderFlags_NoInput); ImGui::EndDisabled(); } @@ -148,14 +149,16 @@ void Settings::RenderWidget(bool& show) { break; case SelectedSetting::CPU: - ImGui::Checkbox(languageStrings[Language::SETTINGS_OPTION_ENABLE_JIT].c_str(), &jit); + ImGui::Checkbox(GET_TRANSLATED_STRING(Language::SETTINGS_OPTION_ENABLE_JIT), &jit); break; case SelectedSetting::Interface: { const char* languages[Language::AVAILABLE_LANGS_COUNT] = { - Language::languages[0].c_str(), - Language::languages[1].c_str() + Language::languages[Language::ENGLISH].c_str(), + Language::languages[Language::ITALIAN].c_str() }; - CreateComboList("##", &selectedLanguage, languages, Language::AVAILABLE_LANGS_COUNT); + ImGui::Text("%s:", GET_TRANSLATED_STRING(Language::SETTINGS_OPTION_LANGUAGE)); + CreateComboList("##language", (int*)&selectedLanguage, languages, (int)Language::AVAILABLE_LANGS_COUNT); + ImGui::Separator(); } break; case SelectedSetting::COUNT: Util::panic("BRUH"); diff --git a/src/frontend/imgui/Settings.hpp b/src/frontend/imgui/Settings.hpp index 848cbe35..d4b33bf9 100644 --- a/src/frontend/imgui/Settings.hpp +++ b/src/frontend/imgui/Settings.hpp @@ -13,6 +13,7 @@ struct Settings { [[nodiscard]] FORCE_INLINE float GetVolumeR() const { return volumeR; }; void RenderWidget(bool& show); + std::array languageStrings{}; private: bool jit = false; float volumeL, volumeR; @@ -20,6 +21,5 @@ private: bool lockChannels = true; bool mute = false; int selectedLanguage = Language::ENGLISH; - std::array languageStrings{}; json settings; }; diff --git a/src/frontend/imgui/Window.cpp b/src/frontend/imgui/Window.cpp index 71e8a33c..b7ad5947 100644 --- a/src/frontend/imgui/Window.cpp +++ b/src/frontend/imgui/Window.cpp @@ -7,6 +7,7 @@ VkInstance instance{}; namespace fs = std::filesystem; +#define GET_TRANSLATED_STRING(x) settings.languageStrings[(x)].c_str() Window::Window(n64::Core& core) : settings(core) { InitSDL(); @@ -16,11 +17,11 @@ Window::Window(n64::Core& core) : settings(core) { } void Window::handleEvents(SDL_Event event, n64::Core& core) { - done = event.window.event == (int)SDL_WINDOWEVENT_CLOSE + done = event.window.event == SDL_WINDOWEVENT_CLOSE && event.window.windowID == SDL_GetWindowID(window); bool minimized = SDL_GetWindowFlags(window) & SDL_WINDOW_MINIMIZED; - core.pause = event.window.event == (int)SDL_WINDOWEVENT_FOCUS_LOST || minimized; + core.pause = event.window.event == SDL_WINDOWEVENT_FOCUS_LOST || minimized; core.render = !minimized; } @@ -176,8 +177,8 @@ void Window::LoadROM(n64::Core& core, const std::string &path) { void Window::RenderMainMenuBar(n64::Core &core) { ImGui::BeginMainMenuBar(); - if (ImGui::BeginMenu("File")) { - if (ImGui::MenuItem("Open", "O")) { + if (ImGui::BeginMenu(GET_TRANSLATED_STRING(Language::MENU_FILE))) { + if (ImGui::MenuItem(GET_TRANSLATED_STRING(Language::FILE_ITEM_OPEN), "O")) { OpenROMDialog(*this, core); } if (ImGui::MenuItem("Dump RDRAM")) { @@ -189,23 +190,24 @@ void Window::RenderMainMenuBar(n64::Core &core) { if (ImGui::MenuItem("Dump DMEM")) { core.cpu->mem.DumpDMEM(); } - if (ImGui::MenuItem("Exit")) { + if (ImGui::MenuItem(GET_TRANSLATED_STRING(Language::FILE_ITEM_EXIT))) { done = true; } ImGui::EndMenu(); } - if (ImGui::BeginMenu("Emulation")) { - if (ImGui::MenuItem("Reset")) { + if (ImGui::BeginMenu(GET_TRANSLATED_STRING(Language::MENU_EMULATION))) { + if (ImGui::MenuItem(GET_TRANSLATED_STRING(Language::EMULATION_ITEM_RESET))) { LoadROM(core, core.rom); } - if (ImGui::MenuItem("Stop")) { + if (ImGui::MenuItem(GET_TRANSLATED_STRING(Language::EMULATION_ITEM_STOP))) { windowTitle = "Kaizen"; core.rom.clear(); Util::UpdateRPC(Util::Idling); SDL_SetWindowTitle(window, windowTitle.c_str()); core.Stop(); } - if (ImGui::MenuItem(core.pause ? "Resume" : "Pause", nullptr, false, core.romLoaded)) { + if (ImGui::MenuItem(core.pause ? GET_TRANSLATED_STRING(Language::EMULATION_ITEM_RESUME) + : GET_TRANSLATED_STRING(Language::EMULATION_ITEM_PAUSE), nullptr, false, core.romLoaded)) { core.TogglePause(); if(core.pause) { shadowWindowTitle = windowTitle; @@ -217,7 +219,7 @@ void Window::RenderMainMenuBar(n64::Core &core) { } SDL_SetWindowTitle(window, windowTitle.c_str()); } - if (ImGui::MenuItem("Settings")) { + if (ImGui::MenuItem(GET_TRANSLATED_STRING(Language::EMULATION_ITEM_SETTINGS))) { showSettings = true; } ImGui::EndMenu();