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