mirror of
https://github.com/mudita/MuditaOS.git
synced 2025-12-31 01:48:26 -05:00
105 lines
4.5 KiB
C++
105 lines
4.5 KiB
C++
// Copyright (c) 2017-2024, Mudita Sp. z.o.o. All rights reserved.
|
|
// For licensing, see https://github.com/mudita/MuditaOS/blob/master/LICENSE.md
|
|
|
|
#include "application-test/ApplicationTest.hpp"
|
|
#include "log/log.hpp"
|
|
#include "presenters/TestPresenter.hpp"
|
|
#include "windows/TestPopup.hpp"
|
|
#include "windows/TestWindow.hpp"
|
|
|
|
namespace app
|
|
{
|
|
ApplicationTest::ApplicationTest(const std::string &name,
|
|
const std::string &parent,
|
|
StatusIndicators statusIndicators,
|
|
StartInBackground startInBackground)
|
|
: Application(name, parent, statusIndicators, startInBackground)
|
|
{
|
|
LOG_INFO("Created!");
|
|
}
|
|
|
|
ApplicationTest::~ApplicationTest()
|
|
{
|
|
// this destructor is needed for unique_ptr forward declared TestPresenter
|
|
}
|
|
|
|
sys::ReturnCodes ApplicationTest::InitHandler()
|
|
{
|
|
LOG_INFO("Initializing!");
|
|
// NOTE
|
|
// this is very important! as it:
|
|
// 1. sets state initializing on app
|
|
// 2. initailizes settigns - every app have settings object by default
|
|
const auto ret = Application::InitHandler();
|
|
if (ret != sys::ReturnCodes::Success) {
|
|
LOG_ERROR("Init app failure! %d", int(ret));
|
|
return ret;
|
|
}
|
|
createUserInterface();
|
|
return sys::ReturnCodes::Success;
|
|
}
|
|
|
|
sys::MessagePointer ApplicationTest::DataReceivedHandler(sys::DataMessage *msgl, sys::ResponseMessage *resp)
|
|
{
|
|
// NOTE
|
|
// If return value here is `nullptr` - then application never responds
|
|
// otherwise it will respond with ResponseMessage
|
|
auto response = sys::MessagePointer{};
|
|
|
|
// NOTE in this place we have all common application uses such as:
|
|
// * passing key presses to windows
|
|
// * updading top bar etc
|
|
response = Application::DataReceivedHandler(msgl);
|
|
// NOTE
|
|
// here we would have handleAsyncResponse if this Applicaition would have any `AsyncTask`
|
|
// if (response && (dynamic_cast<sys::ResponseMessage *>(response.get())->retCode == sys::ReturnCodes::Success))
|
|
// {
|
|
// return response;
|
|
// }
|
|
// return handleAsyncResponse(resp);
|
|
return response;
|
|
}
|
|
|
|
void ApplicationTest::createUserInterface()
|
|
{
|
|
// NOTE
|
|
// create presenter first
|
|
presenter = std::make_unique<gui::TestPresenter>(this);
|
|
// NOTE
|
|
// 1. we pass presenter to this application
|
|
// 2. unfortunately any window requires access to app by design - so we pass it too...
|
|
// 3. please note that window is not yet created - it will be created when and if needed
|
|
// 4. please see that window name is set dynamically - this is proper way to set window name - these names are
|
|
// used on windows stack and matters
|
|
windowsFactory.attach(gui::name::window::main_window,
|
|
[this](ApplicationCommon * /*app*/, const std::string &name) {
|
|
return std::make_unique<gui::TestMainWindow>(this, name, *presenter);
|
|
});
|
|
|
|
// This is just a test popup to show on ServiceTest popup request
|
|
windowsFactory.attach(gui::popup::window::test_popup,
|
|
[this](ApplicationCommon * /*app*/, const std::string &name) {
|
|
return std::make_unique<gui::TestPopupWindow>(this, name);
|
|
});
|
|
|
|
// NOTE
|
|
// 1. attach popup
|
|
// 2. then in apps-common/ApplicationCommonPopupBlueprints.cpp register blueprint for this popup
|
|
// 3. if popup window is not attached - by default application will try to switch to this window
|
|
// but via popup handling
|
|
// 4. popups are called via actions via sending message directly or via call:
|
|
// app::manager::Controller::sendAction(this, app::manager::actions::ShowPopup,
|
|
// std::make_unique<PowerOffPopupRequestParams>());
|
|
// or just directly doing what's done in controler
|
|
// return std::make_unique<app::manager::ActionRequest>(sender, app::manager::actions::ShowPopup,
|
|
// std::make_unique<gui::PopupRequestParams>(gui::popup::ID::AppTestPopup));
|
|
attachPopups({gui::popup::ID::AppTestPopup});
|
|
}
|
|
|
|
void ApplicationTest::destroyUserInterface()
|
|
{
|
|
// NOTE: it should be empty - as it rather shouldn't be needed
|
|
// but this is a place where i.e. you can set last exit state of this app
|
|
}
|
|
} // namespace app
|