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 
16 #include "core/interfaces/native/node/form_component_modifier.h"
17 
18 #include "core/components/common/layout/constants.h"
19 #include "core/components_ng/base/frame_node.h"
20 #include "core/components_ng/pattern/form/form_model_ng.h"
21 #include "core/pipeline/base/element_register.h"
22 #include "base/geometry/dimension.h"
23 
24 namespace OHOS::Ace::NG {
25 const int32_t DEFAULT_VISIBILITY = 0;
26 const int32_t DEFAULT_FORM_DIM = 1;
27 const bool DEFAULT_ALLOW_UPDATE = true;
SetFormVisibility(ArkUINodeHandle node,ArkUI_Int32 visible)28 void SetFormVisibility(ArkUINodeHandle node, ArkUI_Int32 visible)
29 {
30     auto* frameNode = reinterpret_cast<FrameNode*>(node);
31     CHECK_NULL_VOID(frameNode);
32     VisibleType visibility = static_cast<VisibleType>(visible);
33     FormModelNG::SetVisibility(frameNode, visibility);
34 }
35 
AllowUpdate(ArkUINodeHandle node,ArkUI_Bool value)36 void AllowUpdate(ArkUINodeHandle node, ArkUI_Bool value)
37 {
38     auto* frameNode = reinterpret_cast<FrameNode*>(node);
39     CHECK_NULL_VOID(frameNode);
40     FormModelNG::AllowUpdate(frameNode, value);
41 }
42 
SetDimension(ArkUINodeHandle node,ArkUI_Int32 dimension)43 void SetDimension(ArkUINodeHandle node, ArkUI_Int32 dimension)
44 {
45     auto* frameNode = reinterpret_cast<FrameNode*>(node);
46     CHECK_NULL_VOID(frameNode);
47     FormModelNG::SetDimension(frameNode, dimension);
48 }
49 
SetModuleName(ArkUINodeHandle node,const char * value)50 void SetModuleName(ArkUINodeHandle node, const char* value)
51 {
52     auto* frameNode = reinterpret_cast<FrameNode*>(node);
53     CHECK_NULL_VOID(frameNode);
54     std::string moduleName(value);
55     FormModelNG::SetModuleName(frameNode, moduleName);
56 }
57 
SetFormSize(ArkUINodeHandle node,ArkUI_Float32 widthValue,ArkUI_Int32 widthUnit,ArkUI_Float32 heightValue,ArkUI_Int32 heightUnit)58 void SetFormSize(ArkUINodeHandle node, ArkUI_Float32 widthValue, ArkUI_Int32 widthUnit,
59     ArkUI_Float32 heightValue, ArkUI_Int32 heightUnit)
60 {
61     auto* frameNode = reinterpret_cast<FrameNode*>(node);
62     CHECK_NULL_VOID(frameNode);
63     FormModelNG::SetSize(frameNode,
64         Dimension(widthValue, static_cast<OHOS::Ace::DimensionUnit>(widthUnit)),
65         Dimension(heightValue, static_cast<OHOS::Ace::DimensionUnit>(heightUnit)));
66 }
67 
ResetFormVisibility(ArkUINodeHandle node)68 void ResetFormVisibility(ArkUINodeHandle node)
69 {
70     auto* frameNode = reinterpret_cast<FrameNode*>(node);
71     CHECK_NULL_VOID(frameNode);
72     VisibleType visibility = static_cast<VisibleType>(DEFAULT_VISIBILITY);
73     FormModelNG::SetVisibility(frameNode, visibility);
74 }
75 
DisallowUpdate(ArkUINodeHandle node)76 void DisallowUpdate(ArkUINodeHandle node)
77 {
78     auto* frameNode = reinterpret_cast<FrameNode*>(node);
79     CHECK_NULL_VOID(frameNode);
80     FormModelNG::AllowUpdate(frameNode, DEFAULT_ALLOW_UPDATE);
81 }
82 
ResetDimension(ArkUINodeHandle node)83 void ResetDimension(ArkUINodeHandle node)
84 {
85     auto* frameNode = reinterpret_cast<FrameNode*>(node);
86     CHECK_NULL_VOID(frameNode);
87     FormModelNG::SetDimension(frameNode, DEFAULT_FORM_DIM);
88 }
89 
ResetModuleName(ArkUINodeHandle node)90 void ResetModuleName(ArkUINodeHandle node) {}
91 
ResetFormSize(ArkUINodeHandle node)92 void ResetFormSize(ArkUINodeHandle node)
93 {
94     auto* frameNode = reinterpret_cast<FrameNode*>(node);
95     CHECK_NULL_VOID(frameNode);
96     Dimension width = 0.0_vp;
97     Dimension height = 0.0_vp;
98     FormModelNG::SetSize(frameNode, width, height);
99 }
100 
101 namespace NodeModifier {
GetFormComponentModifier()102 const ArkUIFormComponentModifier* GetFormComponentModifier()
103 {
104     static const ArkUIFormComponentModifier modifier = { SetFormVisibility, AllowUpdate, SetDimension,
105         SetModuleName, SetFormSize, ResetFormVisibility, DisallowUpdate, ResetDimension, ResetModuleName,
106         ResetFormSize };
107 
108     return &modifier;
109 }
110 
GetCJUIFormComponentModifier()111 const CJUIFormComponentModifier* GetCJUIFormComponentModifier()
112 {
113     static const CJUIFormComponentModifier modifier = { SetFormVisibility, AllowUpdate, SetDimension,
114         SetModuleName, SetFormSize, ResetFormVisibility, DisallowUpdate, ResetDimension, ResetModuleName,
115         ResetFormSize };
116 
117     return &modifier;
118 }
119 }
120 } // namespace OHOS::Ace::NG