Files
MuditaOS/module-gui/gui/dom/Item2JsonSerializingVisitor.cpp
Mateusz Piesta 5bff92e2b5 [EGD-7052] Generate unique window name
Added virtual method to Window class in order to be able
to prepend specific application name to the window name. 
It wasn't possible to use existing getName method as it is 
used throughout the codebase for switching windows
2021-07-12 09:03:09 +02:00

114 lines
4.4 KiB
C++

// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
#include "Item2JsonSerializingVisitor.hpp"
#include "Item.hpp"
#include "Rect.hpp"
#include "Label.hpp"
#include "Text.hpp"
#include "Window.hpp"
#include "BottomBar.hpp"
#include "StatusBar.hpp"
#include "ListItem.hpp"
#include "ItemDataNames.hpp"
#include <magic_enum.hpp>
using namespace gui;
void Item2JsonSerializingVisitor::visit(gui::Item &item)
{
if (itemName.empty()) {
itemName = magic_enum::enum_name(visitor::Names::Item);
}
sink.emplace(magic_enum::enum_name(visitor::Item::ItemType), static_cast<int>(item.type));
sink.emplace(magic_enum::enum_name(visitor::Item::Focus), item.focus);
sink.emplace(magic_enum::enum_name(visitor::Item::Visible), item.visible);
sink.emplace(magic_enum::enum_name(visitor::Item::Active), item.activeItem);
sink.emplace(magic_enum::enum_name(visitor::Item::ChildrenCount), static_cast<int>(item.children.size()));
sink.emplace(magic_enum::enum_name(visitor::Item::WidgetArea), serialize(item.widgetArea));
sink.emplace(magic_enum::enum_name(visitor::Item::WidgetMinimumArea), serialize(item.widgetMinimumArea));
sink.emplace(magic_enum::enum_name(visitor::Item::WidgetMaximumArea), serialize(item.widgetMaximumArea));
sink.emplace(magic_enum::enum_name(visitor::Item::DrawArea), serialize(item.drawArea));
}
void Item2JsonSerializingVisitor::visit(gui::Rect &item)
{
if (itemName.empty()) {
itemName = magic_enum::enum_name(visitor::Names::Rect);
}
sink.emplace(magic_enum::enum_name(visitor::Rect::BorderColor), serialize(item.borderColor));
sink.emplace(magic_enum::enum_name(visitor::Rect::FillColor), serialize(item.fillColor));
sink.emplace(magic_enum::enum_name(visitor::Rect::PenWidth), item.penWidth);
sink.emplace(magic_enum::enum_name(visitor::Rect::PenFocusWidth), item.penFocusWidth);
sink.emplace(magic_enum::enum_name(visitor::Rect::Filled), item.filled);
sink.emplace(magic_enum::enum_name(visitor::Rect::Edges), static_cast<int>(item.edges));
sink.emplace(magic_enum::enum_name(visitor::Rect::FlatEdges), static_cast<int>(item.flatEdges));
sink.emplace(magic_enum::enum_name(visitor::Rect::Corners), static_cast<int>(item.corners));
sink.emplace(magic_enum::enum_name(visitor::Rect::Yaps), static_cast<int>(item.yaps));
sink.emplace(magic_enum::enum_name(visitor::Rect::YapSize), item.yapSize);
visit(static_cast<gui::Item &>(item));
}
void Item2JsonSerializingVisitor::visit(gui::Text &item)
{
if (itemName.empty()) {
itemName = magic_enum::enum_name(visitor::Names::Text);
}
sink.emplace(magic_enum::enum_name(visitor::Text::TextValue), std::string{item.getText()});
visit(static_cast<gui::Rect &>(item));
}
void Item2JsonSerializingVisitor::visit(gui::Label &item)
{
if (itemName.empty()) {
itemName = magic_enum::enum_name(visitor::Names::Label);
}
sink.emplace(magic_enum::enum_name(visitor::Text::TextValue), std::string{item.getText()});
visit(static_cast<gui::Rect &>(item));
}
void Item2JsonSerializingVisitor::visit(gui::Window &item)
{
if (itemName.empty()) {
itemName = magic_enum::enum_name(visitor::Names::Window);
}
sink.emplace(magic_enum::enum_name(visitor::Window::WindowName), std::string{item.getUniqueName()});
visit(static_cast<gui::Item &>(item));
}
void Item2JsonSerializingVisitor::visit(gui::BottomBar &item)
{
if (itemName.empty()) {
itemName = magic_enum::enum_name(visitor::Names::BottomBar);
}
visit(static_cast<gui::Item &>(item));
}
void Item2JsonSerializingVisitor::visit(gui::status_bar::StatusBar &item)
{
if (itemName.empty()) {
itemName = magic_enum::enum_name(visitor::Names::StatusBar);
}
visit(static_cast<gui::Item &>(item));
}
void Item2JsonSerializingVisitor::visit(gui::ListItem &item)
{
if (itemName.empty()) {
itemName = magic_enum::enum_name(visitor::Names::ListItem);
}
visit(static_cast<gui::Rect &>(item));
}
auto Item2JsonSerializingVisitor::serialize(gui::BoundingBox &box) -> json11::Json::array
{
return {static_cast<int>(box.x), static_cast<int>(box.y), static_cast<int>(box.w), static_cast<int>(box.h)};
}
auto Item2JsonSerializingVisitor::serialize(gui::Color &color) -> json11::Json::array
{
return {static_cast<int>(color.intensity), static_cast<int>(color.alpha)};
}