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