1 /*
2  * Copyright (c) 2022 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #include "core/components_v2/inspector/grid_row_composed_element.h"
17 
18 #include "base/log/dump_log.h"
19 #include "core/components_v2/grid_layout/grid_container_utils.h"
20 #include "core/components_v2/grid_layout/render_grid_row.h"
21 #include "core/components_v2/inspector/utils.h"
22 
23 namespace OHOS::Ace::V2 {
24 namespace {
25 
26 const std::unordered_map<std::string,
27     std::function<std::unique_ptr<JsonValue>(const GridRowComposedElement&)>> CREATE_JSON_MAP {
__anonf832ac990202(const GridRowComposedElement& inspector) 28     { "constructor", [](const GridRowComposedElement& inspector) { return inspector.GetConstructor(); } }
29 };
30 
31 } // namespace
32 
Dump()33 void GridRowComposedElement::Dump()
34 {
35     InspectorComposedElement::Dump();
36     DumpLog::GetInstance().AddDesc(
37         std::string("gutter: ").append(GetGridRowGutter()));
38     DumpLog::GetInstance().AddDesc(
39         std::string("columns: ").append(GetGridRowColumns()));
40     DumpLog::GetInstance().AddDesc(
41         std::string("breakpoints: ").append(GetGridRowBreakpoints()));
42     DumpLog::GetInstance().AddDesc(
43         std::string("direction: ").append(GetGridRowDirection()));
44 }
45 
ToJsonObject() const46 std::unique_ptr<JsonValue> GridRowComposedElement::ToJsonObject() const
47 {
48     auto resultJson = InspectorComposedElement::ToJsonObject();
49     for (const auto& value : CREATE_JSON_MAP) {
50         resultJson->Put(value.first.c_str(), value.second(*this));
51     }
52     return resultJson;
53 }
54 
GetConstructor() const55 std::unique_ptr<JsonValue> GridRowComposedElement::GetConstructor() const
56 {
57     auto jsonValue = JsonUtil::Create(true);
58     jsonValue->Put("gutter", GetGridRowGutter().c_str());
59     jsonValue->Put("columns", GetGridRowColumns().c_str());
60     jsonValue->Put("breakpoints", GetGridRowBreakpoints().c_str());
61     jsonValue->Put("direction", GetGridRowDirection().c_str());
62     return jsonValue;
63 }
64 
65 
GetGridRowSizeType() const66 std::string GridRowComposedElement::GetGridRowSizeType() const
67 {
68     auto renderNode = GetInspectorNode(GridRowElement::TypeId());
69     if (!renderNode) {
70         return "-";
71     }
72     auto renderGridRow = AceType::DynamicCast<RenderGridRow>(renderNode);
73     if (!renderGridRow) {
74         return "-";
75     }
76     auto sizeType = renderGridRow->GetCurrentSizeType();
77     switch (sizeType) {
78         case GridSizeType::UNDEFINED:
79             return std::string("SizeType.Auto");
80         case GridSizeType::XS:
81             return std::string("SizeType.XS");
82         case GridSizeType::SM:
83             return std::string("SizeType.SM");
84         case GridSizeType::MD:
85             return std::string("SizeType.MD");
86         case GridSizeType::LG:
87             return std::string("SizeType.LG");
88         default:
89             break;
90     }
91 
92     return std::string("SizeType.Auto");
93 }
94 
GetGridRowDirection() const95 std::string GridRowComposedElement::GetGridRowDirection() const
96 {
97     auto renderNode = GetInspectorNode(GridRowElement::TypeId());
98     if (!renderNode) {
99         return "-";
100     }
101     auto renderGridRow = AceType::DynamicCast<RenderGridRow>(renderNode);
102     if (!renderGridRow) {
103         return "-";
104     }
105     auto direction = renderGridRow->GetDirection();
106     switch (direction) {
107         case GridRowDirection::Row:
108             return "Row";
109         case GridRowDirection::RowReverse:
110             return "RowReverse";
111         default:
112             break;
113     }
114     return "Unknown";
115 }
116 
GetGridRowBreakpoints() const117 std::string GridRowComposedElement::GetGridRowBreakpoints() const
118 {
119     auto renderNode = GetInspectorNode(GridRowElement::TypeId());
120     if (!renderNode) {
121         return "[]";
122     }
123     auto renderGridRow = AceType::DynamicCast<RenderGridRow>(renderNode);
124     if (!renderGridRow) {
125         return "[]";
126     }
127     auto breakpointPtr = renderGridRow->GetBreakPoints();
128     if (!breakpointPtr) {
129         return "[";
130     }
131     std::string result = "[";
132     for (auto& breakpoint : breakpointPtr->breakpoints) {
133         result.append(breakpoint);
134         result.append(", ");
135     }
136     if (result.size() > 1) {
137         result = result.substr(0, static_cast<int32_t>(result.size()) - 1).append("]");
138     } else {
139         result = result.append("]");
140     }
141     return result;
142 }
143 
GetGridRowColumns() const144 std::string GridRowComposedElement::GetGridRowColumns() const
145 {
146     auto renderNode = GetInspectorNode(GridRowElement::TypeId());
147     if (!renderNode) {
148         return "-";
149     }
150     auto renderGridRow = AceType::DynamicCast<RenderGridRow>(renderNode);
151     if (!renderGridRow) {
152         return "-";
153     }
154     auto totalColumn = renderGridRow->GetTotalCol();
155     return std::to_string(totalColumn);
156 }
157 
GetGridRowGutter() const158 std::string GridRowComposedElement::GetGridRowGutter() const
159 {
160     auto renderNode = GetInspectorNode(GridRowElement::TypeId());
161     if (!renderNode) {
162         return "-";
163     }
164     auto renderGridRow = AceType::DynamicCast<RenderGridRow>(renderNode);
165     if (!renderGridRow) {
166         return "-";
167     }
168     auto gutter = renderGridRow->GetGutter();
169     std::string result = "<";
170     result.append(std::to_string(gutter.first));
171     result.append(", ");
172     result.append(std::to_string(gutter.second));
173     result.append(">");
174     return result;
175 }
176 
GetRenderElement() const177 RefPtr<Element> GridRowComposedElement::GetRenderElement() const
178 {
179     return GetContentElement<GridRowElement>(GridRowElement::TypeId());
180 }
181 
182 } // namespace OHOS::Ace::V2