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 "core/interfaces/native/node/checkboxgroup_modifier.h"
16 
17 #include "core/pipeline/base/element_register.h"
18 #include "core/components_ng/base/frame_node.h"
19 #include "core/components_ng/base/view_abstract.h"
20 #include "core/components/common/layout/constants.h"
21 #include "core/components_ng/pattern/checkboxgroup/checkboxgroup_model_ng.h"
22 #include "frameworks/core/components/checkable/checkable_theme.h"
23 
24 namespace OHOS::Ace::NG {
25 const DimensionUnit DEFAULT_UNIT = DimensionUnit::VP;
SetCheckboxGroupSelectedColor(ArkUINodeHandle node,uint32_t color)26 void SetCheckboxGroupSelectedColor(ArkUINodeHandle node, uint32_t color)
27 {
28     auto* frameNode = reinterpret_cast<FrameNode*>(node);
29     CHECK_NULL_VOID(frameNode);
30     CheckBoxGroupModelNG::SetSelectedColor(frameNode, Color(color));
31 }
32 
ResetCheckboxGroupSelectedColor(ArkUINodeHandle node)33 void ResetCheckboxGroupSelectedColor(ArkUINodeHandle node)
34 {
35     auto* frameNode = reinterpret_cast<FrameNode*>(node);
36     CHECK_NULL_VOID(frameNode);
37     auto context = frameNode->GetContext();
38     CHECK_NULL_VOID(context);
39     auto themeManager = context->GetThemeManager();
40     CHECK_NULL_VOID(themeManager);
41     auto checkBoxTheme = themeManager->GetTheme<CheckboxTheme>();
42     CheckBoxGroupModelNG::SetSelectedColor(frameNode, checkBoxTheme->GetActiveColor());
43 }
44 
SetCheckboxGroupUnSelectedColor(ArkUINodeHandle node,uint32_t color)45 void SetCheckboxGroupUnSelectedColor(ArkUINodeHandle node, uint32_t color)
46 {
47     auto* frameNode = reinterpret_cast<FrameNode*>(node);
48     CHECK_NULL_VOID(frameNode);
49     CheckBoxGroupModelNG::SetUnSelectedColor(frameNode, Color(color));
50 }
51 
ResetCheckboxGroupUnSelectedColor(ArkUINodeHandle node)52 void ResetCheckboxGroupUnSelectedColor(ArkUINodeHandle node)
53 {
54     auto* frameNode = reinterpret_cast<FrameNode*>(node);
55     CHECK_NULL_VOID(frameNode);
56     auto context = frameNode->GetContext();
57     CHECK_NULL_VOID(context);
58     auto themeManager = context->GetThemeManager();
59     CHECK_NULL_VOID(themeManager);
60     auto checkBoxTheme = themeManager->GetTheme<CheckboxTheme>();
61     CheckBoxGroupModelNG::SetUnSelectedColor(frameNode, checkBoxTheme->GetInactiveColor());
62 }
63 
SetCheckboxGroupSelectAll(ArkUINodeHandle node,ArkUI_Bool isSelected)64 void SetCheckboxGroupSelectAll(ArkUINodeHandle node, ArkUI_Bool isSelected)
65 {
66     auto* frameNode = reinterpret_cast<FrameNode*>(node);
67     CHECK_NULL_VOID(frameNode);
68     CheckBoxGroupModelNG::SetSelectAll(frameNode, isSelected);
69 }
70 
ResetCheckboxGroupSelectAll(ArkUINodeHandle node)71 void ResetCheckboxGroupSelectAll(ArkUINodeHandle node)
72 {
73     auto* frameNode = reinterpret_cast<FrameNode*>(node);
74     CHECK_NULL_VOID(frameNode);
75     CheckBoxGroupModelNG::SetSelectAll(frameNode, false);
76 }
77 
SetCheckboxGroupWidth(ArkUINodeHandle node,ArkUI_Float32 value,ArkUI_Int32 unit,ArkUI_CharPtr calcValue)78 void SetCheckboxGroupWidth(ArkUINodeHandle node, ArkUI_Float32 value, ArkUI_Int32 unit, ArkUI_CharPtr calcValue)
79 {
80     auto *frameNode = reinterpret_cast<FrameNode *>(node);
81     CHECK_NULL_VOID(frameNode);
82     auto unitEnum = static_cast<OHOS::Ace::DimensionUnit>(unit);
83     if (unitEnum == DimensionUnit::CALC) {
84         ViewAbstract::SetWidth(
85             frameNode, CalcLength(CalcLength(std::string(calcValue))));
86     } else {
87         ViewAbstract::SetWidth(frameNode, CalcLength(value, unitEnum));
88     }
89 }
90 
ResetCheckboxGroupWidth(ArkUINodeHandle node)91 void ResetCheckboxGroupWidth(ArkUINodeHandle node)
92 {
93     auto* frameNode = reinterpret_cast<FrameNode*>(node);
94     CHECK_NULL_VOID(frameNode);
95     ViewAbstract::ClearWidthOrHeight(frameNode, true);
96 }
97 
SetCheckboxGroupHeight(ArkUINodeHandle node,ArkUI_Float32 value,ArkUI_Int32 unit,ArkUI_CharPtr calcValue)98 void SetCheckboxGroupHeight(ArkUINodeHandle node, ArkUI_Float32 value, ArkUI_Int32 unit, ArkUI_CharPtr calcValue)
99 {
100     auto *frameNode = reinterpret_cast<FrameNode *>(node);
101     CHECK_NULL_VOID(frameNode);
102     auto unitEnum = static_cast<OHOS::Ace::DimensionUnit>(unit);
103     if (unitEnum == DimensionUnit::CALC) {
104         ViewAbstract::SetHeight(
105             frameNode, CalcLength(CalcLength(std::string(calcValue))));
106     } else {
107         ViewAbstract::SetHeight(frameNode, CalcLength(value, unitEnum));
108     }
109 }
110 
ResetCheckboxGroupHeight(ArkUINodeHandle node)111 void ResetCheckboxGroupHeight(ArkUINodeHandle node)
112 {
113     auto* frameNode = reinterpret_cast<FrameNode*>(node);
114     CHECK_NULL_VOID(frameNode);
115     ViewAbstract::ClearWidthOrHeight(frameNode, false);
116 }
117 
SetCheckboxGroupMark(ArkUINodeHandle node,uint32_t color,ArkUI_Float32 sizeValue,ArkUI_Float32 widthValue)118 void SetCheckboxGroupMark(ArkUINodeHandle node, uint32_t color, ArkUI_Float32 sizeValue, ArkUI_Float32 widthValue)
119 {
120     auto* frameNode = reinterpret_cast<FrameNode*>(node);
121     CHECK_NULL_VOID(frameNode);
122     CheckBoxGroupModelNG::SetCheckMarkColor(frameNode, Color(color));
123 
124     Dimension size = Dimension(sizeValue, DEFAULT_UNIT);
125     CheckBoxGroupModelNG::SetCheckMarkSize(frameNode, size);
126 
127     Dimension width = Dimension(widthValue, DEFAULT_UNIT);
128     CheckBoxGroupModelNG::SetCheckMarkWidth(frameNode, width);
129 }
130 
ResetCheckboxGroupMark(ArkUINodeHandle node)131 void ResetCheckboxGroupMark(ArkUINodeHandle node)
132 {
133     auto* frameNode = reinterpret_cast<FrameNode*>(node);
134     CHECK_NULL_VOID(frameNode);
135     auto context = frameNode->GetContext();
136     CHECK_NULL_VOID(context);
137     auto themeManager = context->GetThemeManager();
138     CHECK_NULL_VOID(themeManager);
139     auto checkBoxTheme = themeManager->GetTheme<CheckboxTheme>();
140 
141     CheckBoxGroupModelNG::SetCheckMarkColor(frameNode, checkBoxTheme->GetPointColor());
142 
143     Dimension size = Dimension(-1.0f);
144     CheckBoxGroupModelNG::SetCheckMarkSize(frameNode, size);
145 
146     CheckBoxGroupModelNG::SetCheckMarkWidth(frameNode, checkBoxTheme->GetCheckStroke());
147 }
148 
SetCheckboxGroupStyle(ArkUINodeHandle node,ArkUI_Int32 style)149 void SetCheckboxGroupStyle(ArkUINodeHandle node, ArkUI_Int32 style)
150 {
151     auto* frameNode = reinterpret_cast<FrameNode*>(node);
152     CHECK_NULL_VOID(frameNode);
153     CheckBoxGroupModelNG::SetCheckboxGroupStyle(frameNode, static_cast<CheckBoxStyle>(style));
154 }
155 
ResetCheckboxGroupStyle(ArkUINodeHandle node)156 void ResetCheckboxGroupStyle(ArkUINodeHandle node)
157 {
158     auto* frameNode = reinterpret_cast<FrameNode*>(node);
159     CHECK_NULL_VOID(frameNode);
160     CheckBoxGroupModelNG::SetCheckboxGroupStyle(frameNode, CheckBoxStyle::CIRCULAR_STYLE);
161 }
162 
163 namespace NodeModifier {
GetCheckboxGroupModifier()164 const ArkUICheckboxGroupModifier* GetCheckboxGroupModifier()
165 {
166     static const ArkUICheckboxGroupModifier modifier = { SetCheckboxGroupSelectedColor,
167         ResetCheckboxGroupSelectedColor, SetCheckboxGroupUnSelectedColor, ResetCheckboxGroupUnSelectedColor,
168         SetCheckboxGroupSelectAll, ResetCheckboxGroupSelectAll, SetCheckboxGroupWidth, ResetCheckboxGroupWidth,
169         SetCheckboxGroupHeight, ResetCheckboxGroupHeight, SetCheckboxGroupMark, ResetCheckboxGroupMark,
170         SetCheckboxGroupStyle, ResetCheckboxGroupStyle };
171     return &modifier;
172 }
173 
GetCJUICheckboxGroupModifier()174 const CJUICheckboxGroupModifier* GetCJUICheckboxGroupModifier()
175 {
176     static const CJUICheckboxGroupModifier modifier = { SetCheckboxGroupSelectedColor,
177         ResetCheckboxGroupSelectedColor, SetCheckboxGroupUnSelectedColor, ResetCheckboxGroupUnSelectedColor,
178         SetCheckboxGroupSelectAll, ResetCheckboxGroupSelectAll, SetCheckboxGroupWidth, ResetCheckboxGroupWidth,
179         SetCheckboxGroupHeight, ResetCheckboxGroupHeight, SetCheckboxGroupMark, ResetCheckboxGroupMark,
180         SetCheckboxGroupStyle, ResetCheckboxGroupStyle };
181     return &modifier;
182 }
183 }
184 }
185