• 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 "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 static uint32_t ERROR_UINT_CODE = -1;
26 static const float ERROR_FLOAT_CODE = -1.0f;
27 static const int32_t ERROR_INT_CODE = -1;
28 static std::string groupNameValue;
29 const DimensionUnit DEFAULT_UNIT = DimensionUnit::VP;
SetCheckboxGroupSelectedColor(ArkUINodeHandle node,uint32_t color)30 void SetCheckboxGroupSelectedColor(ArkUINodeHandle node, uint32_t color)
31 {
32     auto* frameNode = reinterpret_cast<FrameNode*>(node);
33     CHECK_NULL_VOID(frameNode);
34     CheckBoxGroupModelNG::SetSelectedColor(frameNode, Color(color));
35 }
36 
ResetCheckboxGroupSelectedColor(ArkUINodeHandle node)37 void ResetCheckboxGroupSelectedColor(ArkUINodeHandle node)
38 {
39     auto* frameNode = reinterpret_cast<FrameNode*>(node);
40     CHECK_NULL_VOID(frameNode);
41     auto context = frameNode->GetContext();
42     CHECK_NULL_VOID(context);
43     auto themeManager = context->GetThemeManager();
44     CHECK_NULL_VOID(themeManager);
45     auto checkBoxTheme = themeManager->GetTheme<CheckboxTheme>();
46     CheckBoxGroupModelNG::SetSelectedColor(frameNode, checkBoxTheme->GetActiveColor());
47 }
48 
SetCheckboxGroupUnSelectedColor(ArkUINodeHandle node,uint32_t color)49 void SetCheckboxGroupUnSelectedColor(ArkUINodeHandle node, uint32_t color)
50 {
51     auto* frameNode = reinterpret_cast<FrameNode*>(node);
52     CHECK_NULL_VOID(frameNode);
53     CheckBoxGroupModelNG::SetUnSelectedColor(frameNode, Color(color));
54 }
55 
ResetCheckboxGroupUnSelectedColor(ArkUINodeHandle node)56 void ResetCheckboxGroupUnSelectedColor(ArkUINodeHandle node)
57 {
58     auto* frameNode = reinterpret_cast<FrameNode*>(node);
59     CHECK_NULL_VOID(frameNode);
60     auto context = frameNode->GetContext();
61     CHECK_NULL_VOID(context);
62     auto themeManager = context->GetThemeManager();
63     CHECK_NULL_VOID(themeManager);
64     auto checkBoxTheme = themeManager->GetTheme<CheckboxTheme>();
65     CheckBoxGroupModelNG::SetUnSelectedColor(frameNode, checkBoxTheme->GetInactiveColor());
66 }
67 
SetCheckboxGroupSelectAll(ArkUINodeHandle node,ArkUI_Bool isSelected)68 void SetCheckboxGroupSelectAll(ArkUINodeHandle node, ArkUI_Bool isSelected)
69 {
70     auto* frameNode = reinterpret_cast<FrameNode*>(node);
71     CHECK_NULL_VOID(frameNode);
72     CheckBoxGroupModelNG::SetSelectAll(frameNode, isSelected);
73 }
74 
ResetCheckboxGroupSelectAll(ArkUINodeHandle node)75 void ResetCheckboxGroupSelectAll(ArkUINodeHandle node)
76 {
77     auto* frameNode = reinterpret_cast<FrameNode*>(node);
78     CHECK_NULL_VOID(frameNode);
79     CheckBoxGroupModelNG::SetSelectAll(frameNode, false);
80 }
81 
SetCheckboxGroupWidth(ArkUINodeHandle node,ArkUI_Float32 value,ArkUI_Int32 unit,ArkUI_CharPtr calcValue)82 void SetCheckboxGroupWidth(ArkUINodeHandle node, ArkUI_Float32 value, ArkUI_Int32 unit, ArkUI_CharPtr calcValue)
83 {
84     auto *frameNode = reinterpret_cast<FrameNode *>(node);
85     CHECK_NULL_VOID(frameNode);
86     auto unitEnum = static_cast<OHOS::Ace::DimensionUnit>(unit);
87     if (unitEnum == DimensionUnit::CALC) {
88         ViewAbstract::SetWidth(
89             frameNode, CalcLength(CalcLength(std::string(calcValue))));
90     } else {
91         ViewAbstract::SetWidth(frameNode, CalcLength(value, unitEnum));
92     }
93 }
94 
ResetCheckboxGroupWidth(ArkUINodeHandle node)95 void ResetCheckboxGroupWidth(ArkUINodeHandle node)
96 {
97     auto* frameNode = reinterpret_cast<FrameNode*>(node);
98     CHECK_NULL_VOID(frameNode);
99     ViewAbstract::ClearWidthOrHeight(frameNode, true);
100 }
101 
SetCheckboxGroupHeight(ArkUINodeHandle node,ArkUI_Float32 value,ArkUI_Int32 unit,ArkUI_CharPtr calcValue)102 void SetCheckboxGroupHeight(ArkUINodeHandle node, ArkUI_Float32 value, ArkUI_Int32 unit, ArkUI_CharPtr calcValue)
103 {
104     auto *frameNode = reinterpret_cast<FrameNode *>(node);
105     CHECK_NULL_VOID(frameNode);
106     auto unitEnum = static_cast<OHOS::Ace::DimensionUnit>(unit);
107     if (unitEnum == DimensionUnit::CALC) {
108         ViewAbstract::SetHeight(
109             frameNode, CalcLength(CalcLength(std::string(calcValue))));
110     } else {
111         ViewAbstract::SetHeight(frameNode, CalcLength(value, unitEnum));
112     }
113 }
114 
ResetCheckboxGroupHeight(ArkUINodeHandle node)115 void ResetCheckboxGroupHeight(ArkUINodeHandle node)
116 {
117     auto* frameNode = reinterpret_cast<FrameNode*>(node);
118     CHECK_NULL_VOID(frameNode);
119     ViewAbstract::ClearWidthOrHeight(frameNode, false);
120 }
121 
SetCheckboxGroupMark(ArkUINodeHandle node,uint32_t color,ArkUI_Float32 sizeValue,ArkUI_Float32 widthValue)122 void SetCheckboxGroupMark(ArkUINodeHandle node, uint32_t color, ArkUI_Float32 sizeValue, ArkUI_Float32 widthValue)
123 {
124     auto* frameNode = reinterpret_cast<FrameNode*>(node);
125     CHECK_NULL_VOID(frameNode);
126     CheckBoxGroupModelNG::SetCheckMarkColor(frameNode, Color(color));
127 
128     Dimension size = Dimension(sizeValue, DEFAULT_UNIT);
129     CheckBoxGroupModelNG::SetCheckMarkSize(frameNode, size);
130 
131     Dimension width = Dimension(widthValue, DEFAULT_UNIT);
132     CheckBoxGroupModelNG::SetCheckMarkWidth(frameNode, width);
133 }
134 
ResetCheckboxGroupMark(ArkUINodeHandle node)135 void ResetCheckboxGroupMark(ArkUINodeHandle node)
136 {
137     auto* frameNode = reinterpret_cast<FrameNode*>(node);
138     CHECK_NULL_VOID(frameNode);
139     auto context = frameNode->GetContext();
140     CHECK_NULL_VOID(context);
141     auto themeManager = context->GetThemeManager();
142     CHECK_NULL_VOID(themeManager);
143     auto checkBoxTheme = themeManager->GetTheme<CheckboxTheme>();
144 
145     CheckBoxGroupModelNG::SetCheckMarkColor(frameNode, checkBoxTheme->GetPointColor());
146 
147     Dimension size = Dimension(-1.0f);
148     CheckBoxGroupModelNG::SetCheckMarkSize(frameNode, size);
149 
150     CheckBoxGroupModelNG::SetCheckMarkWidth(frameNode, checkBoxTheme->GetCheckStroke());
151 }
152 
SetCheckboxGroupStyle(ArkUINodeHandle node,ArkUI_Int32 style)153 void SetCheckboxGroupStyle(ArkUINodeHandle node, ArkUI_Int32 style)
154 {
155     auto* frameNode = reinterpret_cast<FrameNode*>(node);
156     CHECK_NULL_VOID(frameNode);
157     CheckBoxGroupModelNG::SetCheckboxGroupStyle(frameNode, static_cast<CheckBoxStyle>(style));
158 }
159 
ResetCheckboxGroupStyle(ArkUINodeHandle node)160 void ResetCheckboxGroupStyle(ArkUINodeHandle node)
161 {
162     auto* frameNode = reinterpret_cast<FrameNode*>(node);
163     CHECK_NULL_VOID(frameNode);
164     CheckBoxGroupModelNG::SetCheckboxGroupStyle(frameNode, CheckBoxStyle::CIRCULAR_STYLE);
165 }
166 
SetCheckboxGroupName(ArkUINodeHandle node,ArkUI_CharPtr group)167 void SetCheckboxGroupName(ArkUINodeHandle node, ArkUI_CharPtr group)
168 {
169     CHECK_NULL_VOID(group);
170     auto* frameNode = reinterpret_cast<FrameNode*>(node);
171     CHECK_NULL_VOID(frameNode);
172     CheckBoxGroupModelNG::SetCheckboxGroupName(frameNode, std::string(group));
173 }
174 
GetCheckboxGroupName(ArkUINodeHandle node)175 ArkUI_CharPtr GetCheckboxGroupName(ArkUINodeHandle node)
176 {
177     auto *frameNode = reinterpret_cast<FrameNode *>(node);
178     CHECK_NULL_RETURN(frameNode, "");
179     groupNameValue = CheckBoxGroupModelNG::GetCheckboxGroupName(frameNode);
180     return groupNameValue.c_str();
181 }
182 
GetCheckboxGroupSelectAll(ArkUINodeHandle node)183 ArkUI_Bool GetCheckboxGroupSelectAll(ArkUINodeHandle node)
184 {
185     auto *frameNode = reinterpret_cast<FrameNode *>(node);
186     CHECK_NULL_RETURN(frameNode, ERROR_INT_CODE);
187     return static_cast<ArkUI_Bool>(CheckBoxGroupModelNG::GetSelect(frameNode));
188 }
189 
GetCheckboxGroupSelectedColor(ArkUINodeHandle node)190 ArkUI_Uint32 GetCheckboxGroupSelectedColor(ArkUINodeHandle node)
191 {
192     auto *frameNode = reinterpret_cast<FrameNode *>(node);
193     CHECK_NULL_RETURN(frameNode, ERROR_UINT_CODE);
194     return CheckBoxGroupModelNG::GetSelectedColor(frameNode).GetValue();
195 }
196 
GetCheckboxGroupUnSelectedColor(ArkUINodeHandle node)197 ArkUI_Uint32 GetCheckboxGroupUnSelectedColor(ArkUINodeHandle node)
198 {
199     auto *frameNode = reinterpret_cast<FrameNode *>(node);
200     CHECK_NULL_RETURN(frameNode, ERROR_UINT_CODE);
201     return CheckBoxGroupModelNG::GetUnSelectedColor(frameNode).GetValue();
202 }
203 
GetCheckboxGroupMarkColor(ArkUINodeHandle node)204 ArkUI_Uint32 GetCheckboxGroupMarkColor(ArkUINodeHandle node)
205 {
206     auto *frameNode = reinterpret_cast<FrameNode *>(node);
207     CHECK_NULL_RETURN(frameNode, ERROR_UINT_CODE);
208     return CheckBoxGroupModelNG::GetCheckMarkColor(frameNode).GetValue();
209 }
210 
GetCheckboxGroupMarkSize(ArkUINodeHandle node)211 ArkUI_Float64 GetCheckboxGroupMarkSize(ArkUINodeHandle node)
212 {
213     auto *frameNode = reinterpret_cast<FrameNode *>(node);
214     CHECK_NULL_RETURN(frameNode, ERROR_FLOAT_CODE);
215     return CheckBoxGroupModelNG::GetCheckMarkSize(frameNode).Value();
216 }
217 
GetCheckboxGroupMarkWidth(ArkUINodeHandle node)218 ArkUI_Float64 GetCheckboxGroupMarkWidth(ArkUINodeHandle node)
219 {
220     auto *frameNode = reinterpret_cast<FrameNode *>(node);
221     CHECK_NULL_RETURN(frameNode, ERROR_FLOAT_CODE);
222     return CheckBoxGroupModelNG::GetCheckMarkWidth(frameNode).Value();
223 }
224 
GetCheckboxGroupStyle(ArkUINodeHandle node)225 ArkUI_Int32 GetCheckboxGroupStyle(ArkUINodeHandle node)
226 {
227     auto *frameNode = reinterpret_cast<FrameNode *>(node);
228     CHECK_NULL_RETURN(frameNode, ERROR_INT_CODE);
229     return static_cast<ArkUI_Int32>(CheckBoxGroupModelNG::GetCheckboxGroupStyle(frameNode));
230 }
231 
232 namespace NodeModifier {
GetCheckboxGroupModifier()233 const ArkUICheckboxGroupModifier* GetCheckboxGroupModifier()
234 {
235     static const ArkUICheckboxGroupModifier modifier = { SetCheckboxGroupSelectedColor,
236         ResetCheckboxGroupSelectedColor, SetCheckboxGroupUnSelectedColor, ResetCheckboxGroupUnSelectedColor,
237         SetCheckboxGroupSelectAll, ResetCheckboxGroupSelectAll, SetCheckboxGroupWidth, ResetCheckboxGroupWidth,
238         SetCheckboxGroupHeight, ResetCheckboxGroupHeight, SetCheckboxGroupMark, ResetCheckboxGroupMark,
239         SetCheckboxGroupStyle, ResetCheckboxGroupStyle, SetCheckboxGroupName, GetCheckboxGroupName,
240         GetCheckboxGroupSelectAll, GetCheckboxGroupSelectedColor, GetCheckboxGroupUnSelectedColor,
241         GetCheckboxGroupMarkColor, GetCheckboxGroupMarkSize, GetCheckboxGroupMarkWidth, GetCheckboxGroupStyle };
242     return &modifier;
243 }
244 
GetCJUICheckboxGroupModifier()245 const CJUICheckboxGroupModifier* GetCJUICheckboxGroupModifier()
246 {
247     static const CJUICheckboxGroupModifier modifier = { SetCheckboxGroupSelectedColor,
248         ResetCheckboxGroupSelectedColor, SetCheckboxGroupUnSelectedColor, ResetCheckboxGroupUnSelectedColor,
249         SetCheckboxGroupSelectAll, ResetCheckboxGroupSelectAll, SetCheckboxGroupWidth, ResetCheckboxGroupWidth,
250         SetCheckboxGroupHeight, ResetCheckboxGroupHeight, SetCheckboxGroupMark, ResetCheckboxGroupMark,
251         SetCheckboxGroupStyle, ResetCheckboxGroupStyle, SetCheckboxGroupName, GetCheckboxGroupName,
252         GetCheckboxGroupSelectAll, GetCheckboxGroupSelectedColor, GetCheckboxGroupUnSelectedColor,
253         GetCheckboxGroupMarkColor, GetCheckboxGroupMarkSize, GetCheckboxGroupMarkWidth, GetCheckboxGroupStyle };
254     return &modifier;
255 }
256 
SetCheckboxGroupChange(ArkUINodeHandle node,void * extraParam)257 void SetCheckboxGroupChange(ArkUINodeHandle node, void* extraParam)
258 {
259     auto* frameNode = reinterpret_cast<FrameNode*>(node);
260     CHECK_NULL_VOID(frameNode);
261     auto onEvent = [node, extraParam](const BaseEventInfo* info) {
262         const auto* groupInfo = TypeInfoHelper::DynamicCast<CheckboxGroupResult>(info);
263         if (!groupInfo) {
264             return;
265         }
266         ArkUINodeEvent event;
267         event.kind = TEXT_INPUT;
268         event.extraParam = reinterpret_cast<intptr_t>(extraParam);
269         event.textInputEvent.subKind = ON_CHECKBOX_GROUP_CHANGE;
270         std::vector<std::string> nameList = groupInfo->GetNameList();
271         std::string status = std::to_string(groupInfo->GetStatus());
272 
273         std::string nodeEventStr;
274         if (!nameList.empty()) {
275             nodeEventStr.append("Name:");
276             for (auto nameStr : nameList) {
277                 nodeEventStr.append(nameStr);
278                 nodeEventStr.append(",");
279             }
280             nodeEventStr.pop_back();
281             nodeEventStr.append(";");
282         }
283 
284         nodeEventStr.append("Status:" + status);
285         event.textInputEvent.nativeStringPtr = reinterpret_cast<intptr_t>(nodeEventStr.c_str());
286         SendArkUIAsyncEvent(&event);
287     };
288     CheckBoxGroupModelNG::SetOnChange(frameNode, std::move(onEvent));
289 }
290 
ResetCheckboxGroupChange(ArkUINodeHandle node)291 void ResetCheckboxGroupChange(ArkUINodeHandle node)
292 {
293     auto* frameNode = reinterpret_cast<FrameNode*>(node);
294     CHECK_NULL_VOID(frameNode);
295     CheckBoxGroupModelNG::SetOnChange(frameNode, nullptr);
296 }
297 }
298 }
299