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