• 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 #include "bridge/declarative_frontend/engine/jsi/nativeModule/arkts_native_grid_bridge.h"
16 #include "base/utils/string_utils.h"
17 #include "base/utils/utils.h"
18 #include "bridge/declarative_frontend/jsview/js_grid.h"
19 #include "frameworks/bridge/declarative_frontend/engine/jsi/nativeModule/arkts_utils.h"
20 
21 namespace OHOS::Ace::NG {
22 constexpr int32_t CALL_ARG_0 = 0;
23 constexpr int32_t CALL_ARG_1 = 1;
24 constexpr int32_t CALL_ARG_2 = 2;
25 constexpr int32_t DEFAULT_CACHED_COUNT = 1;
26 
SetColumnsTemplate(ArkUIRuntimeCallInfo * runtimeCallInfo)27 ArkUINativeModuleValue GridBridge::SetColumnsTemplate(ArkUIRuntimeCallInfo* runtimeCallInfo)
28 {
29     EcmaVM* vm = runtimeCallInfo->GetVM();
30     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
31     Local<JSValueRef> node = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
32     Local<JSValueRef> arg_columnsTemplate = runtimeCallInfo->GetCallArgRef(CALL_ARG_1);
33     auto nativeNode = nodePtr(node->ToNativePointer(vm)->Value());
34     if (arg_columnsTemplate->IsUndefined() || !arg_columnsTemplate->IsString(vm)) {
35         GetArkUINodeModifiers()->getGridModifier()->resetGridColumnsTemplate(nativeNode);
36     } else {
37         std::string columnsTemplate = arg_columnsTemplate->ToString(vm)->ToString(vm);
38         GetArkUINodeModifiers()->getGridModifier()->setGridColumnsTemplate(nativeNode, columnsTemplate.c_str());
39     }
40     return panda::JSValueRef::Undefined(vm);
41 }
42 
ResetColumnsTemplate(ArkUIRuntimeCallInfo * runtimeCallInfo)43 ArkUINativeModuleValue GridBridge::ResetColumnsTemplate(ArkUIRuntimeCallInfo* runtimeCallInfo)
44 {
45     EcmaVM* vm = runtimeCallInfo->GetVM();
46     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
47     Local<JSValueRef> node = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
48     auto nativeNode = nodePtr(node->ToNativePointer(vm)->Value());
49     GetArkUINodeModifiers()->getGridModifier()->resetGridColumnsTemplate(nativeNode);
50     return panda::JSValueRef::Undefined(vm);
51 }
52 
SetRowsTemplate(ArkUIRuntimeCallInfo * runtimeCallInfo)53 ArkUINativeModuleValue GridBridge::SetRowsTemplate(ArkUIRuntimeCallInfo* runtimeCallInfo)
54 {
55     EcmaVM* vm = runtimeCallInfo->GetVM();
56     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
57     Local<JSValueRef> node = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
58     Local<JSValueRef> arg_rowsTemplate = runtimeCallInfo->GetCallArgRef(CALL_ARG_1);
59     auto nativeNode = nodePtr(node->ToNativePointer(vm)->Value());
60     if (arg_rowsTemplate->IsUndefined() || !arg_rowsTemplate->IsString(vm)) {
61         GetArkUINodeModifiers()->getGridModifier()->resetGridRowsTemplate(nativeNode);
62     } else {
63         std::string rowsTemplate = arg_rowsTemplate->ToString(vm)->ToString(vm);
64         GetArkUINodeModifiers()->getGridModifier()->setGridRowsTemplate(nativeNode, rowsTemplate.c_str());
65     }
66     return panda::JSValueRef::Undefined(vm);
67 }
68 
ResetRowsTemplate(ArkUIRuntimeCallInfo * runtimeCallInfo)69 ArkUINativeModuleValue GridBridge::ResetRowsTemplate(ArkUIRuntimeCallInfo* runtimeCallInfo)
70 {
71     EcmaVM* vm = runtimeCallInfo->GetVM();
72     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
73     Local<JSValueRef> node = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
74     auto nativeNode = nodePtr(node->ToNativePointer(vm)->Value());
75     GetArkUINodeModifiers()->getGridModifier()->resetGridRowsTemplate(nativeNode);
76     return panda::JSValueRef::Undefined(vm);
77 }
78 
SetColumnsGap(ArkUIRuntimeCallInfo * runtimeCallInfo)79 ArkUINativeModuleValue GridBridge::SetColumnsGap(ArkUIRuntimeCallInfo* runtimeCallInfo)
80 {
81     EcmaVM* vm = runtimeCallInfo->GetVM();
82     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
83     Local<JSValueRef> node = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
84     Local<JSValueRef> arg_size = runtimeCallInfo->GetCallArgRef(CALL_ARG_1);
85     auto nativeNode = nodePtr(node->ToNativePointer(vm)->Value());
86 
87     CalcDimension size;
88     std::string calcStr;
89     struct ArkUIResourceLength columnGap = { 0.0, 0, nullptr };
90     if (arg_size->IsUndefined() || !ArkTSUtils::ParseJsDimensionVpNG(vm, arg_size, size, true)) {
91         GetArkUINodeModifiers()->getGridModifier()->resetGridColumnsGap(nativeNode);
92     } else {
93         if (size.Unit() == DimensionUnit::CALC) {
94             columnGap.unit = static_cast<int32_t>(DimensionUnit::CALC);
95             calcStr = size.CalcValue();
96             columnGap.string = calcStr.c_str();
97             GetArkUINodeModifiers()->getGridModifier()->setGridColumnsGap(nativeNode, &columnGap);
98         } else {
99             columnGap.value = size.Value();
100             columnGap.unit = static_cast<int32_t>(size.Unit());
101             columnGap.string = calcStr.c_str();
102             GetArkUINodeModifiers()->getGridModifier()->setGridColumnsGap(nativeNode, &columnGap);
103         }
104     }
105     return panda::JSValueRef::Undefined(vm);
106 }
107 
ResetColumnsGap(ArkUIRuntimeCallInfo * runtimeCallInfo)108 ArkUINativeModuleValue GridBridge::ResetColumnsGap(ArkUIRuntimeCallInfo* runtimeCallInfo)
109 {
110     EcmaVM* vm = runtimeCallInfo->GetVM();
111     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
112     Local<JSValueRef> node = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
113     auto nativeNode = nodePtr(node->ToNativePointer(vm)->Value());
114     GetArkUINodeModifiers()->getGridModifier()->resetGridColumnsGap(nativeNode);
115     return panda::JSValueRef::Undefined(vm);
116 }
117 
SetRowsGap(ArkUIRuntimeCallInfo * runtimeCallInfo)118 ArkUINativeModuleValue GridBridge::SetRowsGap(ArkUIRuntimeCallInfo* runtimeCallInfo)
119 {
120     EcmaVM* vm = runtimeCallInfo->GetVM();
121     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
122     Local<JSValueRef> node = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
123     Local<JSValueRef> arg_size = runtimeCallInfo->GetCallArgRef(CALL_ARG_1);
124     auto nativeNode = nodePtr(node->ToNativePointer(vm)->Value());
125 
126     CalcDimension size;
127     std::string calcStr;
128     struct ArkUIResourceLength rowsGap = { 0.0, 0, nullptr };
129     if (arg_size->IsUndefined() || !ArkTSUtils::ParseJsDimensionVpNG(vm, arg_size, size, true)) {
130         GetArkUINodeModifiers()->getGridModifier()->resetGridRowsGap(nativeNode);
131     } else {
132         if (size.Unit() == DimensionUnit::CALC) {
133             rowsGap.unit = static_cast<int32_t>(DimensionUnit::CALC);
134             calcStr = size.CalcValue();
135             rowsGap.string = calcStr.c_str();
136             GetArkUINodeModifiers()->getGridModifier()->setGridRowsGap(nativeNode, &rowsGap);
137         } else {
138             rowsGap.value = size.Value();
139             rowsGap.unit = static_cast<int32_t>(size.Unit());
140             rowsGap.string = calcStr.c_str();
141             GetArkUINodeModifiers()->getGridModifier()->setGridRowsGap(nativeNode, &rowsGap);
142         }
143     }
144     return panda::JSValueRef::Undefined(vm);
145 }
146 
ResetRowsGap(ArkUIRuntimeCallInfo * runtimeCallInfo)147 ArkUINativeModuleValue GridBridge::ResetRowsGap(ArkUIRuntimeCallInfo* runtimeCallInfo)
148 {
149     EcmaVM* vm = runtimeCallInfo->GetVM();
150     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
151     Local<JSValueRef> node = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
152     auto nativeNode = nodePtr(node->ToNativePointer(vm)->Value());
153     GetArkUINodeModifiers()->getGridModifier()->resetGridRowsGap(nativeNode);
154     return panda::JSValueRef::Undefined(vm);
155 }
156 
SetScrollBar(ArkUIRuntimeCallInfo * runtimeCallInfo)157 ArkUINativeModuleValue GridBridge::SetScrollBar(ArkUIRuntimeCallInfo* runtimeCallInfo)
158 {
159     EcmaVM* vm = runtimeCallInfo->GetVM();
160     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
161     Local<JSValueRef> node = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
162     Local<JSValueRef> arg_scrollBar = runtimeCallInfo->GetCallArgRef(CALL_ARG_1);
163     auto nativeNode = nodePtr(node->ToNativePointer(vm)->Value());
164     if (!arg_scrollBar->IsNull() && arg_scrollBar->IsNumber()) {
165         int32_t scrollBar = arg_scrollBar->Int32Value(vm);
166         if (scrollBar < 0) {
167             GetArkUINodeModifiers()->getGridModifier()->resetGridScrollBar(nativeNode);
168         } else {
169             GetArkUINodeModifiers()->getGridModifier()->setGridScrollBar(nativeNode, scrollBar);
170         }
171     } else {
172         GetArkUINodeModifiers()->getGridModifier()->resetGridScrollBar(nativeNode);
173     }
174     return panda::JSValueRef::Undefined(vm);
175 }
176 
ResetScrollBar(ArkUIRuntimeCallInfo * runtimeCallInfo)177 ArkUINativeModuleValue GridBridge::ResetScrollBar(ArkUIRuntimeCallInfo* runtimeCallInfo)
178 {
179     EcmaVM* vm = runtimeCallInfo->GetVM();
180     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
181     Local<JSValueRef> node = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
182     auto nativeNode = nodePtr(node->ToNativePointer(vm)->Value());
183     GetArkUINodeModifiers()->getGridModifier()->resetGridScrollBar(nativeNode);
184     return panda::JSValueRef::Undefined(vm);
185 }
186 
SetScrollBarWidth(ArkUIRuntimeCallInfo * runtimeCallInfo)187 ArkUINativeModuleValue GridBridge::SetScrollBarWidth(ArkUIRuntimeCallInfo* runtimeCallInfo)
188 {
189     EcmaVM* vm = runtimeCallInfo->GetVM();
190     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
191     Local<JSValueRef> nativeNodeArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
192     Local<JSValueRef> scrollBarArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_1);
193     auto nativeNode = nodePtr(nativeNodeArg->ToNativePointer(vm)->Value());
194 
195     CalcDimension scrollBarWidth;
196     if (!ArkTSUtils::ParseJsDimensionVpNG(vm, scrollBarArg, scrollBarWidth, false)) {
197         GetArkUINodeModifiers()->getGridModifier()->resetGridScrollBarWidth(nativeNode);
198     } else {
199         if (LessNotEqual(scrollBarWidth.Value(), 0.0f)) {
200             GetArkUINodeModifiers()->getGridModifier()->resetGridScrollBarWidth(nativeNode);
201         } else {
202             GetArkUINodeModifiers()->getGridModifier()->setGridScrollBarWidth(
203                 nativeNode, scrollBarWidth.Value(), static_cast<int32_t>(scrollBarWidth.Unit()));
204         }
205     }
206     return panda::JSValueRef::Undefined(vm);
207 }
208 
ResetScrollBarWidth(ArkUIRuntimeCallInfo * runtimeCallInfo)209 ArkUINativeModuleValue GridBridge::ResetScrollBarWidth(ArkUIRuntimeCallInfo* runtimeCallInfo)
210 {
211     EcmaVM* vm = runtimeCallInfo->GetVM();
212     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
213     Local<JSValueRef> node = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
214     auto nativeNode = nodePtr(node->ToNativePointer(vm)->Value());
215     GetArkUINodeModifiers()->getGridModifier()->resetGridScrollBarWidth(nativeNode);
216     return panda::JSValueRef::Undefined(vm);
217 }
218 
SetScrollBarColor(ArkUIRuntimeCallInfo * runtimeCallInfo)219 ArkUINativeModuleValue GridBridge::SetScrollBarColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
220 {
221     EcmaVM* vm = runtimeCallInfo->GetVM();
222     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
223     Local<JSValueRef> node = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
224     Local<JSValueRef> arg_color = runtimeCallInfo->GetCallArgRef(CALL_ARG_1);
225     auto nativeNode = nodePtr(node->ToNativePointer(vm)->Value());
226     if (arg_color->IsNull() || arg_color->IsUndefined()) {
227         GetArkUINodeModifiers()->getGridModifier()->resetGridScrollBarColor(nativeNode);
228         return panda::JSValueRef::Undefined(vm);
229     }
230     if (arg_color->IsNumber()) {
231         auto colorNum = arg_color->ToNumber(vm)->Value();
232         if (colorNum <= 0) {
233             GetArkUINodeModifiers()->getGridModifier()->resetGridScrollBarColor(nativeNode);
234             return panda::JSValueRef::Undefined(vm);
235         }
236     }
237     Color color;
238     if (ArkTSUtils::ParseJsColorAlpha(vm, arg_color, color)) {
239         GetArkUINodeModifiers()->getGridModifier()->setGridScrollBarColor(
240             nativeNode, color.GetValue());
241     } else {
242         GetArkUINodeModifiers()->getGridModifier()->resetGridScrollBarColor(nativeNode);
243     }
244     return panda::JSValueRef::Undefined(vm);
245 }
246 
ResetScrollBarColor(ArkUIRuntimeCallInfo * runtimeCallInfo)247 ArkUINativeModuleValue GridBridge::ResetScrollBarColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
248 {
249     EcmaVM* vm = runtimeCallInfo->GetVM();
250     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
251     Local<JSValueRef> node = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
252     auto nativeNode = nodePtr(node->ToNativePointer(vm)->Value());
253     GetArkUINodeModifiers()->getGridModifier()->resetGridScrollBarColor(nativeNode);
254     return panda::JSValueRef::Undefined(vm);
255 }
256 
SetCachedCount(ArkUIRuntimeCallInfo * runtimeCallInfo)257 ArkUINativeModuleValue GridBridge::SetCachedCount(ArkUIRuntimeCallInfo* runtimeCallInfo)
258 {
259     EcmaVM* vm = runtimeCallInfo->GetVM();
260     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
261     Local<JSValueRef> node = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
262     Local<JSValueRef> arg_cachedCount = runtimeCallInfo->GetCallArgRef(CALL_ARG_1);
263     auto nativeNode = nodePtr(node->ToNativePointer(vm)->Value());
264     auto value = DEFAULT_CACHED_COUNT;
265     if (!arg_cachedCount->IsUndefined()) {
266         ArkTSUtils::ParseJsInteger(vm, arg_cachedCount, value);
267         if (value < 0) {
268             value = DEFAULT_CACHED_COUNT;
269         }
270     }
271     GetArkUINodeModifiers()->getGridModifier()->setGridCachedCount(nativeNode, value);
272     return panda::JSValueRef::Undefined(vm);
273 }
274 
ResetCachedCount(ArkUIRuntimeCallInfo * runtimeCallInfo)275 ArkUINativeModuleValue GridBridge::ResetCachedCount(ArkUIRuntimeCallInfo* runtimeCallInfo)
276 {
277     EcmaVM* vm = runtimeCallInfo->GetVM();
278     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
279     Local<JSValueRef> node = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
280     auto nativeNode = nodePtr(node->ToNativePointer(vm)->Value());
281     GetArkUINodeModifiers()->getGridModifier()->resetGridCachedCount(nativeNode);
282     return panda::JSValueRef::Undefined(vm);
283 }
284 
SetEditMode(ArkUIRuntimeCallInfo * runtimeCallInfo)285 ArkUINativeModuleValue GridBridge::SetEditMode(ArkUIRuntimeCallInfo* runtimeCallInfo)
286 {
287     EcmaVM* vm = runtimeCallInfo->GetVM();
288     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
289     Local<JSValueRef> node = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
290     Local<JSValueRef> arg_editMode = runtimeCallInfo->GetCallArgRef(CALL_ARG_1);
291     auto nativeNode = nodePtr(node->ToNativePointer(vm)->Value());
292     bool editMode = arg_editMode->ToBoolean(vm)->Value();
293     GetArkUINodeModifiers()->getGridModifier()->setGridEditMode(nativeNode, editMode);
294     return panda::JSValueRef::Undefined(vm);
295 }
296 
ResetEditMode(ArkUIRuntimeCallInfo * runtimeCallInfo)297 ArkUINativeModuleValue GridBridge::ResetEditMode(ArkUIRuntimeCallInfo* runtimeCallInfo)
298 {
299     EcmaVM* vm = runtimeCallInfo->GetVM();
300     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
301     Local<JSValueRef> node = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
302     auto nativeNode = nodePtr(node->ToNativePointer(vm)->Value());
303     GetArkUINodeModifiers()->getGridModifier()->resetGridEditMode(nativeNode);
304     return panda::JSValueRef::Undefined(vm);
305 }
306 
SetMultiSelectable(ArkUIRuntimeCallInfo * runtimeCallInfo)307 ArkUINativeModuleValue GridBridge::SetMultiSelectable(ArkUIRuntimeCallInfo* runtimeCallInfo)
308 {
309     EcmaVM* vm = runtimeCallInfo->GetVM();
310     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
311     Local<JSValueRef> node = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
312     Local<JSValueRef> arg_multiSelectable = runtimeCallInfo->GetCallArgRef(CALL_ARG_1);
313     auto nativeNode = nodePtr(node->ToNativePointer(vm)->Value());
314     bool multiSelectable = arg_multiSelectable->ToBoolean(vm)->Value();
315     GetArkUINodeModifiers()->getGridModifier()->setGridMultiSelectable(nativeNode, multiSelectable);
316     return panda::JSValueRef::Undefined(vm);
317 }
318 
ResetMultiSelectable(ArkUIRuntimeCallInfo * runtimeCallInfo)319 ArkUINativeModuleValue GridBridge::ResetMultiSelectable(ArkUIRuntimeCallInfo* runtimeCallInfo)
320 {
321     EcmaVM* vm = runtimeCallInfo->GetVM();
322     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
323     Local<JSValueRef> node = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
324     auto nativeNode = nodePtr(node->ToNativePointer(vm)->Value());
325     GetArkUINodeModifiers()->getGridModifier()->resetGridMultiSelectable(nativeNode);
326     return panda::JSValueRef::Undefined(vm);
327 }
328 
SetMaxCount(ArkUIRuntimeCallInfo * runtimeCallInfo)329 ArkUINativeModuleValue GridBridge::SetMaxCount(ArkUIRuntimeCallInfo* runtimeCallInfo)
330 {
331     EcmaVM* vm = runtimeCallInfo->GetVM();
332     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
333     Local<JSValueRef> node = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
334     Local<JSValueRef> arg_maxCount = runtimeCallInfo->GetCallArgRef(CALL_ARG_1);
335     auto nativeNode = nodePtr(node->ToNativePointer(vm)->Value());
336     if (!arg_maxCount->IsNull() && arg_maxCount->IsNumber()) {
337         int32_t maxCount = arg_maxCount->Int32Value(vm);
338         if (maxCount < 1) {
339             GetArkUINodeModifiers()->getGridModifier()->resetGridMaxCount(nativeNode);
340         } else {
341             GetArkUINodeModifiers()->getGridModifier()->setGridMaxCount(nativeNode, maxCount);
342         }
343     } else {
344         GetArkUINodeModifiers()->getGridModifier()->resetGridMaxCount(nativeNode);
345     }
346     return panda::JSValueRef::Undefined(vm);
347 }
348 
ResetMaxCount(ArkUIRuntimeCallInfo * runtimeCallInfo)349 ArkUINativeModuleValue GridBridge::ResetMaxCount(ArkUIRuntimeCallInfo* runtimeCallInfo)
350 {
351     EcmaVM* vm = runtimeCallInfo->GetVM();
352     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
353     Local<JSValueRef> node = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
354     auto nativeNode = nodePtr(node->ToNativePointer(vm)->Value());
355     GetArkUINodeModifiers()->getGridModifier()->resetGridMaxCount(nativeNode);
356     return panda::JSValueRef::Undefined(vm);
357 }
358 
SetMinCount(ArkUIRuntimeCallInfo * runtimeCallInfo)359 ArkUINativeModuleValue GridBridge::SetMinCount(ArkUIRuntimeCallInfo* runtimeCallInfo)
360 {
361     EcmaVM* vm = runtimeCallInfo->GetVM();
362     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
363     Local<JSValueRef> node = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
364     Local<JSValueRef> arg_minCount = runtimeCallInfo->GetCallArgRef(CALL_ARG_1);
365     auto nativeNode = nodePtr(node->ToNativePointer(vm)->Value());
366     if (!arg_minCount->IsNull() && arg_minCount->IsNumber()) {
367         int32_t minCount = arg_minCount->Int32Value(vm);
368         if (minCount < 1) {
369             GetArkUINodeModifiers()->getGridModifier()->resetGridMinCount(nativeNode);
370         } else {
371             GetArkUINodeModifiers()->getGridModifier()->setGridMinCount(nativeNode, minCount);
372         }
373     } else {
374         GetArkUINodeModifiers()->getGridModifier()->resetGridMinCount(nativeNode);
375     }
376     return panda::JSValueRef::Undefined(vm);
377 }
378 
ResetMinCount(ArkUIRuntimeCallInfo * runtimeCallInfo)379 ArkUINativeModuleValue GridBridge::ResetMinCount(ArkUIRuntimeCallInfo* runtimeCallInfo)
380 {
381     EcmaVM* vm = runtimeCallInfo->GetVM();
382     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
383     Local<JSValueRef> node = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
384     auto nativeNode = nodePtr(node->ToNativePointer(vm)->Value());
385     GetArkUINodeModifiers()->getGridModifier()->resetGridMinCount(nativeNode);
386     return panda::JSValueRef::Undefined(vm);
387 }
388 
SetCellLength(ArkUIRuntimeCallInfo * runtimeCallInfo)389 ArkUINativeModuleValue GridBridge::SetCellLength(ArkUIRuntimeCallInfo* runtimeCallInfo)
390 {
391     EcmaVM* vm = runtimeCallInfo->GetVM();
392     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
393     Local<JSValueRef> node = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
394     Local<JSValueRef> arg_cellLength = runtimeCallInfo->GetCallArgRef(CALL_ARG_1);
395     auto nativeNode = nodePtr(node->ToNativePointer(vm)->Value());
396     if (!arg_cellLength->IsNull() && arg_cellLength->IsNumber()) {
397         int32_t cellLength = arg_cellLength->Int32Value(vm);
398         GetArkUINodeModifiers()->getGridModifier()->setGridCellLength(nativeNode, cellLength);
399     } else {
400         GetArkUINodeModifiers()->getGridModifier()->resetGridCellLength(nativeNode);
401     }
402     return panda::JSValueRef::Undefined(vm);
403 }
404 
ResetCellLength(ArkUIRuntimeCallInfo * runtimeCallInfo)405 ArkUINativeModuleValue GridBridge::ResetCellLength(ArkUIRuntimeCallInfo* runtimeCallInfo)
406 {
407     EcmaVM* vm = runtimeCallInfo->GetVM();
408     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
409     Local<JSValueRef> node = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
410     auto nativeNode = nodePtr(node->ToNativePointer(vm)->Value());
411     GetArkUINodeModifiers()->getGridModifier()->resetGridCellLength(nativeNode);
412     return panda::JSValueRef::Undefined(vm);
413 }
414 
SetLayoutDirection(ArkUIRuntimeCallInfo * runtimeCallInfo)415 ArkUINativeModuleValue GridBridge::SetLayoutDirection(ArkUIRuntimeCallInfo* runtimeCallInfo)
416 {
417     EcmaVM* vm = runtimeCallInfo->GetVM();
418     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
419     Local<JSValueRef> node = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
420     Local<JSValueRef> arg_layoutDirection = runtimeCallInfo->GetCallArgRef(CALL_ARG_1);
421     auto nativeNode = nodePtr(node->ToNativePointer(vm)->Value());
422     if (!arg_layoutDirection->IsNull() && arg_layoutDirection->IsNumber()) {
423         int32_t layoutDirection = arg_layoutDirection->Int32Value(vm);
424         GetArkUINodeModifiers()->getGridModifier()->setGridLayoutDirection(nativeNode, layoutDirection);
425     } else {
426         GetArkUINodeModifiers()->getGridModifier()->resetGridLayoutDirection(nativeNode);
427     }
428     return panda::JSValueRef::Undefined(vm);
429 }
430 
ResetLayoutDirection(ArkUIRuntimeCallInfo * runtimeCallInfo)431 ArkUINativeModuleValue GridBridge::ResetLayoutDirection(ArkUIRuntimeCallInfo* runtimeCallInfo)
432 {
433     EcmaVM* vm = runtimeCallInfo->GetVM();
434     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
435     Local<JSValueRef> node = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
436     auto nativeNode = nodePtr(node->ToNativePointer(vm)->Value());
437     GetArkUINodeModifiers()->getGridModifier()->resetGridLayoutDirection(nativeNode);
438     return panda::JSValueRef::Undefined(vm);
439 }
440 
SetSupportAnimation(ArkUIRuntimeCallInfo * runtimeCallInfo)441 ArkUINativeModuleValue GridBridge::SetSupportAnimation(ArkUIRuntimeCallInfo* runtimeCallInfo)
442 {
443     EcmaVM* vm = runtimeCallInfo->GetVM();
444     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
445     Local<JSValueRef> node = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
446     Local<JSValueRef> arg_supportAnimation = runtimeCallInfo->GetCallArgRef(CALL_ARG_1);
447     auto nativeNode = nodePtr(node->ToNativePointer(vm)->Value());
448     bool supportAnimation = arg_supportAnimation->ToBoolean(vm)->Value();
449     GetArkUINodeModifiers()->getGridModifier()->setGridSupportAnimation(nativeNode, supportAnimation);
450     return panda::JSValueRef::Undefined(vm);
451 }
452 
ResetSupportAnimation(ArkUIRuntimeCallInfo * runtimeCallInfo)453 ArkUINativeModuleValue GridBridge::ResetSupportAnimation(ArkUIRuntimeCallInfo* runtimeCallInfo)
454 {
455     EcmaVM* vm = runtimeCallInfo->GetVM();
456     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
457     Local<JSValueRef> node = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
458     auto nativeNode = nodePtr(node->ToNativePointer(vm)->Value());
459     GetArkUINodeModifiers()->getGridModifier()->resetGridSupportAnimation(nativeNode);
460     return panda::JSValueRef::Undefined(vm);
461 }
462 
SetEdgeEffect(ArkUIRuntimeCallInfo * runtimeCallInfo)463 ArkUINativeModuleValue GridBridge::SetEdgeEffect(ArkUIRuntimeCallInfo* runtimeCallInfo)
464 {
465     EcmaVM* vm = runtimeCallInfo->GetVM();
466     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
467     Local<JSValueRef> node = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
468     Local<JSValueRef> arg_effect = runtimeCallInfo->GetCallArgRef(CALL_ARG_1);
469     Local<JSValueRef> arg_edgeEffectOptions = runtimeCallInfo->GetCallArgRef(CALL_ARG_2);
470 
471     auto nativeNode = nodePtr(node->ToNativePointer(vm)->Value());
472     int32_t effect = static_cast<int32_t>(EdgeEffect::NONE);
473     if (!arg_effect->IsUndefined() && !arg_effect->IsNull()) {
474         effect = arg_effect->Int32Value(vm);
475     }
476 
477     if (effect != static_cast<int32_t>(EdgeEffect::SPRING) && effect != static_cast<int32_t>(EdgeEffect::NONE) &&
478         effect != static_cast<int32_t>(EdgeEffect::FADE)) {
479         effect = static_cast<int32_t>(EdgeEffect::NONE);
480     }
481 
482     if (arg_edgeEffectOptions->IsNull() || arg_edgeEffectOptions->IsUndefined()) {
483         GetArkUINodeModifiers()->getGridModifier()->setEdgeEffect(nativeNode, effect, false);
484     } else {
485         GetArkUINodeModifiers()->getGridModifier()->setEdgeEffect(
486             nativeNode, effect, arg_edgeEffectOptions->ToBoolean(vm)->Value());
487     }
488     return panda::JSValueRef::Undefined(vm);
489 }
ResetEdgeEffect(ArkUIRuntimeCallInfo * runtimeCallInfo)490 ArkUINativeModuleValue GridBridge::ResetEdgeEffect(ArkUIRuntimeCallInfo* runtimeCallInfo)
491 {
492     EcmaVM* vm = runtimeCallInfo->GetVM();
493     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
494     Local<JSValueRef> node = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
495     auto nativeNode = nodePtr(node->ToNativePointer(vm)->Value());
496     GetArkUINodeModifiers()->getGridModifier()->resetEdgeEffect(nativeNode);
497     return panda::JSValueRef::Undefined(vm);
498 }
SetNestedScroll(ArkUIRuntimeCallInfo * runtimeCallInfo)499 ArkUINativeModuleValue GridBridge::SetNestedScroll(ArkUIRuntimeCallInfo* runtimeCallInfo)
500 {
501     EcmaVM* vm = runtimeCallInfo->GetVM();
502     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
503     Local<JSValueRef> node = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
504     Local<JSValueRef> arg_forward = runtimeCallInfo->GetCallArgRef(CALL_ARG_1);
505     Local<JSValueRef> arg_backward = runtimeCallInfo->GetCallArgRef(CALL_ARG_2);
506 
507     auto nativeNode = nodePtr(node->ToNativePointer(vm)->Value());
508     int32_t forward = static_cast<int32_t>(NestedScrollMode::SELF_ONLY);
509     int32_t backward = static_cast<int32_t>(NestedScrollMode::SELF_ONLY);
510     if (!arg_forward->IsUndefined()) {
511         forward = arg_forward->Int32Value(vm);
512     }
513     if (!arg_backward->IsUndefined()) {
514         backward = arg_backward->Int32Value(vm);
515     }
516 
517     if (forward < static_cast<int32_t>(NestedScrollMode::SELF_ONLY) ||
518         forward > static_cast<int32_t>(NestedScrollMode::PARALLEL)) {
519         forward = static_cast<int32_t>(NestedScrollMode::SELF_ONLY);
520     }
521 
522     if (backward < static_cast<int32_t>(NestedScrollMode::SELF_ONLY) ||
523         backward > static_cast<int32_t>(NestedScrollMode::PARALLEL)) {
524         backward = static_cast<int32_t>(NestedScrollMode::SELF_ONLY);
525     }
526 
527     GetArkUINodeModifiers()->getGridModifier()->setNestedScroll(nativeNode, forward, backward);
528 
529     return panda::JSValueRef::Undefined(vm);
530 }
ResetNestedScroll(ArkUIRuntimeCallInfo * runtimeCallInfo)531 ArkUINativeModuleValue GridBridge::ResetNestedScroll(ArkUIRuntimeCallInfo* runtimeCallInfo)
532 {
533     EcmaVM* vm = runtimeCallInfo->GetVM();
534     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
535     Local<JSValueRef> node = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
536     auto nativeNode = nodePtr(node->ToNativePointer(vm)->Value());
537     GetArkUINodeModifiers()->getGridModifier()->resetNestedScroll(nativeNode);
538     return panda::JSValueRef::Undefined(vm);
539 }
SetEnableScroll(ArkUIRuntimeCallInfo * runtimeCallInfo)540 ArkUINativeModuleValue GridBridge::SetEnableScroll(ArkUIRuntimeCallInfo* runtimeCallInfo)
541 {
542     EcmaVM* vm = runtimeCallInfo->GetVM();
543     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
544     Local<JSValueRef> node = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
545     Local<JSValueRef> arg_enableScroll = runtimeCallInfo->GetCallArgRef(CALL_ARG_1);
546 
547     auto nativeNode = nodePtr(node->ToNativePointer(vm)->Value());
548 
549     GetArkUINodeModifiers()->getGridModifier()->setEnableScroll(
550         nativeNode, arg_enableScroll->IsBoolean() ? arg_enableScroll->ToBoolean(vm)->Value() : true);
551 
552     return panda::JSValueRef::Undefined(vm);
553 }
ResetEnableScroll(ArkUIRuntimeCallInfo * runtimeCallInfo)554 ArkUINativeModuleValue GridBridge::ResetEnableScroll(ArkUIRuntimeCallInfo* runtimeCallInfo)
555 {
556     EcmaVM* vm = runtimeCallInfo->GetVM();
557     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
558     Local<JSValueRef> node = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
559     auto nativeNode = nodePtr(node->ToNativePointer(vm)->Value());
560     GetArkUINodeModifiers()->getGridModifier()->resetEnableScroll(nativeNode);
561     return panda::JSValueRef::Undefined(vm);
562 }
SetFriction(ArkUIRuntimeCallInfo * runtimeCallInfo)563 ArkUINativeModuleValue GridBridge::SetFriction(ArkUIRuntimeCallInfo* runtimeCallInfo)
564 {
565     EcmaVM* vm = runtimeCallInfo->GetVM();
566     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
567     Local<JSValueRef> node = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
568     Local<JSValueRef> arg_friction = runtimeCallInfo->GetCallArgRef(CALL_ARG_1);
569 
570     double friction = -1.0;
571     auto nativeNode = nodePtr(node->ToNativePointer(vm)->Value());
572     if (!ArkTSUtils::ParseJsDouble(vm, arg_friction, friction)) {
573         friction = -1.0;
574     }
575     GetArkUINodeModifiers()->getGridModifier()->setFriction(nativeNode, static_cast<ArkUI_Float32>(friction));
576 
577     return panda::JSValueRef::Undefined(vm);
578 }
ResetFriction(ArkUIRuntimeCallInfo * runtimeCallInfo)579 ArkUINativeModuleValue GridBridge::ResetFriction(ArkUIRuntimeCallInfo* runtimeCallInfo)
580 {
581     EcmaVM* vm = runtimeCallInfo->GetVM();
582     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
583     Local<JSValueRef> node = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
584     auto nativeNode = nodePtr(node->ToNativePointer(vm)->Value());
585     GetArkUINodeModifiers()->getGridModifier()->resetFriction(nativeNode);
586     return panda::JSValueRef::Undefined(vm);
587 }
SetFlingSpeedLimit(ArkUIRuntimeCallInfo * runtimeCallInfo)588 ArkUINativeModuleValue GridBridge::SetFlingSpeedLimit(ArkUIRuntimeCallInfo* runtimeCallInfo)
589 {
590     EcmaVM* vm = runtimeCallInfo->GetVM();
591     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
592     Local<JSValueRef> node = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
593     Local<JSValueRef> arg_flingSpeedLimit = runtimeCallInfo->GetCallArgRef(CALL_ARG_1);
594 
595     double flingSpeedLimit = -1.0f;
596     auto nativeNode = nodePtr(node->ToNativePointer(vm)->Value());
597     if (!ArkTSUtils::ParseJsDouble(vm, arg_flingSpeedLimit, flingSpeedLimit)) {
598         flingSpeedLimit = -1.0f;
599     }
600     GetArkUINodeModifiers()->getGridModifier()->setFlingSpeedLimit(nativeNode, flingSpeedLimit);
601     return panda::JSValueRef::Undefined(vm);
602 }
ResetFlingSpeedLimit(ArkUIRuntimeCallInfo * runtimeCallInfo)603 ArkUINativeModuleValue GridBridge::ResetFlingSpeedLimit(ArkUIRuntimeCallInfo* runtimeCallInfo)
604 {
605     EcmaVM* vm = runtimeCallInfo->GetVM();
606     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
607     Local<JSValueRef> node = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
608     auto nativeNode = nodePtr(node->ToNativePointer(vm)->Value());
609     GetArkUINodeModifiers()->getGridModifier()->resetFlingSpeedLimit(nativeNode);
610     return panda::JSValueRef::Undefined(vm);
611 }
SetAlignItems(ArkUIRuntimeCallInfo * runtimeCallInfo)612 ArkUINativeModuleValue GridBridge::SetAlignItems(ArkUIRuntimeCallInfo* runtimeCallInfo)
613 {
614     EcmaVM* vm = runtimeCallInfo->GetVM();
615     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
616     Local<JSValueRef> node = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
617     Local<JSValueRef> arg_alignItems = runtimeCallInfo->GetCallArgRef(CALL_ARG_1);
618 
619     auto nativeNode = nodePtr(node->ToNativePointer(vm)->Value());
620     int32_t itemAlignment = static_cast<int32_t>(GridItemAlignment::DEFAULT);
621     if (!arg_alignItems->IsUndefined() && !arg_alignItems->IsNull()) {
622         itemAlignment = arg_alignItems->Int32Value(vm);
623     }
624 
625     if (itemAlignment != static_cast<int32_t>(GridItemAlignment::DEFAULT) &&
626         itemAlignment != static_cast<int32_t>(GridItemAlignment::STRETCH)) {
627         itemAlignment = static_cast<int32_t>(GridItemAlignment::DEFAULT);
628     }
629 
630     GetArkUINodeModifiers()->getGridModifier()->setGridAlignItems(nativeNode, itemAlignment);
631     return panda::JSValueRef::Undefined(vm);
632 }
ResetAlignItems(ArkUIRuntimeCallInfo * runtimeCallInfo)633 ArkUINativeModuleValue GridBridge::ResetAlignItems(ArkUIRuntimeCallInfo* runtimeCallInfo)
634 {
635     EcmaVM* vm = runtimeCallInfo->GetVM();
636     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
637     Local<JSValueRef> node = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
638     auto nativeNode = nodePtr(node->ToNativePointer(vm)->Value());
639     GetArkUINodeModifiers()->getGridModifier()->resetGridAlignItems(nativeNode);
640     return panda::JSValueRef::Undefined(vm);
641 }
642 
643 } // namespace OHOS::Ace::NG
644