diff --git a/include/app/MenuBar.hpp b/include/app/MenuBar.hpp index 2821f17f..ab0ac31c 100644 --- a/include/app/MenuBar.hpp +++ b/include/app/MenuBar.hpp @@ -1,6 +1,7 @@ #pragma once #include #include +#include namespace rack { @@ -8,6 +9,7 @@ namespace app { PRIVATE widget::Widget* createMenuBar(); +PRIVATE void appendLanguageMenu(ui::Menu* menu); } // namespace app diff --git a/src/app/MenuBar.cpp b/src/app/MenuBar.cpp index f6a134ac..052d1c9d 100644 --- a/src/app/MenuBar.cpp +++ b/src/app/MenuBar.cpp @@ -985,25 +985,8 @@ struct HelpButton : MenuButton { menu->cornerFlags = BND_CORNER_TOP; menu->box.pos = getAbsoluteOffset(math::Vec(0, box.size.y)); - // Language - std::vector languages = string::getLanguages(); - std::vector languageLabels; - for (const std::string& language : languages) { - languageLabels.push_back(string::translate("language", language)); - } - menu->addChild(createIndexSubmenuItem("🌐 " + string::translate("MenuBar.help.language"), languageLabels, [=]() { - auto it = std::find(languages.begin(), languages.end(), settings::language); - return it - languages.begin(); - }, [=](size_t i) { - std::string language = get(languages, i, "en"); - if (settings::language == language) - return; - settings::language = language; - // Request restart - std::string msg = string::f(string::translate("MenuBar.help.language.restart"), string::translate("language")); - if (osdialog_message(OSDIALOG_INFO, OSDIALOG_OK_CANCEL, msg.c_str())) { - APP->window->close(); - } + menu->addChild(createSubmenuItem("🌐 " + string::translate("MenuBar.help.language"), "", [=](ui::Menu* menu) { + appendLanguageMenu(menu); })); menu->addChild(createMenuItem(string::translate("MenuBar.help.tips"), "", [=]() { @@ -1175,5 +1158,23 @@ widget::Widget* createMenuBar() { } +void appendLanguageMenu(ui::Menu* menu) { + for (const std::string& language : string::getLanguages()) { + menu->addChild(createCheckMenuItem(string::translate("language", language), "", [=]() { + return settings::language == language; + }, [=]() { + if (settings::language == language) + return; + settings::language = language; + // Request restart + std::string msg = string::f(string::translate("MenuBar.help.language.restart"), string::translate("language")); + if (osdialog_message(OSDIALOG_INFO, OSDIALOG_OK_CANCEL, msg.c_str())) { + APP->window->close(); + } + })); + } +} + + } // namespace app } // namespace rack