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