• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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