• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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