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/select_composed_element.h"
17
18 #include "core/components/select/select_element.h"
19 #include "core/components_v2/inspector/utils.h"
20
21 #include "base/log/dump_log.h"
22
23 namespace OHOS::Ace::V2 {
24
25 const std::unordered_map<std::string, std::function<std::string(const SelectComposedElement&)>> CREATE_JSON_MAP {
__anon43f96c9c0102(const SelectComposedElement& inspector) 26 { "options", [](const SelectComposedElement& inspector) { return inspector.GetOptions(); } },
__anon43f96c9c0202(const SelectComposedElement& inspector) 27 { "selected", [](const SelectComposedElement& inspector) { return inspector.GetSelected(); } },
__anon43f96c9c0302(const SelectComposedElement& inspector) 28 { "value", [](const SelectComposedElement& inspector) { return inspector.GetSelectValue(); } },
__anon43f96c9c0402(const SelectComposedElement& inspector) 29 { "font", [](const SelectComposedElement& inspector) { return inspector.GetFont(); } },
__anon43f96c9c0502(const SelectComposedElement& inspector) 30 { "fontColor", [](const SelectComposedElement& inspector) { return inspector.GetFontColor(); } },
__anon43f96c9c0602(const SelectComposedElement& inspector) 31 { "selectedOptionBgColor", [](const SelectComposedElement& inspector) { return inspector.GetSelectBgColor(); } },
__anon43f96c9c0702(const SelectComposedElement& inspector) 32 { "selectedOptionFont", [](const SelectComposedElement& inspector) { return inspector.GetSelectFont(); } },
33 { "selectedOptionFontColor", [](const SelectComposedElement& inspector)
__anon43f96c9c0802(const SelectComposedElement& inspector) 34 { return inspector.GetSelectFontColor(); } },
__anon43f96c9c0902(const SelectComposedElement& inspector) 35 { "optionBgColor", [](const SelectComposedElement& inspector) { return inspector.GetOptionBgColor(); } },
__anon43f96c9c0a02(const SelectComposedElement& inspector) 36 { "optionFont", [](const SelectComposedElement& inspector) { return inspector.GetOptionFont(); } },
__anon43f96c9c0b02(const SelectComposedElement& inspector) 37 { "optionFontColor", [](const SelectComposedElement& inspector) { return inspector.GetOptionFontColor(); } }
38 };
39
Dump(void)40 void SelectComposedElement::Dump(void)
41 {
42 InspectorComposedElement::Dump();
43 DumpLog::GetInstance().AddDesc(std::string("select_composed_element"));
44 DumpLog::GetInstance().AddDesc(std::string("options: ").append(GetOptions()));
45 DumpLog::GetInstance().AddDesc(std::string("selected: ").append(GetSelected()));
46 DumpLog::GetInstance().AddDesc(std::string("value: ").append(GetSelectValue()));
47 DumpLog::GetInstance().AddDesc(std::string("font: ").append(GetFont()));
48 DumpLog::GetInstance().AddDesc(std::string("fontColor: ").append(GetFontColor()));
49 DumpLog::GetInstance().AddDesc(std::string("selectedOptionBgColor: ").append(GetSelectBgColor()));
50 DumpLog::GetInstance().AddDesc(std::string("selectedOptionFont: ").append(GetSelectFont()));
51 DumpLog::GetInstance().AddDesc(std::string("selectedOptionFontColor: ").append(GetSelectFontColor()));
52 DumpLog::GetInstance().AddDesc(std::string("optionBgColor: ").append(GetOptionBgColor()));
53 DumpLog::GetInstance().AddDesc(std::string("optionFont: ").append(GetOptionFont()));
54 DumpLog::GetInstance().AddDesc(std::string("optionFontColor: ").append(GetOptionFontColor()));
55 }
56
ToJsonObject() const57 std::unique_ptr<OHOS::Ace::JsonValue> SelectComposedElement::ToJsonObject() const
58 {
59 auto resultJson = InspectorComposedElement::ToJsonObject();
60 for (const auto& value : CREATE_JSON_MAP) {
61 resultJson->Put(value.first.c_str(), value.second(*this).c_str());
62 }
63 return resultJson;
64 }
65
GetOptions() const66 std::string SelectComposedElement::GetOptions() const
67 {
68 auto render = GetRenderSelect();
69 auto jsonValue = JsonUtil::Create(true);
70 if (!render) {
71 return "";
72 }
73 auto selectComponent = render->GetSelectComponent();
74 if (!selectComponent) {
75 return "";
76 }
77 auto popup = selectComponent->GetSelectPopupComponent();
78 if (popup) {
79 auto vectorValue = popup->GetSelectOptions();
80 auto jsonOptions = JsonUtil::CreateArray(true);
81 for (size_t i = 0; i < vectorValue.size(); i++) {
82 if (vectorValue[i] && vectorValue[i]->GetIcon()) {
83 auto temp = JsonUtil::Create(true);
84 temp->Put("value", vectorValue[i]->GetValue().c_str());
85 temp->Put("icon", vectorValue[i]->GetIcon()->GetSrc().c_str());
86 auto index = std::to_string(i);
87 jsonOptions->Put(index.c_str(), temp);
88 }
89 }
90 jsonValue->Put("options", jsonOptions);
91 return jsonValue->ToString();
92 }
93 return "";
94 }
95
GetSelected() const96 std::string SelectComposedElement::GetSelected() const
97 {
98 auto render = GetRenderSelect();
99 if (render) {
100 if (render->GetSelectComponent()) {
101 return std::to_string(render->GetSelectComponent()->GetSelected());
102 }
103 }
104 return "";
105 }
106
GetSelectValue() const107 std::string SelectComposedElement::GetSelectValue() const
108 {
109 auto render = GetRenderSelect();
110 if (render) {
111 return render->GetSelectComponent()->GetTipText()->GetData();
112 }
113 return "";
114 }
115
GetFont() const116 std::string SelectComposedElement::GetFont() const
117 {
118 auto render = GetRenderSelect();
119 if (render) {
120 return GetTextStyleInJson(render->GetSelectComponent()->GetSelectStyle());
121 }
122 return "";
123 }
124
GetFontColor() const125 std::string SelectComposedElement::GetFontColor() const
126 {
127 auto render = GetRenderSelect();
128 if (render) {
129 return ConvertColorToString(render->GetSelectComponent()->GetSelectStyle().GetTextColor());
130 }
131 return "";
132 }
133
GetSelectBgColor() const134 std::string SelectComposedElement::GetSelectBgColor() const
135 {
136 auto render = GetRenderSelect();
137 if (render) {
138 auto popup = render->GetSelectComponent()->GetPopup();
139 if (!popup) {
140 LOGE("popup is null");
141 return "";
142 }
143 auto option = popup->GetSelectOptions();
144 for (auto& optionItem : option) {
145 if (optionItem) {
146 return ConvertColorToString(optionItem->GetSelectedBackgroundColor());
147 }
148 }
149 }
150 return "";
151 }
152
GetSelectFont() const153 std::string SelectComposedElement::GetSelectFont() const
154 {
155 auto render = GetRenderSelect();
156 if (render) {
157 auto popup = render->GetSelectComponent()->GetPopup();
158 if (!popup) {
159 LOGE("popup is null");
160 return "";
161 }
162 auto option = popup->GetSelectOptions();
163 for (auto& optionItem : option) {
164 if (optionItem) {
165 return GetTextStyleInJson(optionItem->GetSelectedTextStyle());
166 }
167 }
168 }
169 return "";
170 }
171
GetSelectFontColor() const172 std::string SelectComposedElement::GetSelectFontColor() const
173 {
174 auto render = GetRenderSelect();
175 if (render) {
176 auto popup = render->GetSelectComponent()->GetPopup();
177 if (!popup) {
178 LOGE("popup is null");
179 return "";
180 }
181 auto option = popup->GetSelectOptions();
182 for (auto& optionItem : option) {
183 if (optionItem) {
184 return ConvertColorToString(optionItem->GetSelectedTextStyle().GetTextColor());
185 }
186 }
187 }
188 return "";
189 }
190
GetOptionBgColor() const191 std::string SelectComposedElement::GetOptionBgColor() const
192 {
193 auto render = GetRenderSelect();
194 if (render) {
195 auto popup = render->GetSelectComponent()->GetPopup();
196 if (!popup) {
197 LOGE("popup is null");
198 return "";
199 }
200 auto option = popup->GetSelectOptions();
201 for (auto& optionItem : option) {
202 if (optionItem) {
203 return ConvertColorToString(optionItem->GetBackgroundColor());
204 }
205 }
206 }
207 return "";
208 }
209
GetOptionFont() const210 std::string SelectComposedElement::GetOptionFont() const
211 {
212 auto render = GetRenderSelect();
213 if (render) {
214 auto popup = render->GetSelectComponent()->GetPopup();
215 if (!popup) {
216 LOGE("popup is null");
217 return "";
218 }
219 auto option = popup->GetSelectOptions();
220 for (auto& optionItem : option) {
221 if (optionItem) {
222 return GetTextStyleInJson(optionItem->GetTextStyle());
223 }
224 }
225 }
226 return "";
227 }
228
GetOptionFontColor() const229 std::string SelectComposedElement::GetOptionFontColor() const
230 {
231 auto render = GetRenderSelect();
232 if (render) {
233 return ConvertColorToString(render->GetSelectComponent()->GetSelectStyle().GetTextColor());
234 }
235 return "";
236 }
237
GetWidth() const238 std::string SelectComposedElement::GetWidth() const
239 {
240 auto render = GetRenderSelect();
241 if (!render) {
242 return "";
243 }
244 auto selectComponent = render->GetSelectComponent();
245 if (!selectComponent) {
246 return "";
247 }
248 return selectComponent->GetWidth().ToString();
249 }
250
GetHeight() const251 std::string SelectComposedElement::GetHeight() const
252 {
253 auto render = GetRenderSelect();
254 if (!render) {
255 return "";
256 }
257 auto selectComponent = render->GetSelectComponent();
258 if (!selectComponent) {
259 return "";
260 }
261 return selectComponent->GetHeight().ToString();
262 }
263
GetRenderSelect() const264 OHOS::Ace::RefPtr<OHOS::Ace::RenderSelect> SelectComposedElement::GetRenderSelect() const
265 {
266 auto node = GetInspectorNode(SelectElement::TypeId());
267 if (node) {
268 return AceType::DynamicCast<RenderSelect>(node);
269 }
270 return nullptr;
271 }
272
273 } // namespace OHOS::Ace::V2