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
18 #include "core/interfaces/native/node/api.h"
19 #include "frameworks/bridge/declarative_frontend/engine/jsi/nativeModule/arkts_utils.h"
20
21 namespace OHOS::Ace::NG {
22 namespace {
23 constexpr int NUM_0 = 0;
24 constexpr int NUM_1 = 1;
25 constexpr int NUM_2 = 2;
26 constexpr int NUM_3 = 3;
27 constexpr float DEFAULT_SIZE_VALUE = -1.0f;
28 } // namespace
SetCheckboxGroupSelectedColor(ArkUIRuntimeCallInfo * runtimeCallInfo)29 ArkUINativeModuleValue CheckboxGroupBridge::SetCheckboxGroupSelectedColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
30 {
31 EcmaVM* vm = runtimeCallInfo->GetVM();
32 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
33 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
34 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
35 void* nativeNode = firstArg->ToNativePointer(vm)->Value();
36 Color color;
37 if (!ArkTSUtils::ParseJsColorAlpha(vm, secondArg, color)) {
38 GetArkUIInternalNodeAPI()->GetCheckboxGroupModifier().ResetCheckboxGroupSelectedColor(nativeNode);
39 } else {
40 GetArkUIInternalNodeAPI()->GetCheckboxGroupModifier().SetCheckboxGroupSelectedColor(
41 nativeNode, color.GetValue());
42 }
43
44 return panda::JSValueRef::Undefined(vm);
45 }
ResetCheckboxGroupSelectedColor(ArkUIRuntimeCallInfo * runtimeCallInfo)46 ArkUINativeModuleValue CheckboxGroupBridge::ResetCheckboxGroupSelectedColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
47 {
48 EcmaVM* vm = runtimeCallInfo->GetVM();
49 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
50 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
51 void* nativeNode = firstArg->ToNativePointer(vm)->Value();
52
53 GetArkUIInternalNodeAPI()->GetCheckboxGroupModifier().ResetCheckboxGroupSelectedColor(nativeNode);
54 return panda::JSValueRef::Undefined(vm);
55 }
SetCheckboxGroupUnSelectedColor(ArkUIRuntimeCallInfo * runtimeCallInfo)56 ArkUINativeModuleValue CheckboxGroupBridge::SetCheckboxGroupUnSelectedColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
57 {
58 EcmaVM* vm = runtimeCallInfo->GetVM();
59 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
60 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
61 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
62 void* nativeNode = firstArg->ToNativePointer(vm)->Value();
63 Color color;
64 if (!ArkTSUtils::ParseJsColorAlpha(vm, secondArg, color)) {
65 GetArkUIInternalNodeAPI()->GetCheckboxGroupModifier().ResetCheckboxGroupUnSelectedColor(nativeNode);
66 } else {
67 GetArkUIInternalNodeAPI()->GetCheckboxGroupModifier().SetCheckboxGroupUnSelectedColor(
68 nativeNode, color.GetValue());
69 }
70 return panda::JSValueRef::Undefined(vm);
71 }
ResetCheckboxGroupUnSelectedColor(ArkUIRuntimeCallInfo * runtimeCallInfo)72 ArkUINativeModuleValue CheckboxGroupBridge::ResetCheckboxGroupUnSelectedColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
73 {
74 EcmaVM* vm = runtimeCallInfo->GetVM();
75 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
76 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
77 void* nativeNode = firstArg->ToNativePointer(vm)->Value();
78
79 GetArkUIInternalNodeAPI()->GetCheckboxGroupModifier().ResetCheckboxGroupUnSelectedColor(nativeNode);
80 return panda::JSValueRef::Undefined(vm);
81 }
SetCheckboxGroupSelectAll(ArkUIRuntimeCallInfo * runtimeCallInfo)82 ArkUINativeModuleValue CheckboxGroupBridge::SetCheckboxGroupSelectAll(ArkUIRuntimeCallInfo* runtimeCallInfo)
83 {
84 EcmaVM* vm = runtimeCallInfo->GetVM();
85 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
86 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
87 Local<JSValueRef> selectAllArg = runtimeCallInfo->GetCallArgRef(1);
88 void* nativeNode = nodeArg->ToNativePointer(vm)->Value();
89 if (selectAllArg->IsNull() || selectAllArg->IsUndefined()) {
90 GetArkUIInternalNodeAPI()->GetCheckboxGroupModifier().ResetCheckboxGroupSelectAll(nativeNode);
91 } else {
92 bool selectAll = selectAllArg->ToBoolean(vm)->Value();
93 GetArkUIInternalNodeAPI()->GetCheckboxGroupModifier().SetCheckboxGroupSelectAll(nativeNode, selectAll);
94 }
95
96 return panda::JSValueRef::Undefined(vm);
97 }
ResetCheckboxGroupSelectAll(ArkUIRuntimeCallInfo * runtimeCallInfo)98 ArkUINativeModuleValue CheckboxGroupBridge::ResetCheckboxGroupSelectAll(ArkUIRuntimeCallInfo* runtimeCallInfo)
99 {
100 EcmaVM* vm = runtimeCallInfo->GetVM();
101 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
102 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
103 void* nativeNode = firstArg->ToNativePointer(vm)->Value();
104
105 GetArkUIInternalNodeAPI()->GetCheckboxGroupModifier().ResetCheckboxGroupSelectAll(nativeNode);
106 return panda::JSValueRef::Undefined(vm);
107 }
SetCheckboxGroupWidth(ArkUIRuntimeCallInfo * runtimeCallInfo)108 ArkUINativeModuleValue CheckboxGroupBridge::SetCheckboxGroupWidth(ArkUIRuntimeCallInfo* runtimeCallInfo)
109 {
110 EcmaVM* vm = runtimeCallInfo->GetVM();
111 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
112 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
113 void* nativeNode = firstArg->ToNativePointer(vm)->Value();
114 Local<JSValueRef> jsValue = runtimeCallInfo->GetCallArgRef(1);
115 CalcDimension width;
116 if (!jsValue->IsUndefined()) {
117 ArkTSUtils::ParseJsDimensionVp(vm, jsValue, width);
118 if (width.IsNegative()) {
119 GetArkUIInternalNodeAPI()->GetCheckboxGroupModifier().ResetCheckboxGroupWidth(nativeNode);
120 return panda::JSValueRef::Undefined(vm);
121 }
122
123 GetArkUIInternalNodeAPI()->GetCheckboxGroupModifier().SetCheckboxGroupWidth(
124 nativeNode, width.Value(), static_cast<int>(width.Unit()));
125 }
126 return panda::JSValueRef::Undefined(vm);
127 }
ResetCheckboxGroupWidth(ArkUIRuntimeCallInfo * runtimeCallInfo)128 ArkUINativeModuleValue CheckboxGroupBridge::ResetCheckboxGroupWidth(ArkUIRuntimeCallInfo* runtimeCallInfo)
129 {
130 EcmaVM* vm = runtimeCallInfo->GetVM();
131 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
132 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
133 void* nativeNode = firstArg->ToNativePointer(vm)->Value();
134 GetArkUIInternalNodeAPI()->GetCheckboxGroupModifier().ResetCheckboxGroupWidth(nativeNode);
135 return panda::JSValueRef::Undefined(vm);
136 }
SetCheckboxGroupHeight(ArkUIRuntimeCallInfo * runtimeCallInfo)137 ArkUINativeModuleValue CheckboxGroupBridge::SetCheckboxGroupHeight(ArkUIRuntimeCallInfo* runtimeCallInfo)
138 {
139 EcmaVM* vm = runtimeCallInfo->GetVM();
140 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
141 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
142 void* nativeNode = firstArg->ToNativePointer(vm)->Value();
143 Local<JSValueRef> jsValue = runtimeCallInfo->GetCallArgRef(1);
144 CalcDimension height;
145 if (!jsValue->IsUndefined()) {
146 ArkTSUtils::ParseJsDimensionVp(vm, jsValue, height);
147 if (height.IsNegative()) {
148 GetArkUIInternalNodeAPI()->GetCheckboxGroupModifier().ResetCheckboxGroupHeight(nativeNode);
149 return panda::JSValueRef::Undefined(vm);
150 }
151
152 GetArkUIInternalNodeAPI()->GetCheckboxGroupModifier().SetCheckboxGroupHeight(
153 nativeNode, height.Value(), static_cast<int>(height.Unit()));
154 }
155
156 return panda::JSValueRef::Undefined(vm);
157 }
ResetCheckboxGroupHeight(ArkUIRuntimeCallInfo * runtimeCallInfo)158 ArkUINativeModuleValue CheckboxGroupBridge::ResetCheckboxGroupHeight(ArkUIRuntimeCallInfo* runtimeCallInfo)
159 {
160 EcmaVM* vm = runtimeCallInfo->GetVM();
161 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
162 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
163 void* nativeNode = firstArg->ToNativePointer(vm)->Value();
164 GetArkUIInternalNodeAPI()->GetCheckboxGroupModifier().ResetCheckboxGroupHeight(nativeNode);
165 return panda::JSValueRef::Undefined(vm);
166 }
SetCheckboxGroupMark(ArkUIRuntimeCallInfo * runtimeCallInfo)167 ArkUINativeModuleValue CheckboxGroupBridge::SetCheckboxGroupMark(ArkUIRuntimeCallInfo* runtimeCallInfo)
168 {
169 EcmaVM* vm = runtimeCallInfo->GetVM();
170 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
171 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
172 Local<JSValueRef> colorArg = runtimeCallInfo->GetCallArgRef(NUM_1);
173 Local<JSValueRef> sizeArg = runtimeCallInfo->GetCallArgRef(NUM_2);
174 Local<JSValueRef> widthArg = runtimeCallInfo->GetCallArgRef(NUM_3);
175 void* nativeNode = firstArg->ToNativePointer(vm)->Value();
176
177 auto pipeline = PipelineBase::GetCurrentContext();
178 CHECK_NULL_RETURN(pipeline, panda::NativePointerRef::New(vm, nullptr));
179 auto theme = pipeline->GetTheme<CheckboxTheme>();
180 CHECK_NULL_RETURN(theme, panda::NativePointerRef::New(vm, nullptr));
181
182 Color strokeColor;
183 if (!ArkTSUtils::ParseJsColorAlpha(vm, colorArg, strokeColor)) {
184 strokeColor = theme->GetPointColor();
185 }
186
187 CalcDimension size;
188 if (!(ArkTSUtils::ParseJsDimensionVp(vm, sizeArg, size, false)) || (size.Unit() == DimensionUnit::PERCENT) ||
189 (size.ConvertToVp() < 0)) {
190 size = Dimension(DEFAULT_SIZE_VALUE);
191 }
192
193 CalcDimension strokeWidth;
194 if (!(ArkTSUtils::ParseJsDimensionVp(vm, widthArg, strokeWidth, false)) ||
195 (strokeWidth.Unit() == DimensionUnit::PERCENT) || (strokeWidth.ConvertToVp() < 0)) {
196 strokeWidth = theme->GetCheckStroke();
197 }
198
199 GetArkUIInternalNodeAPI()->GetCheckboxGroupModifier().SetCheckboxGroupMark(
200 nativeNode, strokeColor.GetValue(), size.Value(), strokeWidth.Value());
201
202 return panda::JSValueRef::Undefined(vm);
203 }
ResetCheckboxGroupMark(ArkUIRuntimeCallInfo * runtimeCallInfo)204 ArkUINativeModuleValue CheckboxGroupBridge::ResetCheckboxGroupMark(ArkUIRuntimeCallInfo* runtimeCallInfo)
205 {
206 EcmaVM* vm = runtimeCallInfo->GetVM();
207 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
208 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
209 void* nativeNode = firstArg->ToNativePointer(vm)->Value();
210 GetArkUIInternalNodeAPI()->GetCheckboxGroupModifier().ResetCheckboxGroupMark(nativeNode);
211 return panda::JSValueRef::Undefined(vm);
212 }
213
SetCheckboxGroupSize(ArkUIRuntimeCallInfo * runtimeCallInfo)214 ArkUINativeModuleValue CheckboxGroupBridge::SetCheckboxGroupSize(ArkUIRuntimeCallInfo* runtimeCallInfo)
215 {
216 EcmaVM* vm = runtimeCallInfo->GetVM();
217 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
218 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
219 Local<JSValueRef> widthArg = runtimeCallInfo->GetCallArgRef(1);
220 Local<JSValueRef> heightArg = runtimeCallInfo->GetCallArgRef(2); // 2: index of parameter CheckboxGroup height
221 void* nativeNode = nodeArg->ToNativePointer(vm)->Value();
222 CalcDimension height;
223 if (!ArkTSUtils::ParseJsDimensionVp(vm, heightArg, height) || height.IsNegative()) {
224 GetArkUIInternalNodeAPI()->GetCheckboxGroupModifier().ResetCheckboxGroupHeight(nativeNode);
225 } else {
226 GetArkUIInternalNodeAPI()->GetCheckboxGroupModifier().SetCheckboxGroupHeight(
227 nativeNode, height.Value(), static_cast<int>(height.Unit()));
228 }
229
230 CalcDimension width;
231 if (!ArkTSUtils::ParseJsDimensionVp(vm, widthArg, width) || width.IsNegative()) {
232 GetArkUIInternalNodeAPI()->GetCheckboxGroupModifier().ResetCheckboxGroupWidth(nativeNode);
233 } else {
234 GetArkUIInternalNodeAPI()->GetCheckboxGroupModifier().SetCheckboxGroupWidth(
235 nativeNode, width.Value(), static_cast<int>(width.Unit()));
236 }
237
238 return panda::JSValueRef::Undefined(vm);
239 }
240
ResetCheckboxGroupSize(ArkUIRuntimeCallInfo * runtimeCallInfo)241 ArkUINativeModuleValue CheckboxGroupBridge::ResetCheckboxGroupSize(ArkUIRuntimeCallInfo* runtimeCallInfo)
242 {
243 EcmaVM* vm = runtimeCallInfo->GetVM();
244 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
245 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
246 void* nativeNode = firstArg->ToNativePointer(vm)->Value();
247
248 GetArkUIInternalNodeAPI()->GetCheckboxGroupModifier().ResetCheckboxGroupWidth(nativeNode);
249 GetArkUIInternalNodeAPI()->GetCheckboxGroupModifier().ResetCheckboxGroupHeight(nativeNode);
250 return panda::JSValueRef::Undefined(vm);
251 }
252 } // namespace OHOS::Ace::NG
253