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/button_composed_element.h"
17
18 #include "base/log/dump_log.h"
19 #include "core/components/button/button_element.h"
20 #include "core/components/common/layout/constants.h"
21 #include "core/components/text/render_text.h"
22 #include "core/components/text/text_element.h"
23 #include "core/components_v2/inspector/utils.h"
24
25 namespace OHOS::Ace::V2 {
26
27 const std::unordered_map<std::string, std::function<std::string(const ButtonComposedElement&)>> CREATE_JSON_MAP {
__anon1e0453d80102(const ButtonComposedElement& inspector) 28 { "type", [](const ButtonComposedElement& inspector) { return inspector.GetButtonType(); } },
__anon1e0453d80202(const ButtonComposedElement& inspector) 29 { "stateEffect", [](const ButtonComposedElement& inspector) { return inspector.GetStateEffect(); } },
__anon1e0453d80302(const ButtonComposedElement& inspector) 30 { "label", [](const ButtonComposedElement& inspector) { return inspector.GetLabel(); } },
__anon1e0453d80402(const ButtonComposedElement& inspector) 31 { "fontSize", [](const ButtonComposedElement& inspector) { return inspector.GetFontSize(); } },
__anon1e0453d80502(const ButtonComposedElement& inspector) 32 { "fontWeight", [](const ButtonComposedElement& inspector) { return inspector.GetFontWeight(); } },
__anon1e0453d80602(const ButtonComposedElement& inspector) 33 { "fontColor", [](const ButtonComposedElement& inspector) { return inspector.GetFontColor(); } },
34 };
35
Dump()36 void ButtonComposedElement::Dump()
37 {
38 InspectorComposedElement::Dump();
39 DumpLog::GetInstance().AddDesc(std::string("button_composed_element"));
40 DumpLog::GetInstance().AddDesc(
41 std::string("ButtonType: ").append(GetButtonType()));
42 DumpLog::GetInstance().AddDesc(
43 std::string("StateEffect: ").append(GetStateEffect()));
44 DumpLog::GetInstance().AddDesc(
45 std::string("Label: ").append(GetLabel()));
46 }
47
ToJsonObject() const48 std::unique_ptr<JsonValue> ButtonComposedElement::ToJsonObject() const
49 {
50 auto resultJson = InspectorComposedElement::ToJsonObject();
51 for (const auto& value : CREATE_JSON_MAP) {
52 resultJson->Put(value.first.c_str(), value.second(*this).c_str());
53 }
54 return resultJson;
55 }
56
GetButtonType() const57 std::string ButtonComposedElement::GetButtonType() const
58 {
59 auto renderButton = GetRenderButton();
60 auto type = renderButton ? renderButton->GetButtonType() : ButtonType::CAPSULE;
61 return ConvertButtonTypeToString(type);
62 }
63
GetStateEffect() const64 std::string ButtonComposedElement::GetStateEffect() const
65 {
66 auto renderButton = GetRenderButton();
67 auto stateEffect = renderButton ? renderButton->GetStateEffect() : true;
68 return ConvertBoolToString(stateEffect);
69 }
70
GetLabel() const71 std::string ButtonComposedElement::GetLabel() const
72 {
73 auto node = GetInspectorNode(TextElement::TypeId());
74 if (!node) {
75 return "";
76 }
77 auto render = AceType::DynamicCast<RenderText>(node);
78 if (!render) {
79 return "";
80 }
81 return render->GetTextData();
82 }
83
GetFontSize() const84 std::string ButtonComposedElement::GetFontSize() const
85 {
86 auto node = GetInspectorNode(TextElement::TypeId());
87 if (!node) {
88 return "";
89 }
90 auto render = AceType::DynamicCast<RenderText>(node);
91 if (!render) {
92 return "";
93 }
94 auto fontSize = render ? render->GetTextStyle().GetFontSize() : Dimension();
95 return fontSize.ToString();
96 }
97
GetFontWeight() const98 std::string ButtonComposedElement::GetFontWeight() const
99 {
100 auto node = GetInspectorNode(TextElement::TypeId());
101 if (!node) {
102 return "";
103 }
104 auto render = AceType::DynamicCast<RenderText>(node);
105 if (!render) {
106 return "";
107 }
108 auto fontWeight = render ? render->GetTextStyle().GetFontWeight() : FontWeight::NORMAL;
109 return ConvertWrapFontWeightToStirng(fontWeight);
110 }
111
GetFontColor() const112 std::string ButtonComposedElement::GetFontColor() const
113 {
114 auto node = GetInspectorNode(TextElement::TypeId());
115 if (!node) {
116 return "";
117 }
118 auto render = AceType::DynamicCast<RenderText>(node);
119 if (!render) {
120 return "";
121 }
122 auto fontColor = render ? render->GetTextStyle().GetTextColor() : Color::BLACK;
123 return fontColor.ColorToString();
124 }
125
GetBackgroundColor() const126 std::string ButtonComposedElement::GetBackgroundColor() const
127 {
128 auto renderButton = GetRenderButton();
129 if (!renderButton) {
130 return "None";
131 }
132 return renderButton->GetBackgroundColor().ColorToString();
133 }
134
GetRenderButton() const135 RefPtr<RenderButton> ButtonComposedElement::GetRenderButton() const
136 {
137 auto node = GetInspectorNode(ButtonElement::TypeId());
138 if (node) {
139 return AceType::DynamicCast<RenderButton>(node);
140 }
141 return nullptr;
142 }
143
ConvertButtonTypeToString(ButtonType buttonType) const144 std::string ButtonComposedElement::ConvertButtonTypeToString(ButtonType buttonType) const
145 {
146 std::string result = "";
147 switch (buttonType) {
148 case ButtonType::NORMAL:
149 result = "ButtonType.Normal";
150 break;
151 case ButtonType::CAPSULE:
152 result = "ButtonType.Capsule";
153 break;
154 case ButtonType::CIRCLE:
155 result = "ButtonType.Circle";
156 break;
157 case ButtonType::ARC:
158 result = "ButtonType.Arc";
159 break;
160 default:
161 break;
162 }
163 return result;
164 }
165
GetBorderRadius() const166 std::string ButtonComposedElement::GetBorderRadius() const
167 {
168 auto renderButton = GetRenderButton();
169 if (renderButton) {
170 return Dimension(renderButton->GetRadius()).ToString();
171 }
172 return "0";
173 }
174
175 } // namespace OHOS::Ace::V2