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