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 float DEFAULT_SIZE_VALUE = -1.0f;
26 } // namespace
SetCheckboxGroupSelectedColor(ArkUIRuntimeCallInfo * runtimeCallInfo)27 ArkUINativeModuleValue CheckboxGroupBridge::SetCheckboxGroupSelectedColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
28 {
29 EcmaVM* vm = runtimeCallInfo->GetVM();
30 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
31 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
32 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
33 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
34 Color color;
35 if (!ArkTSUtils::ParseJsColorAlpha(vm, secondArg, color)) {
36 GetArkUINodeModifiers()->getCheckboxGroupModifier()->resetCheckboxGroupSelectedColor(nativeNode);
37 } else {
38 GetArkUINodeModifiers()->getCheckboxGroupModifier()->setCheckboxGroupSelectedColor(
39 nativeNode, color.GetValue());
40 }
41
42 return panda::JSValueRef::Undefined(vm);
43 }
ResetCheckboxGroupSelectedColor(ArkUIRuntimeCallInfo * runtimeCallInfo)44 ArkUINativeModuleValue CheckboxGroupBridge::ResetCheckboxGroupSelectedColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
45 {
46 EcmaVM* vm = runtimeCallInfo->GetVM();
47 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
48 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
49 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
50
51 GetArkUINodeModifiers()->getCheckboxGroupModifier()->resetCheckboxGroupSelectedColor(nativeNode);
52 return panda::JSValueRef::Undefined(vm);
53 }
SetCheckboxGroupUnSelectedColor(ArkUIRuntimeCallInfo * runtimeCallInfo)54 ArkUINativeModuleValue CheckboxGroupBridge::SetCheckboxGroupUnSelectedColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
55 {
56 EcmaVM* vm = runtimeCallInfo->GetVM();
57 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
58 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
59 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
60 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
61 Color color;
62 if (!ArkTSUtils::ParseJsColorAlpha(vm, secondArg, color)) {
63 GetArkUINodeModifiers()->getCheckboxGroupModifier()->resetCheckboxGroupUnSelectedColor(nativeNode);
64 } else {
65 GetArkUINodeModifiers()->getCheckboxGroupModifier()->setCheckboxGroupUnSelectedColor(
66 nativeNode, color.GetValue());
67 }
68 return panda::JSValueRef::Undefined(vm);
69 }
ResetCheckboxGroupUnSelectedColor(ArkUIRuntimeCallInfo * runtimeCallInfo)70 ArkUINativeModuleValue CheckboxGroupBridge::ResetCheckboxGroupUnSelectedColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
71 {
72 EcmaVM* vm = runtimeCallInfo->GetVM();
73 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
74 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
75 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
76
77 GetArkUINodeModifiers()->getCheckboxGroupModifier()->resetCheckboxGroupUnSelectedColor(nativeNode);
78 return panda::JSValueRef::Undefined(vm);
79 }
SetCheckboxGroupSelectAll(ArkUIRuntimeCallInfo * runtimeCallInfo)80 ArkUINativeModuleValue CheckboxGroupBridge::SetCheckboxGroupSelectAll(ArkUIRuntimeCallInfo* runtimeCallInfo)
81 {
82 EcmaVM* vm = runtimeCallInfo->GetVM();
83 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
84 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
85 Local<JSValueRef> selectAllArg = runtimeCallInfo->GetCallArgRef(1);
86 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
87 if (selectAllArg->IsNull() || selectAllArg->IsUndefined()) {
88 GetArkUINodeModifiers()->getCheckboxGroupModifier()->resetCheckboxGroupSelectAll(nativeNode);
89 } else {
90 bool selectAll = selectAllArg->ToBoolean(vm)->Value();
91 GetArkUINodeModifiers()->getCheckboxGroupModifier()->setCheckboxGroupSelectAll(nativeNode, selectAll);
92 }
93 return panda::JSValueRef::Undefined(vm);
94 }
ResetCheckboxGroupSelectAll(ArkUIRuntimeCallInfo * runtimeCallInfo)95 ArkUINativeModuleValue CheckboxGroupBridge::ResetCheckboxGroupSelectAll(ArkUIRuntimeCallInfo* runtimeCallInfo)
96 {
97 EcmaVM* vm = runtimeCallInfo->GetVM();
98 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
99 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
100 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
101
102 GetArkUINodeModifiers()->getCheckboxGroupModifier()->resetCheckboxGroupSelectAll(nativeNode);
103 return panda::JSValueRef::Undefined(vm);
104 }
SetCheckboxGroupWidth(ArkUIRuntimeCallInfo * runtimeCallInfo)105 ArkUINativeModuleValue CheckboxGroupBridge::SetCheckboxGroupWidth(ArkUIRuntimeCallInfo* runtimeCallInfo)
106 {
107 EcmaVM* vm = runtimeCallInfo->GetVM();
108 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
109 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
110 Local<JSValueRef> widthArg = runtimeCallInfo->GetCallArgRef(1);
111 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
112 CalcDimension width;
113 if (!ArkTSUtils::ParseJsDimensionVpNG(vm, widthArg, width)) {
114 GetArkUINodeModifiers()->getCheckboxGroupModifier()->resetCheckboxGroupWidth(nativeNode);
115 return panda::JSValueRef::Undefined(vm);
116 }
117 if (LessNotEqual(width.Value(), 0.0)) {
118 width.SetValue(0.0);
119 }
120 std::string widthCalc = width.CalcValue();
121 GetArkUINodeModifiers()->getCheckboxGroupModifier()->setCheckboxGroupWidth(
122 nativeNode, width.Value(), static_cast<int32_t>(width.Unit()), widthCalc.c_str());
123 return panda::JSValueRef::Undefined(vm);
124 }
ResetCheckboxGroupWidth(ArkUIRuntimeCallInfo * runtimeCallInfo)125 ArkUINativeModuleValue CheckboxGroupBridge::ResetCheckboxGroupWidth(ArkUIRuntimeCallInfo* runtimeCallInfo)
126 {
127 EcmaVM* vm = runtimeCallInfo->GetVM();
128 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
129 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
130 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
131 GetArkUINodeModifiers()->getCheckboxGroupModifier()->resetCheckboxGroupWidth(nativeNode);
132 return panda::JSValueRef::Undefined(vm);
133 }
SetCheckboxGroupHeight(ArkUIRuntimeCallInfo * runtimeCallInfo)134 ArkUINativeModuleValue CheckboxGroupBridge::SetCheckboxGroupHeight(ArkUIRuntimeCallInfo* runtimeCallInfo)
135 {
136 EcmaVM* vm = runtimeCallInfo->GetVM();
137 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
138 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
139 Local<JSValueRef> heightArg = runtimeCallInfo->GetCallArgRef(1);
140 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
141 CalcDimension height;
142 if (!ArkTSUtils::ParseJsDimensionVpNG(vm, heightArg, height)) {
143 GetArkUINodeModifiers()->getCheckboxGroupModifier()->resetCheckboxGroupHeight(nativeNode);
144 return panda::JSValueRef::Undefined(vm);
145 }
146 if (LessNotEqual(height.Value(), 0.0)) {
147 height.SetValue(0.0);
148 }
149 std::string heightCalc = height.CalcValue();
150 GetArkUINodeModifiers()->getCheckboxGroupModifier()->setCheckboxGroupHeight(
151 nativeNode, height.Value(), static_cast<int32_t>(height.Unit()), heightCalc.c_str());
152 return panda::JSValueRef::Undefined(vm);
153 }
ResetCheckboxGroupHeight(ArkUIRuntimeCallInfo * runtimeCallInfo)154 ArkUINativeModuleValue CheckboxGroupBridge::ResetCheckboxGroupHeight(ArkUIRuntimeCallInfo* runtimeCallInfo)
155 {
156 EcmaVM* vm = runtimeCallInfo->GetVM();
157 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
158 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
159 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
160 GetArkUINodeModifiers()->getCheckboxGroupModifier()->resetCheckboxGroupHeight(nativeNode);
161 return panda::JSValueRef::Undefined(vm);
162 }
SetCheckboxGroupMark(ArkUIRuntimeCallInfo * runtimeCallInfo)163 ArkUINativeModuleValue CheckboxGroupBridge::SetCheckboxGroupMark(ArkUIRuntimeCallInfo* runtimeCallInfo)
164 {
165 EcmaVM* vm = runtimeCallInfo->GetVM();
166 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
167 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
168 Local<JSValueRef> colorArg = runtimeCallInfo->GetCallArgRef(NUM_1);
169 Local<JSValueRef> sizeArg = runtimeCallInfo->GetCallArgRef(NUM_2);
170 Local<JSValueRef> widthArg = runtimeCallInfo->GetCallArgRef(NUM_3);
171 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
172
173 auto pipeline = PipelineBase::GetCurrentContext();
174 CHECK_NULL_RETURN(pipeline, panda::NativePointerRef::New(vm, nullptr));
175 auto theme = pipeline->GetTheme<CheckboxTheme>();
176 CHECK_NULL_RETURN(theme, panda::NativePointerRef::New(vm, nullptr));
177
178 Color strokeColor;
179 if (!ArkTSUtils::ParseJsColorAlpha(vm, colorArg, strokeColor)) {
180 strokeColor = theme->GetPointColor();
181 }
182
183 CalcDimension size;
184 if (!(ArkTSUtils::ParseJsDimensionVp(vm, sizeArg, size, false)) || (size.Unit() == DimensionUnit::PERCENT) ||
185 (size.ConvertToVp() < 0)) {
186 size = Dimension(DEFAULT_SIZE_VALUE);
187 }
188
189 CalcDimension strokeWidth;
190 if (!(ArkTSUtils::ParseJsDimensionVp(vm, widthArg, strokeWidth, false)) ||
191 (strokeWidth.Unit() == DimensionUnit::PERCENT) || (strokeWidth.ConvertToVp() < 0)) {
192 strokeWidth = theme->GetCheckStroke();
193 }
194
195 GetArkUINodeModifiers()->getCheckboxGroupModifier()->setCheckboxGroupMark(
196 nativeNode, strokeColor.GetValue(), size.Value(), strokeWidth.Value());
197
198 return panda::JSValueRef::Undefined(vm);
199 }
ResetCheckboxGroupMark(ArkUIRuntimeCallInfo * runtimeCallInfo)200 ArkUINativeModuleValue CheckboxGroupBridge::ResetCheckboxGroupMark(ArkUIRuntimeCallInfo* runtimeCallInfo)
201 {
202 EcmaVM* vm = runtimeCallInfo->GetVM();
203 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
204 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
205 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
206 GetArkUINodeModifiers()->getCheckboxGroupModifier()->resetCheckboxGroupMark(nativeNode);
207 return panda::JSValueRef::Undefined(vm);
208 }
209
SetCheckboxGroupSize(ArkUIRuntimeCallInfo * runtimeCallInfo)210 ArkUINativeModuleValue CheckboxGroupBridge::SetCheckboxGroupSize(ArkUIRuntimeCallInfo* runtimeCallInfo)
211 {
212 EcmaVM* vm = runtimeCallInfo->GetVM();
213 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
214 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
215 Local<JSValueRef> widthArg = runtimeCallInfo->GetCallArgRef(1);
216 Local<JSValueRef> heightArg = runtimeCallInfo->GetCallArgRef(2); // 2: index of parameter CheckboxGroup height
217 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
218 CalcDimension width;
219 CalcDimension height;
220 if (!ArkTSUtils::ParseJsDimensionVpNG(vm, widthArg, width)) {
221 GetArkUINodeModifiers()->getCheckboxGroupModifier()->resetCheckboxGroupWidth(nativeNode);
222 } else {
223 std::string widthCalc = width.CalcValue();
224 if (LessNotEqual(width.Value(), 0.0)) {
225 width.SetValue(0.0);
226 }
227 GetArkUINodeModifiers()->getCheckboxGroupModifier()->setCheckboxGroupWidth(
228 nativeNode, width.Value(), static_cast<int32_t>(width.Unit()), widthCalc.c_str());
229 }
230 if (!ArkTSUtils::ParseJsDimensionVpNG(vm, heightArg, height)) {
231 GetArkUINodeModifiers()->getCheckboxGroupModifier()->resetCheckboxGroupHeight(nativeNode);
232 } else {
233 std::string heightCalc = height.CalcValue();
234 if (LessNotEqual(height.Value(), 0.0)) {
235 height.SetValue(0.0);
236 }
237 GetArkUINodeModifiers()->getCheckboxGroupModifier()->setCheckboxGroupHeight(
238 nativeNode, height.Value(), static_cast<int32_t>(height.Unit()), heightCalc.c_str());
239 }
240 return panda::JSValueRef::Undefined(vm);
241 }
242
ResetCheckboxGroupSize(ArkUIRuntimeCallInfo * runtimeCallInfo)243 ArkUINativeModuleValue CheckboxGroupBridge::ResetCheckboxGroupSize(ArkUIRuntimeCallInfo* runtimeCallInfo)
244 {
245 EcmaVM* vm = runtimeCallInfo->GetVM();
246 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
247 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
248 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
249
250 GetArkUINodeModifiers()->getCheckboxGroupModifier()->resetCheckboxGroupWidth(nativeNode);
251 GetArkUINodeModifiers()->getCheckboxGroupModifier()->resetCheckboxGroupHeight(nativeNode);
252 return panda::JSValueRef::Undefined(vm);
253 }
254
SetCheckboxGroupStyle(ArkUIRuntimeCallInfo * runtimeCallInfo)255 ArkUINativeModuleValue CheckboxGroupBridge::SetCheckboxGroupStyle(ArkUIRuntimeCallInfo* runtimeCallInfo)
256 {
257 EcmaVM* vm = runtimeCallInfo->GetVM();
258 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
259 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
260 Local<JSValueRef> styleArg = runtimeCallInfo->GetCallArgRef(1);
261 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
262 if (styleArg->IsNull() || styleArg->IsUndefined()) {
263 GetArkUINodeModifiers()->getCheckboxGroupModifier()->resetCheckboxGroupStyle(nativeNode);
264 } else {
265 int32_t style = styleArg->Int32Value(vm);
266 GetArkUINodeModifiers()->getCheckboxGroupModifier()->setCheckboxGroupStyle(nativeNode, style);
267 }
268
269 return panda::JSValueRef::Undefined(vm);
270 }
ResetCheckboxGroupStyle(ArkUIRuntimeCallInfo * runtimeCallInfo)271 ArkUINativeModuleValue CheckboxGroupBridge::ResetCheckboxGroupStyle(ArkUIRuntimeCallInfo* runtimeCallInfo)
272 {
273 EcmaVM* vm = runtimeCallInfo->GetVM();
274 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
275 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
276 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
277
278 GetArkUINodeModifiers()->getCheckboxGroupModifier()->resetCheckboxGroupStyle(nativeNode);
279 return panda::JSValueRef::Undefined(vm);
280 }
281 } // namespace OHOS::Ace::NG
282