1 /*
2 * Copyright (c) 2021-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_composed_element.h"
17
18 #include "base/log/dump_log.h"
19 #include "core/components/common/layout/constants.h"
20 #include "core/components/grid_layout/render_grid_layout.h"
21 #include "core/components_v2/grid/render_grid_scroll.h"
22 #include "core/components_v2/inspector/utils.h"
23
24 namespace OHOS::Ace::V2 {
25 namespace {
26
27 const std::unordered_map<std::string, std::function<std::string(const GridComposedElement&)>> CREATE_JSON_MAP {
__anon042a19020202(const GridComposedElement& inspector) 28 { "columnsTemplate", [](const GridComposedElement& inspector) { return inspector.GetColumnsTemplate(); } },
__anon042a19020302(const GridComposedElement& inspector) 29 { "rowsTemplate", [](const GridComposedElement& inspector) { return inspector.GetRowsTemplate(); } },
__anon042a19020402(const GridComposedElement& inspector) 30 { "columnsGap", [](const GridComposedElement& inspector) { return inspector.GetColumnsGap(); } },
__anon042a19020502(const GridComposedElement& inspector) 31 { "rowsGap", [](const GridComposedElement& inspector) { return inspector.GetRowsGap(); } },
__anon042a19020602(const GridComposedElement& inspector) 32 { "scrollBarColor", [](const GridComposedElement& inspector) { return inspector.GetScrollBarColor(); } },
__anon042a19020702(const GridComposedElement& inspector) 33 { "scrollBarWidth", [](const GridComposedElement& inspector) { return inspector.GetScrollBarWidth(); } },
__anon042a19020802(const GridComposedElement& inspector) 34 { "scrollBar", [](const GridComposedElement& inspector) { return inspector.GetScrollBar(); } },
__anon042a19020902(const GridComposedElement& inspector) 35 { "editMode", [](const GridComposedElement& inspector) { return inspector.GetGridEditMode(); } },
__anon042a19020a02(const GridComposedElement& inspector) 36 { "maxCount", [](const GridComposedElement& inspector) { return inspector.GetGridMaxCount(); } },
__anon042a19020b02(const GridComposedElement& inspector) 37 { "minCount", [](const GridComposedElement& inspector) { return inspector.GetGridMinCount(); } },
__anon042a19020c02(const GridComposedElement& inspector) 38 { "cellLength", [](const GridComposedElement& inspector) { return inspector.GetGridCellLength(); } },
__anon042a19020d02(const GridComposedElement& inspector) 39 { "multiSelectable", [](const GridComposedElement& inspector) { return inspector.GetMultiSelectable(); } },
__anon042a19020e02(const GridComposedElement& inspector) 40 { "supportAnimation", [](const GridComposedElement& inspector) { return inspector.GetSupportAnimation(); } },
41 };
42
43 }
44
Dump()45 void GridComposedElement::Dump()
46 {
47 InspectorComposedElement::Dump();
48 DumpLog::GetInstance().AddDesc(
49 std::string("columnsTemplate: ").append(GetColumnsTemplate()));
50 DumpLog::GetInstance().AddDesc(
51 std::string("rowsTemplate: ").append(GetRowsTemplate()));
52 DumpLog::GetInstance().AddDesc(
53 std::string("columnsGap: ").append(GetColumnsGap()));
54 DumpLog::GetInstance().AddDesc(
55 std::string("rowsGap: ").append(GetRowsGap()));
56 DumpLog::GetInstance().AddDesc(
57 std::string("editMode: ").append(GetGridEditMode()));
58 DumpLog::GetInstance().AddDesc(
59 std::string("maxCount: ").append(GetGridMaxCount()));
60 DumpLog::GetInstance().AddDesc(
61 std::string("minCount: ").append(GetGridMinCount()));
62 DumpLog::GetInstance().AddDesc(
63 std::string("cellLength: ").append(GetGridCellLength()));
64 }
65
ToJsonObject() const66 std::unique_ptr<JsonValue> GridComposedElement::ToJsonObject() const
67 {
68 auto resultJson = InspectorComposedElement::ToJsonObject();
69 for (const auto& value : CREATE_JSON_MAP) {
70 resultJson->Put(value.first.c_str(), value.second(*this).c_str());
71 }
72 return resultJson;
73 }
74
GetColumnsTemplate() const75 std::string GridComposedElement::GetColumnsTemplate() const
76 {
77 auto node = GetInspectorNode(GridLayoutElement::TypeId());
78 if (!node) {
79 return "1fr";
80 }
81 auto renderGrip = AceType::DynamicCast<RenderGridLayout>(node);
82 if (renderGrip) {
83 return renderGrip->GetColumnsTemplate();
84 }
85 return "1fr";
86 }
87
GetRowsTemplate() const88 std::string GridComposedElement::GetRowsTemplate() const
89 {
90 auto node = GetInspectorNode(GridLayoutElement::TypeId());
91 if (!node) {
92 return "1fr";
93 }
94 auto renderGrip = AceType::DynamicCast<RenderGridLayout>(node);
95 if (renderGrip) {
96 return renderGrip->GetRowTemplate();
97 }
98 return "1fr";
99 }
100
GetColumnsGap() const101 std::string GridComposedElement::GetColumnsGap() const
102 {
103 auto gridLayoutNode = GetInspectorNode(GridLayoutElement::TypeId());
104 auto gridNode = GetInspectorNode(V2::GridElement::TypeId());
105 if (!gridNode && !gridLayoutNode) {
106 return "0";
107 }
108 auto renderGrip = AceType::DynamicCast<RenderGridLayout>(gridLayoutNode);
109 auto renderScroll = AceType::DynamicCast<V2::RenderGridScroll>(gridNode);
110 if (renderGrip) {
111 return renderGrip->GetColumns().ToString().c_str();
112 }
113 if (renderScroll) {
114 return renderScroll->GetColumns().ToString().c_str();
115 }
116 return "0";
117 }
118
GetRowsGap() const119 std::string GridComposedElement::GetRowsGap() const
120 {
121 auto gridLayoutNode = GetInspectorNode(GridLayoutElement::TypeId());
122 auto gridNode = GetInspectorNode(V2::GridElement::TypeId());
123 if (!gridNode && !gridLayoutNode) {
124 return "0";
125 }
126 auto renderGrip = AceType::DynamicCast<RenderGridLayout>(gridLayoutNode);
127 auto renderScroll = AceType::DynamicCast<V2::RenderGridScroll>(gridNode);
128 if (renderGrip) {
129 return renderGrip->GetRows().ToString().c_str();
130 }
131 if (renderScroll) {
132 return renderScroll->GetRows().ToString().c_str();
133 }
134 return "0";
135 }
136
GetScrollBarWidth() const137 std::string GridComposedElement::GetScrollBarWidth() const
138 {
139 auto node = GetInspectorNode(GridLayoutElement::TypeId());
140 if (!node) {
141 return "";
142 }
143 auto renderGrip = AceType::DynamicCast<RenderGridLayout>(node);
144 if (renderGrip) {
145 return renderGrip->GetScrollBarWidth();
146 }
147 return "";
148 }
149
GetScrollBarColor() const150 std::string GridComposedElement::GetScrollBarColor() const
151 {
152 auto node = GetInspectorNode(GridLayoutElement::TypeId());
153 if (!node) {
154 return "";
155 }
156 auto renderGrip = AceType::DynamicCast<RenderGridLayout>(node);
157 if (renderGrip) {
158 return renderGrip->GetScrollBarColor();
159 }
160 return "";
161 }
162
GetScrollBar() const163 std::string GridComposedElement::GetScrollBar() const
164 {
165 auto node = GetInspectorNode(GridLayoutElement::TypeId());
166 if (!node) {
167 return "BarState.Off";
168 }
169 auto renderGrip = AceType::DynamicCast<RenderGridLayout>(node);
170 if (renderGrip) {
171 return DisplayModeToString(renderGrip->GetScrollBar());
172 }
173 return "BarState.Off";
174 }
175
GetGridEditMode() const176 std::string GridComposedElement::GetGridEditMode() const
177 {
178 auto renderGrip = GetContentRender<RenderGridLayout>(GridLayoutElement::TypeId());
179 if (renderGrip) {
180 return ConvertBoolToString(renderGrip->GetEditMode());
181 }
182 return "false";
183 }
184
GetGridMaxCount() const185 std::string GridComposedElement::GetGridMaxCount() const
186 {
187 auto renderGrip = GetContentRender<RenderGridLayout>(GridLayoutElement::TypeId());
188 if (renderGrip) {
189 return std::to_string(renderGrip->GetMaxCount());
190 }
191 return "1";
192 }
193
GetGridMinCount() const194 std::string GridComposedElement::GetGridMinCount() const
195 {
196 auto renderGrip = GetContentRender<RenderGridLayout>(GridLayoutElement::TypeId());
197 if (renderGrip) {
198 return std::to_string(renderGrip->GetMinCount());
199 }
200 return "1";
201 }
202
GetGridCellLength() const203 std::string GridComposedElement::GetGridCellLength() const
204 {
205 auto renderGrip = GetContentRender<RenderGridLayout>(GridLayoutElement::TypeId());
206 if (renderGrip) {
207 return std::to_string(renderGrip->GetCellLength());
208 }
209 return "0";
210 }
211
GetSupportAnimation() const212 std::string GridComposedElement::GetSupportAnimation() const
213 {
214 auto renderGrip = GetContentRender<RenderGridLayout>(GridLayoutElement::TypeId());
215 if (renderGrip) {
216 return ConvertBoolToString(renderGrip->GetSupportAnimation());
217 }
218 return "false";
219 }
220
GetMultiSelectable() const221 std::string GridComposedElement::GetMultiSelectable() const
222 {
223 auto renderGrip = GetContentRender<RenderGridLayout>(GridLayoutElement::TypeId());
224 if (renderGrip) {
225 return ConvertBoolToString(renderGrip->GetMultiSelectable());
226 }
227 return "false";
228 }
229
DisplayModeToString(DisplayMode displayMode) const230 std::string GridComposedElement::DisplayModeToString(DisplayMode displayMode) const
231 {
232 switch (displayMode) {
233 case DisplayMode::OFF:
234 return "BarState.Off";
235 case DisplayMode::AUTO:
236 return "BarState.Auto";
237 case DisplayMode::ON:
238 return "BarState.On";
239 default:
240 break;
241 }
242 return "BarState.Off";
243 }
244
245 } // namespace OHOS::Ace::V2