1 /*
2 * Copyright (c) 2022-2024 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16 #include "core/components_ng/pattern/grid/grid_model_ng.h"
17
18 #include <regex>
19
20 #include "base/utils/utils.h"
21 #include "core/components_ng/base/frame_node.h"
22 #include "core/components_ng/base/view_abstract.h"
23 #include "core/components_ng/base/view_stack_processor.h"
24 #include "core/components_ng/pattern/grid/grid_event_hub.h"
25 #include "core/components_ng/pattern/grid/grid_pattern.h"
26 #include "core/components_ng/pattern/scroll_bar/proxy/scroll_bar_proxy.h"
27 #include "core/components_ng/pattern/scrollable/scrollable_model_ng.h"
28 #include "core/components_v2/inspector/inspector_constants.h"
29 #include "core/pipeline_ng/pipeline_context.h"
30
31 namespace OHOS::Ace::NG {
32
Create(const RefPtr<ScrollControllerBase> & positionController,const RefPtr<ScrollProxy> & scrollProxy)33 void GridModelNG::Create(const RefPtr<ScrollControllerBase>& positionController, const RefPtr<ScrollProxy>& scrollProxy)
34 {
35 auto* stack = ViewStackProcessor::GetInstance();
36 auto nodeId = stack->ClaimNodeId();
37 ACE_LAYOUT_SCOPED_TRACE("Create[%s][self:%d]", V2::GRID_ETS_TAG, nodeId);
38 auto frameNode =
39 FrameNode::GetOrCreateFrameNode(V2::GRID_ETS_TAG, nodeId, []() { return AceType::MakeRefPtr<GridPattern>(); });
40 stack->Push(frameNode);
41 auto pattern = frameNode->GetPattern<GridPattern>();
42 CHECK_NULL_VOID(pattern);
43 if (positionController) {
44 auto controller = AceType::DynamicCast<ScrollableController>(positionController);
45 pattern->SetPositionController(controller);
46 }
47 if (scrollProxy) {
48 auto scrollBarProxy = AceType::DynamicCast<NG::ScrollBarProxy>(scrollProxy);
49 pattern->SetScrollBarProxy(scrollBarProxy);
50 }
51 pattern->AddScrollableFrameInfo(SCROLL_FROM_NONE);
52 }
53
GetOrCreateController(FrameNode * frameNode)54 RefPtr<ScrollControllerBase> GridModelNG::GetOrCreateController(FrameNode* frameNode)
55 {
56 CHECK_NULL_RETURN(frameNode, nullptr);
57 auto pattern = frameNode->GetPattern<GridPattern>();
58 CHECK_NULL_RETURN(pattern, nullptr);
59 return pattern->GetOrCreatePositionController();
60 }
61
Pop()62 void GridModelNG::Pop()
63 {
64 NG::ViewStackProcessor::GetInstance()->PopContainer();
65 }
66
SetLayoutOptions(GridLayoutOptions options)67 void GridModelNG::SetLayoutOptions(GridLayoutOptions options)
68 {
69 ACE_UPDATE_LAYOUT_PROPERTY(GridLayoutProperty, LayoutOptions, options);
70 }
71
SetColumnsTemplate(const std::string & value)72 void GridModelNG::SetColumnsTemplate(const std::string& value)
73 {
74 if (value.empty()) {
75 TAG_LOGW(AceLogTag::ACE_GRID, "Columns Template [%{public}s] is not valid.", value.c_str());
76 ACE_UPDATE_LAYOUT_PROPERTY(GridLayoutProperty, ColumnsTemplate, "1fr");
77 return;
78 }
79 ACE_UPDATE_LAYOUT_PROPERTY(GridLayoutProperty, ColumnsTemplate, value);
80 }
81
SetRowsTemplate(const std::string & value)82 void GridModelNG::SetRowsTemplate(const std::string& value)
83 {
84 if (value.empty()) {
85 TAG_LOGW(AceLogTag::ACE_GRID, "Rows Template [%{public}s] is not valid.", value.c_str());
86 ACE_UPDATE_LAYOUT_PROPERTY(GridLayoutProperty, RowsTemplate, "1fr");
87 return;
88 }
89 ACE_UPDATE_LAYOUT_PROPERTY(GridLayoutProperty, RowsTemplate, value);
90 }
91
SetColumnsGap(const Dimension & value)92 void GridModelNG::SetColumnsGap(const Dimension& value)
93 {
94 if (value.IsNonNegative()) {
95 ACE_UPDATE_LAYOUT_PROPERTY(GridLayoutProperty, ColumnsGap, value);
96 }
97 }
98
SetRowsGap(const Dimension & value)99 void GridModelNG::SetRowsGap(const Dimension& value)
100 {
101 if (value.IsNonNegative()) {
102 ACE_UPDATE_LAYOUT_PROPERTY(GridLayoutProperty, RowsGap, value);
103 }
104 }
105
SetGridHeight(const Dimension & value)106 void GridModelNG::SetGridHeight(const Dimension& value)
107 {
108 ViewAbstract::SetHeight(NG::CalcLength(value));
109 }
110
SetScrollBarMode(DisplayMode value)111 void GridModelNG::SetScrollBarMode(DisplayMode value)
112 {
113 ACE_UPDATE_PAINT_PROPERTY(ScrollablePaintProperty, ScrollBarMode, value);
114 }
115
SetScrollBarColor(const std::string & value)116 void GridModelNG::SetScrollBarColor(const std::string& value)
117 {
118 ACE_UPDATE_PAINT_PROPERTY(ScrollablePaintProperty, ScrollBarColor, Color::FromString(value));
119 }
120
SetScrollBarWidth(const std::string & value)121 void GridModelNG::SetScrollBarWidth(const std::string& value)
122 {
123 ACE_UPDATE_PAINT_PROPERTY(ScrollablePaintProperty, ScrollBarWidth, StringUtils::StringToDimensionWithUnit(value));
124 }
125
SetCachedCount(int32_t value)126 void GridModelNG::SetCachedCount(int32_t value)
127 {
128 ACE_UPDATE_LAYOUT_PROPERTY(GridLayoutProperty, CachedCount, value);
129 }
130
SetEditable(bool value)131 void GridModelNG::SetEditable(bool value)
132 {
133 ACE_UPDATE_LAYOUT_PROPERTY(GridLayoutProperty, Editable, value);
134 }
135
SetIsRTL(TextDirection direction)136 void GridModelNG::SetIsRTL(TextDirection direction)
137 {
138 ACE_UPDATE_LAYOUT_PROPERTY(LayoutProperty, LayoutDirection, direction);
139 }
140
SetLayoutDirection(FlexDirection value)141 void GridModelNG::SetLayoutDirection(FlexDirection value)
142 {
143 ACE_UPDATE_LAYOUT_PROPERTY(GridLayoutProperty, GridDirection, value);
144 }
145
SetMaxCount(int32_t value)146 void GridModelNG::SetMaxCount(int32_t value)
147 {
148 ACE_UPDATE_LAYOUT_PROPERTY(GridLayoutProperty, MaxCount, value);
149 }
150
SetMinCount(int32_t value)151 void GridModelNG::SetMinCount(int32_t value)
152 {
153 ACE_UPDATE_LAYOUT_PROPERTY(GridLayoutProperty, MinCount, value);
154 }
155
SetCellLength(int32_t value)156 void GridModelNG::SetCellLength(int32_t value)
157 {
158 ACE_UPDATE_LAYOUT_PROPERTY(GridLayoutProperty, CellLength, value);
159 }
160
SetMultiSelectable(bool value)161 void GridModelNG::SetMultiSelectable(bool value)
162 {
163 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
164 CHECK_NULL_VOID(frameNode);
165 auto pattern = frameNode->GetPattern<GridPattern>();
166 CHECK_NULL_VOID(pattern);
167 pattern->SetMultiSelectable(value);
168 }
169
SetSupportAnimation(bool value)170 void GridModelNG::SetSupportAnimation(bool value)
171 {
172 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
173 CHECK_NULL_VOID(frameNode);
174 auto pattern = frameNode->GetPattern<GridPattern>();
175 CHECK_NULL_VOID(pattern);
176 pattern->SetSupportAnimation(value);
177 }
178
SetSupportDragAnimation(bool value)179 void GridModelNG::SetSupportDragAnimation(bool value) {}
180
SetEdgeEffect(EdgeEffect edgeEffect,bool alwaysEnabled)181 void GridModelNG::SetEdgeEffect(EdgeEffect edgeEffect, bool alwaysEnabled)
182 {
183 ScrollableModelNG::SetEdgeEffect(edgeEffect, alwaysEnabled);
184 }
185
SetNestedScroll(const NestedScrollOptions & nestedOpt)186 void GridModelNG::SetNestedScroll(const NestedScrollOptions& nestedOpt)
187 {
188 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
189 CHECK_NULL_VOID(frameNode);
190 auto pattern = frameNode->GetPattern<GridPattern>();
191 CHECK_NULL_VOID(pattern);
192 pattern->SetNestedScroll(nestedOpt);
193 }
194
SetScrollEnabled(bool scrollEnabled)195 void GridModelNG::SetScrollEnabled(bool scrollEnabled)
196 {
197 ACE_UPDATE_LAYOUT_PROPERTY(GridLayoutProperty, ScrollEnabled, scrollEnabled);
198 }
199
SetFriction(double friction)200 void GridModelNG::SetFriction(double friction)
201 {
202 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
203 CHECK_NULL_VOID(frameNode);
204 auto pattern = frameNode->GetPattern<GridPattern>();
205 CHECK_NULL_VOID(pattern);
206 pattern->SetFriction(friction);
207 }
208
SetAlignItems(GridItemAlignment itemAlign)209 void GridModelNG::SetAlignItems(GridItemAlignment itemAlign)
210 {
211 ACE_UPDATE_LAYOUT_PROPERTY(GridLayoutProperty, AlignItems, itemAlign);
212 }
213
SetOnScrollToIndex(ScrollToIndexFunc && value)214 void GridModelNG::SetOnScrollToIndex(ScrollToIndexFunc&& value)
215 {
216 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
217 CHECK_NULL_VOID(frameNode);
218 auto eventHub = frameNode->GetEventHub<GridEventHub>();
219 CHECK_NULL_VOID(eventHub);
220 eventHub->SetOnScrollToIndex(std::move(value));
221 }
222
SetOnScrollBarUpdate(ScrollBarUpdateFunc && value)223 void GridModelNG::SetOnScrollBarUpdate(ScrollBarUpdateFunc&& value)
224 {
225 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
226 CHECK_NULL_VOID(frameNode);
227 auto eventHub = frameNode->GetEventHub<GridEventHub>();
228 CHECK_NULL_VOID(eventHub);
229 eventHub->SetOnScrollBarUpdate(std::move(value));
230 }
231
SetOnItemDragStart(std::function<void (const ItemDragInfo &,int32_t)> && value)232 void GridModelNG::SetOnItemDragStart(std::function<void(const ItemDragInfo&, int32_t)>&& value)
233 {
234 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
235 CHECK_NULL_VOID(frameNode);
236 auto eventHub = frameNode->GetEventHub<GridEventHub>();
237 CHECK_NULL_VOID(eventHub);
238 auto onDragStart = [func = std::move(value)](const ItemDragInfo& dragInfo, int32_t index) -> RefPtr<UINode> {
239 ScopedViewStackProcessor builderViewStackProcessor;
240 {
241 func(dragInfo, index);
242 }
243 return ViewStackProcessor::GetInstance()->Finish();
244 };
245 eventHub->SetOnItemDragStart(std::move(onDragStart));
246
247 auto gestureEventHub = eventHub->GetOrCreateGestureEventHub();
248 CHECK_NULL_VOID(gestureEventHub);
249 eventHub->InitItemDragEvent(gestureEventHub);
250
251 AddDragFrameNodeToManager();
252 }
253
SetOnItemDragEnter(ItemDragEnterFunc && value)254 void GridModelNG::SetOnItemDragEnter(ItemDragEnterFunc&& value)
255 {
256 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
257 CHECK_NULL_VOID(frameNode);
258 auto eventHub = frameNode->GetEventHub<GridEventHub>();
259 CHECK_NULL_VOID(eventHub);
260 eventHub->SetOnItemDragEnter(std::move(value));
261
262 AddDragFrameNodeToManager();
263 }
264
SetOnItemDragMove(ItemDragMoveFunc && value)265 void GridModelNG::SetOnItemDragMove(ItemDragMoveFunc&& value)
266 {
267 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
268 CHECK_NULL_VOID(frameNode);
269 auto eventHub = frameNode->GetEventHub<GridEventHub>();
270 CHECK_NULL_VOID(eventHub);
271 eventHub->SetOnItemDragMove(std::move(value));
272
273 AddDragFrameNodeToManager();
274 }
275
SetOnItemDragLeave(ItemDragLeaveFunc && value)276 void GridModelNG::SetOnItemDragLeave(ItemDragLeaveFunc&& value)
277 {
278 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
279 CHECK_NULL_VOID(frameNode);
280 auto eventHub = frameNode->GetEventHub<GridEventHub>();
281 CHECK_NULL_VOID(eventHub);
282 eventHub->SetOnItemDragLeave(std::move(value));
283
284 AddDragFrameNodeToManager();
285 }
286
SetOnItemDrop(ItemDropFunc && value)287 void GridModelNG::SetOnItemDrop(ItemDropFunc&& value)
288 {
289 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
290 CHECK_NULL_VOID(frameNode);
291 auto eventHub = frameNode->GetEventHub<GridEventHub>();
292 CHECK_NULL_VOID(eventHub);
293 eventHub->SetOnItemDrop(std::move(value));
294
295 AddDragFrameNodeToManager();
296 }
297
AddDragFrameNodeToManager() const298 void GridModelNG::AddDragFrameNodeToManager() const
299 {
300 auto pipeline = PipelineContext::GetCurrentContext();
301 CHECK_NULL_VOID(pipeline);
302 auto dragDropManager = pipeline->GetDragDropManager();
303 CHECK_NULL_VOID(dragDropManager);
304 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
305 CHECK_NULL_VOID(frameNode);
306
307 dragDropManager->AddGridDragFrameNode(frameNode->GetId(), AceType::WeakClaim(frameNode));
308 }
309
SetOnScroll(OnScrollEvent && onScroll)310 void GridModelNG::SetOnScroll(OnScrollEvent&& onScroll)
311 {
312 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
313 CHECK_NULL_VOID(frameNode);
314 auto eventHub = frameNode->GetEventHub<GridEventHub>();
315 CHECK_NULL_VOID(eventHub);
316 eventHub->SetOnScroll(std::move(onScroll));
317 }
318
SetOnScrollFrameBegin(OnScrollFrameBeginEvent && onScrollFrameBegin)319 void GridModelNG::SetOnScrollFrameBegin(OnScrollFrameBeginEvent&& onScrollFrameBegin)
320 {
321 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
322 CHECK_NULL_VOID(frameNode);
323 auto eventHub = frameNode->GetEventHub<GridEventHub>();
324 CHECK_NULL_VOID(eventHub);
325 eventHub->SetOnScrollFrameBegin(std::move(onScrollFrameBegin));
326 }
327
SetOnScrollStart(OnScrollStartEvent && onScrollStart)328 void GridModelNG::SetOnScrollStart(OnScrollStartEvent&& onScrollStart)
329 {
330 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
331 CHECK_NULL_VOID(frameNode);
332 auto eventHub = frameNode->GetEventHub<GridEventHub>();
333 CHECK_NULL_VOID(eventHub);
334 eventHub->SetOnScrollStart(std::move(onScrollStart));
335 }
336
SetOnScrollStop(OnScrollStopEvent && onScrollStop)337 void GridModelNG::SetOnScrollStop(OnScrollStopEvent&& onScrollStop)
338 {
339 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
340 CHECK_NULL_VOID(frameNode);
341 auto eventHub = frameNode->GetEventHub<GridEventHub>();
342 CHECK_NULL_VOID(eventHub);
343 eventHub->SetOnScrollStop(std::move(onScrollStop));
344 }
345
SetOnScrollIndex(ScrollIndexFunc && onScrollIndex)346 void GridModelNG::SetOnScrollIndex(ScrollIndexFunc&& onScrollIndex)
347 {
348 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
349 CHECK_NULL_VOID(frameNode);
350 auto eventHub = frameNode->GetEventHub<GridEventHub>();
351 CHECK_NULL_VOID(eventHub);
352 eventHub->SetOnScrollIndex(std::move(onScrollIndex));
353 }
354
SetOnReachStart(OnReachEvent && onReachStart)355 void GridModelNG::SetOnReachStart(OnReachEvent&& onReachStart)
356 {
357 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
358 CHECK_NULL_VOID(frameNode);
359 auto eventHub = frameNode->GetEventHub<GridEventHub>();
360 CHECK_NULL_VOID(eventHub);
361 eventHub->SetOnReachStart(std::move(onReachStart));
362 }
363
SetOnReachEnd(OnReachEvent && onReachEnd)364 void GridModelNG::SetOnReachEnd(OnReachEvent&& onReachEnd)
365 {
366 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
367 CHECK_NULL_VOID(frameNode);
368 auto eventHub = frameNode->GetEventHub<GridEventHub>();
369 CHECK_NULL_VOID(eventHub);
370 eventHub->SetOnReachEnd(std::move(onReachEnd));
371 }
372
CreateFrameNode(int32_t nodeId)373 RefPtr<FrameNode> GridModelNG::CreateFrameNode(int32_t nodeId)
374 {
375 auto frameNode = FrameNode::GetOrCreateFrameNode(
376 V2::GRID_ETS_TAG, nodeId, []() { return AceType::MakeRefPtr<GridPattern>(); });
377
378 return frameNode;
379 }
380
SetOnScrollIndex(FrameNode * frameNode,ScrollIndexFunc && onScrollIndex)381 void GridModelNG::SetOnScrollIndex(FrameNode* frameNode, ScrollIndexFunc&& onScrollIndex)
382 {
383 CHECK_NULL_VOID(frameNode);
384 auto eventHub = frameNode->GetEventHub<GridEventHub>();
385 CHECK_NULL_VOID(eventHub);
386 eventHub->SetOnScrollIndex(std::move(onScrollIndex));
387 }
388
SetColumnsTemplate(FrameNode * frameNode,const std::string & columnsTemplate)389 void GridModelNG::SetColumnsTemplate(FrameNode* frameNode, const std::string& columnsTemplate)
390 {
391 if (columnsTemplate.empty()) {
392 TAG_LOGW(AceLogTag::ACE_GRID, "Columns Template [%{public}s] is not valid.", columnsTemplate.c_str());
393 ACE_UPDATE_NODE_LAYOUT_PROPERTY(GridLayoutProperty, ColumnsTemplate, "1fr", frameNode);
394 return;
395 }
396 ACE_UPDATE_NODE_LAYOUT_PROPERTY(GridLayoutProperty, ColumnsTemplate, columnsTemplate, frameNode);
397 }
398
SetRowsTemplate(FrameNode * frameNode,const std::string & rowsTemplate)399 void GridModelNG::SetRowsTemplate(FrameNode* frameNode, const std::string& rowsTemplate)
400 {
401 if (rowsTemplate.empty()) {
402 TAG_LOGW(AceLogTag::ACE_GRID, "Rows Template [%{public}s] is not valid.", rowsTemplate.c_str());
403 ACE_UPDATE_NODE_LAYOUT_PROPERTY(GridLayoutProperty, RowsTemplate, "1fr", frameNode);
404 return;
405 }
406 ACE_UPDATE_NODE_LAYOUT_PROPERTY(GridLayoutProperty, RowsTemplate, rowsTemplate, frameNode);
407 }
408
SetColumnsGap(FrameNode * frameNode,const Dimension & columnsGap)409 void GridModelNG::SetColumnsGap(FrameNode* frameNode, const Dimension& columnsGap)
410 {
411 if (columnsGap.IsNonNegative()) {
412 ACE_UPDATE_NODE_LAYOUT_PROPERTY(GridLayoutProperty, ColumnsGap, columnsGap, frameNode);
413 }
414 }
415
SetRowsGap(FrameNode * frameNode,const Dimension & rowsGap)416 void GridModelNG::SetRowsGap(FrameNode* frameNode, const Dimension& rowsGap)
417 {
418 if (rowsGap.IsNonNegative()) {
419 ACE_UPDATE_NODE_LAYOUT_PROPERTY(GridLayoutProperty, RowsGap, rowsGap, frameNode);
420 }
421 }
422
SetScrollBarMode(FrameNode * frameNode,DisplayMode scrollBarMode)423 void GridModelNG::SetScrollBarMode(FrameNode* frameNode, DisplayMode scrollBarMode)
424 {
425 ACE_UPDATE_NODE_PAINT_PROPERTY(ScrollablePaintProperty, ScrollBarMode, scrollBarMode, frameNode);
426 }
427
SetScrollBarWidth(FrameNode * frameNode,const Dimension & scrollBarWidth)428 void GridModelNG::SetScrollBarWidth(FrameNode* frameNode, const Dimension& scrollBarWidth)
429 {
430 ACE_UPDATE_NODE_PAINT_PROPERTY(ScrollablePaintProperty, ScrollBarWidth, scrollBarWidth, frameNode);
431 }
432
SetScrollBarColor(FrameNode * frameNode,const Color & scrollBarColor)433 void GridModelNG::SetScrollBarColor(FrameNode* frameNode, const Color& scrollBarColor)
434 {
435 ACE_UPDATE_NODE_PAINT_PROPERTY(ScrollablePaintProperty, ScrollBarColor, scrollBarColor, frameNode);
436 }
437
SetCachedCount(FrameNode * frameNode,int32_t cachedCount)438 void GridModelNG::SetCachedCount(FrameNode* frameNode, int32_t cachedCount)
439 {
440 ACE_UPDATE_NODE_LAYOUT_PROPERTY(GridLayoutProperty, CachedCount, cachedCount, frameNode);
441 }
442
SetEditable(FrameNode * frameNode,bool editMode)443 void GridModelNG::SetEditable(FrameNode* frameNode, bool editMode)
444 {
445 ACE_UPDATE_NODE_LAYOUT_PROPERTY(GridLayoutProperty, Editable, editMode, frameNode);
446 }
447
SetMultiSelectable(FrameNode * frameNode,bool multiSelectable)448 void GridModelNG::SetMultiSelectable(FrameNode* frameNode, bool multiSelectable)
449 {
450 auto pattern = frameNode->GetPattern<GridPattern>();
451 CHECK_NULL_VOID(pattern);
452 pattern->SetMultiSelectable(multiSelectable);
453 }
454
SetMaxCount(FrameNode * frameNode,int32_t maxCount)455 void GridModelNG::SetMaxCount(FrameNode* frameNode, int32_t maxCount)
456 {
457 ACE_UPDATE_NODE_LAYOUT_PROPERTY(GridLayoutProperty, MaxCount, maxCount, frameNode);
458 }
459
SetMinCount(FrameNode * frameNode,int32_t minCount)460 void GridModelNG::SetMinCount(FrameNode* frameNode, int32_t minCount)
461 {
462 ACE_UPDATE_NODE_LAYOUT_PROPERTY(GridLayoutProperty, MinCount, minCount, frameNode);
463 }
464
SetCellLength(FrameNode * frameNode,int32_t cellLength)465 void GridModelNG::SetCellLength(FrameNode* frameNode, int32_t cellLength)
466 {
467 ACE_UPDATE_NODE_LAYOUT_PROPERTY(GridLayoutProperty, CellLength, cellLength, frameNode);
468 }
469
SetLayoutDirection(FrameNode * frameNode,FlexDirection layoutDirection)470 void GridModelNG::SetLayoutDirection(FrameNode* frameNode, FlexDirection layoutDirection)
471 {
472 ACE_UPDATE_NODE_LAYOUT_PROPERTY(GridLayoutProperty, GridDirection, layoutDirection, frameNode);
473 }
474
SetSupportAnimation(FrameNode * frameNode,bool supportAnimation)475 void GridModelNG::SetSupportAnimation(FrameNode* frameNode, bool supportAnimation)
476 {
477 auto pattern = frameNode->GetPattern<GridPattern>();
478 CHECK_NULL_VOID(pattern);
479 pattern->SetSupportAnimation(supportAnimation);
480 }
481
SetEdgeEffect(FrameNode * frameNode,EdgeEffect edgeEffect,bool alwaysEnabled)482 void GridModelNG::SetEdgeEffect(FrameNode* frameNode, EdgeEffect edgeEffect, bool alwaysEnabled)
483 {
484 ScrollableModelNG::SetEdgeEffect(frameNode, edgeEffect, alwaysEnabled);
485 }
486
SetNestedScroll(FrameNode * frameNode,const NestedScrollOptions & nestedOpt)487 void GridModelNG::SetNestedScroll(FrameNode* frameNode, const NestedScrollOptions& nestedOpt)
488 {
489 auto pattern = frameNode->GetPattern<GridPattern>();
490 CHECK_NULL_VOID(pattern);
491 pattern->SetNestedScroll(nestedOpt);
492 }
493
SetScrollEnabled(FrameNode * frameNode,bool scrollEnabled)494 void GridModelNG::SetScrollEnabled(FrameNode* frameNode, bool scrollEnabled)
495 {
496 ACE_UPDATE_NODE_LAYOUT_PROPERTY(GridLayoutProperty, ScrollEnabled, scrollEnabled, frameNode);
497 }
498
SetFriction(FrameNode * frameNode,double friction)499 void GridModelNG::SetFriction(FrameNode* frameNode, double friction)
500 {
501 auto pattern = frameNode->GetPattern<GridPattern>();
502 CHECK_NULL_VOID(pattern);
503 if (LessOrEqual(friction, 0.0)) {
504 pattern->SetFriction(FRICTION);
505 }
506 pattern->SetFriction(friction);
507 }
508
SetAlignItems(FrameNode * frameNode,GridItemAlignment itemAlign)509 void GridModelNG::SetAlignItems(FrameNode* frameNode, GridItemAlignment itemAlign)
510 {
511 ACE_UPDATE_NODE_LAYOUT_PROPERTY(GridLayoutProperty, AlignItems, itemAlign, frameNode);
512 }
513
CreatePositionController()514 RefPtr<ScrollControllerBase> GridModelNG::CreatePositionController()
515 {
516 return AceType::MakeRefPtr<ScrollableController>();
517 }
518
CreateScrollBarProxy()519 RefPtr<ScrollProxy> GridModelNG::CreateScrollBarProxy()
520 {
521 return AceType::MakeRefPtr<NG::ScrollBarProxy>();
522 }
523
GetDisplayMode() const524 DisplayMode GridModelNG::GetDisplayMode() const
525 {
526 auto pattern = ViewStackProcessor::GetInstance()->GetMainFrameNodePattern<GridPattern>();
527 CHECK_NULL_RETURN(pattern, DisplayMode::AUTO);
528 return pattern->GetDefaultScrollBarDisplayMode();
529 }
530
GetColumnsTemplate(FrameNode * frameNode)531 std::string GridModelNG::GetColumnsTemplate(FrameNode* frameNode)
532 {
533 CHECK_NULL_RETURN(frameNode, nullptr);
534 std::string value = "1fr";
535 ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(GridLayoutProperty, ColumnsTemplate, value, frameNode, value);
536 return value;
537 }
538
GetRowsTemplate(FrameNode * frameNode)539 std::string GridModelNG::GetRowsTemplate(FrameNode* frameNode)
540 {
541 std::string value = "1fr";
542 CHECK_NULL_RETURN(frameNode, nullptr);
543 ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(GridLayoutProperty, RowsTemplate, value, frameNode, value);
544 return value;
545 }
546
GetColumnsGap(FrameNode * frameNode)547 float GridModelNG::GetColumnsGap(FrameNode* frameNode)
548 {
549 Dimension value;
550 CHECK_NULL_RETURN(frameNode, value.Value());
551 ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(GridLayoutProperty, ColumnsGap, value, frameNode, value);
552 return value.Value();
553 }
554
GetRowsGap(FrameNode * frameNode)555 float GridModelNG::GetRowsGap(FrameNode* frameNode)
556 {
557 Dimension value;
558 CHECK_NULL_RETURN(frameNode, value.Value());
559 ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(GridLayoutProperty, RowsGap, value, frameNode, value);
560 return value.Value();
561 }
562
GetCachedCount(FrameNode * frameNode)563 int32_t GridModelNG::GetCachedCount(FrameNode* frameNode)
564 {
565 int32_t cachedCount = 1;
566 CHECK_NULL_RETURN(frameNode, cachedCount);
567 auto pattern = frameNode->GetPattern<GridPattern>();
568 int32_t defCachedCount = pattern != nullptr ? pattern->GetDefaultCachedCount() : 1;
569 ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(GridLayoutProperty, CachedCount, cachedCount, frameNode,
570 defCachedCount);
571 return cachedCount;
572 }
573 } // namespace OHOS::Ace::NG
574