• 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/components_ng/base/view_abstract.h"
18 #include "core/pipeline_ng/pipeline_context.h"
19 
20 namespace OHOS::Ace::NG {
21 static uint32_t ERROR_UINT_CODE = -1;
22 static const float ERROR_FLOAT_CODE = -1.0f;
23 static const int32_t ERROR_INT_CODE = -1;
24 static std::string groupNameValue;
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 
SetCheckboxGroupName(ArkUINodeHandle node,ArkUI_CharPtr group)163 void SetCheckboxGroupName(ArkUINodeHandle node, ArkUI_CharPtr group)
164 {
165     CHECK_NULL_VOID(group);
166     auto* frameNode = reinterpret_cast<FrameNode*>(node);
167     CHECK_NULL_VOID(frameNode);
168     CheckBoxGroupModelNG::SetCheckboxGroupName(frameNode, std::string(group));
169 }
170 
SetCheckboxGroupOnChange(ArkUINodeHandle node,void * callback)171 void SetCheckboxGroupOnChange(ArkUINodeHandle node, void* callback)
172 {
173     auto* frameNode = reinterpret_cast<FrameNode*>(node);
174     CHECK_NULL_VOID(frameNode);
175     if (callback) {
176         auto onChange = reinterpret_cast<std::function<void (const BaseEventInfo*)>*>(callback);
177         CheckBoxGroupModelNG::SetOnChange(frameNode, std::move(*onChange));
178     } else {
179         CheckBoxGroupModelNG::SetOnChange(frameNode, nullptr);
180     }
181 }
182 
ResetCheckboxGroupOnChange(ArkUINodeHandle node)183 void ResetCheckboxGroupOnChange(ArkUINodeHandle node)
184 {
185     auto* frameNode = reinterpret_cast<FrameNode*>(node);
186     CHECK_NULL_VOID(frameNode);
187     CheckBoxGroupModelNG::SetOnChange(frameNode, nullptr);
188 }
189 
GetCheckboxGroupName(ArkUINodeHandle node)190 ArkUI_CharPtr GetCheckboxGroupName(ArkUINodeHandle node)
191 {
192     auto *frameNode = reinterpret_cast<FrameNode *>(node);
193     CHECK_NULL_RETURN(frameNode, "");
194     groupNameValue = CheckBoxGroupModelNG::GetCheckboxGroupName(frameNode);
195     return groupNameValue.c_str();
196 }
197 
GetCheckboxGroupSelectAll(ArkUINodeHandle node)198 ArkUI_Bool GetCheckboxGroupSelectAll(ArkUINodeHandle node)
199 {
200     auto *frameNode = reinterpret_cast<FrameNode *>(node);
201     CHECK_NULL_RETURN(frameNode, ERROR_INT_CODE);
202     return static_cast<ArkUI_Bool>(CheckBoxGroupModelNG::GetSelect(frameNode));
203 }
204 
GetCheckboxGroupSelectedColor(ArkUINodeHandle node)205 ArkUI_Uint32 GetCheckboxGroupSelectedColor(ArkUINodeHandle node)
206 {
207     auto *frameNode = reinterpret_cast<FrameNode *>(node);
208     CHECK_NULL_RETURN(frameNode, ERROR_UINT_CODE);
209     return CheckBoxGroupModelNG::GetSelectedColor(frameNode).GetValue();
210 }
211 
GetCheckboxGroupUnSelectedColor(ArkUINodeHandle node)212 ArkUI_Uint32 GetCheckboxGroupUnSelectedColor(ArkUINodeHandle node)
213 {
214     auto *frameNode = reinterpret_cast<FrameNode *>(node);
215     CHECK_NULL_RETURN(frameNode, ERROR_UINT_CODE);
216     return CheckBoxGroupModelNG::GetUnSelectedColor(frameNode).GetValue();
217 }
218 
GetCheckboxGroupMarkColor(ArkUINodeHandle node)219 ArkUI_Uint32 GetCheckboxGroupMarkColor(ArkUINodeHandle node)
220 {
221     auto *frameNode = reinterpret_cast<FrameNode *>(node);
222     CHECK_NULL_RETURN(frameNode, ERROR_UINT_CODE);
223     return CheckBoxGroupModelNG::GetCheckMarkColor(frameNode).GetValue();
224 }
225 
GetCheckboxGroupMarkSize(ArkUINodeHandle node)226 ArkUI_Float64 GetCheckboxGroupMarkSize(ArkUINodeHandle node)
227 {
228     auto *frameNode = reinterpret_cast<FrameNode *>(node);
229     CHECK_NULL_RETURN(frameNode, ERROR_FLOAT_CODE);
230     return CheckBoxGroupModelNG::GetCheckMarkSize(frameNode).Value();
231 }
232 
GetCheckboxGroupMarkWidth(ArkUINodeHandle node)233 ArkUI_Float64 GetCheckboxGroupMarkWidth(ArkUINodeHandle node)
234 {
235     auto *frameNode = reinterpret_cast<FrameNode *>(node);
236     CHECK_NULL_RETURN(frameNode, ERROR_FLOAT_CODE);
237     return CheckBoxGroupModelNG::GetCheckMarkWidth(frameNode).Value();
238 }
239 
GetCheckboxGroupStyle(ArkUINodeHandle node)240 ArkUI_Int32 GetCheckboxGroupStyle(ArkUINodeHandle node)
241 {
242     auto *frameNode = reinterpret_cast<FrameNode *>(node);
243     CHECK_NULL_RETURN(frameNode, ERROR_INT_CODE);
244     return static_cast<ArkUI_Int32>(CheckBoxGroupModelNG::GetCheckboxGroupStyle(frameNode));
245 }
246 
247 namespace NodeModifier {
GetCheckboxGroupModifier()248 const ArkUICheckboxGroupModifier* GetCheckboxGroupModifier()
249 {
250     CHECK_INITIALIZED_FIELDS_BEGIN(); // don't move this line
251     static const ArkUICheckboxGroupModifier modifier = {
252         .setCheckboxGroupSelectedColor = SetCheckboxGroupSelectedColor,
253         .resetCheckboxGroupSelectedColor = ResetCheckboxGroupSelectedColor,
254         .setCheckboxGroupUnSelectedColor = SetCheckboxGroupUnSelectedColor,
255         .resetCheckboxGroupUnSelectedColor = ResetCheckboxGroupUnSelectedColor,
256         .setCheckboxGroupSelectAll = SetCheckboxGroupSelectAll,
257         .resetCheckboxGroupSelectAll = ResetCheckboxGroupSelectAll,
258         .setCheckboxGroupWidth = SetCheckboxGroupWidth,
259         .resetCheckboxGroupWidth = ResetCheckboxGroupWidth,
260         .setCheckboxGroupHeight = SetCheckboxGroupHeight,
261         .resetCheckboxGroupHeight = ResetCheckboxGroupHeight,
262         .setCheckboxGroupMark = SetCheckboxGroupMark,
263         .resetCheckboxGroupMark = ResetCheckboxGroupMark,
264         .setCheckboxGroupStyle = SetCheckboxGroupStyle,
265         .resetCheckboxGroupStyle = ResetCheckboxGroupStyle,
266         .setCheckboxGroupName = SetCheckboxGroupName,
267         .setCheckboxGroupOnChange=SetCheckboxGroupOnChange,
268         .resetCheckboxGroupOnChange=ResetCheckboxGroupOnChange,
269         .getCheckboxGroupName = GetCheckboxGroupName,
270         .getCheckboxGroupSelectAll = GetCheckboxGroupSelectAll,
271         .getCheckboxGroupSelectedColor = GetCheckboxGroupSelectedColor,
272         .getCheckboxGroupUnSelectedColor = GetCheckboxGroupUnSelectedColor,
273         .getCheckboxGroupMarkColor = GetCheckboxGroupMarkColor,
274         .getCheckboxGroupMarkSize = GetCheckboxGroupMarkSize,
275         .getCheckboxGroupMarkWidth = GetCheckboxGroupMarkWidth,
276         .getCheckboxGroupStyle = GetCheckboxGroupStyle,
277     };
278     CHECK_INITIALIZED_FIELDS_END(modifier, 0, 0, 0); // don't move this line
279     return &modifier;
280 }
281 
GetCJUICheckboxGroupModifier()282 const CJUICheckboxGroupModifier* GetCJUICheckboxGroupModifier()
283 {
284     CHECK_INITIALIZED_FIELDS_BEGIN(); // don't move this line
285     static const CJUICheckboxGroupModifier modifier = {
286         .setCheckboxGroupSelectedColor = SetCheckboxGroupSelectedColor,
287         .resetCheckboxGroupSelectedColor = ResetCheckboxGroupSelectedColor,
288         .setCheckboxGroupUnSelectedColor = SetCheckboxGroupUnSelectedColor,
289         .resetCheckboxGroupUnSelectedColor = ResetCheckboxGroupUnSelectedColor,
290         .setCheckboxGroupSelectAll = SetCheckboxGroupSelectAll,
291         .resetCheckboxGroupSelectAll = ResetCheckboxGroupSelectAll,
292         .setCheckboxGroupWidth = SetCheckboxGroupWidth,
293         .resetCheckboxGroupWidth = ResetCheckboxGroupWidth,
294         .setCheckboxGroupHeight = SetCheckboxGroupHeight,
295         .resetCheckboxGroupHeight = ResetCheckboxGroupHeight,
296         .setCheckboxGroupMark = SetCheckboxGroupMark,
297         .resetCheckboxGroupMark = ResetCheckboxGroupMark,
298         .setCheckboxGroupStyle = SetCheckboxGroupStyle,
299         .resetCheckboxGroupStyle = ResetCheckboxGroupStyle,
300         .setCheckboxGroupName = SetCheckboxGroupName,
301         .getCheckboxGroupName = GetCheckboxGroupName,
302         .getCheckboxGroupSelectAll = GetCheckboxGroupSelectAll,
303         .getCheckboxGroupSelectedColor = GetCheckboxGroupSelectedColor,
304         .getCheckboxGroupUnSelectedColor = GetCheckboxGroupUnSelectedColor,
305         .getCheckboxGroupMarkColor = GetCheckboxGroupMarkColor,
306         .getCheckboxGroupMarkSize = GetCheckboxGroupMarkSize,
307         .getCheckboxGroupMarkWidth = GetCheckboxGroupMarkWidth,
308         .getCheckboxGroupStyle = GetCheckboxGroupStyle,
309     };
310     CHECK_INITIALIZED_FIELDS_END(modifier, 0, 0, 0); // don't move this line
311     return &modifier;
312 }
313 
SetCheckboxGroupChange(ArkUINodeHandle node,void * extraParam)314 void SetCheckboxGroupChange(ArkUINodeHandle node, void* extraParam)
315 {
316     auto* frameNode = reinterpret_cast<FrameNode*>(node);
317     CHECK_NULL_VOID(frameNode);
318     auto onEvent = [node, extraParam](const BaseEventInfo* info) {
319         const auto* groupInfo = TypeInfoHelper::DynamicCast<CheckboxGroupResult>(info);
320         if (!groupInfo) {
321             return;
322         }
323         ArkUINodeEvent event;
324         event.kind = TEXT_INPUT;
325         event.extraParam = reinterpret_cast<intptr_t>(extraParam);
326         event.textInputEvent.subKind = ON_CHECKBOX_GROUP_CHANGE;
327         std::vector<std::string> nameList = groupInfo->GetNameList();
328         std::string status = std::to_string(groupInfo->GetStatus());
329 
330         std::string nodeEventStr;
331         if (!nameList.empty()) {
332             nodeEventStr.append("Name:");
333             for (auto nameStr : nameList) {
334                 nodeEventStr.append(nameStr);
335                 nodeEventStr.append(",");
336             }
337             nodeEventStr.pop_back();
338             nodeEventStr.append(";");
339         }
340 
341         nodeEventStr.append("Status:" + status);
342         event.textInputEvent.nativeStringPtr = reinterpret_cast<intptr_t>(nodeEventStr.c_str());
343         SendArkUISyncEvent(&event);
344     };
345     CheckBoxGroupModelNG::SetOnChange(frameNode, std::move(onEvent));
346 }
347 
ResetCheckboxGroupChange(ArkUINodeHandle node)348 void ResetCheckboxGroupChange(ArkUINodeHandle node)
349 {
350     auto* frameNode = reinterpret_cast<FrameNode*>(node);
351     CHECK_NULL_VOID(frameNode);
352     CheckBoxGroupModelNG::SetOnChange(frameNode, nullptr);
353 }
354 }
355 }
356