1 /*
2 * Copyright (c) 2023 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 "bridge/declarative_frontend/engine/jsi/nativeModule/arkts_native_checkboxgroup_bridge.h"
17 #include "frameworks/bridge/declarative_frontend/engine/jsi/nativeModule/arkts_utils.h"
18
19 namespace OHOS::Ace::NG {
20 namespace {
21 constexpr int NUM_0 = 0;
22 constexpr int NUM_1 = 1;
23 constexpr int NUM_2 = 2;
24 constexpr int NUM_3 = 3;
25 constexpr int PARAM_ARR_LENGTH_1 = 1;
26 constexpr float DEFAULT_SIZE_VALUE = -1.0f;
27 } // namespace
SetCheckboxGroupSelectedColor(ArkUIRuntimeCallInfo * runtimeCallInfo)28 ArkUINativeModuleValue CheckboxGroupBridge::SetCheckboxGroupSelectedColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
29 {
30 EcmaVM* vm = runtimeCallInfo->GetVM();
31 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
32 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
33 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
34 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
35 Color color;
36 RefPtr<ResourceObject> colorResObj;
37 auto nodeInfo = ArkTSUtils::MakeNativeNodeInfo(nativeNode);
38 if (!ArkTSUtils::ParseJsColorAlpha(vm, secondArg, color, colorResObj, nodeInfo)) {
39 GetArkUINodeModifiers()->getCheckboxGroupModifier()->resetCheckboxGroupSelectedColor(nativeNode);
40 } else {
41 auto colorRawPtr = AceType::RawPtr(colorResObj);
42 GetArkUINodeModifiers()->getCheckboxGroupModifier()->setCheckboxGroupSelectedColorPtr(
43 nativeNode, color.GetValue(), colorRawPtr);
44 }
45
46 return panda::JSValueRef::Undefined(vm);
47 }
ResetCheckboxGroupSelectedColor(ArkUIRuntimeCallInfo * runtimeCallInfo)48 ArkUINativeModuleValue CheckboxGroupBridge::ResetCheckboxGroupSelectedColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
49 {
50 EcmaVM* vm = runtimeCallInfo->GetVM();
51 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
52 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
53 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
54
55 GetArkUINodeModifiers()->getCheckboxGroupModifier()->resetCheckboxGroupSelectedColor(nativeNode);
56 return panda::JSValueRef::Undefined(vm);
57 }
SetCheckboxGroupUnSelectedColor(ArkUIRuntimeCallInfo * runtimeCallInfo)58 ArkUINativeModuleValue CheckboxGroupBridge::SetCheckboxGroupUnSelectedColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
59 {
60 EcmaVM* vm = runtimeCallInfo->GetVM();
61 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
62 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
63 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
64 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
65 Color color;
66 RefPtr<ResourceObject> colorResObj;
67 auto nodeInfo = ArkTSUtils::MakeNativeNodeInfo(nativeNode);
68 if (!ArkTSUtils::ParseJsColorAlpha(vm, secondArg, color, colorResObj, nodeInfo)) {
69 GetArkUINodeModifiers()->getCheckboxGroupModifier()->resetCheckboxGroupUnSelectedColor(nativeNode);
70 } else {
71 auto colorRawPtr = AceType::RawPtr(colorResObj);
72 GetArkUINodeModifiers()->getCheckboxGroupModifier()->setCheckboxGroupUnSelectedColorPtr(
73 nativeNode, color.GetValue(), colorRawPtr);
74 }
75 return panda::JSValueRef::Undefined(vm);
76 }
ResetCheckboxGroupUnSelectedColor(ArkUIRuntimeCallInfo * runtimeCallInfo)77 ArkUINativeModuleValue CheckboxGroupBridge::ResetCheckboxGroupUnSelectedColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
78 {
79 EcmaVM* vm = runtimeCallInfo->GetVM();
80 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
81 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
82 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
83
84 GetArkUINodeModifiers()->getCheckboxGroupModifier()->resetCheckboxGroupUnSelectedColor(nativeNode);
85 return panda::JSValueRef::Undefined(vm);
86 }
SetCheckboxGroupSelectAll(ArkUIRuntimeCallInfo * runtimeCallInfo)87 ArkUINativeModuleValue CheckboxGroupBridge::SetCheckboxGroupSelectAll(ArkUIRuntimeCallInfo* runtimeCallInfo)
88 {
89 EcmaVM* vm = runtimeCallInfo->GetVM();
90 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
91 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
92 Local<JSValueRef> selectAllArg = runtimeCallInfo->GetCallArgRef(1);
93 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
94 if (selectAllArg->IsNull() || selectAllArg->IsUndefined()) {
95 GetArkUINodeModifiers()->getCheckboxGroupModifier()->resetCheckboxGroupSelectAll(nativeNode);
96 } else {
97 bool selectAll = selectAllArg->ToBoolean(vm)->Value();
98 GetArkUINodeModifiers()->getCheckboxGroupModifier()->setCheckboxGroupSelectAll(nativeNode, selectAll);
99 }
100
101 return panda::JSValueRef::Undefined(vm);
102 }
ResetCheckboxGroupSelectAll(ArkUIRuntimeCallInfo * runtimeCallInfo)103 ArkUINativeModuleValue CheckboxGroupBridge::ResetCheckboxGroupSelectAll(ArkUIRuntimeCallInfo* runtimeCallInfo)
104 {
105 EcmaVM* vm = runtimeCallInfo->GetVM();
106 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
107 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
108 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
109
110 GetArkUINodeModifiers()->getCheckboxGroupModifier()->resetCheckboxGroupSelectAll(nativeNode);
111 return panda::JSValueRef::Undefined(vm);
112 }
SetCheckboxGroupWidth(ArkUIRuntimeCallInfo * runtimeCallInfo)113 ArkUINativeModuleValue CheckboxGroupBridge::SetCheckboxGroupWidth(ArkUIRuntimeCallInfo* runtimeCallInfo)
114 {
115 EcmaVM* vm = runtimeCallInfo->GetVM();
116 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
117 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
118 Local<JSValueRef> widthArg = runtimeCallInfo->GetCallArgRef(1);
119 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
120 CalcDimension width;
121 if (!ArkTSUtils::ParseJsDimensionVpNG(vm, widthArg, width)) {
122 GetArkUINodeModifiers()->getCheckboxGroupModifier()->resetCheckboxGroupWidth(nativeNode);
123 return panda::JSValueRef::Undefined(vm);
124 }
125 if (LessNotEqual(width.Value(), 0.0)) {
126 width.SetValue(0.0);
127 }
128 std::string widthCalc = width.CalcValue();
129 GetArkUINodeModifiers()->getCheckboxGroupModifier()->setCheckboxGroupWidth(
130 nativeNode, width.Value(), static_cast<int32_t>(width.Unit()), widthCalc.c_str());
131 return panda::JSValueRef::Undefined(vm);
132 }
ResetCheckboxGroupWidth(ArkUIRuntimeCallInfo * runtimeCallInfo)133 ArkUINativeModuleValue CheckboxGroupBridge::ResetCheckboxGroupWidth(ArkUIRuntimeCallInfo* runtimeCallInfo)
134 {
135 EcmaVM* vm = runtimeCallInfo->GetVM();
136 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
137 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
138 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
139 GetArkUINodeModifiers()->getCheckboxGroupModifier()->resetCheckboxGroupWidth(nativeNode);
140 return panda::JSValueRef::Undefined(vm);
141 }
SetCheckboxGroupHeight(ArkUIRuntimeCallInfo * runtimeCallInfo)142 ArkUINativeModuleValue CheckboxGroupBridge::SetCheckboxGroupHeight(ArkUIRuntimeCallInfo* runtimeCallInfo)
143 {
144 EcmaVM* vm = runtimeCallInfo->GetVM();
145 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
146 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
147 Local<JSValueRef> heightArg = runtimeCallInfo->GetCallArgRef(1);
148 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
149 CalcDimension height;
150 if (!ArkTSUtils::ParseJsDimensionVpNG(vm, heightArg, height)) {
151 GetArkUINodeModifiers()->getCheckboxGroupModifier()->resetCheckboxGroupHeight(nativeNode);
152 return panda::JSValueRef::Undefined(vm);
153 }
154 if (LessNotEqual(height.Value(), 0.0)) {
155 height.SetValue(0.0);
156 }
157 std::string heightCalc = height.CalcValue();
158 GetArkUINodeModifiers()->getCheckboxGroupModifier()->setCheckboxGroupHeight(
159 nativeNode, height.Value(), static_cast<int32_t>(height.Unit()), heightCalc.c_str());
160 return panda::JSValueRef::Undefined(vm);
161 }
ResetCheckboxGroupHeight(ArkUIRuntimeCallInfo * runtimeCallInfo)162 ArkUINativeModuleValue CheckboxGroupBridge::ResetCheckboxGroupHeight(ArkUIRuntimeCallInfo* runtimeCallInfo)
163 {
164 EcmaVM* vm = runtimeCallInfo->GetVM();
165 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
166 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
167 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
168 GetArkUINodeModifiers()->getCheckboxGroupModifier()->resetCheckboxGroupHeight(nativeNode);
169 return panda::JSValueRef::Undefined(vm);
170 }
SetCheckboxGroupMark(ArkUIRuntimeCallInfo * runtimeCallInfo)171 ArkUINativeModuleValue CheckboxGroupBridge::SetCheckboxGroupMark(ArkUIRuntimeCallInfo* runtimeCallInfo)
172 {
173 EcmaVM* vm = runtimeCallInfo->GetVM();
174 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
175 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
176 Local<JSValueRef> colorArg = runtimeCallInfo->GetCallArgRef(NUM_1);
177 Local<JSValueRef> sizeArg = runtimeCallInfo->GetCallArgRef(NUM_2);
178 Local<JSValueRef> widthArg = runtimeCallInfo->GetCallArgRef(NUM_3);
179 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
180
181 auto pipeline = PipelineBase::GetCurrentContext();
182 CHECK_NULL_RETURN(pipeline, panda::NativePointerRef::New(vm, nullptr));
183 auto theme = pipeline->GetTheme<CheckboxTheme>();
184 CHECK_NULL_RETURN(theme, panda::NativePointerRef::New(vm, nullptr));
185
186 Color strokeColor;
187 if (!ArkTSUtils::ParseJsColorAlpha(vm, colorArg, strokeColor)) {
188 strokeColor = theme->GetPointColor();
189 }
190
191 CalcDimension size;
192 if (!(ArkTSUtils::ParseJsDimensionVp(vm, sizeArg, size, false)) || (size.Unit() == DimensionUnit::PERCENT) ||
193 (size.ConvertToVp() < 0)) {
194 size = Dimension(DEFAULT_SIZE_VALUE);
195 }
196
197 CalcDimension strokeWidth;
198 if (!(ArkTSUtils::ParseJsDimensionVp(vm, widthArg, strokeWidth, false)) ||
199 (strokeWidth.Unit() == DimensionUnit::PERCENT) || (strokeWidth.ConvertToVp() < 0)) {
200 strokeWidth = theme->GetCheckStroke();
201 }
202
203 GetArkUINodeModifiers()->getCheckboxGroupModifier()->setCheckboxGroupMark(
204 nativeNode, strokeColor.GetValue(), size.Value(), strokeWidth.Value());
205
206 return panda::JSValueRef::Undefined(vm);
207 }
ResetCheckboxGroupMark(ArkUIRuntimeCallInfo * runtimeCallInfo)208 ArkUINativeModuleValue CheckboxGroupBridge::ResetCheckboxGroupMark(ArkUIRuntimeCallInfo* runtimeCallInfo)
209 {
210 EcmaVM* vm = runtimeCallInfo->GetVM();
211 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
212 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
213 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
214 GetArkUINodeModifiers()->getCheckboxGroupModifier()->resetCheckboxGroupMark(nativeNode);
215 return panda::JSValueRef::Undefined(vm);
216 }
217
SetCheckboxGroupSize(ArkUIRuntimeCallInfo * runtimeCallInfo)218 ArkUINativeModuleValue CheckboxGroupBridge::SetCheckboxGroupSize(ArkUIRuntimeCallInfo* runtimeCallInfo)
219 {
220 EcmaVM* vm = runtimeCallInfo->GetVM();
221 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
222 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
223 Local<JSValueRef> widthArg = runtimeCallInfo->GetCallArgRef(1);
224 Local<JSValueRef> heightArg = runtimeCallInfo->GetCallArgRef(2); // 2: index of parameter CheckboxGroup height
225 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
226 CalcDimension width;
227 CalcDimension height;
228 if (!ArkTSUtils::ParseJsDimensionVpNG(vm, widthArg, width)) {
229 GetArkUINodeModifiers()->getCheckboxGroupModifier()->resetCheckboxGroupWidth(nativeNode);
230 } else {
231 std::string widthCalc = width.CalcValue();
232 if (LessNotEqual(width.Value(), 0.0)) {
233 width.SetValue(0.0);
234 }
235 GetArkUINodeModifiers()->getCheckboxGroupModifier()->setCheckboxGroupWidth(
236 nativeNode, width.Value(), static_cast<int32_t>(width.Unit()), widthCalc.c_str());
237 }
238 if (!ArkTSUtils::ParseJsDimensionVpNG(vm, heightArg, height)) {
239 GetArkUINodeModifiers()->getCheckboxGroupModifier()->resetCheckboxGroupHeight(nativeNode);
240 } else {
241 std::string heightCalc = height.CalcValue();
242 if (LessNotEqual(height.Value(), 0.0)) {
243 height.SetValue(0.0);
244 }
245 GetArkUINodeModifiers()->getCheckboxGroupModifier()->setCheckboxGroupHeight(
246 nativeNode, height.Value(), static_cast<int32_t>(height.Unit()), heightCalc.c_str());
247 }
248 return panda::JSValueRef::Undefined(vm);
249 }
250
ResetCheckboxGroupSize(ArkUIRuntimeCallInfo * runtimeCallInfo)251 ArkUINativeModuleValue CheckboxGroupBridge::ResetCheckboxGroupSize(ArkUIRuntimeCallInfo* runtimeCallInfo)
252 {
253 EcmaVM* vm = runtimeCallInfo->GetVM();
254 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
255 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
256 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
257
258 GetArkUINodeModifiers()->getCheckboxGroupModifier()->resetCheckboxGroupWidth(nativeNode);
259 GetArkUINodeModifiers()->getCheckboxGroupModifier()->resetCheckboxGroupHeight(nativeNode);
260 return panda::JSValueRef::Undefined(vm);
261 }
262
SetCheckboxGroupStyle(ArkUIRuntimeCallInfo * runtimeCallInfo)263 ArkUINativeModuleValue CheckboxGroupBridge::SetCheckboxGroupStyle(ArkUIRuntimeCallInfo* runtimeCallInfo)
264 {
265 EcmaVM* vm = runtimeCallInfo->GetVM();
266 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
267 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
268 Local<JSValueRef> styleArg = runtimeCallInfo->GetCallArgRef(1);
269 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
270 if (styleArg->IsNull() || styleArg->IsUndefined()) {
271 GetArkUINodeModifiers()->getCheckboxGroupModifier()->resetCheckboxGroupStyle(nativeNode);
272 } else {
273 int32_t style = styleArg->Int32Value(vm);
274 GetArkUINodeModifiers()->getCheckboxGroupModifier()->setCheckboxGroupStyle(nativeNode, style);
275 }
276
277 return panda::JSValueRef::Undefined(vm);
278 }
ResetCheckboxGroupStyle(ArkUIRuntimeCallInfo * runtimeCallInfo)279 ArkUINativeModuleValue CheckboxGroupBridge::ResetCheckboxGroupStyle(ArkUIRuntimeCallInfo* runtimeCallInfo)
280 {
281 EcmaVM* vm = runtimeCallInfo->GetVM();
282 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
283 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
284 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
285
286 GetArkUINodeModifiers()->getCheckboxGroupModifier()->resetCheckboxGroupStyle(nativeNode);
287 return panda::JSValueRef::Undefined(vm);
288 }
289
SetCheckboxGroupOptions(ArkUIRuntimeCallInfo * runtimeCallInfo)290 ArkUINativeModuleValue CheckboxGroupBridge::SetCheckboxGroupOptions(ArkUIRuntimeCallInfo* runtimeCallInfo)
291 {
292 EcmaVM* vm = runtimeCallInfo->GetVM();
293 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
294 CHECK_EQUAL_RETURN(runtimeCallInfo->GetArgsNumber() != NUM_2, true, panda::JSValueRef::Undefined(vm));
295 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(NUM_0);
296 Local<JSValueRef> groupArg = runtimeCallInfo->GetCallArgRef(NUM_1);
297 auto pointer = nodeArg->ToNativePointer(vm);
298 CHECK_EQUAL_RETURN(pointer.IsEmpty(), true, panda::JSValueRef::Undefined(vm));
299 auto nativeNode = nodePtr(pointer->Value());
300 CHECK_NULL_RETURN(nativeNode, panda::JSValueRef::Undefined(vm));
301 std::string group;
302 if (!groupArg.IsNull() && groupArg->IsString(vm)) {
303 group = groupArg->ToString(vm)->ToString(vm);
304 }
305 auto modifier = GetArkUINodeModifiers()->getCheckboxGroupModifier();
306 CHECK_NULL_RETURN(modifier, panda::JSValueRef::Undefined(vm));
307 modifier->setCheckboxGroupName(nativeNode, group.c_str());
308 return panda::JSValueRef::Undefined(vm);
309 }
310
311 template<typename T>
String2StringValueWithVM(const EcmaVM * vm,T val)312 panda::Local<panda::JSValueRef> String2StringValueWithVM(const EcmaVM* vm, T val)
313 {
314 if constexpr (std::is_same_v<T, std::string>) {
315 return panda::StringRef::NewFromUtf8(vm, val.c_str());
316 } else if constexpr (std::is_same_v<T, const char*>) {
317 return panda::StringRef::NewFromUtf8(vm, val);
318 } else if constexpr (std::is_same_v<T, std::u16string>) {
319 return panda::StringRef::NewFromUtf16(vm, val.c_str());
320 }
321 return panda::JSValueRef::Undefined(vm);
322 }
323
SetCheckboxGroupOnChange(ArkUIRuntimeCallInfo * runtimeCallInfo)324 ArkUINativeModuleValue CheckboxGroupBridge::SetCheckboxGroupOnChange(ArkUIRuntimeCallInfo* runtimeCallInfo)
325 {
326 EcmaVM* vm = runtimeCallInfo->GetVM();
327 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
328 uint32_t argsNumber = runtimeCallInfo->GetArgsNumber();
329 if (argsNumber != NUM_2) {
330 return panda::JSValueRef::Undefined(vm);
331 }
332 Local<JSValueRef> nativeNodeArg = runtimeCallInfo->GetCallArgRef(NUM_0);
333 Local<JSValueRef> callbackArg = runtimeCallInfo->GetCallArgRef(NUM_1);
334 auto nativeNode = nodePtr(nativeNodeArg->ToNativePointer(vm)->Value());
335 auto frameNode = reinterpret_cast<FrameNode*>(nativeNode);
336 CHECK_NULL_RETURN(frameNode, panda::NativePointerRef::New(vm, nullptr));
337 if (callbackArg->IsUndefined() || callbackArg->IsNull() || !callbackArg->IsFunction(vm)) {
338 GetArkUINodeModifiers()->getCheckboxGroupModifier()->resetCheckboxGroupOnChange(nativeNode);
339 return panda::JSValueRef::Undefined(vm);
340 }
341 panda::Local<panda::FunctionRef> func = callbackArg->ToObject(vm);
342 std::function<void(const BaseEventInfo*)> callback = [vm, frameNode, func = panda::CopyableGlobal(vm, func)](
343 const BaseEventInfo* info) {
344 panda::LocalScope pandaScope(vm);
345 panda::TryCatch trycatch(vm);
346 PipelineContext::SetCallBackNode(AceType::WeakClaim(frameNode));
347 const auto* eventInfo = TypeInfoHelper::DynamicCast<CheckboxGroupResult>(info);
348 panda::Local<panda::NumberRef> statusParam = panda::NumberRef::New(vm, eventInfo->GetStatus());
349 int32_t i = 0;
350 auto valueArray = panda::ArrayRef::New(vm);
351 for (std::string str : eventInfo->GetNameList()) {
352 panda::Local<panda::StringRef> item = String2StringValueWithVM(vm, str.c_str());
353 panda::ArrayRef::SetValueAt(vm, valueArray, i++, item);
354 }
355 auto resultObj = panda::ObjectRef::New(vm);
356 resultObj->Set(vm, panda::StringRef::NewFromUtf8(vm, "name"), valueArray);
357 resultObj->Set(vm, panda::StringRef::NewFromUtf8(vm, "status"), statusParam);
358 panda::Local<panda::JSValueRef> params[PARAM_ARR_LENGTH_1] = { resultObj };
359 func->Call(vm, func.ToLocal(), params, PARAM_ARR_LENGTH_1);
360 };
361 GetArkUINodeModifiers()->getCheckboxGroupModifier()->setCheckboxGroupOnChange(
362 nativeNode, reinterpret_cast<void*>(&callback));
363 return panda::JSValueRef::Undefined(vm);
364 }
365
ResetCheckboxGroupOnChange(ArkUIRuntimeCallInfo * runtimeCallInfo)366 ArkUINativeModuleValue CheckboxGroupBridge::ResetCheckboxGroupOnChange(ArkUIRuntimeCallInfo* runtimeCallInfo)
367 {
368 EcmaVM* vm = runtimeCallInfo->GetVM();
369 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
370 Local<JSValueRef> nativeNodeArg = runtimeCallInfo->GetCallArgRef(NUM_0);
371 auto nativeNode = nodePtr(nativeNodeArg->ToNativePointer(vm)->Value());
372
373 GetArkUINodeModifiers()->getCheckboxGroupModifier()->resetCheckboxGroupOnChange(nativeNode);
374 return panda::JSValueRef::Undefined(vm);
375 }
376 } // namespace OHOS::Ace::NG
377