// Copyright (c) 2017-2023, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md #include "ScanModesWindow.hpp" #include #include #include #include #include #include #include #include #include namespace gui { ScanModesWindow::ScanModesWindow(app::ApplicationCommon *app) : AppWindow(app, gui::name::window::scan_window) { buildInterface(); } void ScanModesWindow::rebuild() { destroyInterface(); buildInterface(); } void ScanModesWindow::buildInterface() { AppWindow::buildInterface(); navBar->setActive(nav_bar::Side::Left, true); navBar->setActive(nav_bar::Side::Center, true); navBar->setActive(nav_bar::Side::Right, true); navBar->setText(nav_bar::Side::Center, utils::translate(style::strings::common::open)); navBar->setText(nav_bar::Side::Right, utils::translate(style::strings::common::back)); setTitle(utils::translate("app_desktop_tools_antenna")); modeButtonParams.insert(std::pair(scanModes::Auto, "AUTO")); modeButtonParams.insert(std::pair(scanModes::GSM_only, "GSM only")); modeButtonParams.insert(std::pair(scanModes::WCDMA_only, "WCDMA only")); modeButtonParams.insert(std::pair(scanModes::LTE_only, "LTE only")); modeButtonParams.insert(std::pair(scanModes::TD_SCDMA_only, "TD-SCDMA only")); modeButtonParams.insert(std::pair(scanModes::UTMS_only, "UTMS only")); modeButtonParams.insert(std::pair(scanModes::CDMA_only, "CDMA only")); modeButtonParams.insert(std::pair(scanModes::HDR_only, "HDR only")); modeButtonParams.insert(std::pair(scanModes::CDMA_and_HDR_only, "CDMA and HDR only")); uint32_t w = this->getWidth() - style::window::default_left_margin * 2; uint32_t h = this->getHeight() - style::window::default_vertical_pos - navBar->getHeight(); modesBox = new gui::VBox(this, style::window::default_left_margin, style::window::default_vertical_pos, w, h); modesBox->setPenWidth(0); modesBox->setPenFocusWidth(0); modesBox->setEdges(gui::RectangleEdge::None); for (auto el : modeButtonParams) { gui::Label *modeLabel = addMode(nullptr, el.second); modeLabel->activatedCallback = [=](gui::Item &) { std::string mode; try { mode = std::to_string(el.first); } catch (const std::exception &e) { LOG_ERROR("Parse mode to string exception: %s", e.what()); } auto result = CellularServiceAPI::SetScanMode(this->application, mode); if (result) { commandResult->setText("Success!"); } else { commandResult->setText("Failure!"); } application->render(RefreshModes::GUI_REFRESH_FAST); return true; }; modesBox->addWidget(modeLabel); modesBox->addWidget(addSpacer()); } commandResult = addMode(this, ""); commandResult->setPosition(style::window::default_left_margin, antenna::scan_mode_window::reusultLabelPosY); setFocusItem(modesBox); CellularServiceAPI::GetScanMode(this->application); } void ScanModesWindow::destroyInterface() { erase(); } void ScanModesWindow::onBeforeShow(ShowMode mode, SwitchData *data) {} bool ScanModesWindow::onInput(const InputEvent &inputEvent) { bool ret = AppWindow::onInput(inputEvent); if (ret) { application->render(RefreshModes::GUI_REFRESH_FAST); return true; } return false; } gui::Label *ScanModesWindow::addMode(gui::Item *parent, const UTF8 &text) { gui::Label *label = new gui::Label(parent, antenna::scan_mode_window::commonDefaultPos, antenna::scan_mode_window::commonDefaultPos, antenna::scan_mode_window::buttonW, antenna::scan_mode_window::buttonH, text); label->setFilled(false); label->setPenFocusWidth(antenna::scan_mode_window::commonFocusPen); label->setPenWidth(antenna::scan_mode_window::commonNoFocusPen); label->setFont(style::window::font::verysmall); label->setAlignment(gui::Alignment(gui::Alignment::Horizontal::Center, gui::Alignment::Vertical::Center)); return label; } gui::Label *ScanModesWindow::addSpacer(void) { gui::Label *label = new gui::Label(nullptr, antenna::scan_mode_window::commonDefaultPos, antenna::scan_mode_window::commonDefaultPos, antenna::scan_mode_window::buttonW, antenna::scan_mode_window::commonSpacerH); label->setEdges(gui::RectangleEdge::None); label->setFilled(false); label->activeItem = false; label->visible = false; return label; } void ScanModesWindow::updateCurrentMode(std::string &data) { uint32_t mode = 0; try { mode = std::stoi(data); } catch (const std::exception &e) { LOG_ERROR("Update mode failed: %s", e.what()); return; } if (mode < modeButtonParams.size()) { modesBox->setFocusOnElement(mode); } } } // namespace gui