~aleteoryx/muditaos

ref: a405cad694b867fcd2498984830bd97d4b9bde2f muditaos/module-gui/gui/dom/Item2JsonSerializingVisitor.cpp -rw-r--r-- 4.4 KiB
a405cad6Aleteoryx trim readme 6 days ago
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
// 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 <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::nav_bar::NavBar &item)
{
    if (itemName.empty()) {
        itemName = magic_enum::enum_name(visitor::Names::NavBar);
    }
    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)};
}