1 /*
2  * Copyright (c) 2023-2024 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 #include "core/interfaces/native/node/grid_item_modifier.h"
16 
17 #include "core/components/common/layout/constants.h"
18 #include "core/components_ng/base/frame_node.h"
19 #include "core/components_ng/pattern/grid/grid_item_model_ng.h"
20 #include "core/components_ng/pattern/grid/grid_item_theme.h"
21 #include "core/pipeline/base/element_register.h"
22 
23 namespace OHOS::Ace::NG {
24 
25 constexpr int32_t DEFAULT_GRID_ITEM_VALUE = 0;
26 
SetGridItemSelectable(ArkUINodeHandle node,ArkUI_Bool selectable)27 void SetGridItemSelectable(ArkUINodeHandle node, ArkUI_Bool selectable)
28 {
29     auto* frameNode = reinterpret_cast<FrameNode*>(node);
30     CHECK_NULL_VOID(frameNode);
31     GridItemModelNG::SetSelectable(frameNode, selectable);
32 }
33 
ResetGridItemSelectable(ArkUINodeHandle node)34 void ResetGridItemSelectable(ArkUINodeHandle node)
35 {
36     auto* frameNode = reinterpret_cast<FrameNode*>(node);
37     CHECK_NULL_VOID(frameNode);
38     GridItemModelNG::SetSelectable(frameNode, true);
39 }
40 
SetGridItemSelected(ArkUINodeHandle node,ArkUI_Bool selected)41 void SetGridItemSelected(ArkUINodeHandle node, ArkUI_Bool selected)
42 {
43     auto* frameNode = reinterpret_cast<FrameNode*>(node);
44     CHECK_NULL_VOID(frameNode);
45     GridItemModelNG::SetSelected(frameNode, selected);
46 }
47 
ResetGridItemSelected(ArkUINodeHandle node)48 void ResetGridItemSelected(ArkUINodeHandle node)
49 {
50     auto* frameNode = reinterpret_cast<FrameNode*>(node);
51     CHECK_NULL_VOID(frameNode);
52     GridItemModelNG::SetSelected(frameNode, false);
53 }
54 
SetGridItemRowStart(ArkUINodeHandle node,int32_t rowStart)55 void SetGridItemRowStart(ArkUINodeHandle node, int32_t rowStart)
56 {
57     auto* frameNode = reinterpret_cast<FrameNode*>(node);
58     CHECK_NULL_VOID(frameNode);
59     GridItemModelNG::SetRowStart(frameNode, rowStart);
60 }
61 
ResetGridItemRowStart(ArkUINodeHandle node)62 void ResetGridItemRowStart(ArkUINodeHandle node)
63 {
64     auto* frameNode = reinterpret_cast<FrameNode*>(node);
65     CHECK_NULL_VOID(frameNode);
66     GridItemModelNG::SetRowStart(frameNode, DEFAULT_GRID_ITEM_VALUE);
67 }
68 
SetGridItemRowEnd(ArkUINodeHandle node,int32_t rowEnd)69 void SetGridItemRowEnd(ArkUINodeHandle node, int32_t rowEnd)
70 {
71     auto* frameNode = reinterpret_cast<FrameNode*>(node);
72     CHECK_NULL_VOID(frameNode);
73     GridItemModelNG::SetRowEnd(frameNode, rowEnd);
74 }
75 
ResetGridItemRowEnd(ArkUINodeHandle node)76 void ResetGridItemRowEnd(ArkUINodeHandle node)
77 {
78     auto* frameNode = reinterpret_cast<FrameNode*>(node);
79     CHECK_NULL_VOID(frameNode);
80     GridItemModelNG::SetRowEnd(frameNode, DEFAULT_GRID_ITEM_VALUE);
81 }
82 
SetGridItemColumnStart(ArkUINodeHandle node,int32_t columnStart)83 void SetGridItemColumnStart(ArkUINodeHandle node, int32_t columnStart)
84 {
85     auto* frameNode = reinterpret_cast<FrameNode*>(node);
86     CHECK_NULL_VOID(frameNode);
87     GridItemModelNG::SetColumnStart(frameNode, columnStart);
88 }
89 
ResetGridItemColumnStart(ArkUINodeHandle node)90 void ResetGridItemColumnStart(ArkUINodeHandle node)
91 {
92     auto* frameNode = reinterpret_cast<FrameNode*>(node);
93     CHECK_NULL_VOID(frameNode);
94     GridItemModelNG::SetColumnStart(frameNode, DEFAULT_GRID_ITEM_VALUE);
95 }
96 
SetGridItemColumnEnd(ArkUINodeHandle node,int32_t columnEnd)97 void SetGridItemColumnEnd(ArkUINodeHandle node, int32_t columnEnd)
98 {
99     auto* frameNode = reinterpret_cast<FrameNode*>(node);
100     CHECK_NULL_VOID(frameNode);
101     GridItemModelNG::SetColumnEnd(frameNode, columnEnd);
102 }
103 
ResetGridItemColumnEnd(ArkUINodeHandle node)104 void ResetGridItemColumnEnd(ArkUINodeHandle node)
105 {
106     auto* frameNode = reinterpret_cast<FrameNode*>(node);
107     CHECK_NULL_VOID(frameNode);
108     GridItemModelNG::SetColumnEnd(frameNode, DEFAULT_GRID_ITEM_VALUE);
109 }
110 
SetGridItemOptions(ArkUINodeHandle node,ArkUI_Int32 style)111 void SetGridItemOptions(ArkUINodeHandle node, ArkUI_Int32 style)
112 {
113     auto* frameNode = reinterpret_cast<FrameNode*>(node);
114     CHECK_NULL_VOID(frameNode);
115     GridItemModelNG::SetGridItemStyle(frameNode, static_cast<GridItemStyle>(style));
116 }
117 
118 namespace NodeModifier {
GetGridItemModifier()119 const ArkUIGridItemModifier* GetGridItemModifier()
120 {
121     static const ArkUIGridItemModifier modifier = { SetGridItemSelectable, ResetGridItemSelectable,
122         SetGridItemSelected, ResetGridItemSelected, SetGridItemRowStart, ResetGridItemRowStart,
123         SetGridItemRowEnd, ResetGridItemRowEnd, SetGridItemColumnStart, ResetGridItemColumnStart,
124         SetGridItemColumnEnd, ResetGridItemColumnEnd, SetGridItemOptions };
125     return &modifier;
126 }
127 
GetCJUIGridItemModifier()128 const CJUIGridItemModifier* GetCJUIGridItemModifier()
129 {
130     static const CJUIGridItemModifier modifier = { SetGridItemSelectable, ResetGridItemSelectable,
131         SetGridItemSelected, ResetGridItemSelected, SetGridItemRowStart, ResetGridItemRowStart,
132         SetGridItemRowEnd, ResetGridItemRowEnd, SetGridItemColumnStart, ResetGridItemColumnStart,
133         SetGridItemColumnEnd, ResetGridItemColumnEnd };
134     return &modifier;
135 }
136 }
137 } // namespace OHOS::Ace::NG