• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2023-2024 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 "core/interfaces/native/node/node_list_modifier.h"
16 
17 #include "interfaces/native/node/list_option.h"
18 #include "interfaces/native/node/node_model.h"
19 
20 #include "core/components/list/list_theme.h"
21 #include "core/components_ng/pattern/list/list_model_ng.h"
22 #include "core/components_ng/pattern/scrollable/scrollable_model_ng.h"
23 #include "core/interfaces/native/node/node_adapter_impl.h"
24 #include "core/components/common/layout/constants.h"
25 
26 namespace OHOS::Ace::NG {
27 namespace {
28 constexpr int32_t DEFAULT_CACHED_COUNT = 1;
29 constexpr bool DEFAULT_CACHED_IS_SHOWN = false;
30 constexpr bool DEFAULT_SCROLL_ENABLE = true;
31 constexpr int32_t DEFAULT_STICKY_STYLE = 0;
32 constexpr int32_t DEFAULT_DIRECTION = 0;
33 constexpr int32_t DEFAULT_SCROLL_BAR = 1;
34 constexpr int32_t DEFAULT_DIVIDER_VALUES_COUNT = 3;
35 constexpr float DEFAULT_OFFSET = 0.0f;
36 
37 constexpr int32_t DEFAULT_EDGE_EFFECT = 0;
38 constexpr Dimension DEFAULT_FADING_EDGE_LENGTH = Dimension(32.0f, DimensionUnit::VP); // default value
39 
40 constexpr int32_t ERROR_INT_CODE = -1;
41 constexpr int32_t CALL_STROKE_WIDTH = 0;
42 constexpr int32_t CALL_START_MARGIN = 1;
43 constexpr int32_t CALL_END_MARGIN = 2;
44 constexpr int32_t INDEX_0 = 0;
45 constexpr int32_t INDEX_1 = 1;
46 constexpr int32_t INDEX_2 = 2;
47 
SetListLanes(ArkUINodeHandle node,ArkUI_Int32 lanesNum,const struct ArkUIDimensionType * minLengthType,const struct ArkUIDimensionType * maxLengthType,const struct ArkUIDimensionType * gutterType)48 void SetListLanes(ArkUINodeHandle node, ArkUI_Int32 lanesNum, const struct ArkUIDimensionType* minLengthType,
49     const struct ArkUIDimensionType* maxLengthType, const struct ArkUIDimensionType* gutterType)
50 {
51     auto* frameNode = reinterpret_cast<FrameNode*>(node);
52     CHECK_NULL_VOID(frameNode);
53     if (lanesNum > 0) {
54         ListModelNG::SetLanes(frameNode, lanesNum);
55         Dimension minLength =
56             Dimension(minLengthType->value, static_cast<OHOS::Ace::DimensionUnit>(minLengthType->units));
57         Dimension maxLength =
58             Dimension(maxLengthType->value, static_cast<OHOS::Ace::DimensionUnit>(maxLengthType->units));
59         ListModelNG::SetLaneConstrain(frameNode, minLength, maxLength);
60     } else {
61         Dimension minLength =
62             Dimension(minLengthType->value, static_cast<OHOS::Ace::DimensionUnit>(minLengthType->units));
63         Dimension maxLength =
64             Dimension(maxLengthType->value, static_cast<OHOS::Ace::DimensionUnit>(maxLengthType->units));
65         ListModelNG::SetLaneConstrain(frameNode, minLength, maxLength);
66         ListModelNG::SetLanes(frameNode, 1);
67     }
68 
69     Dimension gutter = Dimension(gutterType->value, static_cast<OHOS::Ace::DimensionUnit>(gutterType->units));
70     ListModelNG::SetLaneGutter(frameNode, gutter);
71 }
72 
ResetListLanes(ArkUINodeHandle node)73 void ResetListLanes(ArkUINodeHandle node)
74 {
75     auto* frameNode = reinterpret_cast<FrameNode*>(node);
76     CHECK_NULL_VOID(frameNode);
77     ListModelNG::SetLanes(frameNode, 1);
78     ListModelNG::SetLaneGutter(frameNode, Dimension(0));
79 }
80 
ResetlistLaneMinAndMaxLength(ArkUINodeHandle node)81 void ResetlistLaneMinAndMaxLength(ArkUINodeHandle node)
82 {
83     auto* frameNode = reinterpret_cast<FrameNode*>(node);
84     CHECK_NULL_VOID(frameNode);
85     Dimension minLength = Dimension(-1, DimensionUnit::VP);
86     Dimension maxLength = Dimension(-1, DimensionUnit::VP);
87     ListModelNG::SetLaneConstrain(frameNode, minLength, maxLength);
88 }
89 
GetListLanes(ArkUINodeHandle node)90 ArkUI_Int32 GetListLanes(ArkUINodeHandle node)
91 {
92     auto* frameNode = reinterpret_cast<FrameNode*>(node);
93     CHECK_NULL_RETURN(frameNode, ERROR_INT_CODE);
94     return static_cast<ArkUI_Int32>(ListModelNG::GetLanes(frameNode));
95 }
96 
GetlistLaneMinLength(ArkUINodeHandle node)97 ArkUI_Float32 GetlistLaneMinLength(ArkUINodeHandle node)
98 {
99     auto* frameNode = reinterpret_cast<FrameNode*>(node);
100     CHECK_NULL_RETURN(frameNode, ERROR_INT_CODE);
101     return static_cast<ArkUI_Float32>(ListModelNG::GetLaneMinLength(frameNode));
102 }
103 
GetListLaneMaxLength(ArkUINodeHandle node)104 ArkUI_Float32 GetListLaneMaxLength(ArkUINodeHandle node)
105 {
106     auto* frameNode = reinterpret_cast<FrameNode*>(node);
107     CHECK_NULL_RETURN(frameNode, ERROR_INT_CODE);
108     return static_cast<ArkUI_Float32>(ListModelNG::GetLaneMaxLength(frameNode));
109 }
110 
GetListLaneGutter(ArkUINodeHandle node)111 ArkUI_Float32 GetListLaneGutter(ArkUINodeHandle node)
112 {
113     auto* frameNode = reinterpret_cast<FrameNode*>(node);
114     CHECK_NULL_RETURN(frameNode, ERROR_INT_CODE);
115     auto ret = static_cast<ArkUI_Float32>(ListModelNG::GetLaneGutter(frameNode));
116     return ret;
117 }
118 
SetEditMode(ArkUINodeHandle node,ArkUI_Bool editMode)119 void SetEditMode(ArkUINodeHandle node, ArkUI_Bool editMode)
120 {
121     auto* frameNode = reinterpret_cast<FrameNode*>(node);
122     CHECK_NULL_VOID(frameNode);
123     ListModelNG::SetEditMode(frameNode, editMode);
124 }
125 
ResetEditMode(ArkUINodeHandle node)126 void ResetEditMode(ArkUINodeHandle node)
127 {
128     auto* frameNode = reinterpret_cast<FrameNode*>(node);
129     CHECK_NULL_VOID(frameNode);
130     ListModelNG::SetEditMode(frameNode, false);
131 }
132 
SetMultiSelectable(ArkUINodeHandle node,ArkUI_Bool selectable)133 void SetMultiSelectable(ArkUINodeHandle node, ArkUI_Bool selectable)
134 {
135     auto* frameNode = reinterpret_cast<FrameNode*>(node);
136     CHECK_NULL_VOID(frameNode);
137     ListModelNG::SetMultiSelectable(frameNode, selectable);
138 }
139 
ResetMultiSelectable(ArkUINodeHandle node)140 void ResetMultiSelectable(ArkUINodeHandle node)
141 {
142     auto* frameNode = reinterpret_cast<FrameNode*>(node);
143     CHECK_NULL_VOID(frameNode);
144     ListModelNG::SetMultiSelectable(frameNode, false);
145 }
146 
SetChainAnimation(ArkUINodeHandle node,ArkUI_Bool chainAnimation)147 void SetChainAnimation(ArkUINodeHandle node, ArkUI_Bool chainAnimation)
148 {
149     auto* frameNode = reinterpret_cast<FrameNode*>(node);
150     CHECK_NULL_VOID(frameNode);
151     ListModelNG::SetChainAnimation(frameNode, chainAnimation);
152 }
153 
ResetChainAnimation(ArkUINodeHandle node)154 void ResetChainAnimation(ArkUINodeHandle node)
155 {
156     auto* frameNode = reinterpret_cast<FrameNode*>(node);
157     CHECK_NULL_VOID(frameNode);
158     ListModelNG::SetChainAnimation(frameNode, false);
159 }
160 
SetCachedCount(ArkUINodeHandle node,ArkUI_Int32 cachedCount)161 void SetCachedCount(ArkUINodeHandle node, ArkUI_Int32 cachedCount)
162 {
163     auto* frameNode = reinterpret_cast<FrameNode*>(node);
164     CHECK_NULL_VOID(frameNode);
165     if (cachedCount < 0) {
166         cachedCount = 1;
167     }
168     ListModelNG::SetCachedCount(frameNode, cachedCount);
169 }
170 
ResetCachedCount(ArkUINodeHandle node)171 void ResetCachedCount(ArkUINodeHandle node)
172 {
173     auto* frameNode = reinterpret_cast<FrameNode*>(node);
174     CHECK_NULL_VOID(frameNode);
175     ListModelNG::SetCachedCount(frameNode, DEFAULT_CACHED_COUNT);
176 }
177 
SetCachedIsShown(ArkUINodeHandle node,ArkUI_Bool isShown)178 void SetCachedIsShown(ArkUINodeHandle node, ArkUI_Bool isShown)
179 {
180     auto* frameNode = reinterpret_cast<FrameNode*>(node);
181     CHECK_NULL_VOID(frameNode);
182     ListModelNG::SetShowCached(frameNode, isShown);
183 }
184 
ResetCachedIsShown(ArkUINodeHandle node)185 void ResetCachedIsShown(ArkUINodeHandle node)
186 {
187     auto* frameNode = reinterpret_cast<FrameNode*>(node);
188     CHECK_NULL_VOID(frameNode);
189     ListModelNG::SetShowCached(frameNode, DEFAULT_CACHED_IS_SHOWN);
190 }
191 
GetCachedIsShown(ArkUINodeHandle node)192 ArkUI_Int32 GetCachedIsShown(ArkUINodeHandle node)
193 {
194     auto* frameNode = reinterpret_cast<FrameNode*>(node);
195     CHECK_NULL_RETURN(frameNode, ERROR_INT_CODE);
196     return static_cast<ArkUI_Int32>(ListModelNG::GetShowCached(frameNode));
197 }
198 
SetCacheRange(ArkUINodeHandle node,ArkUI_Int32 min,ArkUI_Int32 max)199 void SetCacheRange(ArkUINodeHandle node, ArkUI_Int32 min, ArkUI_Int32 max)
200 {
201     auto* frameNode = reinterpret_cast<FrameNode*>(node);
202     CHECK_NULL_VOID(frameNode);
203     ListModelNG::SetCacheRange(frameNode, min, max);
204 }
205 
ResetCacheRange(ArkUINodeHandle node)206 void ResetCacheRange(ArkUINodeHandle node)
207 {
208     auto* frameNode = reinterpret_cast<FrameNode*>(node);
209     CHECK_NULL_VOID(frameNode);
210     ListModelNG::ResetCacheRange(frameNode);
211 }
212 
GetEnableScrollInteraction(ArkUINodeHandle node)213 ArkUI_Bool GetEnableScrollInteraction(ArkUINodeHandle node)
214 {
215     auto* frameNode = reinterpret_cast<FrameNode*>(node);
216     CHECK_NULL_RETURN(frameNode, ERROR_INT_CODE);
217     return ListModelNG::GetScrollEnabled(frameNode);
218 }
219 
SetEnableScrollInteraction(ArkUINodeHandle node,ArkUI_Bool enableScrollInteraction)220 void SetEnableScrollInteraction(ArkUINodeHandle node, ArkUI_Bool enableScrollInteraction)
221 {
222     auto* frameNode = reinterpret_cast<FrameNode*>(node);
223     CHECK_NULL_VOID(frameNode);
224     ListModelNG::SetScrollEnabled(frameNode, enableScrollInteraction);
225 }
226 
ResetEnableScrollInteraction(ArkUINodeHandle node)227 void ResetEnableScrollInteraction(ArkUINodeHandle node)
228 {
229     auto* frameNode = reinterpret_cast<FrameNode*>(node);
230     CHECK_NULL_VOID(frameNode);
231     ListModelNG::SetScrollEnabled(frameNode, DEFAULT_SCROLL_ENABLE);
232 }
233 
GetSticky(ArkUINodeHandle node)234 ArkUI_Int32 GetSticky(ArkUINodeHandle node)
235 {
236     auto* frameNode = reinterpret_cast<FrameNode*>(node);
237     CHECK_NULL_RETURN(frameNode, ERROR_INT_CODE);
238     return ListModelNG::GetSticky(frameNode);
239 }
240 
SetSticky(ArkUINodeHandle node,ArkUI_Int32 stickyStyle)241 void SetSticky(ArkUINodeHandle node, ArkUI_Int32 stickyStyle)
242 {
243     auto* frameNode = reinterpret_cast<FrameNode*>(node);
244     CHECK_NULL_VOID(frameNode);
245     ListModelNG::SetSticky(frameNode, stickyStyle);
246 }
247 
ResetSticky(ArkUINodeHandle node)248 void ResetSticky(ArkUINodeHandle node)
249 {
250     auto* frameNode = reinterpret_cast<FrameNode*>(node);
251     CHECK_NULL_VOID(frameNode);
252     ListModelNG::SetSticky(frameNode, DEFAULT_STICKY_STYLE);
253 }
254 
GetListSpace(ArkUINodeHandle node)255 ArkUI_Float32 GetListSpace(ArkUINodeHandle node)
256 {
257     auto* frameNode = reinterpret_cast<FrameNode*>(node);
258     CHECK_NULL_RETURN(frameNode, ERROR_INT_CODE);
259     return ListModelNG::GetListSpace(frameNode);
260 }
261 
SetListSpace(ArkUINodeHandle node,ArkUI_Float32 space)262 void SetListSpace(ArkUINodeHandle node, ArkUI_Float32 space)
263 {
264     auto* frameNode = reinterpret_cast<FrameNode*>(node);
265     CHECK_NULL_VOID(frameNode);
266     ListModelNG::SetListSpace(frameNode, Dimension(space, DimensionUnit::VP));
267 }
268 
ResetListSpace(ArkUINodeHandle node)269 void ResetListSpace(ArkUINodeHandle node)
270 {
271     auto* frameNode = reinterpret_cast<FrameNode*>(node);
272     CHECK_NULL_VOID(frameNode);
273     ListModelNG::SetListSpace(frameNode, Dimension(0, DimensionUnit::VP));
274 }
275 
GetListEdgeEffect(ArkUINodeHandle node,ArkUI_Int32 (* values)[2])276 ArkUI_Int32 GetListEdgeEffect(ArkUINodeHandle node, ArkUI_Int32 (*values)[2])
277 {
278     auto* frameNode = reinterpret_cast<FrameNode*>(node);
279     CHECK_NULL_RETURN(frameNode, ERROR_INT_CODE);
280     (*values)[INDEX_0] = ListModelNG::GetEdgeEffect(frameNode);
281     (*values)[INDEX_1] = ListModelNG::GetEdgeEffectAlways(frameNode);
282     return INDEX_2;
283 }
284 
SetListEdgeEffect(ArkUINodeHandle node,ArkUI_Int32 edgeEffect,ArkUI_Bool alwaysEnabled,ArkUI_Int32 edge)285 void SetListEdgeEffect(ArkUINodeHandle node, ArkUI_Int32 edgeEffect, ArkUI_Bool alwaysEnabled, ArkUI_Int32 edge)
286 {
287     auto* frameNode = reinterpret_cast<FrameNode*>(node);
288     CHECK_NULL_VOID(frameNode);
289     ListModelNG::SetEdgeEffect(frameNode, edgeEffect, alwaysEnabled, static_cast<EffectEdge>(edge));
290 }
291 
ResetListEdgeEffect(ArkUINodeHandle node)292 void ResetListEdgeEffect(ArkUINodeHandle node)
293 {
294     auto* frameNode = reinterpret_cast<FrameNode*>(node);
295     CHECK_NULL_VOID(frameNode);
296     ListModelNG::SetEdgeEffect(frameNode, DEFAULT_EDGE_EFFECT, false, EffectEdge::ALL);
297 }
298 
GetListDirection(ArkUINodeHandle node)299 ArkUI_Int32 GetListDirection(ArkUINodeHandle node)
300 {
301     auto* frameNode = reinterpret_cast<FrameNode*>(node);
302     CHECK_NULL_RETURN(frameNode, ERROR_INT_CODE);
303     return ListModelNG::GetListDirection(frameNode);
304 }
305 
SetListDirection(ArkUINodeHandle node,ArkUI_Int32 axis)306 void SetListDirection(ArkUINodeHandle node, ArkUI_Int32 axis)
307 {
308     auto* frameNode = reinterpret_cast<FrameNode*>(node);
309     CHECK_NULL_VOID(frameNode);
310     ListModelNG::SetListDirection(frameNode, axis);
311 }
312 
ResetListDirection(ArkUINodeHandle node)313 void ResetListDirection(ArkUINodeHandle node)
314 {
315     auto* frameNode = reinterpret_cast<FrameNode*>(node);
316     CHECK_NULL_VOID(frameNode);
317     ListModelNG::SetListDirection(frameNode, DEFAULT_DIRECTION);
318 }
319 
GetListFriction(ArkUINodeHandle node)320 ArkUI_Float32 GetListFriction(ArkUINodeHandle node)
321 {
322     auto* frameNode = reinterpret_cast<FrameNode*>(node);
323     CHECK_NULL_RETURN(frameNode, ERROR_INT_CODE);
324     return ListModelNG::GetListFriction(frameNode);
325 }
326 
SetListFriction(ArkUINodeHandle node,ArkUI_Float32 friction)327 void SetListFriction(ArkUINodeHandle node, ArkUI_Float32 friction)
328 {
329     auto* frameNode = reinterpret_cast<FrameNode*>(node);
330     CHECK_NULL_VOID(frameNode);
331     ListModelNG::SetListFriction(frameNode, friction);
332 }
333 
ResetListFriction(ArkUINodeHandle node)334 void ResetListFriction(ArkUINodeHandle node)
335 {
336     auto* frameNode = reinterpret_cast<FrameNode*>(node);
337     CHECK_NULL_VOID(frameNode);
338     if (SystemProperties::ConfigChangePerform()) {
339         ListModelNG::CreateWithResourceObjFriction(frameNode, nullptr);
340     }
341     double friction = -1.0;
342     ListModelNG::SetListFriction(frameNode, friction);
343 }
344 
GetListNestedScroll(ArkUINodeHandle node,ArkUI_Int32 (* values)[2])345 void GetListNestedScroll(ArkUINodeHandle node, ArkUI_Int32 (*values)[2])
346 {
347     auto* frameNode = reinterpret_cast<FrameNode*>(node);
348     CHECK_NULL_VOID(frameNode);
349     NestedScrollOptions options = ListModelNG::GetListNestedScroll(frameNode);
350     (*values)[0] = static_cast<ArkUI_Int32>(options.forward);
351     (*values)[1] = static_cast<ArkUI_Int32>(options.backward);
352 }
353 
SetListNestedScroll(ArkUINodeHandle node,ArkUI_Int32 forward,ArkUI_Int32 backward)354 void SetListNestedScroll(ArkUINodeHandle node, ArkUI_Int32 forward, ArkUI_Int32 backward)
355 {
356     NestedScrollOptions opt = {
357         .forward = static_cast<NestedScrollMode>(forward),
358         .backward = static_cast<NestedScrollMode>(backward),
359     };
360     auto* frameNode = reinterpret_cast<FrameNode*>(node);
361     CHECK_NULL_VOID(frameNode);
362     ListModelNG::SetListNestedScroll(frameNode, opt);
363 }
364 
ResetListNestedScroll(ArkUINodeHandle node)365 void ResetListNestedScroll(ArkUINodeHandle node)
366 {
367     auto* frameNode = reinterpret_cast<FrameNode*>(node);
368     CHECK_NULL_VOID(frameNode);
369     const NestedScrollOptions nestedOpt = {
370         .forward = NestedScrollMode::SELF_ONLY,
371         .backward = NestedScrollMode::SELF_ONLY,
372     };
373     ListModelNG::SetListNestedScroll(frameNode, nestedOpt);
374 }
375 
GetListScrollBar(ArkUINodeHandle node)376 ArkUI_Int32 GetListScrollBar(ArkUINodeHandle node)
377 {
378     auto* frameNode = reinterpret_cast<FrameNode*>(node);
379     CHECK_NULL_RETURN(frameNode, ERROR_INT_CODE);
380     return ListModelNG::GetListScrollBar(frameNode);
381 }
382 
SetListScrollBar(ArkUINodeHandle node,ArkUI_Int32 barState)383 void SetListScrollBar(ArkUINodeHandle node, ArkUI_Int32 barState)
384 {
385     auto* frameNode = reinterpret_cast<FrameNode*>(node);
386     CHECK_NULL_VOID(frameNode);
387     ListModelNG::SetListScrollBar(frameNode, barState);
388 }
389 
ResetListScrollBar(ArkUINodeHandle node)390 void ResetListScrollBar(ArkUINodeHandle node)
391 {
392     auto* frameNode = reinterpret_cast<FrameNode*>(node);
393     CHECK_NULL_VOID(frameNode);
394     ListModelNG::SetListScrollBar(frameNode, DEFAULT_SCROLL_BAR);
395 }
396 
GetListScrollBarWidth(ArkUINodeHandle node)397 ArkUI_Float32 GetListScrollBarWidth(ArkUINodeHandle node)
398 {
399     auto* frameNode = reinterpret_cast<FrameNode*>(node);
400     CHECK_NULL_RETURN(frameNode, ERROR_INT_CODE);
401     return ListModelNG::GetScrollBarWidth(frameNode);
402 }
403 
SetListScrollBarWidth(ArkUINodeHandle node,ArkUI_CharPtr value)404 void SetListScrollBarWidth(ArkUINodeHandle node, ArkUI_CharPtr value)
405 {
406     CHECK_NULL_VOID(value);
407     auto* frameNode = reinterpret_cast<FrameNode*>(node);
408     CHECK_NULL_VOID(frameNode);
409     ListModelNG::SetListScrollBarWidth(frameNode, value);
410 }
411 
ResetListScrollBarWidth(ArkUINodeHandle node)412 void ResetListScrollBarWidth(ArkUINodeHandle node)
413 {
414     auto* frameNode = reinterpret_cast<FrameNode*>(node);
415     CHECK_NULL_VOID(frameNode);
416     ListModelNG::SetListScrollBarWidth(frameNode, "0vp");
417 }
418 
GetListScrollBarColor(ArkUINodeHandle node)419 ArkUI_Uint32 GetListScrollBarColor(ArkUINodeHandle node)
420 {
421     auto* frameNode = reinterpret_cast<FrameNode*>(node);
422     CHECK_NULL_RETURN(frameNode, ERROR_INT_CODE);
423     return ListModelNG::GetScrollBarColor(frameNode);
424 }
425 
CreateWithResourceObjScrollBarColor(ArkUINodeHandle node,void * resObj)426 void CreateWithResourceObjScrollBarColor(ArkUINodeHandle node, void* resObj)
427 {
428     CHECK_NULL_VOID(SystemProperties::ConfigChangePerform());
429     auto* frameNode = reinterpret_cast<FrameNode*>(node);
430     CHECK_NULL_VOID(frameNode);
431     auto* resourceObj = reinterpret_cast<ResourceObject*>(resObj);
432     ListModelNG::CreateWithResourceObjScrollBarColor(frameNode, AceType::Claim(resourceObj));
433 }
434 
SetListScrollBarColor(ArkUINodeHandle node,ArkUI_CharPtr value)435 void SetListScrollBarColor(ArkUINodeHandle node, ArkUI_CharPtr value)
436 {
437     CHECK_NULL_VOID(value);
438     auto* frameNode = reinterpret_cast<FrameNode*>(node);
439     CHECK_NULL_VOID(frameNode);
440     ListModelNG::SetListScrollBarColor(frameNode, value);
441 }
442 
ResetListScrollBarColor(ArkUINodeHandle node)443 void ResetListScrollBarColor(ArkUINodeHandle node)
444 {
445     auto* frameNode = reinterpret_cast<FrameNode*>(node);
446     CHECK_NULL_VOID(frameNode);
447     ListModelNG::SetListScrollBarColor(frameNode, "#FF000000");
448 
449     CreateWithResourceObjScrollBarColor(node, nullptr);
450 }
451 
GetAlignListItem(ArkUINodeHandle node)452 ArkUI_Int32 GetAlignListItem(ArkUINodeHandle node)
453 {
454     auto* frameNode = reinterpret_cast<FrameNode*>(node);
455     CHECK_NULL_RETURN(frameNode, ERROR_INT_CODE);
456     return ListModelNG::GetListItemAlign(frameNode);
457 }
458 
SetAlignListItem(ArkUINodeHandle node,ArkUI_Int32 listItemAlign)459 void SetAlignListItem(ArkUINodeHandle node, ArkUI_Int32 listItemAlign)
460 {
461     auto* frameNode = reinterpret_cast<FrameNode*>(node);
462     CHECK_NULL_VOID(frameNode);
463     ListModelNG::SetListItemAlign(frameNode, static_cast<V2::ListItemAlign>(listItemAlign));
464 }
465 
ResetAlignListItem(ArkUINodeHandle node)466 void ResetAlignListItem(ArkUINodeHandle node)
467 {
468     auto* frameNode = reinterpret_cast<FrameNode*>(node);
469     CHECK_NULL_VOID(frameNode);
470     ListModelNG::SetListItemAlign(frameNode, V2::ListItemAlign::START);
471 }
472 
SetScrollSnapAlign(ArkUINodeHandle node,ArkUI_Int32 scrollSnapAlign)473 void SetScrollSnapAlign(ArkUINodeHandle node, ArkUI_Int32 scrollSnapAlign)
474 {
475     auto* frameNode = reinterpret_cast<FrameNode*>(node);
476     CHECK_NULL_VOID(frameNode);
477     ListModelNG::SetScrollSnapAlign(frameNode, static_cast<ScrollSnapAlign>(scrollSnapAlign));
478 }
479 
ResetScrollSnapAlign(ArkUINodeHandle node)480 void ResetScrollSnapAlign(ArkUINodeHandle node)
481 {
482     auto* frameNode = reinterpret_cast<FrameNode*>(node);
483     CHECK_NULL_VOID(frameNode);
484     ListModelNG::SetScrollSnapAlign(frameNode, ScrollSnapAlign::NONE);
485 }
486 
GetScrollSnapAlign(ArkUINodeHandle node)487 ArkUI_Int32 GetScrollSnapAlign(ArkUINodeHandle node)
488 {
489     auto* frameNode = reinterpret_cast<FrameNode*>(node);
490     CHECK_NULL_RETURN(frameNode, ERROR_INT_CODE);
491     return ListModelNG::GetScrollSnapAlign(frameNode);
492 }
493 
SetContentStartOffset(ArkUINodeHandle node,ArkUI_Float32 startOffset)494 void SetContentStartOffset(ArkUINodeHandle node, ArkUI_Float32 startOffset)
495 {
496     auto* frameNode = reinterpret_cast<FrameNode*>(node);
497     CHECK_NULL_VOID(frameNode);
498     ListModelNG::SetContentStartOffset(frameNode, startOffset);
499 }
500 
ResetContentStartOffset(ArkUINodeHandle node)501 void ResetContentStartOffset(ArkUINodeHandle node)
502 {
503     auto* frameNode = reinterpret_cast<FrameNode*>(node);
504     CHECK_NULL_VOID(frameNode);
505     ListModelNG::SetContentStartOffset(frameNode, DEFAULT_OFFSET);
506 }
507 
GetContentStartOffset(ArkUINodeHandle node)508 ArkUI_Float32 GetContentStartOffset(ArkUINodeHandle node)
509 {
510     auto* frameNode = reinterpret_cast<FrameNode*>(node);
511     CHECK_NULL_RETURN(frameNode, ERROR_INT_CODE);
512     return ListModelNG::GetContentStartOffset(frameNode);
513 }
514 
SetContentEndOffset(ArkUINodeHandle node,ArkUI_Float32 endOffset)515 void SetContentEndOffset(ArkUINodeHandle node, ArkUI_Float32 endOffset)
516 {
517     auto* frameNode = reinterpret_cast<FrameNode*>(node);
518     CHECK_NULL_VOID(frameNode);
519     ListModelNG::SetContentEndOffset(frameNode, endOffset);
520 }
521 
ResetContentEndOffset(ArkUINodeHandle node)522 void ResetContentEndOffset(ArkUINodeHandle node)
523 {
524     auto* frameNode = reinterpret_cast<FrameNode*>(node);
525     CHECK_NULL_VOID(frameNode);
526     ListModelNG::SetContentEndOffset(frameNode, DEFAULT_OFFSET);
527 }
528 
GetContentEndOffset(ArkUINodeHandle node)529 ArkUI_Float32 GetContentEndOffset(ArkUINodeHandle node)
530 {
531     auto* frameNode = reinterpret_cast<FrameNode*>(node);
532     CHECK_NULL_RETURN(frameNode, ERROR_INT_CODE);
533     return ListModelNG::GetContentEndOffset(frameNode);
534 }
535 
ListSetDivider(ArkUINodeHandle node,ArkUI_Uint32 color,const ArkUI_Float32 * values,const int32_t * units,ArkUI_Int32 length)536 void ListSetDivider(
537     ArkUINodeHandle node, ArkUI_Uint32 color, const ArkUI_Float32* values, const int32_t* units, ArkUI_Int32 length)
538 {
539     auto* frameNode = reinterpret_cast<FrameNode*>(node);
540     CHECK_NULL_VOID(frameNode);
541 
542     if (length != DEFAULT_DIVIDER_VALUES_COUNT) {
543         return;
544     }
545 
546     V2::ItemDivider divider;
547     divider.color = Color(color);
548     divider.strokeWidth =
549         Dimension(values[CALL_STROKE_WIDTH], static_cast<OHOS::Ace::DimensionUnit>(units[CALL_STROKE_WIDTH]));
550     divider.startMargin =
551         Dimension(values[CALL_START_MARGIN], static_cast<OHOS::Ace::DimensionUnit>(units[CALL_START_MARGIN]));
552     divider.endMargin =
553         Dimension(values[CALL_END_MARGIN], static_cast<OHOS::Ace::DimensionUnit>(units[CALL_END_MARGIN]));
554 
555     ListModelNG::SetDivider(frameNode, divider);
556 }
557 
ListResetDivider(ArkUINodeHandle node)558 void ListResetDivider(ArkUINodeHandle node)
559 {
560     auto* frameNode = reinterpret_cast<FrameNode*>(node);
561     CHECK_NULL_VOID(frameNode);
562     const V2::ItemDivider divider;
563 
564     if (SystemProperties::ConfigChangePerform()) {
565         ListModelNG::ParseResObjDividerStrokeWidth(frameNode, nullptr);
566         ListModelNG::ParseResObjDividerColor(frameNode, nullptr);
567         ListModelNG::ParseResObjDividerStartMargin(frameNode, nullptr);
568         ListModelNG::ParseResObjDividerEndMargin(frameNode, nullptr);
569         ListModel::GetInstance()->SetDividerColorByUser(false);
570     }
571     ListModelNG::SetDivider(frameNode, divider);
572 }
573 
SetChainAnimationOptions(ArkUINodeHandle node,const struct ArkUIChainAnimationOptionsType * chainAnimationOptions)574 void SetChainAnimationOptions(ArkUINodeHandle node, const struct ArkUIChainAnimationOptionsType* chainAnimationOptions)
575 {
576     auto* frameNode = reinterpret_cast<FrameNode*>(node);
577     CHECK_NULL_VOID(frameNode);
578 
579     ChainAnimationOptions options;
580     options.minSpace = CalcDimension(
581         chainAnimationOptions->minSpace, static_cast<OHOS::Ace::DimensionUnit>(chainAnimationOptions->minSpaceUnits));
582     options.maxSpace = CalcDimension(
583         chainAnimationOptions->maxSpace, static_cast<OHOS::Ace::DimensionUnit>(chainAnimationOptions->maxSpaceUnits));
584     options.conductivity = chainAnimationOptions->conductivity;
585     options.intensity = chainAnimationOptions->intensity;
586     options.edgeEffect = chainAnimationOptions->edgeEffect;
587     options.stiffness = chainAnimationOptions->stiffness;
588     options.damping = chainAnimationOptions->damping;
589     ListModelNG::SetChainAnimationOptions(frameNode, options);
590 }
591 
ResetChainAnimationOptions(ArkUINodeHandle node)592 void ResetChainAnimationOptions(ArkUINodeHandle node)
593 {
594     auto* frameNode = reinterpret_cast<FrameNode*>(node);
595     CHECK_NULL_VOID(frameNode);
596     RefPtr<ListTheme> listTheme = GetTheme<ListTheme>();
597     CHECK_NULL_VOID(listTheme);
598     ChainAnimationOptions options = {
599         .minSpace = listTheme->GetChainMinSpace(),
600         .maxSpace = listTheme->GetChainMaxSpace(),
601         .conductivity = listTheme->GetChainConductivity(),
602         .intensity = listTheme->GetChainIntensity(),
603         .edgeEffect = 0,
604         .stiffness = listTheme->GetChainStiffness(),
605         .damping = listTheme->GetChainDamping(),
606     };
607 
608     ListModelNG::SetChainAnimationOptions(frameNode, options);
609 }
610 
SetNodeAdapter(ArkUINodeHandle node,ArkUINodeAdapterHandle handle)611 ArkUI_Int32 SetNodeAdapter(ArkUINodeHandle node, ArkUINodeAdapterHandle handle)
612 {
613     auto* frameNode = reinterpret_cast<FrameNode*>(node);
614     CHECK_NULL_RETURN(frameNode, ERROR_CODE_PARAM_INVALID);
615     auto totalChildCount = frameNode->TotalChildCount();
616     if (totalChildCount > 0) {
617         return ERROR_CODE_NATIVE_IMPL_NODE_ADAPTER_CHILD_NODE_EXIST;
618     }
619     NodeAdapter::GetNodeAdapterAPI()->attachHostNode(handle, node);
620     return ERROR_CODE_NO_ERROR;
621 }
622 
ResetNodeAdapter(ArkUINodeHandle node)623 void ResetNodeAdapter(ArkUINodeHandle node)
624 {
625     NodeAdapter::GetNodeAdapterAPI()->detachHostNode(node);
626 }
627 
GetNodeAdapter(ArkUINodeHandle node)628 ArkUINodeAdapterHandle GetNodeAdapter(ArkUINodeHandle node)
629 {
630     return NodeAdapter::GetNodeAdapterAPI()->getNodeAdapter(node);
631 }
632 
GetCachedCount(ArkUINodeHandle node)633 ArkUI_Int32 GetCachedCount(ArkUINodeHandle node)
634 {
635     auto* frameNode = reinterpret_cast<FrameNode*>(node);
636     CHECK_NULL_RETURN(frameNode, 1);
637     return ListModelNG::GetCachedCount(frameNode);
638 }
639 
SetScrollToIndex(ArkUINodeHandle node,ArkUI_Int32 index,ArkUI_Int32 animation,ArkUI_Int32 alignment,float options)640 void SetScrollToIndex(
641     ArkUINodeHandle node, ArkUI_Int32 index, ArkUI_Int32 animation, ArkUI_Int32 alignment, float options)
642 {
643     auto* frameNode = reinterpret_cast<FrameNode*>(node);
644     CHECK_NULL_VOID(frameNode);
645     std::optional<float> extraOffset = options;
646     ListModelNG::SetScrollToIndex(frameNode, index, animation, alignment, extraOffset);
647 }
648 
SetScrollBy(ArkUINodeHandle node,ArkUI_Float64 x,ArkUI_Float64 y)649 void SetScrollBy(ArkUINodeHandle node, ArkUI_Float64 x, ArkUI_Float64 y)
650 {
651     auto* frameNode = reinterpret_cast<FrameNode*>(node);
652     CHECK_NULL_VOID(frameNode);
653     ListModelNG::SetScrollBy(frameNode, x, y);
654 }
655 
SetInitialIndex(ArkUINodeHandle node,ArkUI_Int32 index)656 void SetInitialIndex(ArkUINodeHandle node, ArkUI_Int32 index)
657 {
658     auto* frameNode = reinterpret_cast<FrameNode*>(node);
659     CHECK_NULL_VOID(frameNode);
660     ListModelNG::SetInitialIndex(frameNode, index);
661 }
662 
ResetInitialIndex(ArkUINodeHandle node)663 void ResetInitialIndex(ArkUINodeHandle node)
664 {
665     auto* frameNode = reinterpret_cast<FrameNode*>(node);
666     CHECK_NULL_VOID(frameNode);
667     ListModelNG::SetInitialIndex(frameNode, 0);
668 }
669 
SetListChildrenMainSize(ArkUINodeHandle node,ArkUIListChildrenMainSize option,ArkUI_Int32 unit)670 void SetListChildrenMainSize(ArkUINodeHandle node, ArkUIListChildrenMainSize option, ArkUI_Int32 unit)
671 {
672     CHECK_NULL_VOID(option);
673     auto* frameNode = reinterpret_cast<FrameNode*>(node);
674     CHECK_NULL_VOID(frameNode);
675     for (uint32_t i = 0; i < option->mainSize.size(); i++) {
676         if (option->mainSize[i] > 0) {
677             option->mainSize[i] =
678                 Dimension(option->mainSize[i], static_cast<OHOS::Ace::DimensionUnit>(unit)).ConvertToPx();
679         }
680     }
681     if (option->defaultMainSize > 0) {
682         option->defaultMainSize =
683             Dimension(option->defaultMainSize, static_cast<OHOS::Ace::DimensionUnit>(unit)).ConvertToPx();
684     }
685     ListModelNG::SetListChildrenMainSize(frameNode, option->defaultMainSize, option->mainSize);
686 }
687 
ResetListChildrenMainSize(ArkUINodeHandle node)688 void ResetListChildrenMainSize(ArkUINodeHandle node)
689 {
690     auto* frameNode = reinterpret_cast<FrameNode*>(node);
691     CHECK_NULL_VOID(frameNode);
692     ListModelNG::ResetListChildrenMainSize(frameNode);
693 }
694 
SetListCloseAllSwipeActions(ArkUINodeHandle node,void * userData,void (onFinish)(void * userData))695 void SetListCloseAllSwipeActions(ArkUINodeHandle node, void* userData, void (onFinish) (void* userData))
696 {
697     auto* frameNode = reinterpret_cast<FrameNode*>(node);
698     CHECK_NULL_VOID(frameNode);
699     RefPtr<ScrollControllerBase> scrollControllerBase = ListModelNG::GetOrCreateController(frameNode);
700     if (onFinish) {
701         auto onEvent = [userData, onFinish]() {
702             onFinish(userData);
703         };
704         scrollControllerBase->CloseAllSwipeActions(std::move(onEvent));
705     } else {
706         scrollControllerBase->CloseAllSwipeActions(nullptr);
707     }
708 }
709 
SetListFlingSpeedLimit(ArkUINodeHandle node,ArkUI_Float32 maxSpeed)710 void SetListFlingSpeedLimit(ArkUINodeHandle node, ArkUI_Float32 maxSpeed)
711 {
712     auto* frameNode = reinterpret_cast<FrameNode*>(node);
713     CHECK_NULL_VOID(frameNode);
714     ScrollableModelNG::SetMaxFlingSpeed(frameNode, maxSpeed);
715 }
716 
ResetListFlingSpeedLimit(ArkUINodeHandle node)717 void ResetListFlingSpeedLimit(ArkUINodeHandle node)
718 {
719     auto* frameNode = reinterpret_cast<FrameNode*>(node);
720     CHECK_NULL_VOID(frameNode);
721     ScrollableModelNG::SetMaxFlingSpeed(frameNode, -1.0);
722 }
723 
GetInitialIndex(ArkUINodeHandle node)724 ArkUI_Int32 GetInitialIndex(ArkUINodeHandle node)
725 {
726     auto* frameNode = reinterpret_cast<FrameNode*>(node);
727     CHECK_NULL_RETURN(frameNode, 0);
728     return ListModelNG::GetInitialIndex(frameNode);
729 }
730 
GetlistDivider(ArkUINodeHandle node,ArkUIdividerOptions * option,ArkUI_Int32 unit)731 void GetlistDivider(ArkUINodeHandle node, ArkUIdividerOptions* option, ArkUI_Int32 unit)
732 {
733     auto* frameNode = reinterpret_cast<FrameNode*>(node);
734     CHECK_NULL_VOID(frameNode);
735     auto divider = ListModelNG::GetDivider(frameNode);
736     option->color = divider.color.GetValue();
737     option->strokeWidth = divider.strokeWidth.GetNativeValue(static_cast<DimensionUnit>(unit));
738     option->startMargin = divider.startMargin.GetNativeValue(static_cast<DimensionUnit>(unit));
739     option->endMargin = divider.endMargin.GetNativeValue(static_cast<DimensionUnit>(unit));
740 }
741 
SetInitialScroller(ArkUINodeHandle node,ArkUINodeHandle controller,ArkUINodeHandle proxy)742 void SetInitialScroller(ArkUINodeHandle node, ArkUINodeHandle controller, ArkUINodeHandle proxy)
743 {
744     auto* frameNode = reinterpret_cast<FrameNode*>(node);
745     CHECK_NULL_VOID(frameNode);
746     auto listProxy = AceType::Claim(reinterpret_cast<ScrollProxy*>(proxy));
747     auto listController = AceType::Claim(reinterpret_cast<ScrollControllerBase*>(controller));
748     ListModelNG::SetScroller(frameNode, listController, listProxy);
749 }
750 
ResetInitialScroller(ArkUINodeHandle node)751 void ResetInitialScroller(ArkUINodeHandle node)
752 {
753     auto* frameNode = reinterpret_cast<FrameNode*>(node);
754     CHECK_NULL_VOID(frameNode);
755     RefPtr<ScrollControllerBase> listController;
756     RefPtr<ScrollProxy> listProxy;
757     ListModelNG::SetScroller(frameNode, listController, listProxy);
758 }
759 
SetScrollToItemInGroup(ArkUINodeHandle node,ArkUI_Int32 index,ArkUI_Int32 indexInGroup,ArkUI_Bool smooth,ArkUI_Int32 align)760 void SetScrollToItemInGroup(
761     ArkUINodeHandle node, ArkUI_Int32 index, ArkUI_Int32 indexInGroup, ArkUI_Bool smooth, ArkUI_Int32 align)
762 {
763     auto* frameNode = reinterpret_cast<FrameNode*>(node);
764     CHECK_NULL_VOID(frameNode);
765     ScrollAlign scrollAlign = static_cast<OHOS::Ace::ScrollAlign>(align);
766     ListModelNG::ScrollToItemInGroup(frameNode, index, indexInGroup, smooth, scrollAlign);
767 }
768 
SetListMaintainVisibleContentPosition(ArkUINodeHandle node,ArkUI_Bool enabled)769 void SetListMaintainVisibleContentPosition(ArkUINodeHandle node, ArkUI_Bool enabled)
770 {
771     auto* frameNode = reinterpret_cast<FrameNode*>(node);
772     CHECK_NULL_VOID(frameNode);
773     ListModelNG::SetListMaintainVisibleContentPosition(frameNode, enabled);
774 }
775 
ResetListMaintainVisibleContentPosition(ArkUINodeHandle node)776 void ResetListMaintainVisibleContentPosition(ArkUINodeHandle node)
777 {
778     auto* frameNode = reinterpret_cast<FrameNode*>(node);
779     CHECK_NULL_VOID(frameNode);
780     ListModelNG::SetListMaintainVisibleContentPosition(frameNode, false);
781 }
782 
GetListMaintainVisibleContentPosition(ArkUINodeHandle node)783 ArkUI_Bool GetListMaintainVisibleContentPosition(ArkUINodeHandle node)
784 {
785     auto* frameNode = reinterpret_cast<FrameNode*>(node);
786     CHECK_NULL_RETURN(frameNode, false);
787     return ListModelNG::GetListMaintainVisibleContentPosition(frameNode);
788 }
789 
SetListStackFromEnd(ArkUINodeHandle node,ArkUI_Bool enabled)790 void SetListStackFromEnd(ArkUINodeHandle node, ArkUI_Bool enabled)
791 {
792     auto* frameNode = reinterpret_cast<FrameNode*>(node);
793     CHECK_NULL_VOID(frameNode);
794     ListModelNG::SetListStackFromEnd(frameNode, enabled);
795 }
796 
ResetListStackFromEnd(ArkUINodeHandle node)797 void ResetListStackFromEnd(ArkUINodeHandle node)
798 {
799     auto* frameNode = reinterpret_cast<FrameNode*>(node);
800     CHECK_NULL_VOID(frameNode);
801     ListModelNG::SetListStackFromEnd(frameNode, false);
802 }
803 
GetListStackFromEnd(ArkUINodeHandle node)804 ArkUI_Bool GetListStackFromEnd(ArkUINodeHandle node)
805 {
806     auto* frameNode = reinterpret_cast<FrameNode*>(node);
807     CHECK_NULL_RETURN(frameNode, false);
808     return ListModelNG::GetListStackFromEnd(frameNode);
809 }
810 
SetListSyncLoad(ArkUINodeHandle node,ArkUI_Bool enabled)811 void SetListSyncLoad(ArkUINodeHandle node, ArkUI_Bool enabled)
812 {
813     auto* frameNode = reinterpret_cast<FrameNode*>(node);
814     CHECK_NULL_VOID(frameNode);
815     ListModelNG::SetListSyncLoad(frameNode, enabled);
816 }
817 
ResetListSyncLoad(ArkUINodeHandle node)818 void ResetListSyncLoad(ArkUINodeHandle node)
819 {
820     auto* frameNode = reinterpret_cast<FrameNode*>(node);
821     CHECK_NULL_VOID(frameNode);
822     ListModelNG::SetListSyncLoad(frameNode, true);
823 }
824 
GetListSyncLoad(ArkUINodeHandle node)825 ArkUI_Bool GetListSyncLoad(ArkUINodeHandle node)
826 {
827     auto* frameNode = reinterpret_cast<FrameNode*>(node);
828     CHECK_NULL_RETURN(frameNode, true);
829     return ListModelNG::GetListSyncLoad(frameNode);
830 }
831 
SetListFadingEdge(ArkUINodeHandle node,ArkUI_Bool fadingEdge,ArkUI_Float32 fadingEdgeLengthValue,ArkUI_Int32 fadingEdgeLengthUnit)832 void SetListFadingEdge(
833     ArkUINodeHandle node, ArkUI_Bool fadingEdge, ArkUI_Float32 fadingEdgeLengthValue, ArkUI_Int32 fadingEdgeLengthUnit)
834 {
835     auto* frameNode = reinterpret_cast<FrameNode*>(node);
836     CHECK_NULL_VOID(frameNode);
837     Dimension fadingEdgeLengthDimension =
838         Dimension(fadingEdgeLengthValue, static_cast<OHOS::Ace::DimensionUnit>(fadingEdgeLengthUnit));
839     NG::ScrollableModelNG::SetFadingEdge(frameNode, fadingEdge, fadingEdgeLengthDimension);
840 }
841 
ResetListFadingEdge(ArkUINodeHandle node)842 void ResetListFadingEdge(ArkUINodeHandle node)
843 {
844     auto* frameNode = reinterpret_cast<FrameNode*>(node);
845     CHECK_NULL_VOID(frameNode);
846     NG::ScrollableModelNG::SetFadingEdge(frameNode, false, DEFAULT_FADING_EDGE_LENGTH);
847 }
848 
GetListFocusWrapMode(ArkUINodeHandle node)849 ArkUI_Int32 GetListFocusWrapMode(ArkUINodeHandle node)
850 {
851     auto* frameNode = reinterpret_cast<FrameNode*>(node);
852     CHECK_NULL_RETURN(frameNode, 0);
853     auto mode = ListModelNG::GetFocusWrapMode(frameNode);
854     if (mode == FocusWrapMode::WRAP_WITH_ARROW) {
855         return 1; // 1 means wrap with arrow
856     } else {
857         return 0; // 0 means default
858     }
859 }
860 
SetListFocusWrapMode(ArkUINodeHandle node,int32_t focusWrapMode)861 void SetListFocusWrapMode(ArkUINodeHandle node, int32_t focusWrapMode)
862 {
863     auto* frameNode = reinterpret_cast<FrameNode*>(node);
864     CHECK_NULL_VOID(frameNode);
865     FocusWrapMode mode = static_cast<FocusWrapMode>(focusWrapMode);
866     ListModelNG::SetFocusWrapMode(frameNode, mode);
867 }
868 
ResetListFocusWrapMode(ArkUINodeHandle node)869 void ResetListFocusWrapMode(ArkUINodeHandle node)
870 {
871     auto* frameNode = reinterpret_cast<FrameNode*>(node);
872     CHECK_NULL_VOID(frameNode);
873     ListModelNG::SetFocusWrapMode(frameNode, FocusWrapMode::DEFAULT);
874 }
875 
SetShowCached(ArkUINodeHandle node,ArkUI_Bool show)876 void SetShowCached(ArkUINodeHandle node, ArkUI_Bool show)
877 {
878     auto* frameNode = reinterpret_cast<FrameNode*>(node);
879     CHECK_NULL_VOID(frameNode);
880     ListModelNG::SetShowCached(frameNode, show);
881 }
882 
ResetShowCached(ArkUINodeHandle node)883 void ResetShowCached(ArkUINodeHandle node)
884 {
885     auto* frameNode = reinterpret_cast<FrameNode*>(node);
886     CHECK_NULL_VOID(frameNode);
887     ListModelNG::SetShowCached(frameNode, false);
888 }
889 
GetShowCached(ArkUINodeHandle node)890 ArkUI_Bool GetShowCached(ArkUINodeHandle node)
891 {
892     auto* frameNode = reinterpret_cast<FrameNode*>(node);
893     CHECK_NULL_RETURN(frameNode, false);
894     return ListModelNG::GetShowCached(frameNode);
895 }
896 } // namespace
897 
898 namespace NodeModifier {
GetListModifier()899 const ArkUIListModifier* GetListModifier()
900 {
901     CHECK_INITIALIZED_FIELDS_BEGIN(); // don't move this line
902     static const ArkUIListModifier modifier = {
903         .setListLanes = SetListLanes,
904         .resetListLanes = ResetListLanes,
905         .resetlistLaneMinAndMaxLength = ResetlistLaneMinAndMaxLength,
906         .getListLanes = GetListLanes,
907         .getlistLaneMinLength = GetlistLaneMinLength,
908         .getListLaneMaxLength = GetListLaneMaxLength,
909         .getListLaneGutter = GetListLaneGutter,
910         .setEditMode = SetEditMode,
911         .resetEditMode = ResetEditMode,
912         .setMultiSelectable = SetMultiSelectable,
913         .resetMultiSelectable = ResetMultiSelectable,
914         .setChainAnimation = SetChainAnimation,
915         .resetChainAnimation = ResetChainAnimation,
916         .setCachedCount = SetCachedCount,
917         .resetCachedCount = ResetCachedCount,
918         .setCachedIsShown = SetCachedIsShown,
919         .resetCachedIsShown = ResetCachedIsShown,
920         .setCacheRange = SetCacheRange,
921         .resetCacheRange = ResetCacheRange,
922         .getListFocusWrapMode = GetListFocusWrapMode,
923         .setListFocusWrapMode = SetListFocusWrapMode,
924         .resetListFocusWrapMode = ResetListFocusWrapMode,
925         .getCachedIsShown = GetCachedIsShown,
926         .getEnableScrollInteraction = GetEnableScrollInteraction,
927         .setEnableScrollInteraction = SetEnableScrollInteraction,
928         .resetEnableScrollInteraction = ResetEnableScrollInteraction,
929         .getSticky = GetSticky,
930         .setSticky = SetSticky,
931         .resetSticky = ResetSticky,
932         .getListEdgeEffect = GetListEdgeEffect,
933         .setListEdgeEffect = SetListEdgeEffect,
934         .resetListEdgeEffect = ResetListEdgeEffect,
935         .getListDirection = GetListDirection,
936         .setListDirection = SetListDirection,
937         .resetListDirection = ResetListDirection,
938         .getListFriction = GetListFriction,
939         .setListFriction = SetListFriction,
940         .resetListFriction = ResetListFriction,
941         .getListNestedScroll = GetListNestedScroll,
942         .setListNestedScroll = SetListNestedScroll,
943         .resetListNestedScroll = ResetListNestedScroll,
944         .getListScrollBar = GetListScrollBar,
945         .setListScrollBar = SetListScrollBar,
946         .resetListScrollBar = ResetListScrollBar,
947         .getListScrollBarWidth = GetListScrollBarWidth,
948         .setListScrollBarWidth = SetListScrollBarWidth,
949         .resetListScrollBarWidth = ResetListScrollBarWidth,
950         .getListScrollBarColor = GetListScrollBarColor,
951         .setListScrollBarColor = SetListScrollBarColor,
952         .resetListScrollBarColor = ResetListScrollBarColor,
953         .getAlignListItem = GetAlignListItem,
954         .setAlignListItem = SetAlignListItem,
955         .resetAlignListItem = ResetAlignListItem,
956         .setScrollSnapAlign = SetScrollSnapAlign,
957         .resetScrollSnapAlign = ResetScrollSnapAlign,
958         .getScrollSnapAlign = GetScrollSnapAlign,
959         .setContentStartOffset = SetContentStartOffset,
960         .resetContentStartOffset = ResetContentStartOffset,
961         .getContentStartOffset = GetContentStartOffset,
962         .setContentEndOffset = SetContentEndOffset,
963         .resetContentEndOffset = ResetContentEndOffset,
964         .getContentEndOffset = GetContentEndOffset,
965         .listSetDivider = ListSetDivider,
966         .listResetDivider = ListResetDivider,
967         .setChainAnimationOptions = SetChainAnimationOptions,
968         .resetChainAnimationOptions = ResetChainAnimationOptions,
969         .getListSpace = GetListSpace,
970         .setListSpace = SetListSpace,
971         .resetListSpace = ResetListSpace,
972         .setNodeAdapter = SetNodeAdapter,
973         .resetNodeAdapter = ResetNodeAdapter,
974         .getNodeAdapter = GetNodeAdapter,
975         .getCachedCount = GetCachedCount,
976         .setScrollToIndex = SetScrollToIndex,
977         .setScrollBy = SetScrollBy,
978         .setInitialIndex = SetInitialIndex,
979         .resetInitialIndex = ResetInitialIndex,
980         .setListChildrenMainSize = SetListChildrenMainSize,
981         .resetListChildrenMainSize = ResetListChildrenMainSize,
982         .setListCloseAllSwipeActions = SetListCloseAllSwipeActions,
983         .getInitialIndex = GetInitialIndex,
984         .getlistDivider = GetlistDivider,
985         .setInitialScroller = SetInitialScroller,
986         .resetInitialScroller = ResetInitialScroller,
987         .setScrollToItemInGroup = SetScrollToItemInGroup,
988         .setListMaintainVisibleContentPosition = SetListMaintainVisibleContentPosition,
989         .resetListMaintainVisibleContentPosition = ResetListMaintainVisibleContentPosition,
990         .getListMaintainVisibleContentPosition = GetListMaintainVisibleContentPosition,
991         .setListStackFromEnd = SetListStackFromEnd,
992         .resetListStackFromEnd = ResetListStackFromEnd,
993         .getListStackFromEnd = GetListStackFromEnd,
994         .setListSyncLoad = SetListSyncLoad,
995         .resetListSyncLoad = ResetListSyncLoad,
996         .getListSyncLoad = GetListSyncLoad,
997         .setListFadingEdge = SetListFadingEdge,
998         .resetListFadingEdge = ResetListFadingEdge,
999         .setShowCached = SetShowCached,
1000         .resetShowCached = ResetShowCached,
1001         .getShowCached = GetShowCached,
1002         .setOnListScrollIndexCallBack = SetOnListScrollIndexCallBack,
1003         .setOnScrollVisibleContentChange = SetOnScrollVisibleContentChange,
1004         .setOnItemMove = SetOnItemMove,
1005         .setOnItemDragStart = SetOnItemDragStart,
1006         .setOnItemDragEnter = SetOnItemDragEnter,
1007         .setOnItemDragMove = SetOnItemDragMove,
1008         .setOnItemDragLeave = SetOnItemDragLeave,
1009         .setOnItemDrop = SetOnItemDrop,
1010         .setOnListScrollFrameBeginCallBack = SetOnListScrollFrameBeginCallBack,
1011         .setOnListWillScrollCallBack = SetOnListWillScrollCallBack,
1012         .setOnListDidScrollCallBack = SetOnListDidScrollCallBack,
1013         .setOnListReachStartCallBack = SetOnListReachStartCallBack,
1014         .setOnListReachEndCallBack = SetOnListReachEndCallBack,
1015         .setOnListScrollStartCallBack = SetOnListScrollStartCallBack,
1016         .setOnListScrollStopCallBack = SetOnListScrollStopCallBack,
1017         .resetOnListScrollIndex = ResetOnListScrollIndex,
1018         .resetOnScrollVisibleContentChange = ResetOnScrollVisibleContentChange,
1019         .resetOnItemMove = ResetOnItemMove,
1020         .resetOnItemDragStart = ResetOnItemDragStart,
1021         .resetOnItemDragEnter = ResetOnItemDragEnter,
1022         .resetOnItemDragMove = ResetOnItemDragMove,
1023         .resetOnItemDragLeave = ResetOnItemDragLeave,
1024         .resetOnItemDrop = ResetOnItemDrop,
1025         .resetOnListScrollStart = ResetOnListScrollStart,
1026         .resetOnListScrollStop = ResetOnListScrollStop,
1027         .resetOnListScrollFrameBegin = ResetOnListScrollFrameBegin,
1028         .resetOnListWillScroll = ResetOnListWillScroll,
1029         .resetOnListDidScroll = ResetOnListDidScroll,
1030         .resetOnListReachStart = ResetOnListReachStart,
1031         .resetOnListReachEnd = ResetOnListReachEnd,
1032         .createWithResourceObjFriction = CreateWithResourceObjFriction,
1033         .parseResObjDividerStrokeWidth = ParseResObjDividerStrokeWidth,
1034         .parseResObjDividerColor = ParseResObjDividerColor,
1035         .parseResObjDividerStartMargin = ParseResObjDividerStartMargin,
1036         .parseResObjDividerEndMargin = ParseResObjDividerEndMargin,
1037         .createWithResourceObjLaneConstrain = CreateWithResourceObjLaneConstrain,
1038         .createWithResourceObjScrollBarColor = CreateWithResourceObjScrollBarColor,
1039     };
1040     CHECK_INITIALIZED_FIELDS_END(modifier, 0, 0, 0); // don't move this line
1041     return &modifier;
1042 }
1043 
GetCJUIListModifier()1044 const CJUIListModifier* GetCJUIListModifier()
1045 {
1046     CHECK_INITIALIZED_FIELDS_BEGIN(); // don't move this line
1047     static const CJUIListModifier modifier = {
1048         .setListLanes = SetListLanes,
1049         .resetListLanes = ResetListLanes,
1050         .setEditMode = SetEditMode,
1051         .resetEditMode = ResetEditMode,
1052         .setMultiSelectable = SetMultiSelectable,
1053         .resetMultiSelectable = ResetMultiSelectable,
1054         .setChainAnimation = SetChainAnimation,
1055         .resetChainAnimation = ResetChainAnimation,
1056         .setCachedCount = SetCachedCount,
1057         .resetCachedCount = ResetCachedCount,
1058         .getEnableScrollInteraction = GetEnableScrollInteraction,
1059         .setEnableScrollInteraction = SetEnableScrollInteraction,
1060         .resetEnableScrollInteraction = ResetEnableScrollInteraction,
1061         .getSticky = GetSticky,
1062         .setSticky = SetSticky,
1063         .resetSticky = ResetSticky,
1064         .getListEdgeEffect = GetListEdgeEffect,
1065         .setListEdgeEffect = SetListEdgeEffect,
1066         .resetListEdgeEffect = ResetListEdgeEffect,
1067         .getListDirection = GetListDirection,
1068         .setListDirection = SetListDirection,
1069         .resetListDirection = ResetListDirection,
1070         .getListFriction = GetListFriction,
1071         .setListFriction = SetListFriction,
1072         .resetListFriction = ResetListFriction,
1073         .getListFocusWrapMode = GetListFocusWrapMode,
1074         .setListFocusWrapMode = SetListFocusWrapMode,
1075         .resetListFocusWrapMode = ResetListFocusWrapMode,
1076         .getListNestedScroll = GetListNestedScroll,
1077         .setListNestedScroll = SetListNestedScroll,
1078         .resetListNestedScroll = ResetListNestedScroll,
1079         .getListScrollBar = GetListScrollBar,
1080         .setListScrollBar = SetListScrollBar,
1081         .resetListScrollBar = ResetListScrollBar,
1082         .getListScrollBarWidth = GetListScrollBarWidth,
1083         .setListScrollBarWidth = SetListScrollBarWidth,
1084         .resetListScrollBarWidth = ResetListScrollBarWidth,
1085         .getListScrollBarColor = GetListScrollBarColor,
1086         .setListScrollBarColor = SetListScrollBarColor,
1087         .resetListScrollBarColor = ResetListScrollBarColor,
1088         .getAlignListItem = GetAlignListItem,
1089         .setAlignListItem = SetAlignListItem,
1090         .resetAlignListItem = ResetAlignListItem,
1091         .setScrollSnapAlign = SetScrollSnapAlign,
1092         .resetScrollSnapAlign = ResetScrollSnapAlign,
1093         .setContentStartOffset = SetContentStartOffset,
1094         .resetContentStartOffset = ResetContentStartOffset,
1095         .setContentEndOffset = SetContentEndOffset,
1096         .resetContentEndOffset = ResetContentEndOffset,
1097         .listSetDivider = ListSetDivider,
1098         .listResetDivider = ListResetDivider,
1099         .setChainAnimationOptions = SetChainAnimationOptions,
1100         .resetChainAnimationOptions = ResetChainAnimationOptions,
1101         .getListSpace = GetListSpace,
1102         .setListSpace = SetListSpace,
1103         .resetListSpace = ResetListSpace,
1104         .setNodeAdapter = SetNodeAdapter,
1105         .resetNodeAdapter = ResetNodeAdapter,
1106         .getNodeAdapter = GetNodeAdapter,
1107         .getCachedCount = GetCachedCount,
1108         .setScrollToIndex = SetScrollToIndex,
1109         .setScrollBy = SetScrollBy,
1110         .setInitialIndex = SetInitialIndex,
1111         .resetInitialIndex = ResetInitialIndex,
1112         .setListChildrenMainSize = SetListChildrenMainSize,
1113         .resetListChildrenMainSize = ResetListChildrenMainSize,
1114         .setListCloseAllSwipeActions = SetListCloseAllSwipeActions,
1115         .setListFlingSpeedLimit = SetListFlingSpeedLimit,
1116         .resetListFlingSpeedLimit = ResetListFlingSpeedLimit,
1117         .getInitialIndex = GetInitialIndex,
1118         .getlistDivider = GetlistDivider,
1119     };
1120     CHECK_INITIALIZED_FIELDS_END(modifier, 0, 0, 0); // don't move this line
1121     return &modifier;
1122 }
1123 
SetOnListScroll(ArkUINodeHandle node,void * extraParam)1124 void SetOnListScroll(ArkUINodeHandle node, void* extraParam)
1125 {
1126     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1127     CHECK_NULL_VOID(frameNode);
1128     auto onScroll = [node, extraParam](Dimension scrollOffset, ScrollState scrollState) {
1129         ArkUINodeEvent event;
1130         event.kind = COMPONENT_ASYNC_EVENT;
1131         event.extraParam = reinterpret_cast<intptr_t>(extraParam);
1132         event.componentAsyncEvent.subKind = ON_LIST_SCROLL;
1133         event.componentAsyncEvent.data[0].f32 = static_cast<float>(scrollOffset.Value());
1134         event.componentAsyncEvent.data[1].i32 = static_cast<int>(scrollState);
1135         SendArkUISyncEvent(&event);
1136     };
1137     ListModelNG::SetOnScroll(frameNode, std::move(onScroll));
1138 }
1139 
SetOnListScrollFrameBegin(ArkUINodeHandle node,void * extraParam)1140 void SetOnListScrollFrameBegin(ArkUINodeHandle node, void* extraParam)
1141 {
1142     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1143     CHECK_NULL_VOID(frameNode);
1144     int32_t nodeId = frameNode->GetId();
1145     auto onScrollFrameBegin = [nodeId, node, extraParam](
1146                                   const Dimension& offset, const ScrollState& state) -> ScrollFrameResult {
1147         ScrollFrameResult scrollRes { .offset = offset };
1148         ArkUINodeEvent event;
1149         event.kind = COMPONENT_ASYNC_EVENT;
1150         event.extraParam = reinterpret_cast<intptr_t>(extraParam);
1151         event.componentAsyncEvent.subKind = ON_LIST_SCROLL_FRAME_BEGIN;
1152         event.componentAsyncEvent.data[0].f32 = static_cast<float>(offset.Value());
1153         event.componentAsyncEvent.data[1].i32 = static_cast<int>(state);
1154         SendArkUISyncEvent(&event);
1155         scrollRes.offset = Dimension(event.componentAsyncEvent.data[0].f32, DimensionUnit::VP);
1156         return scrollRes;
1157     };
1158     ListModelNG::SetOnScrollFrameBegin(frameNode, std::move(onScrollFrameBegin));
1159 }
1160 
SetOnListScrollStart(ArkUINodeHandle node,void * extraParam)1161 void SetOnListScrollStart(ArkUINodeHandle node, void* extraParam)
1162 {
1163     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1164     CHECK_NULL_VOID(frameNode);
1165     int32_t nodeId = frameNode->GetId();
1166     auto onScrollStart = [nodeId, node, extraParam]() -> void {
1167         ArkUINodeEvent event;
1168         event.kind = COMPONENT_ASYNC_EVENT;
1169         event.extraParam = reinterpret_cast<intptr_t>(extraParam);
1170         event.componentAsyncEvent.subKind = ON_LIST_SCROLL_START;
1171         SendArkUISyncEvent(&event);
1172     };
1173     ListModelNG::SetOnScrollStart(frameNode, std::move(onScrollStart));
1174 }
1175 
SetOnListScrollStop(ArkUINodeHandle node,void * extraParam)1176 void SetOnListScrollStop(ArkUINodeHandle node, void* extraParam)
1177 {
1178     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1179     CHECK_NULL_VOID(frameNode);
1180     int32_t nodeId = frameNode->GetId();
1181     auto onScrollStop = [nodeId, node, extraParam]() -> void {
1182         ArkUINodeEvent event;
1183         event.kind = COMPONENT_ASYNC_EVENT;
1184         event.extraParam = reinterpret_cast<intptr_t>(extraParam);
1185         event.componentAsyncEvent.subKind = ON_LIST_SCROLL_STOP;
1186         SendArkUISyncEvent(&event);
1187     };
1188     ListModelNG::SetOnScrollStop(frameNode, std::move(onScrollStop));
1189 }
1190 
SetOnListWillScroll(ArkUINodeHandle node,void * extraParam)1191 void SetOnListWillScroll(ArkUINodeHandle node, void* extraParam)
1192 {
1193     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1194     CHECK_NULL_VOID(frameNode);
1195     int32_t nodeId = frameNode->GetId();
1196     auto onWillScroll = [nodeId, node, extraParam](const Dimension& offset, const ScrollState& state,
1197                             ScrollSource source) -> ScrollFrameResult {
1198         ScrollFrameResult scrollRes { .offset = offset };
1199         ArkUINodeEvent event;
1200         bool usePx = NodeModel::UsePXUnit(reinterpret_cast<ArkUI_Node*>(extraParam));
1201         event.kind = COMPONENT_ASYNC_EVENT;
1202         event.extraParam = reinterpret_cast<intptr_t>(extraParam);
1203         event.componentAsyncEvent.subKind = ON_LIST_WILL_SCROLL;
1204         event.componentAsyncEvent.data[0].f32 =
1205             usePx ? static_cast<float>(offset.ConvertToPx()) : static_cast<float>(offset.Value());
1206         event.componentAsyncEvent.data[1].i32 = static_cast<int>(state);
1207         event.componentAsyncEvent.data[2].i32 = static_cast<int>(source);
1208         SendArkUISyncEvent(&event);
1209         scrollRes.offset =
1210             Dimension(event.componentAsyncEvent.data[0].f32, usePx ? DimensionUnit::PX : DimensionUnit::VP);
1211         return scrollRes;
1212     };
1213     ScrollableModelNG::SetOnWillScroll(frameNode, std::move(onWillScroll));
1214 }
1215 
SetOnListDidScroll(ArkUINodeHandle node,void * extraParam)1216 void SetOnListDidScroll(ArkUINodeHandle node, void* extraParam)
1217 {
1218     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1219     CHECK_NULL_VOID(frameNode);
1220     int32_t nodeId = frameNode->GetId();
1221     auto onDidScroll = [nodeId, node, extraParam](const Dimension& offset, const ScrollState& state) -> void {
1222         ArkUINodeEvent event;
1223         event.kind = COMPONENT_ASYNC_EVENT;
1224         event.extraParam = reinterpret_cast<intptr_t>(extraParam);
1225         bool usePx = NodeModel::UsePXUnit(reinterpret_cast<ArkUI_Node*>(extraParam));
1226         event.componentAsyncEvent.subKind = ON_LIST_DID_SCROLL;
1227         event.componentAsyncEvent.data[0].f32 =
1228             usePx ? static_cast<float>(offset.ConvertToPx()) : static_cast<float>(offset.Value());
1229         event.componentAsyncEvent.data[1].i32 = static_cast<int32_t>(state);
1230         SendArkUISyncEvent(&event);
1231     };
1232     ScrollableModelNG::SetOnDidScroll(frameNode, std::move(onDidScroll));
1233 }
1234 
SetOnListScrollIndex(ArkUINodeHandle node,void * extraParam)1235 void SetOnListScrollIndex(ArkUINodeHandle node, void* extraParam)
1236 {
1237     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1238     CHECK_NULL_VOID(frameNode);
1239     int32_t nodeId = frameNode->GetId();
1240     auto onScrollIndex = [nodeId, node, extraParam](int32_t first, int32_t last, int32_t center) -> void {
1241         ArkUINodeEvent event;
1242         event.kind = COMPONENT_ASYNC_EVENT;
1243         event.extraParam = reinterpret_cast<intptr_t>(extraParam);
1244         event.componentAsyncEvent.subKind = ON_LIST_SCROLL_INDEX;
1245         event.componentAsyncEvent.data[0].i32 = first;
1246         event.componentAsyncEvent.data[1].i32 = last;
1247         event.componentAsyncEvent.data[2].i32 = center;
1248         SendArkUISyncEvent(&event);
1249     };
1250     ListModelNG::SetOnScrollIndex(frameNode, std::move(onScrollIndex));
1251 }
1252 
SetOnListReachStart(ArkUINodeHandle node,void * extraParam)1253 void SetOnListReachStart(ArkUINodeHandle node, void* extraParam)
1254 {
1255     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1256     CHECK_NULL_VOID(frameNode);
1257     auto onReachStart = [node, extraParam]() -> void {
1258         ArkUINodeEvent event;
1259         event.kind = COMPONENT_ASYNC_EVENT;
1260         event.extraParam = reinterpret_cast<intptr_t>(extraParam);
1261         event.componentAsyncEvent.subKind = ON_LIST_REACH_START;
1262         SendArkUISyncEvent(&event);
1263     };
1264     ListModelNG::SetOnReachStart(frameNode, std::move(onReachStart));
1265 }
1266 
SetOnListReachEnd(ArkUINodeHandle node,void * extraParam)1267 void SetOnListReachEnd(ArkUINodeHandle node, void* extraParam)
1268 {
1269     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1270     CHECK_NULL_VOID(frameNode);
1271     auto onReachEnd = [node, extraParam]() -> void {
1272         ArkUINodeEvent event;
1273         event.kind = COMPONENT_ASYNC_EVENT;
1274         event.extraParam = reinterpret_cast<intptr_t>(extraParam);
1275         event.componentAsyncEvent.subKind = ON_LIST_REACH_END;
1276         SendArkUISyncEvent(&event);
1277     };
1278     ListModelNG::SetOnReachEnd(frameNode, std::move(onReachEnd));
1279 }
1280 
SetOnListScrollVisibleContentChange(ArkUINodeHandle node,void * extraParam)1281 void SetOnListScrollVisibleContentChange(ArkUINodeHandle node, void* extraParam)
1282 {
1283     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1284     CHECK_NULL_VOID(frameNode);
1285     auto onScrollVisibleContentChange = [node, extraParam](const ListItemIndex start, const ListItemIndex end) -> void {
1286         ArkUINodeEvent event;
1287         event.kind = COMPONENT_ASYNC_EVENT;
1288         event.extraParam = reinterpret_cast<intptr_t>(extraParam);
1289         event.componentAsyncEvent.subKind = ON_LIST_SCROLL_VISIBLE_CONTENT_CHANGE;
1290         event.componentAsyncEvent.data[0].i32 = start.index;
1291         event.componentAsyncEvent.data[1].i32 = start.area;
1292         event.componentAsyncEvent.data[2].i32 = start.indexInGroup;
1293         event.componentAsyncEvent.data[3].i32 = end.index;
1294         event.componentAsyncEvent.data[4].i32 = end.area;
1295         event.componentAsyncEvent.data[5].i32 = end.indexInGroup;
1296         SendArkUISyncEvent(&event);
1297     };
1298     ListModelNG::SetOnScrollVisibleContentChange(frameNode, std::move(onScrollVisibleContentChange));
1299 }
1300 
SetOnListScrollIndexCallBack(ArkUINodeHandle node,void * extraParam)1301 void SetOnListScrollIndexCallBack(ArkUINodeHandle node, void* extraParam)
1302 {
1303     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1304     CHECK_NULL_VOID(frameNode);
1305     if (extraParam) {
1306         auto onScrollIndex = reinterpret_cast<OnScrollIndexEvent*>(extraParam);
1307         ListModelNG::SetOnScrollIndex(frameNode, std::move(*onScrollIndex));
1308     } else {
1309         ListModelNG::SetOnScrollIndex(frameNode, nullptr);
1310     }
1311 }
1312 
SetOnScrollVisibleContentChange(ArkUINodeHandle node,void * extraParam)1313 void SetOnScrollVisibleContentChange(ArkUINodeHandle node, void* extraParam)
1314 {
1315     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1316     CHECK_NULL_VOID(frameNode);
1317     if (extraParam) {
1318         auto onScrollVisibleContentChange = reinterpret_cast<OnScrollVisibleContentChangeEvent*>(extraParam);
1319         ListModelNG::SetOnScrollVisibleContentChange(frameNode, std::move(*onScrollVisibleContentChange));
1320     } else {
1321         ListModelNG::SetOnScrollVisibleContentChange(frameNode, nullptr);
1322     }
1323 }
1324 
SetOnItemMove(ArkUINodeHandle node,void * extraParam)1325 void SetOnItemMove(ArkUINodeHandle node, void* extraParam)
1326 {
1327     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1328     CHECK_NULL_VOID(frameNode);
1329     if (extraParam) {
1330         auto onItemMove = reinterpret_cast<OnItemMoveEvent*>(extraParam);
1331         ListModelNG::SetOnItemMove(frameNode, std::move(*onItemMove));
1332     } else {
1333         ListModelNG::SetOnItemMove(frameNode, nullptr);
1334     }
1335 }
1336 
SetOnItemDragStart(ArkUINodeHandle node,void * extraParam)1337 void SetOnItemDragStart(ArkUINodeHandle node, void* extraParam)
1338 {
1339     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1340     CHECK_NULL_VOID(frameNode);
1341     if (extraParam) {
1342         auto onItemDragStart = reinterpret_cast<OnItemDragStartFunc*>(extraParam);
1343         ListModelNG::SetOnItemDragStart(frameNode, std::move(*onItemDragStart));
1344     } else {
1345         ListModelNG::SetOnItemDragStart(frameNode, nullptr);
1346     }
1347 }
1348 
SetOnItemDragEnter(ArkUINodeHandle node,void * extraParam)1349 void SetOnItemDragEnter(ArkUINodeHandle node, void* extraParam)
1350 {
1351     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1352     CHECK_NULL_VOID(frameNode);
1353     if (extraParam) {
1354         auto onItemDragEnter = reinterpret_cast<OnItemDragEnterFunc*>(extraParam);
1355         ListModelNG::SetOnItemDragEnter(frameNode, std::move(*onItemDragEnter));
1356     } else {
1357         ListModelNG::SetOnItemDragEnter(frameNode, nullptr);
1358     }
1359 }
1360 
SetOnItemDragMove(ArkUINodeHandle node,void * extraParam)1361 void SetOnItemDragMove(ArkUINodeHandle node, void* extraParam)
1362 {
1363     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1364     CHECK_NULL_VOID(frameNode);
1365     if (extraParam) {
1366         auto onItemDragMove = reinterpret_cast<OnItemDragMoveFunc*>(extraParam);
1367         ListModelNG::SetOnItemDragMove(frameNode, std::move(*onItemDragMove));
1368     } else {
1369         ListModelNG::SetOnItemDragMove(frameNode, nullptr);
1370     }
1371 }
1372 
SetOnItemDragLeave(ArkUINodeHandle node,void * extraParam)1373 void SetOnItemDragLeave(ArkUINodeHandle node, void* extraParam)
1374 {
1375     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1376     CHECK_NULL_VOID(frameNode);
1377     if (extraParam) {
1378         auto onItemDragLeave = reinterpret_cast<OnItemDragLeaveFunc*>(extraParam);
1379         ListModelNG::SetOnItemDragLeave(frameNode, std::move(*onItemDragLeave));
1380     } else {
1381         ListModelNG::SetOnItemDragLeave(frameNode, nullptr);
1382     }
1383 }
1384 
SetOnItemDrop(ArkUINodeHandle node,void * extraParam)1385 void SetOnItemDrop(ArkUINodeHandle node, void* extraParam)
1386 {
1387     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1388     CHECK_NULL_VOID(frameNode);
1389     if (extraParam) {
1390         auto onItemDrop = reinterpret_cast<OnItemDropFunc*>(extraParam);
1391         ListModelNG::SetOnItemDrop(frameNode, std::move(*onItemDrop));
1392     } else {
1393         ListModelNG::SetOnItemDrop(frameNode, nullptr);
1394     }
1395 }
1396 
SetOnListScrollFrameBeginCallBack(ArkUINodeHandle node,void * extraParam)1397 void SetOnListScrollFrameBeginCallBack(ArkUINodeHandle node, void* extraParam)
1398 {
1399     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1400     CHECK_NULL_VOID(frameNode);
1401     if (extraParam) {
1402         auto onScrollFrameBegin = reinterpret_cast<OnScrollFrameBeginEvent*>(extraParam);
1403         ListModelNG::SetOnScrollFrameBegin(frameNode, std::move(*onScrollFrameBegin));
1404     } else {
1405         ListModelNG::SetOnScrollFrameBegin(frameNode, nullptr);
1406     }
1407 }
1408 
SetOnListWillScrollCallBack(ArkUINodeHandle node,void * extraParam)1409 void SetOnListWillScrollCallBack(ArkUINodeHandle node, void* extraParam)
1410 {
1411     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1412     CHECK_NULL_VOID(frameNode);
1413     if (extraParam) {
1414         auto onWillScroll = reinterpret_cast<OnWillScrollEvent*>(extraParam);
1415         ScrollableModelNG::SetOnWillScroll(frameNode, std::move(*onWillScroll));
1416     } else {
1417         ScrollableModelNG::SetOnWillScroll(frameNode, nullptr);
1418     }
1419 }
1420 
SetOnListDidScrollCallBack(ArkUINodeHandle node,void * extraParam)1421 void SetOnListDidScrollCallBack(ArkUINodeHandle node, void* extraParam)
1422 {
1423     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1424     CHECK_NULL_VOID(frameNode);
1425     if (extraParam) {
1426         auto onDidScroll = reinterpret_cast<OnScrollEvent*>(extraParam);
1427         ScrollableModelNG::SetOnDidScroll(frameNode, std::move(*onDidScroll));
1428     } else {
1429         ScrollableModelNG::SetOnDidScroll(frameNode, nullptr);
1430     }
1431 }
1432 
SetOnListReachStartCallBack(ArkUINodeHandle node,void * extraParam)1433 void SetOnListReachStartCallBack(ArkUINodeHandle node, void* extraParam)
1434 {
1435     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1436     CHECK_NULL_VOID(frameNode);
1437     if (extraParam) {
1438         auto onReachStart = reinterpret_cast<OnReachEvent*>(extraParam);
1439         ListModelNG::SetOnReachStart(frameNode, std::move(*onReachStart));
1440     } else {
1441         ListModelNG::SetOnReachStart(frameNode, nullptr);
1442     }
1443 }
1444 
SetOnListReachEndCallBack(ArkUINodeHandle node,void * extraParam)1445 void SetOnListReachEndCallBack(ArkUINodeHandle node, void* extraParam)
1446 {
1447     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1448     CHECK_NULL_VOID(frameNode);
1449     if (extraParam) {
1450         auto onReachEnd = reinterpret_cast<OnReachEvent*>(extraParam);
1451         ListModelNG::SetOnReachEnd(frameNode, std::move(*onReachEnd));
1452     } else {
1453         ListModelNG::SetOnReachEnd(frameNode, nullptr);
1454     }
1455 }
1456 
SetOnListScrollStartCallBack(ArkUINodeHandle node,void * extraParam)1457 void SetOnListScrollStartCallBack(ArkUINodeHandle node, void* extraParam)
1458 {
1459     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1460     CHECK_NULL_VOID(frameNode);
1461     if (extraParam) {
1462         auto onScrollStart = reinterpret_cast<OnScrollStartEvent*>(extraParam);
1463         ListModelNG::SetOnScrollStart(frameNode, std::move(*onScrollStart));
1464     } else {
1465         ListModelNG::SetOnScrollStart(frameNode, nullptr);
1466     }
1467 }
1468 
SetOnListScrollStopCallBack(ArkUINodeHandle node,void * extraParam)1469 void SetOnListScrollStopCallBack(ArkUINodeHandle node, void* extraParam)
1470 {
1471     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1472     CHECK_NULL_VOID(frameNode);
1473     if (extraParam) {
1474         auto onScrollStop = reinterpret_cast<OnScrollStopEvent*>(extraParam);
1475         ListModelNG::SetOnScrollStop(frameNode, std::move(*onScrollStop));
1476     } else {
1477         ListModelNG::SetOnScrollStop(frameNode, nullptr);
1478     }
1479 }
1480 
ResetOnListScroll(ArkUINodeHandle node)1481 void ResetOnListScroll(ArkUINodeHandle node)
1482 {
1483     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1484     CHECK_NULL_VOID(frameNode);
1485     ListModelNG::SetOnScroll(frameNode, nullptr);
1486 }
1487 
ResetOnListScrollIndex(ArkUINodeHandle node)1488 void ResetOnListScrollIndex(ArkUINodeHandle node)
1489 {
1490     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1491     CHECK_NULL_VOID(frameNode);
1492     ListModelNG::SetOnScrollIndex(frameNode, nullptr);
1493 }
1494 
ResetOnScrollVisibleContentChange(ArkUINodeHandle node)1495 void ResetOnScrollVisibleContentChange(ArkUINodeHandle node)
1496 {
1497     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1498     CHECK_NULL_VOID(frameNode);
1499     ListModelNG::SetOnScrollVisibleContentChange(frameNode, nullptr);
1500 }
1501 
ResetOnItemMove(ArkUINodeHandle node)1502 void ResetOnItemMove(ArkUINodeHandle node)
1503 {
1504     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1505     CHECK_NULL_VOID(frameNode);
1506     ListModelNG::SetOnItemMove(frameNode, nullptr);
1507 }
1508 
ResetOnItemDragStart(ArkUINodeHandle node)1509 void ResetOnItemDragStart(ArkUINodeHandle node)
1510 {
1511     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1512     CHECK_NULL_VOID(frameNode);
1513     ListModelNG::SetOnItemDragStart(frameNode, nullptr);
1514 }
1515 
ResetOnItemDragEnter(ArkUINodeHandle node)1516 void ResetOnItemDragEnter(ArkUINodeHandle node)
1517 {
1518     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1519     CHECK_NULL_VOID(frameNode);
1520     ListModelNG::SetOnItemDragEnter(frameNode, nullptr);
1521 }
1522 
ResetOnItemDragMove(ArkUINodeHandle node)1523 void ResetOnItemDragMove(ArkUINodeHandle node)
1524 {
1525     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1526     CHECK_NULL_VOID(frameNode);
1527     ListModelNG::SetOnItemDragMove(frameNode, nullptr);
1528 }
1529 
ResetOnItemDragLeave(ArkUINodeHandle node)1530 void ResetOnItemDragLeave(ArkUINodeHandle node)
1531 {
1532     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1533     CHECK_NULL_VOID(frameNode);
1534     ListModelNG::SetOnItemDragLeave(frameNode, nullptr);
1535 }
1536 
ResetOnItemDrop(ArkUINodeHandle node)1537 void ResetOnItemDrop(ArkUINodeHandle node)
1538 {
1539     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1540     CHECK_NULL_VOID(frameNode);
1541     ListModelNG::SetOnItemDrop(frameNode, nullptr);
1542 }
1543 
ResetOnListScrollStart(ArkUINodeHandle node)1544 void ResetOnListScrollStart(ArkUINodeHandle node)
1545 {
1546     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1547     CHECK_NULL_VOID(frameNode);
1548     ListModelNG::SetOnScrollStart(frameNode, nullptr);
1549 }
1550 
ResetOnListScrollStop(ArkUINodeHandle node)1551 void ResetOnListScrollStop(ArkUINodeHandle node)
1552 {
1553     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1554     CHECK_NULL_VOID(frameNode);
1555     ListModelNG::SetOnScrollStop(frameNode, nullptr);
1556 }
1557 
ResetOnListScrollFrameBegin(ArkUINodeHandle node)1558 void ResetOnListScrollFrameBegin(ArkUINodeHandle node)
1559 {
1560     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1561     CHECK_NULL_VOID(frameNode);
1562     ListModelNG::SetOnScrollFrameBegin(frameNode, nullptr);
1563 }
1564 
ResetOnListWillScroll(ArkUINodeHandle node)1565 void ResetOnListWillScroll(ArkUINodeHandle node)
1566 {
1567     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1568     CHECK_NULL_VOID(frameNode);
1569     ScrollableModelNG::SetOnWillScroll(frameNode, nullptr);
1570 }
1571 
ResetOnListDidScroll(ArkUINodeHandle node)1572 void ResetOnListDidScroll(ArkUINodeHandle node)
1573 {
1574     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1575     CHECK_NULL_VOID(frameNode);
1576     ScrollableModelNG::SetOnDidScroll(frameNode, nullptr);
1577 }
1578 
ResetOnListReachStart(ArkUINodeHandle node)1579 void ResetOnListReachStart(ArkUINodeHandle node)
1580 {
1581     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1582     CHECK_NULL_VOID(frameNode);
1583     ListModelNG::SetOnReachStart(frameNode, nullptr);
1584 }
1585 
ResetOnListReachEnd(ArkUINodeHandle node)1586 void ResetOnListReachEnd(ArkUINodeHandle node)
1587 {
1588     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1589     CHECK_NULL_VOID(frameNode);
1590     ListModelNG::SetOnReachEnd(frameNode, nullptr);
1591 }
1592 
CreateWithResourceObjFriction(ArkUINodeHandle node,void * resObj)1593 void CreateWithResourceObjFriction(ArkUINodeHandle node, void* resObj)
1594 {
1595     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1596     CHECK_NULL_VOID(frameNode);
1597     auto* resourceObj = reinterpret_cast<ResourceObject*>(resObj);
1598     ListModelNG::CreateWithResourceObjFriction(frameNode, AceType::Claim(resourceObj));
1599 }
1600 
ParseResObjDividerStrokeWidth(ArkUINodeHandle node,void * resObj)1601 void ParseResObjDividerStrokeWidth(ArkUINodeHandle node, void* resObj)
1602 {
1603     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1604     CHECK_NULL_VOID(frameNode);
1605     auto* resourceObj = reinterpret_cast<ResourceObject*>(resObj);
1606     ListModelNG::ParseResObjDividerStrokeWidth(frameNode, AceType::Claim(resourceObj));
1607 }
1608 
ParseResObjDividerColor(ArkUINodeHandle node,void * resObj)1609 void ParseResObjDividerColor(ArkUINodeHandle node, void* resObj)
1610 {
1611     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1612     CHECK_NULL_VOID(frameNode);
1613     auto* resourceObj = reinterpret_cast<ResourceObject*>(resObj);
1614     ListModelNG::ParseResObjDividerColor(frameNode, AceType::Claim(resourceObj));
1615     ListModelNG::SetDividerColorByUser(frameNode, false);
1616 }
1617 
ParseResObjDividerStartMargin(ArkUINodeHandle node,void * resObj)1618 void ParseResObjDividerStartMargin(ArkUINodeHandle node, void* resObj)
1619 {
1620     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1621     CHECK_NULL_VOID(frameNode);
1622     auto* resourceObj = reinterpret_cast<ResourceObject*>(resObj);
1623     ListModelNG::ParseResObjDividerStartMargin(frameNode, AceType::Claim(resourceObj));
1624 }
1625 
ParseResObjDividerEndMargin(ArkUINodeHandle node,void * resObj)1626 void ParseResObjDividerEndMargin(ArkUINodeHandle node, void* resObj)
1627 {
1628     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1629     CHECK_NULL_VOID(frameNode);
1630     auto* resourceObj = reinterpret_cast<ResourceObject*>(resObj);
1631     ListModelNG::ParseResObjDividerEndMargin(frameNode, AceType::Claim(resourceObj));
1632 }
1633 
CreateWithResourceObjLaneConstrain(ArkUINodeHandle node,void * resObjMinLengthValue,void * resObjMaxLengthValue)1634 void CreateWithResourceObjLaneConstrain(ArkUINodeHandle node, void* resObjMinLengthValue, void* resObjMaxLengthValue)
1635 {
1636     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1637     CHECK_NULL_VOID(frameNode);
1638     auto* resourcObjMinLengthValue = reinterpret_cast<ResourceObject*>(resObjMinLengthValue);
1639     auto* resourceObjMaxLengthValue = reinterpret_cast<ResourceObject*>(resObjMaxLengthValue);
1640     ListModelNG::CreateWithResourceObjLaneConstrain(
1641         frameNode, AceType::Claim(resourcObjMinLengthValue), AceType::Claim(resourceObjMaxLengthValue));
1642 }
1643 } // namespace NodeModifier
1644 } // namespace OHOS::Ace::NG
1645