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