Files
MuditaOS/module-apps/application-special-input/windows/SpecialInputMainWindow.cpp
Piotr Tański 4c61595a27 [EGD-4801] Add application-wide top bar manager
Applications configure the top bar once for all their windows.
Sometimes, windows need to configure top bars with its configuration.
2021-01-21 10:46:57 +01:00

87 lines
3.0 KiB
C++

// Copyright (c) 2017-2020, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
#include "SpecialInputMainWindow.hpp"
#include "../ApplicationSpecialInput.hpp"
#include "Style.hpp"
#include "messages/AppMessage.hpp"
#include <i18n/i18n.hpp>
#include <cassert>
using namespace gui;
SpecialInputMainWindow::SpecialInputMainWindow(app::Application *app)
: AppWindow(app, app::char_select), model{std::make_shared<SpecialInputModel>(this->application)}
{
buildInterface();
}
void SpecialInputMainWindow::onBeforeShow(ShowMode mode, SwitchData *data)
{
assert(dynamic_cast<app::ApplicationSpecialInput *>(application));
model->clearData();
actualWindow = specialInputStyle::CharactersType::Emoji;
switchPage();
}
void SpecialInputMainWindow::rebuild()
{
destroyInterface();
buildInterface();
}
void SpecialInputMainWindow::buildInterface()
{
AppWindow::buildInterface();
bottomBar->setText(BottomBar::Side::CENTER, utils::localize.get(style::strings::common::select));
bottomBar->setText(BottomBar::Side::RIGHT, utils::localize.get(style::strings::common::back));
bottomBar->setText(BottomBar::Side::LEFT, utils::localize.get(style::strings::common::emoji));
charList = new gui::ListView(this,
specialInputStyle::specialInputListView::x,
specialInputStyle::specialInputListView::y,
specialInputStyle::specialInputListView::w,
specialInputStyle::specialInputListView::h,
model);
setFocusItem(charList);
}
void SpecialInputMainWindow::destroyInterface()
{
model->clearData();
setFocusItem(nullptr);
erase();
}
bool SpecialInputMainWindow::onInput(const InputEvent &inputEvent)
{
auto ret = AppWindow::onInput(inputEvent);
if (inputEvent.state == InputEvent::State::keyReleasedShort) {
switch (inputEvent.keyCode) {
case KeyCode::KEY_LF: {
switchPage();
return true;
}
default:
break;
}
}
return ret;
}
void SpecialInputMainWindow::switchPage()
{
model->clearData();
if (actualWindow == specialInputStyle::CharactersType::Emoji) {
model->createData(specialInputStyle::CharactersType::SpecialCharacters);
actualWindow = specialInputStyle::CharactersType::SpecialCharacters;
bottomBar->setText(BottomBar::Side::LEFT, utils::localize.get(style::strings::common::emoji));
setTitle(utils::localize.get("app_special_input_window"));
}
else if (actualWindow == specialInputStyle::CharactersType::SpecialCharacters) {
model->createData(specialInputStyle::CharactersType::Emoji);
actualWindow = specialInputStyle::CharactersType::Emoji;
bottomBar->setText(BottomBar::Side::LEFT, utils::localize.get(style::strings::common::special_chars));
setTitle(utils::localize.get("app_emoji_input_window"));
}
}