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/divider_composed_element.h"
17 
18 #include "base/log/dump_log.h"
19 #include "core/components_v2/inspector/utils.h"
20 
21 namespace OHOS::Ace::V2 {
22 
23 namespace {
24 
25 const std::unordered_map<std::string, std::function<std::string(const DividerComposedElement&)>> CREATE_JSON_MAP {
__anonb2e5b0a30202(const DividerComposedElement& inspector) 26     { "vertical", [](const DividerComposedElement& inspector) { return inspector.GetDividerVertical(); } },
__anonb2e5b0a30302(const DividerComposedElement& inspector) 27     { "color", [](const DividerComposedElement& inspector) { return inspector.GetDividerColor(); } },
__anonb2e5b0a30402(const DividerComposedElement& inspector) 28     { "strokeWidth", [](const DividerComposedElement& inspector) { return inspector.GetStrokeWidth(); } },
__anonb2e5b0a30502(const DividerComposedElement& inspector) 29     { "lineCap", [](const DividerComposedElement& inspector) { return inspector.GetDividerLineCap(); } },
30 };
31 
32 }
33 
Dump()34 void DividerComposedElement::Dump()
35 {
36     InspectorComposedElement::Dump();
37     DumpLog::GetInstance().AddDesc(
38         std::string("vertical: ").append(GetDividerVertical().c_str()));
39     DumpLog::GetInstance().AddDesc(
40         std::string("color: ").append(GetDividerColor().c_str()));
41     DumpLog::GetInstance().AddDesc(
42         std::string("strokeWidth: ").append(GetStrokeWidth().c_str()));
43     DumpLog::GetInstance().AddDesc(
44         std::string("lineCap: ").append(GetDividerLineCap().c_str()));
45 }
46 
ToJsonObject() const47 std::unique_ptr<JsonValue> DividerComposedElement::ToJsonObject() const
48 {
49     auto resultJson = InspectorComposedElement::ToJsonObject();
50     for (const auto& value : CREATE_JSON_MAP) {
51         resultJson->Put(value.first.c_str(), value.second(*this).c_str());
52     }
53     return resultJson;
54 }
55 
GetDividerVertical() const56 std::string DividerComposedElement::GetDividerVertical() const
57 {
58     auto renderDivider = GetRenderDivider();
59     auto vertical = renderDivider ? renderDivider->GetIsVertical() : false;
60     return ConvertBoolToString(vertical);
61 }
62 
GetDividerColor() const63 std::string DividerComposedElement::GetDividerColor() const
64 {
65     auto renderDivider = GetRenderDivider();
66     auto color = renderDivider ? renderDivider->GetDividerColor() : Color::BLACK;
67     return ConvertColorToString(color);
68 }
69 
GetStrokeWidth() const70 std::string DividerComposedElement::GetStrokeWidth() const
71 {
72     auto renderDivider = GetRenderDivider();
73     auto strokeWidth = renderDivider ? renderDivider->GetStrokeWidth() : Dimension(1.0);
74     return std::to_string(strokeWidth.Value());
75 }
76 
GetDividerLineCap() const77 std::string DividerComposedElement::GetDividerLineCap() const
78 {
79     auto renderDivider = GetRenderDivider();
80     auto lineCap = renderDivider ? renderDivider->GetLineCap() : LineCap::BUTT;
81     return ConvertLineCapToString(lineCap);
82 }
83 
GetRenderDivider() const84 RefPtr<RenderDivider> DividerComposedElement::GetRenderDivider() const
85 {
86     auto node = GetInspectorNode(DividerElement::TypeId());
87     if (node) {
88         return AceType::DynamicCast<RenderDivider>(node);
89     }
90     return nullptr;
91 }
92 
ConvertLineCapToString(LineCap cap) const93 std::string DividerComposedElement::ConvertLineCapToString(LineCap cap) const
94 {
95     std::string result = "";
96     switch (cap) {
97         case LineCap::BUTT:
98             result = "LineCapStyle.Butt";
99             break;
100         case LineCap::ROUND:
101             result = "LineCapStyle.Round";
102             break;
103         case LineCap::SQUARE:
104             result = "LineCapStyle.Square";
105             break;
106         default:
107             break;
108     }
109     return result;
110 }
111 
112 } // namespace OHOS::Ace::V2