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