1 /*
2 * Copyright (c) 2023 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
SetFlingSpeedLimit(ArkUINodeHandle node,ArkUI_Float32 flingSpeedLimit)346 void SetFlingSpeedLimit(ArkUINodeHandle node, ArkUI_Float32 flingSpeedLimit)
347 {
348 auto* frameNode = reinterpret_cast<FrameNode*>(node);
349 CHECK_NULL_VOID(frameNode);
350 ScrollableModelNG::SetMaxFlingSpeed(frameNode, flingSpeedLimit);
351 }
352
ResetFlingSpeedLimit(ArkUINodeHandle node)353 void ResetFlingSpeedLimit(ArkUINodeHandle node)
354 {
355 auto* frameNode = reinterpret_cast<FrameNode*>(node);
356 CHECK_NULL_VOID(frameNode);
357 ArkUI_Float32 flingSpeedLimit = -1.0;
358 ScrollableModelNG::SetMaxFlingSpeed(frameNode, flingSpeedLimit);
359 }
360
SetGridAlignItems(ArkUINodeHandle node,int32_t alignItems)361 void SetGridAlignItems(ArkUINodeHandle node, int32_t alignItems)
362 {
363 auto* frameNode = reinterpret_cast<FrameNode*>(node);
364 CHECK_NULL_VOID(frameNode);
365 GridModelNG::SetAlignItems(frameNode, static_cast<GridItemAlignment>(alignItems));
366 }
367
ResetGridAlignItems(ArkUINodeHandle node)368 void ResetGridAlignItems(ArkUINodeHandle node)
369 {
370 auto* frameNode = reinterpret_cast<FrameNode*>(node);
371 CHECK_NULL_VOID(frameNode);
372 GridModelNG::SetAlignItems(frameNode, GridItemAlignment::DEFAULT);
373 }
374
GetColumnsTemplate(ArkUINodeHandle node)375 ArkUI_CharPtr GetColumnsTemplate(ArkUINodeHandle node)
376 {
377 auto* frameNode = reinterpret_cast<FrameNode*>(node);
378 CHECK_NULL_RETURN(frameNode, nullptr);
379 g_strValue = GridModelNG::GetColumnsTemplate(frameNode);
380 return g_strValue.c_str();
381 }
382
GetRowsTemplate(ArkUINodeHandle node)383 ArkUI_CharPtr GetRowsTemplate(ArkUINodeHandle node)
384 {
385 auto* frameNode = reinterpret_cast<FrameNode*>(node);
386 CHECK_NULL_RETURN(frameNode, nullptr);
387 g_strValue = GridModelNG::GetRowsTemplate(frameNode);
388 return g_strValue.c_str();
389 }
390
GetColumnsGap(ArkUINodeHandle node)391 ArkUI_Float32 GetColumnsGap(ArkUINodeHandle node)
392 {
393 auto* frameNode = reinterpret_cast<FrameNode*>(node);
394 CHECK_NULL_RETURN(frameNode, ERROR_FLOAT_CODE);
395 return GridModelNG::GetColumnsGap(frameNode);
396 }
397
GetRowsGap(ArkUINodeHandle node)398 ArkUI_Float32 GetRowsGap(ArkUINodeHandle node)
399 {
400 auto* frameNode = reinterpret_cast<FrameNode*>(node);
401 CHECK_NULL_RETURN(frameNode, ERROR_FLOAT_CODE);
402 return GridModelNG::GetRowsGap(frameNode);
403 }
404
SetNodeAdapter(ArkUINodeHandle node,ArkUINodeAdapterHandle handle)405 ArkUI_Int32 SetNodeAdapter(ArkUINodeHandle node, ArkUINodeAdapterHandle handle)
406 {
407 auto* frameNode = reinterpret_cast<FrameNode*>(node);
408 CHECK_NULL_RETURN(frameNode, ERROR_CODE_PARAM_INVALID);
409 auto totalChildCount = frameNode->TotalChildCount();
410 if (totalChildCount > 0) {
411 return ERROR_CODE_NATIVE_IMPL_NODE_ADAPTER_CHILD_NODE_EXIST;
412 }
413 NodeAdapter::GetNodeAdapterAPI()->attachHostNode(handle, node);
414 return ERROR_CODE_NO_ERROR;
415 }
416
ResetNodeAdapter(ArkUINodeHandle node)417 void ResetNodeAdapter(ArkUINodeHandle node)
418 {
419 NodeAdapter::GetNodeAdapterAPI()->detachHostNode(node);
420 }
421
GetNodeAdapter(ArkUINodeHandle node)422 ArkUINodeAdapterHandle GetNodeAdapter(ArkUINodeHandle node)
423 {
424 return NodeAdapter::GetNodeAdapterAPI()->getNodeAdapter(node);
425 }
426
SetCachedCount(ArkUINodeHandle node,ArkUI_Int32 cachedCount)427 void SetCachedCount(ArkUINodeHandle node, ArkUI_Int32 cachedCount)
428 {
429 auto* frameNode = reinterpret_cast<FrameNode*>(node);
430 CHECK_NULL_VOID(frameNode);
431 GridModelNG::SetCachedCount(frameNode, cachedCount);
432 }
433
ResetCachedCount(ArkUINodeHandle node)434 void ResetCachedCount(ArkUINodeHandle node)
435 {
436 auto* frameNode = reinterpret_cast<FrameNode*>(node);
437 CHECK_NULL_VOID(frameNode);
438 GridModelNG::SetCachedCount(frameNode, 1);
439 }
440
GetCachedCount(ArkUINodeHandle node)441 ArkUI_Int32 GetCachedCount(ArkUINodeHandle node)
442 {
443 auto* frameNode = reinterpret_cast<FrameNode*>(node);
444 CHECK_NULL_RETURN(frameNode, 1);
445 return GridModelNG::GetCachedCount(frameNode);
446 }
447
SetShowCached(ArkUINodeHandle node,ArkUI_Bool show)448 void SetShowCached(ArkUINodeHandle node, ArkUI_Bool show)
449 {
450 auto* frameNode = reinterpret_cast<FrameNode*>(node);
451 CHECK_NULL_VOID(frameNode);
452 GridModelNG::SetShowCached(frameNode, show);
453 }
454
ResetShowCached(ArkUINodeHandle node)455 void ResetShowCached(ArkUINodeHandle node)
456 {
457 auto* frameNode = reinterpret_cast<FrameNode*>(node);
458 CHECK_NULL_VOID(frameNode);
459 GridModelNG::SetShowCached(frameNode, false);
460 }
461
GetShowCached(ArkUINodeHandle node)462 ArkUI_Bool GetShowCached(ArkUINodeHandle node)
463 {
464 auto* frameNode = reinterpret_cast<FrameNode*>(node);
465 CHECK_NULL_RETURN(frameNode, false);
466 return GridModelNG::GetShowCached(frameNode);
467 }
468
SetGridFadingEdge(ArkUINodeHandle node,ArkUI_Bool fadingEdge,ArkUI_Float32 fadingEdgeLengthValue,ArkUI_Int32 fadingEdgeLengthUnit)469 void SetGridFadingEdge(
470 ArkUINodeHandle node, ArkUI_Bool fadingEdge, ArkUI_Float32 fadingEdgeLengthValue, ArkUI_Int32 fadingEdgeLengthUnit)
471 {
472 auto* frameNode = reinterpret_cast<FrameNode*>(node);
473 CHECK_NULL_VOID(frameNode);
474 Dimension fadingEdgeLengthDimension =
475 Dimension(fadingEdgeLengthValue, static_cast<OHOS::Ace::DimensionUnit>(fadingEdgeLengthUnit));
476 NG::ScrollableModelNG::SetFadingEdge(frameNode, fadingEdge, fadingEdgeLengthDimension);
477 }
478
ResetGridFadingEdge(ArkUINodeHandle node)479 void ResetGridFadingEdge(ArkUINodeHandle node)
480 {
481 auto* frameNode = reinterpret_cast<FrameNode*>(node);
482 CHECK_NULL_VOID(frameNode);
483 NG::ScrollableModelNG::SetFadingEdge(frameNode, false, DEFAULT_FADING_EDGE_LENGTH);
484 }
485
486 namespace NodeModifier {
GetGridModifier()487 const ArkUIGridModifier* GetGridModifier()
488 {
489 CHECK_INITIALIZED_FIELDS_BEGIN(); // don't move this line
490 static const ArkUIGridModifier modifier = {
491 .setGridColumnsTemplate = SetGridColumnsTemplate,
492 .resetGridColumnsTemplate = ResetGridColumnsTemplate,
493 .setGridRowsTemplate = SetGridRowsTemplate,
494 .resetGridRowsTemplate = ResetGridRowsTemplate,
495 .setGridColumnsGap = SetGridColumnsGap,
496 .resetGridColumnsGap = ResetGridColumnsGap,
497 .setGridRowsGap = SetGridRowsGap,
498 .resetGridRowsGap = ResetGridRowsGap,
499 .setGridScrollBar = SetGridScrollBar,
500 .resetGridScrollBar = ResetGridScrollBar,
501 .setGridScrollBarWidth = SetGridScrollBarWidth,
502 .resetGridScrollBarWidth = ResetGridScrollBarWidth,
503 .setGridScrollBarColor = SetGridScrollBarColor,
504 .resetGridScrollBarColor = ResetGridScrollBarColor,
505 .setGridCachedCount = SetGridCachedCount,
506 .resetGridCachedCount = ResetGridCachedCount,
507 .setShowCached = SetShowCached,
508 .resetShowCached = ResetShowCached,
509 .getShowCached = GetShowCached,
510 .setGridEditMode = SetGridEditMode,
511 .resetGridEditMode = ResetGridEditMode,
512 .setGridMultiSelectable = SetGridMultiSelectable,
513 .resetGridMultiSelectable = ResetGridMultiSelectable,
514 .setGridMaxCount = SetGridMaxCount,
515 .resetGridMaxCount = ResetGridMaxCount,
516 .setGridMinCount = SetGridMinCount,
517 .resetGridMinCount = ResetGridMinCount,
518 .setGridCellLength = SetGridCellLength,
519 .resetGridCellLength = ResetGridCellLength,
520 .setGridLayoutDirection = SetGridLayoutDirection,
521 .resetGridLayoutDirection = ResetGridLayoutDirection,
522 .setGridSupportAnimation = SetGridSupportAnimation,
523 .resetGridSupportAnimation = ResetGridSupportAnimation,
524 .setEdgeEffect = SetEdgeEffect,
525 .resetEdgeEffect = ResetEdgeEffect,
526 .setNestedScroll = SetNestedScroll,
527 .resetNestedScroll = ResetNestedScroll,
528 .setEnableScroll = SetEnableScroll,
529 .resetEnableScroll = ResetEnableScroll,
530 .setFriction = SetFriction,
531 .resetFriction = ResetFriction,
532 .getGridColumnsTemplate = GetColumnsTemplate,
533 .getGridRowsTemplate = GetRowsTemplate,
534 .getGridColumnsGap = GetColumnsGap,
535 .getGridRowsGap = GetRowsGap,
536 .setNodeAdapter = SetNodeAdapter,
537 .resetNodeAdapter = ResetNodeAdapter,
538 .getNodeAdapter = GetNodeAdapter,
539 .setCachedCount = SetCachedCount,
540 .resetCachedCount = ResetCachedCount,
541 .getCachedCount = GetCachedCount,
542 .setGridAlignItems = SetGridAlignItems,
543 .resetGridAlignItems = ResetGridAlignItems,
544 .setGridFadingEdge = SetGridFadingEdge,
545 .resetGridFadingEdge = ResetGridFadingEdge,
546 .setOnGridScrollIndexCallBack = SetOnGridScrollIndexCallBack,
547 .resetOnGridScrollIndex = ResetOnGridScrollIndex,
548 .setOnGridScrollBarUpdateCallBack = SetOnGridScrollBarUpdateCallBack,
549 .resetOnGridScrollBarUpdate = ResetOnGridScrollBarUpdate,
550 .setOnGridItemDragStart = SetOnGridItemDragStart,
551 .resetOnGridItemDragStart = ResetOnGridItemDragStart,
552 .setOnGridItemDragEnter = SetOnGridItemDragEnter,
553 .resetOnGridItemDragEnter = ResetOnGridItemDragEnter,
554 .setOnGridItemDragMove = SetOnGridItemDragMove,
555 .resetOnGridItemDragMove = ResetOnGridItemDragMove,
556 .setOnGridItemDragLeave = SetOnGridItemDragLeave,
557 .resetOnGridItemDragLeave = ResetOnGridItemDragLeave,
558 .setOnGridItemDrop = SetOnGridItemDrop,
559 .resetOnGridItemDrop = ResetOnGridItemDrop,
560 };
561 CHECK_INITIALIZED_FIELDS_END(modifier, 0, 0, 0); // don't move this line
562 return &modifier;
563 }
564
GetCJUIGridModifier()565 const CJUIGridModifier* GetCJUIGridModifier()
566 {
567 CHECK_INITIALIZED_FIELDS_BEGIN(); // don't move this line
568 static const CJUIGridModifier modifier = {
569 .setGridColumnsTemplate = SetGridColumnsTemplate,
570 .resetGridColumnsTemplate = ResetGridColumnsTemplate,
571 .setGridRowsTemplate = SetGridRowsTemplate,
572 .resetGridRowsTemplate = ResetGridRowsTemplate,
573 .setGridColumnsGap = SetGridColumnsGap,
574 .resetGridColumnsGap = ResetGridColumnsGap,
575 .setGridRowsGap = SetGridRowsGap,
576 .resetGridRowsGap = ResetGridRowsGap,
577 .setGridScrollBar = SetGridScrollBar,
578 .resetGridScrollBar = ResetGridScrollBar,
579 .setGridScrollBarWidth = SetGridScrollBarWidth,
580 .resetGridScrollBarWidth = ResetGridScrollBarWidth,
581 .setGridScrollBarColor = SetGridScrollBarColor,
582 .resetGridScrollBarColor = ResetGridScrollBarColor,
583 .setGridCachedCount = SetGridCachedCount,
584 .resetGridCachedCount = ResetGridCachedCount,
585 .setGridEditMode = SetGridEditMode,
586 .resetGridEditMode = ResetGridEditMode,
587 .setGridMultiSelectable = SetGridMultiSelectable,
588 .resetGridMultiSelectable = ResetGridMultiSelectable,
589 .setGridMaxCount = SetGridMaxCount,
590 .resetGridMaxCount = ResetGridMaxCount,
591 .setGridMinCount = SetGridMinCount,
592 .resetGridMinCount = ResetGridMinCount,
593 .setGridCellLength = SetGridCellLength,
594 .resetGridCellLength = ResetGridCellLength,
595 .setGridLayoutDirection = SetGridLayoutDirection,
596 .resetGridLayoutDirection = ResetGridLayoutDirection,
597 .setGridSupportAnimation = SetGridSupportAnimation,
598 .resetGridSupportAnimation = ResetGridSupportAnimation,
599 .setEdgeEffect = SetEdgeEffect,
600 .resetEdgeEffect = ResetEdgeEffect,
601 .setNestedScroll = SetNestedScroll,
602 .resetNestedScroll = ResetNestedScroll,
603 .setEnableScroll = SetEnableScroll,
604 .resetEnableScroll = ResetEnableScroll,
605 .setFriction = SetFriction,
606 .resetFriction = ResetFriction,
607 .getGridColumnsTemplate = GetColumnsTemplate,
608 .getGridRowsTemplate = GetRowsTemplate,
609 .getGridColumnsGap = GetColumnsGap,
610 .getGridRowsGap = GetRowsGap,
611 .setNodeAdapter = SetNodeAdapter,
612 .resetNodeAdapter = ResetNodeAdapter,
613 .getNodeAdapter = GetNodeAdapter,
614 .setCachedCount = SetCachedCount,
615 .resetCachedCount = ResetCachedCount,
616 .getCachedCount = GetCachedCount,
617 .setFlingSpeedLimit = SetFlingSpeedLimit,
618 .resetFlingSpeedLimit = ResetFlingSpeedLimit,
619 };
620 CHECK_INITIALIZED_FIELDS_END(modifier, 0, 0, 0); // don't move this line
621 return &modifier;
622 }
623
SetOnGridScrollIndex(ArkUINodeHandle node,void * extraParam)624 void SetOnGridScrollIndex(ArkUINodeHandle node, void* extraParam)
625 {
626 auto* frameNode = reinterpret_cast<FrameNode*>(node);
627 CHECK_NULL_VOID(frameNode);
628 auto onEvent = [node, extraParam](int32_t first, int32_t last) {
629 ArkUINodeEvent event;
630 event.kind = COMPONENT_ASYNC_EVENT;
631 event.extraParam = reinterpret_cast<intptr_t>(extraParam);
632 event.componentAsyncEvent.subKind = ON_GRID_SCROLL_TO_INDEX;
633 event.componentAsyncEvent.data[0].i32 = first;
634 event.componentAsyncEvent.data[1].i32 = last;
635 SendArkUISyncEvent(&event);
636 };
637 GridModelNG::SetOnScrollIndex(frameNode, std::move(onEvent));
638 }
639
ResetOnGridScrollIndex(ArkUINodeHandle node)640 void ResetOnGridScrollIndex(ArkUINodeHandle node)
641 {
642 auto* frameNode = reinterpret_cast<FrameNode*>(node);
643 CHECK_NULL_VOID(frameNode);
644 GridModelNG::SetOnScrollIndex(frameNode, nullptr);
645 }
646
SetOnGridScrollIndexCallBack(ArkUINodeHandle node,void * extraParam)647 void SetOnGridScrollIndexCallBack(ArkUINodeHandle node, void* extraParam)
648 {
649 auto* frameNode = reinterpret_cast<FrameNode*>(node);
650 CHECK_NULL_VOID(frameNode);
651 if (extraParam) {
652 auto onScrollIndex = reinterpret_cast<ScrollIndexFunc*>(extraParam);
653 GridModelNG::SetOnScrollIndex(frameNode, std::move(*onScrollIndex));
654 } else {
655 GridModelNG::SetOnScrollIndex(frameNode, nullptr);
656 }
657 }
658
SetOnGridScrollBarUpdateCallBack(ArkUINodeHandle node,void * extraParam)659 void SetOnGridScrollBarUpdateCallBack(ArkUINodeHandle node, void* extraParam)
660 {
661 auto* frameNode = reinterpret_cast<FrameNode*>(node);
662 CHECK_NULL_VOID(frameNode);
663 if (extraParam) {
664 auto onScrollBarUpdate = reinterpret_cast<ScrollBarUpdateFunc*>(extraParam);
665 GridModelNG::SetOnScrollBarUpdate(frameNode, std::move(*onScrollBarUpdate));
666 } else {
667 GridModelNG::SetOnScrollBarUpdate(frameNode, nullptr);
668 }
669 }
670
ResetOnGridScrollBarUpdate(ArkUINodeHandle node)671 void ResetOnGridScrollBarUpdate(ArkUINodeHandle node)
672 {
673 auto* frameNode = reinterpret_cast<FrameNode*>(node);
674 CHECK_NULL_VOID(frameNode);
675 GridModelNG::SetOnScrollBarUpdate(frameNode, nullptr);
676 }
677
SetOnGridItemDragStart(ArkUINodeHandle node,void * extraParam)678 void SetOnGridItemDragStart(ArkUINodeHandle node, void* extraParam)
679 {
680 auto* frameNode = reinterpret_cast<FrameNode*>(node);
681 CHECK_NULL_VOID(frameNode);
682 if (extraParam) {
683 auto onItemDragStart = reinterpret_cast<std::function<void(const ItemDragInfo&, int32_t)>*>(extraParam);
684 GridModelNG::SetOnItemDragStart(frameNode, std::move(*onItemDragStart));
685 } else {
686 GridModelNG::SetOnItemDragStart(frameNode, nullptr);
687 }
688 }
689
ResetOnGridItemDragStart(ArkUINodeHandle node)690 void ResetOnGridItemDragStart(ArkUINodeHandle node)
691 {
692 auto* frameNode = reinterpret_cast<FrameNode*>(node);
693 CHECK_NULL_VOID(frameNode);
694 GridModelNG::SetOnItemDragStart(frameNode, nullptr);
695 }
696
SetOnGridItemDragEnter(ArkUINodeHandle node,void * extraParam)697 void SetOnGridItemDragEnter(ArkUINodeHandle node, void* extraParam)
698 {
699 auto* frameNode = reinterpret_cast<FrameNode*>(node);
700 CHECK_NULL_VOID(frameNode);
701 if (extraParam) {
702 auto onItemDragEnter = reinterpret_cast<ItemDragEnterFunc*>(extraParam);
703 GridModelNG::SetOnItemDragEnter(frameNode, std::move(*onItemDragEnter));
704 } else {
705 GridModelNG::SetOnItemDragEnter(frameNode, nullptr);
706 }
707 }
708
ResetOnGridItemDragEnter(ArkUINodeHandle node)709 void ResetOnGridItemDragEnter(ArkUINodeHandle node)
710 {
711 auto* frameNode = reinterpret_cast<FrameNode*>(node);
712 CHECK_NULL_VOID(frameNode);
713 GridModelNG::SetOnItemDragEnter(frameNode, nullptr);
714 }
715
SetOnGridItemDragMove(ArkUINodeHandle node,void * extraParam)716 void SetOnGridItemDragMove(ArkUINodeHandle node, void* extraParam)
717 {
718 auto* frameNode = reinterpret_cast<FrameNode*>(node);
719 CHECK_NULL_VOID(frameNode);
720 if (extraParam) {
721 auto onItemDragMove = reinterpret_cast<ItemDragMoveFunc*>(extraParam);
722 GridModelNG::SetOnItemDragMove(frameNode, std::move(*onItemDragMove));
723 } else {
724 GridModelNG::SetOnItemDragMove(frameNode, nullptr);
725 }
726 }
727
ResetOnGridItemDragMove(ArkUINodeHandle node)728 void ResetOnGridItemDragMove(ArkUINodeHandle node)
729 {
730 auto* frameNode = reinterpret_cast<FrameNode*>(node);
731 CHECK_NULL_VOID(frameNode);
732 GridModelNG::SetOnItemDragMove(frameNode, nullptr);
733 }
734
SetOnGridItemDragLeave(ArkUINodeHandle node,void * extraParam)735 void SetOnGridItemDragLeave(ArkUINodeHandle node, void* extraParam)
736 {
737 auto* frameNode = reinterpret_cast<FrameNode*>(node);
738 CHECK_NULL_VOID(frameNode);
739 if (extraParam) {
740 auto onItemDragLeave = reinterpret_cast<ItemDragLeaveFunc*>(extraParam);
741 GridModelNG::SetOnItemDragLeave(frameNode, std::move(*onItemDragLeave));
742 } else {
743 GridModelNG::SetOnItemDragLeave(frameNode, nullptr);
744 }
745 }
746
ResetOnGridItemDragLeave(ArkUINodeHandle node)747 void ResetOnGridItemDragLeave(ArkUINodeHandle node)
748 {
749 auto* frameNode = reinterpret_cast<FrameNode*>(node);
750 CHECK_NULL_VOID(frameNode);
751 GridModelNG::SetOnItemDragLeave(frameNode, nullptr);
752 }
753
SetOnGridItemDrop(ArkUINodeHandle node,void * extraParam)754 void SetOnGridItemDrop(ArkUINodeHandle node, void* extraParam)
755 {
756 auto* frameNode = reinterpret_cast<FrameNode*>(node);
757 CHECK_NULL_VOID(frameNode);
758 if (extraParam) {
759 auto onItemDrop = reinterpret_cast<ItemDropFunc*>(extraParam);
760 GridModelNG::SetOnItemDrop(frameNode, std::move(*onItemDrop));
761 } else {
762 GridModelNG::SetOnItemDrop(frameNode, nullptr);
763 }
764 }
765
ResetOnGridItemDrop(ArkUINodeHandle node)766 void ResetOnGridItemDrop(ArkUINodeHandle node)
767 {
768 auto* frameNode = reinterpret_cast<FrameNode*>(node);
769 CHECK_NULL_VOID(frameNode);
770 GridModelNG::SetOnItemDrop(frameNode, nullptr);
771 }
772 } // namespace NodeModifier
773 } // namespace OHOS::Ace::NG
774