1 /*
2 * Copyright (c) 2023-2025 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 "grid_modifier.h"
16
17 #include "core/components/scroll/scroll_bar_theme.h"
18 #include "core/components_ng/pattern/grid/grid_model_ng.h"
19 #include "core/components_ng/pattern/scrollable/scrollable_model_ng.h"
20 #include "core/interfaces/native/node/node_adapter_impl.h"
21
22 namespace OHOS::Ace::NG {
23 const std::string DEFAULT_ROWS_TEMPLATE = "1fr";
24 const std::string DEFAULT_COLUMNS_TEMPLATE = "1fr";
25 constexpr Dimension DEFAULT_COLUMNS_GAP = 0.0_fp;
26 constexpr Dimension DEFAULT_ROWS_GAP = 0.0_fp;
27 constexpr DisplayMode DEFAULT_SCROLL_BAR = DisplayMode::AUTO;
28 constexpr Dimension DEFAULT_SCROLL_BAR_WIDTH = 4.0_vp;
29 constexpr int32_t DEFAULT_CACHED_COUNT = 1;
30 constexpr bool DEFAULT_EDIT_MODE = false;
31 constexpr FlexDirection DEFAULT_LAYOUT_DIRECTION = FlexDirection::ROW;
32 constexpr int32_t DEFAULT_MAX_COUNT = Infinity<int32_t>();
33 constexpr int32_t DEFAULT_MIN_COUNT = 1;
34 constexpr int32_t DEFAULT_CELL_LENGTH = 0;
35 constexpr bool DEFAULT_MULTI_SELECTABLE = false;
36 constexpr bool DEFAULT_SUPPORT_ANIMATION = false;
37 constexpr Dimension DEFAULT_FADING_EDGE_LENGTH = Dimension(32.0f, DimensionUnit::VP); // default value
38 const float ERROR_FLOAT_CODE = -1.0f;
39 std::string g_strValue;
40
SetGridColumnsTemplate(ArkUINodeHandle node,const char * columnsTemplate)41 void SetGridColumnsTemplate(ArkUINodeHandle node, const char* columnsTemplate)
42 {
43 auto* frameNode = reinterpret_cast<FrameNode*>(node);
44 CHECK_NULL_VOID(frameNode);
45 GridModelNG::SetColumnsTemplate(frameNode, std::string(columnsTemplate));
46 }
47
ResetGridColumnsTemplate(ArkUINodeHandle node)48 void ResetGridColumnsTemplate(ArkUINodeHandle node)
49 {
50 auto* frameNode = reinterpret_cast<FrameNode*>(node);
51 CHECK_NULL_VOID(frameNode);
52 GridModelNG::SetColumnsTemplate(frameNode, DEFAULT_COLUMNS_TEMPLATE);
53 }
SetGridRowsTemplate(ArkUINodeHandle node,const char * rowsTemplate)54 void SetGridRowsTemplate(ArkUINodeHandle node, const char* rowsTemplate)
55 {
56 auto* frameNode = reinterpret_cast<FrameNode*>(node);
57 CHECK_NULL_VOID(frameNode);
58 GridModelNG::SetRowsTemplate(frameNode, std::string(rowsTemplate));
59 }
60
ResetGridRowsTemplate(ArkUINodeHandle node)61 void ResetGridRowsTemplate(ArkUINodeHandle node)
62 {
63 auto* frameNode = reinterpret_cast<FrameNode*>(node);
64 CHECK_NULL_VOID(frameNode);
65 GridModelNG::SetRowsTemplate(frameNode, DEFAULT_ROWS_TEMPLATE);
66 }
SetGridColumnsGap(ArkUINodeHandle node,const struct ArkUIResourceLength * columnsGap)67 void SetGridColumnsGap(ArkUINodeHandle node, const struct ArkUIResourceLength* columnsGap)
68 {
69 auto* frameNode = reinterpret_cast<FrameNode*>(node);
70 CHECK_NULL_VOID(frameNode);
71 auto unitEnum = static_cast<OHOS::Ace::DimensionUnit>(columnsGap->unit);
72 Dimension gap;
73 if (unitEnum == DimensionUnit::CALC) {
74 gap = CalcDimension(columnsGap->string, DimensionUnit::CALC);
75 } else {
76 gap = CalcDimension(columnsGap->value, unitEnum);
77 }
78 if (LessOrEqual(gap.Value(), 0.0)) {
79 gap = 0.0_px;
80 }
81 GridModelNG::SetColumnsGap(frameNode, gap);
82 }
83
ResetGridColumnsGap(ArkUINodeHandle node)84 void ResetGridColumnsGap(ArkUINodeHandle node)
85 {
86 auto* frameNode = reinterpret_cast<FrameNode*>(node);
87 CHECK_NULL_VOID(frameNode);
88 GridModelNG::SetColumnsGap(frameNode, DEFAULT_COLUMNS_GAP);
89 }
90
SetGridRowsGap(ArkUINodeHandle node,const struct ArkUIResourceLength * rowsGap)91 void SetGridRowsGap(ArkUINodeHandle node, const struct ArkUIResourceLength* rowsGap)
92 {
93 auto* frameNode = reinterpret_cast<FrameNode*>(node);
94 CHECK_NULL_VOID(frameNode);
95 auto unitEnum = static_cast<OHOS::Ace::DimensionUnit>(rowsGap->unit);
96 Dimension gap;
97 if (unitEnum == DimensionUnit::CALC) {
98 gap = CalcDimension(rowsGap->string, DimensionUnit::CALC);
99 } else {
100 gap = CalcDimension(rowsGap->value, unitEnum);
101 }
102 if (LessOrEqual(gap.Value(), 0.0)) {
103 gap = 0.0_px;
104 }
105 GridModelNG::SetRowsGap(frameNode, gap);
106 }
107
ResetGridRowsGap(ArkUINodeHandle node)108 void ResetGridRowsGap(ArkUINodeHandle node)
109 {
110 auto* frameNode = reinterpret_cast<FrameNode*>(node);
111 CHECK_NULL_VOID(frameNode);
112 GridModelNG::SetRowsGap(frameNode, DEFAULT_ROWS_GAP);
113 }
114
SetGridScrollBar(ArkUINodeHandle node,int32_t scrollBar)115 void SetGridScrollBar(ArkUINodeHandle node, int32_t scrollBar)
116 {
117 auto* frameNode = reinterpret_cast<FrameNode*>(node);
118 CHECK_NULL_VOID(frameNode);
119 DisplayMode mode = static_cast<DisplayMode>(scrollBar);
120 GridModelNG::SetScrollBarMode(frameNode, mode);
121 }
122
ResetGridScrollBar(ArkUINodeHandle node)123 void ResetGridScrollBar(ArkUINodeHandle node)
124 {
125 auto* frameNode = reinterpret_cast<FrameNode*>(node);
126 CHECK_NULL_VOID(frameNode);
127 GridModelNG::SetScrollBarMode(frameNode, DEFAULT_SCROLL_BAR);
128 }
129
SetGridScrollBarWidth(ArkUINodeHandle node,ArkUI_Float32 value,int32_t unit)130 void SetGridScrollBarWidth(ArkUINodeHandle node, ArkUI_Float32 value, int32_t unit)
131 {
132 auto* frameNode = reinterpret_cast<FrameNode*>(node);
133 CHECK_NULL_VOID(frameNode);
134 Dimension scrollBarWidth = Dimension(value, static_cast<OHOS::Ace::DimensionUnit>(unit));
135 GridModelNG::SetScrollBarWidth(frameNode, scrollBarWidth);
136 }
137
ResetGridScrollBarWidth(ArkUINodeHandle node)138 void ResetGridScrollBarWidth(ArkUINodeHandle node)
139 {
140 auto* frameNode = reinterpret_cast<FrameNode*>(node);
141 CHECK_NULL_VOID(frameNode);
142 GridModelNG::SetScrollBarWidth(frameNode, DEFAULT_SCROLL_BAR_WIDTH);
143 }
144
SetGridScrollBarColor(ArkUINodeHandle node,uint32_t scrollBarColor)145 void SetGridScrollBarColor(ArkUINodeHandle node, uint32_t scrollBarColor)
146 {
147 auto* frameNode = reinterpret_cast<FrameNode*>(node);
148 CHECK_NULL_VOID(frameNode);
149 GridModelNG::SetScrollBarColor(frameNode, Color(scrollBarColor));
150 }
151
ResetGridScrollBarColor(ArkUINodeHandle node)152 void ResetGridScrollBarColor(ArkUINodeHandle node)
153 {
154 auto* frameNode = reinterpret_cast<FrameNode*>(node);
155 CHECK_NULL_VOID(frameNode);
156 auto* context = frameNode->GetContext();
157 CHECK_NULL_VOID(context);
158 auto themeManager = context->GetThemeManager();
159 CHECK_NULL_VOID(themeManager);
160 auto scrollBarTheme = themeManager->GetTheme<ScrollBarTheme>();
161 GridModelNG::SetScrollBarColor(frameNode, scrollBarTheme->GetForegroundColor());
162 }
163
SetGridCachedCount(ArkUINodeHandle node,int32_t cachedCount)164 void SetGridCachedCount(ArkUINodeHandle node, int32_t cachedCount)
165 {
166 auto* frameNode = reinterpret_cast<FrameNode*>(node);
167 CHECK_NULL_VOID(frameNode);
168 GridModelNG::SetCachedCount(frameNode, cachedCount);
169 }
170
ResetGridCachedCount(ArkUINodeHandle node)171 void ResetGridCachedCount(ArkUINodeHandle node)
172 {
173 auto* frameNode = reinterpret_cast<FrameNode*>(node);
174 CHECK_NULL_VOID(frameNode);
175 GridModelNG::SetCachedCount(frameNode, DEFAULT_CACHED_COUNT);
176 }
177
SetGridEditMode(ArkUINodeHandle node,ArkUI_Bool editMode)178 void SetGridEditMode(ArkUINodeHandle node, ArkUI_Bool editMode)
179 {
180 auto* frameNode = reinterpret_cast<FrameNode*>(node);
181 CHECK_NULL_VOID(frameNode);
182 GridModelNG::SetEditable(frameNode, editMode);
183 }
184
ResetGridEditMode(ArkUINodeHandle node)185 void ResetGridEditMode(ArkUINodeHandle node)
186 {
187 auto* frameNode = reinterpret_cast<FrameNode*>(node);
188 CHECK_NULL_VOID(frameNode);
189 GridModelNG::SetEditable(frameNode, DEFAULT_EDIT_MODE);
190 }
191
SetGridMultiSelectable(ArkUINodeHandle node,ArkUI_Bool multiSelectable)192 void SetGridMultiSelectable(ArkUINodeHandle node, ArkUI_Bool multiSelectable)
193 {
194 auto* frameNode = reinterpret_cast<FrameNode*>(node);
195 CHECK_NULL_VOID(frameNode);
196 GridModelNG::SetMultiSelectable(frameNode, multiSelectable);
197 }
198
ResetGridMultiSelectable(ArkUINodeHandle node)199 void ResetGridMultiSelectable(ArkUINodeHandle node)
200 {
201 auto* frameNode = reinterpret_cast<FrameNode*>(node);
202 CHECK_NULL_VOID(frameNode);
203 GridModelNG::SetMultiSelectable(frameNode, DEFAULT_MULTI_SELECTABLE);
204 }
205
SetGridMaxCount(ArkUINodeHandle node,int32_t maxCount)206 void SetGridMaxCount(ArkUINodeHandle node, int32_t maxCount)
207 {
208 auto* frameNode = reinterpret_cast<FrameNode*>(node);
209 CHECK_NULL_VOID(frameNode);
210 GridModelNG::SetMaxCount(frameNode, maxCount);
211 }
212
ResetGridMaxCount(ArkUINodeHandle node)213 void ResetGridMaxCount(ArkUINodeHandle node)
214 {
215 auto* frameNode = reinterpret_cast<FrameNode*>(node);
216 CHECK_NULL_VOID(frameNode);
217 GridModelNG::SetMaxCount(frameNode, DEFAULT_MAX_COUNT);
218 }
219
SetGridMinCount(ArkUINodeHandle node,int32_t minCount)220 void SetGridMinCount(ArkUINodeHandle node, int32_t minCount)
221 {
222 auto* frameNode = reinterpret_cast<FrameNode*>(node);
223 CHECK_NULL_VOID(frameNode);
224 GridModelNG::SetMinCount(frameNode, minCount);
225 }
226
ResetGridMinCount(ArkUINodeHandle node)227 void ResetGridMinCount(ArkUINodeHandle node)
228 {
229 auto* frameNode = reinterpret_cast<FrameNode*>(node);
230 CHECK_NULL_VOID(frameNode);
231 GridModelNG::SetMinCount(frameNode, DEFAULT_MIN_COUNT);
232 }
233
SetGridCellLength(ArkUINodeHandle node,int32_t cellLength)234 void SetGridCellLength(ArkUINodeHandle node, int32_t cellLength)
235 {
236 auto* frameNode = reinterpret_cast<FrameNode*>(node);
237 CHECK_NULL_VOID(frameNode);
238 GridModelNG::SetCellLength(frameNode, cellLength);
239 }
240
ResetGridCellLength(ArkUINodeHandle node)241 void ResetGridCellLength(ArkUINodeHandle node)
242 {
243 auto* frameNode = reinterpret_cast<FrameNode*>(node);
244 CHECK_NULL_VOID(frameNode);
245 GridModelNG::SetCellLength(frameNode, DEFAULT_CELL_LENGTH);
246 }
247
SetGridLayoutDirection(ArkUINodeHandle node,int32_t layoutDirection)248 void SetGridLayoutDirection(ArkUINodeHandle node, int32_t layoutDirection)
249 {
250 auto* frameNode = reinterpret_cast<FrameNode*>(node);
251 CHECK_NULL_VOID(frameNode);
252 FlexDirection direction = static_cast<FlexDirection>(layoutDirection);
253 GridModelNG::SetLayoutDirection(frameNode, direction);
254 }
255
ResetGridLayoutDirection(ArkUINodeHandle node)256 void ResetGridLayoutDirection(ArkUINodeHandle node)
257 {
258 auto* frameNode = reinterpret_cast<FrameNode*>(node);
259 CHECK_NULL_VOID(frameNode);
260 GridModelNG::SetLayoutDirection(frameNode, DEFAULT_LAYOUT_DIRECTION);
261 }
262
SetGridSupportAnimation(ArkUINodeHandle node,ArkUI_Bool supportAnimation)263 void SetGridSupportAnimation(ArkUINodeHandle node, ArkUI_Bool supportAnimation)
264 {
265 auto* frameNode = reinterpret_cast<FrameNode*>(node);
266 CHECK_NULL_VOID(frameNode);
267 GridModelNG::SetSupportAnimation(frameNode, supportAnimation);
268 }
269
ResetGridSupportAnimation(ArkUINodeHandle node)270 void ResetGridSupportAnimation(ArkUINodeHandle node)
271 {
272 auto* frameNode = reinterpret_cast<FrameNode*>(node);
273 CHECK_NULL_VOID(frameNode);
274 GridModelNG::SetSupportAnimation(frameNode, DEFAULT_SUPPORT_ANIMATION);
275 }
276
SetEdgeEffect(ArkUINodeHandle node,int32_t edgeEffect,ArkUI_Bool alwaysEnabled,ArkUI_Int32 edge)277 void SetEdgeEffect(ArkUINodeHandle node, int32_t edgeEffect, ArkUI_Bool alwaysEnabled, ArkUI_Int32 edge)
278 {
279 auto* frameNode = reinterpret_cast<FrameNode*>(node);
280 CHECK_NULL_VOID(frameNode);
281 GridModelNG::SetEdgeEffect(
282 frameNode, static_cast<EdgeEffect>(edgeEffect), alwaysEnabled, static_cast<EffectEdge>(edge));
283 }
284
ResetEdgeEffect(ArkUINodeHandle node)285 void ResetEdgeEffect(ArkUINodeHandle node)
286 {
287 auto* frameNode = reinterpret_cast<FrameNode*>(node);
288 CHECK_NULL_VOID(frameNode);
289 EdgeEffect edgeEffect = EdgeEffect::NONE;
290 ArkUI_Bool alwaysEnabled = false;
291 GridModelNG::SetEdgeEffect(frameNode, edgeEffect, alwaysEnabled, EffectEdge::ALL);
292 }
293
SetNestedScroll(ArkUINodeHandle node,int32_t forward,int32_t backward)294 void SetNestedScroll(ArkUINodeHandle node, int32_t forward, int32_t backward)
295 {
296 NestedScrollOptions opt = {
297 .forward = static_cast<NestedScrollMode>(forward),
298 .backward = static_cast<NestedScrollMode>(backward),
299 };
300 auto* frameNode = reinterpret_cast<FrameNode*>(node);
301 CHECK_NULL_VOID(frameNode);
302 GridModelNG::SetNestedScroll(frameNode, opt);
303 }
304
ResetNestedScroll(ArkUINodeHandle node)305 void ResetNestedScroll(ArkUINodeHandle node)
306 {
307 auto* frameNode = reinterpret_cast<FrameNode*>(node);
308 CHECK_NULL_VOID(frameNode);
309 const NestedScrollOptions nestedOpt = {
310 .forward = NestedScrollMode::SELF_ONLY,
311 .backward = NestedScrollMode::SELF_ONLY,
312 };
313 GridModelNG::SetNestedScroll(frameNode, nestedOpt);
314 }
315
SetEnableScroll(ArkUINodeHandle node,ArkUI_Bool ScrollEnabled)316 void SetEnableScroll(ArkUINodeHandle node, ArkUI_Bool ScrollEnabled)
317 {
318 auto* frameNode = reinterpret_cast<FrameNode*>(node);
319 CHECK_NULL_VOID(frameNode);
320 GridModelNG::SetScrollEnabled(frameNode, ScrollEnabled);
321 }
322
ResetEnableScroll(ArkUINodeHandle node)323 void ResetEnableScroll(ArkUINodeHandle node)
324 {
325 auto* frameNode = reinterpret_cast<FrameNode*>(node);
326 CHECK_NULL_VOID(frameNode);
327 ArkUI_Bool scrollEnabled = true;
328 GridModelNG::SetScrollEnabled(frameNode, scrollEnabled);
329 }
330
SetFriction(ArkUINodeHandle node,ArkUI_Float32 friction)331 void SetFriction(ArkUINodeHandle node, ArkUI_Float32 friction)
332 {
333 auto* frameNode = reinterpret_cast<FrameNode*>(node);
334 CHECK_NULL_VOID(frameNode);
335 GridModelNG::SetFriction(frameNode, friction);
336 }
337
ResetFriction(ArkUINodeHandle node)338 void ResetFriction(ArkUINodeHandle node)
339 {
340 auto* frameNode = reinterpret_cast<FrameNode*>(node);
341 CHECK_NULL_VOID(frameNode);
342 ArkUI_Float32 friction = -1.0;
343 GridModelNG::SetFriction(frameNode, friction);
344 }
345
SetGridFocusWrapMode(ArkUINodeHandle node,int32_t focusWrapMode)346 void SetGridFocusWrapMode(ArkUINodeHandle node, int32_t focusWrapMode)
347 {
348 auto* frameNode = reinterpret_cast<FrameNode*>(node);
349 CHECK_NULL_VOID(frameNode);
350 FocusWrapMode mode = static_cast<FocusWrapMode>(focusWrapMode);
351 GridModelNG::SetFocusWrapMode(frameNode, mode);
352 }
353
ResetGridFocusWrapMode(ArkUINodeHandle node)354 void ResetGridFocusWrapMode(ArkUINodeHandle node)
355 {
356 auto* frameNode = reinterpret_cast<FrameNode*>(node);
357 CHECK_NULL_VOID(frameNode);
358 GridModelNG::SetFocusWrapMode(frameNode, FocusWrapMode::DEFAULT);
359 }
360
GetGridFocusWrapMode(ArkUINodeHandle node)361 ArkUI_Int32 GetGridFocusWrapMode(ArkUINodeHandle node)
362 {
363 auto* frameNode = reinterpret_cast<FrameNode*>(node);
364 CHECK_NULL_RETURN(frameNode, 0);
365 return static_cast<int32_t>(GridModelNG::GetFocusWrapMode(frameNode));
366 }
367
SetFlingSpeedLimit(ArkUINodeHandle node,ArkUI_Float32 flingSpeedLimit)368 void SetFlingSpeedLimit(ArkUINodeHandle node, ArkUI_Float32 flingSpeedLimit)
369 {
370 auto* frameNode = reinterpret_cast<FrameNode*>(node);
371 CHECK_NULL_VOID(frameNode);
372 ScrollableModelNG::SetMaxFlingSpeed(frameNode, flingSpeedLimit);
373 }
374
ResetFlingSpeedLimit(ArkUINodeHandle node)375 void ResetFlingSpeedLimit(ArkUINodeHandle node)
376 {
377 auto* frameNode = reinterpret_cast<FrameNode*>(node);
378 CHECK_NULL_VOID(frameNode);
379 ArkUI_Float32 flingSpeedLimit = -1.0;
380 ScrollableModelNG::SetMaxFlingSpeed(frameNode, flingSpeedLimit);
381 }
382
SetGridAlignItems(ArkUINodeHandle node,int32_t alignItems)383 void SetGridAlignItems(ArkUINodeHandle node, int32_t alignItems)
384 {
385 auto* frameNode = reinterpret_cast<FrameNode*>(node);
386 CHECK_NULL_VOID(frameNode);
387 GridModelNG::SetAlignItems(frameNode, static_cast<GridItemAlignment>(alignItems));
388 }
389
ResetGridAlignItems(ArkUINodeHandle node)390 void ResetGridAlignItems(ArkUINodeHandle node)
391 {
392 auto* frameNode = reinterpret_cast<FrameNode*>(node);
393 CHECK_NULL_VOID(frameNode);
394 GridModelNG::SetAlignItems(frameNode, GridItemAlignment::DEFAULT);
395 }
396
SetGridSyncLoad(ArkUINodeHandle node,ArkUI_Bool syncLoad)397 void SetGridSyncLoad(ArkUINodeHandle node, ArkUI_Bool syncLoad)
398 {
399 auto* frameNode = reinterpret_cast<FrameNode*>(node);
400 CHECK_NULL_VOID(frameNode);
401 GridModelNG::SetSyncLoad(frameNode, syncLoad);
402 }
403
ResetGridSyncLoad(ArkUINodeHandle node)404 void ResetGridSyncLoad(ArkUINodeHandle node)
405 {
406 auto* frameNode = reinterpret_cast<FrameNode*>(node);
407 CHECK_NULL_VOID(frameNode);
408 GridModelNG::SetSyncLoad(frameNode, true);
409 }
410
GetGridSyncLoad(ArkUINodeHandle node)411 ArkUI_Bool GetGridSyncLoad(ArkUINodeHandle node)
412 {
413 auto* frameNode = reinterpret_cast<FrameNode*>(node);
414 CHECK_NULL_RETURN(frameNode, 1);
415 return GridModelNG::GetSyncLoad(frameNode);
416 }
417
GetColumnsTemplate(ArkUINodeHandle node)418 ArkUI_CharPtr GetColumnsTemplate(ArkUINodeHandle node)
419 {
420 auto* frameNode = reinterpret_cast<FrameNode*>(node);
421 CHECK_NULL_RETURN(frameNode, nullptr);
422 g_strValue = GridModelNG::GetColumnsTemplate(frameNode);
423 return g_strValue.c_str();
424 }
425
GetRowsTemplate(ArkUINodeHandle node)426 ArkUI_CharPtr GetRowsTemplate(ArkUINodeHandle node)
427 {
428 auto* frameNode = reinterpret_cast<FrameNode*>(node);
429 CHECK_NULL_RETURN(frameNode, nullptr);
430 g_strValue = GridModelNG::GetRowsTemplate(frameNode);
431 return g_strValue.c_str();
432 }
433
GetColumnsGap(ArkUINodeHandle node)434 ArkUI_Float32 GetColumnsGap(ArkUINodeHandle node)
435 {
436 auto* frameNode = reinterpret_cast<FrameNode*>(node);
437 CHECK_NULL_RETURN(frameNode, ERROR_FLOAT_CODE);
438 return GridModelNG::GetColumnsGap(frameNode);
439 }
440
GetRowsGap(ArkUINodeHandle node)441 ArkUI_Float32 GetRowsGap(ArkUINodeHandle node)
442 {
443 auto* frameNode = reinterpret_cast<FrameNode*>(node);
444 CHECK_NULL_RETURN(frameNode, ERROR_FLOAT_CODE);
445 return GridModelNG::GetRowsGap(frameNode);
446 }
447
SetNodeAdapter(ArkUINodeHandle node,ArkUINodeAdapterHandle handle)448 ArkUI_Int32 SetNodeAdapter(ArkUINodeHandle node, ArkUINodeAdapterHandle handle)
449 {
450 auto* frameNode = reinterpret_cast<FrameNode*>(node);
451 CHECK_NULL_RETURN(frameNode, ERROR_CODE_PARAM_INVALID);
452 auto totalChildCount = frameNode->TotalChildCount();
453 if (totalChildCount > 0) {
454 return ERROR_CODE_NATIVE_IMPL_NODE_ADAPTER_CHILD_NODE_EXIST;
455 }
456 NodeAdapter::GetNodeAdapterAPI()->attachHostNode(handle, node);
457 return ERROR_CODE_NO_ERROR;
458 }
459
ResetNodeAdapter(ArkUINodeHandle node)460 void ResetNodeAdapter(ArkUINodeHandle node)
461 {
462 NodeAdapter::GetNodeAdapterAPI()->detachHostNode(node);
463 }
464
GetNodeAdapter(ArkUINodeHandle node)465 ArkUINodeAdapterHandle GetNodeAdapter(ArkUINodeHandle node)
466 {
467 return NodeAdapter::GetNodeAdapterAPI()->getNodeAdapter(node);
468 }
469
SetCachedCount(ArkUINodeHandle node,ArkUI_Int32 cachedCount)470 void SetCachedCount(ArkUINodeHandle node, ArkUI_Int32 cachedCount)
471 {
472 auto* frameNode = reinterpret_cast<FrameNode*>(node);
473 CHECK_NULL_VOID(frameNode);
474 GridModelNG::SetCachedCount(frameNode, cachedCount);
475 }
476
ResetCachedCount(ArkUINodeHandle node)477 void ResetCachedCount(ArkUINodeHandle node)
478 {
479 auto* frameNode = reinterpret_cast<FrameNode*>(node);
480 CHECK_NULL_VOID(frameNode);
481 GridModelNG::SetCachedCount(frameNode, 1);
482 }
483
GetCachedCount(ArkUINodeHandle node)484 ArkUI_Int32 GetCachedCount(ArkUINodeHandle node)
485 {
486 auto* frameNode = reinterpret_cast<FrameNode*>(node);
487 CHECK_NULL_RETURN(frameNode, 1);
488 return GridModelNG::GetCachedCount(frameNode);
489 }
490
SetShowCached(ArkUINodeHandle node,ArkUI_Bool show)491 void SetShowCached(ArkUINodeHandle node, ArkUI_Bool show)
492 {
493 auto* frameNode = reinterpret_cast<FrameNode*>(node);
494 CHECK_NULL_VOID(frameNode);
495 GridModelNG::SetShowCached(frameNode, show);
496 }
497
ResetShowCached(ArkUINodeHandle node)498 void ResetShowCached(ArkUINodeHandle node)
499 {
500 auto* frameNode = reinterpret_cast<FrameNode*>(node);
501 CHECK_NULL_VOID(frameNode);
502 GridModelNG::SetShowCached(frameNode, false);
503 }
504
GetShowCached(ArkUINodeHandle node)505 ArkUI_Bool GetShowCached(ArkUINodeHandle node)
506 {
507 auto* frameNode = reinterpret_cast<FrameNode*>(node);
508 CHECK_NULL_RETURN(frameNode, false);
509 return GridModelNG::GetShowCached(frameNode);
510 }
511
SetGridFadingEdge(ArkUINodeHandle node,ArkUI_Bool fadingEdge,ArkUI_Float32 fadingEdgeLengthValue,ArkUI_Int32 fadingEdgeLengthUnit)512 void SetGridFadingEdge(
513 ArkUINodeHandle node, ArkUI_Bool fadingEdge, ArkUI_Float32 fadingEdgeLengthValue, ArkUI_Int32 fadingEdgeLengthUnit)
514 {
515 auto* frameNode = reinterpret_cast<FrameNode*>(node);
516 CHECK_NULL_VOID(frameNode);
517 Dimension fadingEdgeLengthDimension =
518 Dimension(fadingEdgeLengthValue, static_cast<OHOS::Ace::DimensionUnit>(fadingEdgeLengthUnit));
519 NG::ScrollableModelNG::SetFadingEdge(frameNode, fadingEdge, fadingEdgeLengthDimension);
520 }
521
ResetGridFadingEdge(ArkUINodeHandle node)522 void ResetGridFadingEdge(ArkUINodeHandle node)
523 {
524 auto* frameNode = reinterpret_cast<FrameNode*>(node);
525 CHECK_NULL_VOID(frameNode);
526 NG::ScrollableModelNG::SetFadingEdge(frameNode, false, DEFAULT_FADING_EDGE_LENGTH);
527 }
528
529 namespace NodeModifier {
GetGridModifier()530 const ArkUIGridModifier* GetGridModifier()
531 {
532 CHECK_INITIALIZED_FIELDS_BEGIN(); // don't move this line
533 static const ArkUIGridModifier modifier = {
534 .setGridColumnsTemplate = SetGridColumnsTemplate,
535 .resetGridColumnsTemplate = ResetGridColumnsTemplate,
536 .setGridRowsTemplate = SetGridRowsTemplate,
537 .resetGridRowsTemplate = ResetGridRowsTemplate,
538 .setGridColumnsGap = SetGridColumnsGap,
539 .resetGridColumnsGap = ResetGridColumnsGap,
540 .setGridRowsGap = SetGridRowsGap,
541 .resetGridRowsGap = ResetGridRowsGap,
542 .setGridScrollBar = SetGridScrollBar,
543 .resetGridScrollBar = ResetGridScrollBar,
544 .setGridScrollBarWidth = SetGridScrollBarWidth,
545 .resetGridScrollBarWidth = ResetGridScrollBarWidth,
546 .setGridScrollBarColor = SetGridScrollBarColor,
547 .resetGridScrollBarColor = ResetGridScrollBarColor,
548 .setGridCachedCount = SetGridCachedCount,
549 .resetGridCachedCount = ResetGridCachedCount,
550 .setShowCached = SetShowCached,
551 .resetShowCached = ResetShowCached,
552 .getShowCached = GetShowCached,
553 .setGridEditMode = SetGridEditMode,
554 .resetGridEditMode = ResetGridEditMode,
555 .setGridMultiSelectable = SetGridMultiSelectable,
556 .resetGridMultiSelectable = ResetGridMultiSelectable,
557 .setGridMaxCount = SetGridMaxCount,
558 .resetGridMaxCount = ResetGridMaxCount,
559 .setGridMinCount = SetGridMinCount,
560 .resetGridMinCount = ResetGridMinCount,
561 .setGridCellLength = SetGridCellLength,
562 .resetGridCellLength = ResetGridCellLength,
563 .setGridLayoutDirection = SetGridLayoutDirection,
564 .resetGridLayoutDirection = ResetGridLayoutDirection,
565 .setGridSupportAnimation = SetGridSupportAnimation,
566 .resetGridSupportAnimation = ResetGridSupportAnimation,
567 .setEdgeEffect = SetEdgeEffect,
568 .resetEdgeEffect = ResetEdgeEffect,
569 .setNestedScroll = SetNestedScroll,
570 .resetNestedScroll = ResetNestedScroll,
571 .setEnableScroll = SetEnableScroll,
572 .resetEnableScroll = ResetEnableScroll,
573 .setFriction = SetFriction,
574 .resetFriction = ResetFriction,
575 .setGridFocusWrapMode = SetGridFocusWrapMode,
576 .resetGridFocusWrapMode = ResetGridFocusWrapMode,
577 .getGridFocusWrapMode = GetGridFocusWrapMode,
578 .getGridColumnsTemplate = GetColumnsTemplate,
579 .getGridRowsTemplate = GetRowsTemplate,
580 .getGridColumnsGap = GetColumnsGap,
581 .getGridRowsGap = GetRowsGap,
582 .setNodeAdapter = SetNodeAdapter,
583 .resetNodeAdapter = ResetNodeAdapter,
584 .getNodeAdapter = GetNodeAdapter,
585 .setCachedCount = SetCachedCount,
586 .resetCachedCount = ResetCachedCount,
587 .getCachedCount = GetCachedCount,
588 .setGridAlignItems = SetGridAlignItems,
589 .resetGridAlignItems = ResetGridAlignItems,
590 .setSyncLoad = SetGridSyncLoad,
591 .resetSyncLoad = ResetGridSyncLoad,
592 .getSyncLoad = GetGridSyncLoad,
593 .setGridFadingEdge = SetGridFadingEdge,
594 .resetGridFadingEdge = ResetGridFadingEdge,
595 .setOnGridScrollIndexCallBack = SetOnGridScrollIndexCallBack,
596 .resetOnGridScrollIndex = ResetOnGridScrollIndex,
597 .setOnGridScrollBarUpdateCallBack = SetOnGridScrollBarUpdateCallBack,
598 .resetOnGridScrollBarUpdate = ResetOnGridScrollBarUpdate,
599 .setOnGridItemDragStart = SetOnGridItemDragStart,
600 .resetOnGridItemDragStart = ResetOnGridItemDragStart,
601 .setOnGridItemDragEnter = SetOnGridItemDragEnter,
602 .resetOnGridItemDragEnter = ResetOnGridItemDragEnter,
603 .setOnGridItemDragMove = SetOnGridItemDragMove,
604 .resetOnGridItemDragMove = ResetOnGridItemDragMove,
605 .setOnGridItemDragLeave = SetOnGridItemDragLeave,
606 .resetOnGridItemDragLeave = ResetOnGridItemDragLeave,
607 .setOnGridItemDrop = SetOnGridItemDrop,
608 .resetOnGridItemDrop = ResetOnGridItemDrop,
609 .createWithResourceObjFriction = CreateWithResourceObjGridFriction,
610 .createWithResourceObjScrollBarColor = CreateWithResourceObjGridScrollBarColor,
611 };
612 CHECK_INITIALIZED_FIELDS_END(modifier, 0, 0, 0); // don't move this line
613 return &modifier;
614 }
615
GetCJUIGridModifier()616 const CJUIGridModifier* GetCJUIGridModifier()
617 {
618 CHECK_INITIALIZED_FIELDS_BEGIN(); // don't move this line
619 static const CJUIGridModifier modifier = {
620 .setGridColumnsTemplate = SetGridColumnsTemplate,
621 .resetGridColumnsTemplate = ResetGridColumnsTemplate,
622 .setGridRowsTemplate = SetGridRowsTemplate,
623 .resetGridRowsTemplate = ResetGridRowsTemplate,
624 .setGridColumnsGap = SetGridColumnsGap,
625 .resetGridColumnsGap = ResetGridColumnsGap,
626 .setGridRowsGap = SetGridRowsGap,
627 .resetGridRowsGap = ResetGridRowsGap,
628 .setGridScrollBar = SetGridScrollBar,
629 .resetGridScrollBar = ResetGridScrollBar,
630 .setGridScrollBarWidth = SetGridScrollBarWidth,
631 .resetGridScrollBarWidth = ResetGridScrollBarWidth,
632 .setGridScrollBarColor = SetGridScrollBarColor,
633 .resetGridScrollBarColor = ResetGridScrollBarColor,
634 .setGridCachedCount = SetGridCachedCount,
635 .resetGridCachedCount = ResetGridCachedCount,
636 .setGridEditMode = SetGridEditMode,
637 .resetGridEditMode = ResetGridEditMode,
638 .setGridMultiSelectable = SetGridMultiSelectable,
639 .resetGridMultiSelectable = ResetGridMultiSelectable,
640 .setGridMaxCount = SetGridMaxCount,
641 .resetGridMaxCount = ResetGridMaxCount,
642 .setGridMinCount = SetGridMinCount,
643 .resetGridMinCount = ResetGridMinCount,
644 .setGridCellLength = SetGridCellLength,
645 .resetGridCellLength = ResetGridCellLength,
646 .setGridLayoutDirection = SetGridLayoutDirection,
647 .resetGridLayoutDirection = ResetGridLayoutDirection,
648 .setGridSupportAnimation = SetGridSupportAnimation,
649 .resetGridSupportAnimation = ResetGridSupportAnimation,
650 .setEdgeEffect = SetEdgeEffect,
651 .resetEdgeEffect = ResetEdgeEffect,
652 .setNestedScroll = SetNestedScroll,
653 .resetNestedScroll = ResetNestedScroll,
654 .setEnableScroll = SetEnableScroll,
655 .resetEnableScroll = ResetEnableScroll,
656 .setFriction = SetFriction,
657 .resetFriction = ResetFriction,
658 .setGridFocusWrapMode = SetGridFocusWrapMode,
659 .resetGridFocusWrapMode = ResetGridFocusWrapMode,
660 .getGridFocusWrapMode = GetGridFocusWrapMode,
661 .getGridColumnsTemplate = GetColumnsTemplate,
662 .getGridRowsTemplate = GetRowsTemplate,
663 .getGridColumnsGap = GetColumnsGap,
664 .getGridRowsGap = GetRowsGap,
665 .setNodeAdapter = SetNodeAdapter,
666 .resetNodeAdapter = ResetNodeAdapter,
667 .getNodeAdapter = GetNodeAdapter,
668 .setCachedCount = SetCachedCount,
669 .resetCachedCount = ResetCachedCount,
670 .getCachedCount = GetCachedCount,
671 .setFlingSpeedLimit = SetFlingSpeedLimit,
672 .resetFlingSpeedLimit = ResetFlingSpeedLimit,
673 };
674 CHECK_INITIALIZED_FIELDS_END(modifier, 0, 0, 0); // don't move this line
675 return &modifier;
676 }
677
SetOnGridScrollIndex(ArkUINodeHandle node,void * extraParam)678 void SetOnGridScrollIndex(ArkUINodeHandle node, void* extraParam)
679 {
680 auto* frameNode = reinterpret_cast<FrameNode*>(node);
681 CHECK_NULL_VOID(frameNode);
682 auto onEvent = [node, extraParam](int32_t first, int32_t last) {
683 ArkUINodeEvent event;
684 event.kind = COMPONENT_ASYNC_EVENT;
685 event.extraParam = reinterpret_cast<intptr_t>(extraParam);
686 event.componentAsyncEvent.subKind = ON_GRID_SCROLL_TO_INDEX;
687 event.componentAsyncEvent.data[0].i32 = first;
688 event.componentAsyncEvent.data[1].i32 = last;
689 SendArkUISyncEvent(&event);
690 };
691 GridModelNG::SetOnScrollIndex(frameNode, std::move(onEvent));
692 }
693
ResetOnGridScrollIndex(ArkUINodeHandle node)694 void ResetOnGridScrollIndex(ArkUINodeHandle node)
695 {
696 auto* frameNode = reinterpret_cast<FrameNode*>(node);
697 CHECK_NULL_VOID(frameNode);
698 GridModelNG::SetOnScrollIndex(frameNode, nullptr);
699 }
700
SetOnGridScrollIndexCallBack(ArkUINodeHandle node,void * extraParam)701 void SetOnGridScrollIndexCallBack(ArkUINodeHandle node, void* extraParam)
702 {
703 auto* frameNode = reinterpret_cast<FrameNode*>(node);
704 CHECK_NULL_VOID(frameNode);
705 if (extraParam) {
706 auto onScrollIndex = reinterpret_cast<ScrollIndexFunc*>(extraParam);
707 GridModelNG::SetOnScrollIndex(frameNode, std::move(*onScrollIndex));
708 } else {
709 GridModelNG::SetOnScrollIndex(frameNode, nullptr);
710 }
711 }
712
SetOnGridScrollBarUpdateCallBack(ArkUINodeHandle node,void * extraParam)713 void SetOnGridScrollBarUpdateCallBack(ArkUINodeHandle node, void* extraParam)
714 {
715 auto* frameNode = reinterpret_cast<FrameNode*>(node);
716 CHECK_NULL_VOID(frameNode);
717 if (extraParam) {
718 auto onScrollBarUpdate = reinterpret_cast<ScrollBarUpdateFunc*>(extraParam);
719 GridModelNG::SetOnScrollBarUpdate(frameNode, std::move(*onScrollBarUpdate));
720 } else {
721 GridModelNG::SetOnScrollBarUpdate(frameNode, nullptr);
722 }
723 }
724
ResetOnGridScrollBarUpdate(ArkUINodeHandle node)725 void ResetOnGridScrollBarUpdate(ArkUINodeHandle node)
726 {
727 auto* frameNode = reinterpret_cast<FrameNode*>(node);
728 CHECK_NULL_VOID(frameNode);
729 GridModelNG::SetOnScrollBarUpdate(frameNode, nullptr);
730 }
731
SetOnGridItemDragStart(ArkUINodeHandle node,void * extraParam)732 void SetOnGridItemDragStart(ArkUINodeHandle node, void* extraParam)
733 {
734 auto* frameNode = reinterpret_cast<FrameNode*>(node);
735 CHECK_NULL_VOID(frameNode);
736 if (extraParam) {
737 auto onItemDragStart = reinterpret_cast<std::function<void(const ItemDragInfo&, int32_t)>*>(extraParam);
738 GridModelNG::SetOnItemDragStart(frameNode, std::move(*onItemDragStart));
739 } else {
740 GridModelNG::SetOnItemDragStart(frameNode, nullptr);
741 }
742 }
743
ResetOnGridItemDragStart(ArkUINodeHandle node)744 void ResetOnGridItemDragStart(ArkUINodeHandle node)
745 {
746 auto* frameNode = reinterpret_cast<FrameNode*>(node);
747 CHECK_NULL_VOID(frameNode);
748 GridModelNG::SetOnItemDragStart(frameNode, nullptr);
749 }
750
SetOnGridItemDragEnter(ArkUINodeHandle node,void * extraParam)751 void SetOnGridItemDragEnter(ArkUINodeHandle node, void* extraParam)
752 {
753 auto* frameNode = reinterpret_cast<FrameNode*>(node);
754 CHECK_NULL_VOID(frameNode);
755 if (extraParam) {
756 auto onItemDragEnter = reinterpret_cast<ItemDragEnterFunc*>(extraParam);
757 GridModelNG::SetOnItemDragEnter(frameNode, std::move(*onItemDragEnter));
758 } else {
759 GridModelNG::SetOnItemDragEnter(frameNode, nullptr);
760 }
761 }
762
ResetOnGridItemDragEnter(ArkUINodeHandle node)763 void ResetOnGridItemDragEnter(ArkUINodeHandle node)
764 {
765 auto* frameNode = reinterpret_cast<FrameNode*>(node);
766 CHECK_NULL_VOID(frameNode);
767 GridModelNG::SetOnItemDragEnter(frameNode, nullptr);
768 }
769
SetOnGridItemDragMove(ArkUINodeHandle node,void * extraParam)770 void SetOnGridItemDragMove(ArkUINodeHandle node, void* extraParam)
771 {
772 auto* frameNode = reinterpret_cast<FrameNode*>(node);
773 CHECK_NULL_VOID(frameNode);
774 if (extraParam) {
775 auto onItemDragMove = reinterpret_cast<ItemDragMoveFunc*>(extraParam);
776 GridModelNG::SetOnItemDragMove(frameNode, std::move(*onItemDragMove));
777 } else {
778 GridModelNG::SetOnItemDragMove(frameNode, nullptr);
779 }
780 }
781
ResetOnGridItemDragMove(ArkUINodeHandle node)782 void ResetOnGridItemDragMove(ArkUINodeHandle node)
783 {
784 auto* frameNode = reinterpret_cast<FrameNode*>(node);
785 CHECK_NULL_VOID(frameNode);
786 GridModelNG::SetOnItemDragMove(frameNode, nullptr);
787 }
788
SetOnGridItemDragLeave(ArkUINodeHandle node,void * extraParam)789 void SetOnGridItemDragLeave(ArkUINodeHandle node, void* extraParam)
790 {
791 auto* frameNode = reinterpret_cast<FrameNode*>(node);
792 CHECK_NULL_VOID(frameNode);
793 if (extraParam) {
794 auto onItemDragLeave = reinterpret_cast<ItemDragLeaveFunc*>(extraParam);
795 GridModelNG::SetOnItemDragLeave(frameNode, std::move(*onItemDragLeave));
796 } else {
797 GridModelNG::SetOnItemDragLeave(frameNode, nullptr);
798 }
799 }
800
ResetOnGridItemDragLeave(ArkUINodeHandle node)801 void ResetOnGridItemDragLeave(ArkUINodeHandle node)
802 {
803 auto* frameNode = reinterpret_cast<FrameNode*>(node);
804 CHECK_NULL_VOID(frameNode);
805 GridModelNG::SetOnItemDragLeave(frameNode, nullptr);
806 }
807
SetOnGridItemDrop(ArkUINodeHandle node,void * extraParam)808 void SetOnGridItemDrop(ArkUINodeHandle node, void* extraParam)
809 {
810 auto* frameNode = reinterpret_cast<FrameNode*>(node);
811 CHECK_NULL_VOID(frameNode);
812 if (extraParam) {
813 auto onItemDrop = reinterpret_cast<ItemDropFunc*>(extraParam);
814 GridModelNG::SetOnItemDrop(frameNode, std::move(*onItemDrop));
815 } else {
816 GridModelNG::SetOnItemDrop(frameNode, nullptr);
817 }
818 }
819
ResetOnGridItemDrop(ArkUINodeHandle node)820 void ResetOnGridItemDrop(ArkUINodeHandle node)
821 {
822 auto* frameNode = reinterpret_cast<FrameNode*>(node);
823 CHECK_NULL_VOID(frameNode);
824 GridModelNG::SetOnItemDrop(frameNode, nullptr);
825 }
826
CreateWithResourceObjGridFriction(ArkUINodeHandle node,void * resObj)827 void CreateWithResourceObjGridFriction(ArkUINodeHandle node, void* resObj)
828 {
829 auto* frameNode = reinterpret_cast<FrameNode*>(node);
830 CHECK_NULL_VOID(frameNode);
831 CHECK_NULL_VOID(resObj);
832 auto* resourceObj = reinterpret_cast<ResourceObject*>(resObj);
833 GridModelNG::CreateWithResourceObjFriction(frameNode, AceType::Claim(resourceObj));
834 }
835
CreateWithResourceObjGridScrollBarColor(ArkUINodeHandle node,void * resObj)836 void CreateWithResourceObjGridScrollBarColor(ArkUINodeHandle node, void* resObj)
837 {
838 auto* frameNode = reinterpret_cast<FrameNode*>(node);
839 CHECK_NULL_VOID(frameNode);
840 CHECK_NULL_VOID(resObj);
841 auto* resourceObj = reinterpret_cast<ResourceObject*>(resObj);
842 GridModelNG::CreateWithResourceObjScrollBarColor(frameNode, AceType::Claim(resourceObj));
843 }
844 } // namespace NodeModifier
845 } // namespace OHOS::Ace::NG
846