Files
MuditaOS/module-apps/apps-common/windows/Dialog.cpp
Lefucjusz d403db4101 [MOS-1027] Fix lack of tethering icon on 'Tethering is on' popup
Fix of the issue that pressing menu button while
in tethering resulted in LTE and no signal icons
appear on status bar instead of tethering icon.
2023-08-30 11:13:54 +02:00

162 lines
6.5 KiB
C++

// Copyright (c) 2017-2023, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
#include "Dialog.hpp"
#include "DialogMetadataMessage.hpp"
#include <i18n/i18n.hpp>
#include <Image.hpp>
#include <apps-common/ApplicationCommon.hpp>
using namespace gui;
Dialog::Dialog(app::ApplicationCommon *app, const std::string &name) : gui::AppWindow(app, name)
{
AppWindow::buildInterface();
navBar->setText(nav_bar::Side::Right, utils::translate(style::strings::common::back));
setTitle("");
icon = new Icon(this,
style::window::default_left_margin,
style::window::default_vertical_pos,
style::window::default_body_width,
style::window::default_body_height,
"",
"");
icon->setAlignment(Alignment(Alignment::Horizontal::Center, Alignment::Vertical::Top));
icon->image->setMargins(Margins(0, icon::image_top_margin, 0, icon::image_bottom_margin));
}
void Dialog::onBeforeShow(ShowMode mode, SwitchData *data)
{
if (auto metadata = dynamic_cast<DialogMetadataMessage *>(data); metadata != nullptr) {
auto title = metadata->get().title;
if (const auto crLfPos = title.find_first_of("\r\n"); crLfPos != title.npos) {
const auto lengthToReplace = title.size() - crLfPos;
title.replace(crLfPos, lengthToReplace, "...");
}
setTitle(title);
icon->text->setRichText(metadata->get().text);
icon->image->set(metadata->get().icon);
icon->resizeItems();
}
}
DialogConfirm::DialogConfirm(app::ApplicationCommon *app, const std::string &name) : Dialog(app, name)
{
navBar->setActive(nav_bar::Side::Right, false);
navBar->setText(nav_bar::Side::Center, utils::translate(style::strings::common::ok));
setFocusItem(icon);
icon->inputCallback = [=](Item &, const InputEvent &inputEvent) -> bool {
return inputEvent.isShortRelease(gui::KeyCode::KEY_RF);
};
setTitle("");
}
void DialogConfirm::onBeforeShow(ShowMode mode, SwitchData *data)
{
if (auto metadata = dynamic_cast<DialogMetadataMessage *>(data); metadata != nullptr) {
Dialog::onBeforeShow(mode, metadata);
const auto foo = metadata->get().action;
icon->activatedCallback = [foo](Item &) -> bool { return foo(); };
}
}
DialogYesNo::DialogYesNo(app::ApplicationCommon *app, const std::string &name) : Dialog(app, name)
{
icon->text->setMinimumSize(style::window::default_body_width, dialog::style::option::iconTextH);
icon->text->setMaximumSize(style::window::default_body_width, dialog::style::option::iconTextH);
icon->text->setMargins(Margins(0, 0, 0, icon::image_bottom_margin));
icon->text->setAlignment(Alignment(gui::Alignment::Horizontal::Center, gui::Alignment::Vertical::Top));
hBox = new HBox(icon, 0, 0, 0, 0);
hBox->setMinimumSize(style::window::default_body_width, dialog::style::option::h);
hBox->setAlignment(Alignment(gui::Alignment::Horizontal::Center));
hBox->setEdges(RectangleEdge::None);
no = createYesNoOption(hBox, gui::dialog::Option::NO);
yes = createYesNoOption(hBox, gui::dialog::Option::YES);
navBar->setText(nav_bar::Side::Center, utils::translate("common_confirm"));
}
Label *DialogYesNo::createYesNoOption(Item *parent, const gui::dialog::Option &optionName)
{
Label *option = new Label(parent, 0, 0, 0, 0, "");
if (optionName == gui::dialog::Option::YES) {
option->setText(utils::translate(style::strings::common::yes));
option->activatedCallback = [=](Item &) -> bool { return false; };
}
else if (optionName == gui::dialog::Option::NO) {
option->setText(utils::translate(style::strings::common::no));
option->setMargins(Margins(0, 0, dialog::style::option::margin, 0));
option->activatedCallback = [=](Item &) -> bool {
application->returnToPreviousWindow();
return true;
};
}
option->setMinimumSize(dialog::style::option::w, dialog::style::option::h);
option->setPenWidth(0);
option->setPenFocusWidth(3);
option->setEdges(RectangleEdge::Bottom | RectangleEdge::Top);
option->setFont(style::window::font::big);
option->setAlignment(Alignment(gui::Alignment::Horizontal::Center, gui::Alignment::Vertical::Center));
return option;
}
void DialogYesNo::onBeforeShow(ShowMode mode, SwitchData *data)
{
if (auto metadata = dynamic_cast<DialogMetadataMessage *>(data); metadata != nullptr) {
Dialog::onBeforeShow(mode, metadata);
auto foo = metadata->get().action;
yes->activatedCallback = [=](Item &) -> bool { return foo(); };
hBox->resizeItems();
no->setNavigationItem(NavigationDirection::RIGHT, yes);
yes->setNavigationItem(NavigationDirection::LEFT, no);
no->setNavigationItem(NavigationDirection::LEFT, yes);
yes->setNavigationItem(NavigationDirection::RIGHT, no);
setFocusItem(no);
}
}
DialogYesNoIconTxt::DialogYesNoIconTxt(app::ApplicationCommon *app, const std::string &name) : DialogYesNo(app, name)
{
iconText = new Label(this,
style::window::default_left_margin,
style::window::default_vertical_pos,
style::window::default_body_width,
dialog::style::iconTextLabel::h,
"");
iconText->setText("");
iconText->setEdges(RectangleEdge::None);
iconText->setFont(style::window::font::largelight);
iconText->setAlignment(gui::Alignment(gui::Alignment::Horizontal::Center, gui::Alignment::Vertical::Center));
}
void DialogYesNoIconTxt::onBeforeShow(ShowMode mode, SwitchData *data)
{
if (auto metadata = dynamic_cast<DialogMetadataMessage *>(data); metadata != nullptr) {
DialogYesNo::onBeforeShow(mode, metadata);
iconText->setText(metadata->get().iconText);
setFocusItem(no);
}
}
DialogRetry::DialogRetry(app::ApplicationCommon *app, const std::string &name) : Dialog(app, name)
{
navBar->setText(nav_bar::Side::Center, utils::translate(style::strings::common::retry));
setFocusItem(navBar);
}
void DialogRetry::onBeforeShow(ShowMode mode, SwitchData *data)
{
if (auto metadata = dynamic_cast<DialogMetadataMessage *>(data); metadata != nullptr) {
Dialog::onBeforeShow(mode, metadata);
auto foo = metadata->get().action;
navBar->activatedCallback = [foo](Item &) -> bool { return foo(); };
}
}