// Copyright (c) 2017-2020, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md #include #include "service-appmgr/Controller.hpp" #include "../ApplicationSettings.hpp" #include "i18/i18.hpp" #include "Label.hpp" #include "LanguageWindow.hpp" #include #include namespace gui { LanguageWindow::LanguageWindow(app::Application *app) : AppWindow(app, "Languages") { buildInterface(); setFocusItem(options[0]); } void LanguageWindow::rebuild() { // find which widget has focus uint32_t index = 0; for (uint32_t i = 0; i < options.size(); i++) if (options[i] == getFocusItem()) { index = i; break; } destroyInterface(); buildInterface(); setFocusItem(options[index]); } void LanguageWindow::buildInterface() { AppWindow::buildInterface(); bottomBar->setActive(BottomBar::Side::CENTER, true); bottomBar->setActive(BottomBar::Side::RIGHT, true); bottomBar->setText(BottomBar::Side::CENTER, utils::localize.get(style::strings::common::select)); bottomBar->setText(BottomBar::Side::RIGHT, utils::localize.get(style::strings::common::back)); topBar->setActive(TopBar::Elements::SIGNAL, true); topBar->setActive(TopBar::Elements::BATTERY, true); setTitle(utils::localize.get("app_settings_title_languages")); options.push_back(addOptionLabel(utils::localize.get("app_settings_language_english"), [=](gui::Item &item) { LOG_INFO("selected display language: english"); app::manager::Controller::changeDisplayLanguage(application, utils::Lang::En); return true; })); options.push_back(addOptionLabel(utils::localize.get("app_settings_language_polish"), [=](gui::Item &) { LOG_INFO("selected display language: polish"); app::manager::Controller::changeDisplayLanguage(application, utils::Lang::Pl); return true; })); options.push_back(addOptionLabel(utils::localize.get("app_settings_language_german"), [=](gui::Item &) { LOG_INFO("selected display language: german"); app::manager::Controller::changeDisplayLanguage(application, utils::Lang::De); return true; })); options.push_back(addOptionLabel(utils::localize.get("app_settings_language_spanish"), [=](gui::Item &) { LOG_INFO("selected display language: spanish"); app::manager::Controller::changeDisplayLanguage(application, utils::Lang::Sp); return true; })); // set position and navigation for labels uint32_t size = options.size(); for (uint32_t i = 0; i < size; i++) { options[i]->setPosition(style::settings::window::languageChange::options_posX, style::settings::window::languageChange::options_posY + (i * style::settings::window::languageChange::options_distance_between)); options[i]->setNavigationItem(NavigationDirection::DOWN, options[(i + 1) % size]); options[i]->setNavigationItem(NavigationDirection::UP, options[(size + i - 1) % size]); } } void LanguageWindow::destroyInterface() { erase(); invalidate(); } void LanguageWindow::invalidate() noexcept { options.clear(); } gui::Item *LanguageWindow::addOptionLabel(const std::string &text, std::function activatedCallback) { gui::Label *label = new gui::Label(this, 17, 0, 480 - 34, 60, text); label->setPadding(gui::Padding(16, 0, 0, 0)); label->setFilled(false); label->setPenFocusWidth(3); label->setPenWidth(0); label->setFont(style::window::font::medium); label->setAlignment(gui::Alignment(gui::Alignment::Horizontal::Left, gui::Alignment::Vertical::Center)); label->setRadius(11); label->activatedCallback = activatedCallback; return label; } void LanguageWindow::onBeforeShow(ShowMode mode, SwitchData *data) { setFocusItem(options[0]); } } /* namespace gui */