// 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 "Item2JsonSerializingVisitor.hpp" #include "Item.hpp" #include "Rect.hpp" #include "Label.hpp" #include "Text.hpp" #include "Window.hpp" #include "NavBar.hpp" #include "StatusBar.hpp" #include "ListItem.hpp" #include "ItemDataNames.hpp" #include 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(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(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(item.edges)); sink.emplace(magic_enum::enum_name(visitor::Rect::FlatEdges), static_cast(item.flatEdges)); sink.emplace(magic_enum::enum_name(visitor::Rect::Corners), static_cast(item.corners)); sink.emplace(magic_enum::enum_name(visitor::Rect::Yaps), static_cast(item.yaps)); sink.emplace(magic_enum::enum_name(visitor::Rect::YapSize), item.yapSize); visit(static_cast(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(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(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(item)); } void Item2JsonSerializingVisitor::visit(gui::nav_bar::NavBar &item) { if (itemName.empty()) { itemName = magic_enum::enum_name(visitor::Names::NavBar); } visit(static_cast(item)); } void Item2JsonSerializingVisitor::visit(gui::status_bar::StatusBar &item) { if (itemName.empty()) { itemName = magic_enum::enum_name(visitor::Names::StatusBar); } visit(static_cast(item)); } void Item2JsonSerializingVisitor::visit(gui::ListItem &item) { if (itemName.empty()) { itemName = magic_enum::enum_name(visitor::Names::ListItem); } visit(static_cast(item)); } auto Item2JsonSerializingVisitor::serialize(gui::BoundingBox &box) -> json11::Json::array { return {static_cast(box.x), static_cast(box.y), static_cast(box.w), static_cast(box.h)}; } auto Item2JsonSerializingVisitor::serialize(gui::Color &color) -> json11::Json::array { return {static_cast(color.intensity), static_cast(color.alpha)}; }