1 /*
2 * Copyright (c) 2023-2024 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/node_date_picker_modifier.h"
17
18 #include "bridge/common/utils/utils.h"
19 #include "core/components_ng/pattern/picker/datepicker_model_ng.h"
20 #include "core/pipeline_ng/pipeline_context.h"
21
22 namespace OHOS::Ace::NG {
23 namespace {
24 constexpr int32_t POS_0 = 0;
25 constexpr int32_t POS_1 = 1;
26 constexpr int32_t POS_2 = 2;
27 constexpr int YEAR_1900 = 1900;
28 constexpr int YEAR_1970 = 1970;
29 const char DEFAULT_DELIMITER = '|';
30 const int32_t ERROR_INT_CODE = -1;
31 std::string g_strValue;
32 const std::vector<OHOS::Ace::FontStyle> FONT_STYLES = { OHOS::Ace::FontStyle::NORMAL, OHOS::Ace::FontStyle::ITALIC };
33
GetSelectedTextStyle(ArkUINodeHandle node)34 ArkUI_CharPtr GetSelectedTextStyle(ArkUINodeHandle node)
35 {
36 auto* frameNode = reinterpret_cast<FrameNode*>(node);
37 CHECK_NULL_RETURN(frameNode, "");
38 PickerTextStyle pickerTextStyle = DatePickerModelNG::getSelectedTextStyle(frameNode);
39 std::vector<std::string> fontFamilies = pickerTextStyle.fontFamily.value_or(std::vector<std::string>());
40 if (fontFamilies.size() == 0) {
41 fontFamilies.emplace_back("HarmonyOS Sans");
42 }
43 std::string families;
44 //set index start
45 int index = 0;
46 for (auto& family : fontFamilies) {
47 families += family;
48 if (index != static_cast<int>(fontFamilies.size()) - 1) {
49 families += ",";
50 }
51 index++;
52 }
53 g_strValue = pickerTextStyle.textColor->ColorToString() + ";";
54 g_strValue = g_strValue + std::to_string(static_cast<int>(pickerTextStyle.fontSize->ConvertToFp())) + ";";
55 g_strValue =
56 g_strValue + StringUtils::ToString(pickerTextStyle.fontWeight.value_or(FontWeight::W100)) + ";";
57 g_strValue = g_strValue + families + ";";
58 g_strValue = g_strValue + StringUtils::ToStringNDK(pickerTextStyle.fontStyle.value_or(FontStyle::NORMAL));
59 return g_strValue.c_str();
60 }
61
SetSelectedTextStyle(ArkUINodeHandle node,const char * fontInfo,uint32_t color,int32_t style)62 void SetSelectedTextStyle(ArkUINodeHandle node, const char* fontInfo, uint32_t color, int32_t style)
63 {
64 auto* frameNode = reinterpret_cast<FrameNode*>(node);
65 CHECK_NULL_VOID(frameNode);
66 auto pipeline = frameNode->GetContext();
67 CHECK_NULL_VOID(pipeline);
68 auto themeManager = pipeline->GetThemeManager();
69 CHECK_NULL_VOID(themeManager);
70 auto theme = themeManager->GetTheme<PickerTheme>();
71 CHECK_NULL_VOID(theme);
72
73 NG::PickerTextStyle textStyle;
74 std::vector<std::string> res;
75 std::string fontValues = std::string(fontInfo);
76 StringUtils::StringSplitter(fontValues, DEFAULT_DELIMITER, res);
77 textStyle.fontSize = StringUtils::StringToCalcDimension(res[POS_0], false, DimensionUnit::FP);
78 if (style >= 0 && style < static_cast<int32_t>(FONT_STYLES.size())) {
79 textStyle.fontStyle = FONT_STYLES[style];
80 } else {
81 textStyle.fontStyle = FONT_STYLES[0];
82 }
83 textStyle.fontFamily = Framework::ConvertStrToFontFamilies(res[POS_2]);
84 textStyle.fontWeight = StringUtils::StringToFontWeight(res[POS_1]);
85 textStyle.textColor = Color(color);
86 DatePickerModelNG::SetSelectedTextStyle(frameNode, theme, textStyle);
87 }
88
ResetSelectedTextStyle(ArkUINodeHandle node)89 void ResetSelectedTextStyle(ArkUINodeHandle node)
90 {
91 auto* frameNode = reinterpret_cast<FrameNode*>(node);
92 CHECK_NULL_VOID(frameNode);
93 auto pipeline = frameNode->GetContext();
94 CHECK_NULL_VOID(pipeline);
95 auto themeManager = pipeline->GetThemeManager();
96 CHECK_NULL_VOID(themeManager);
97 auto theme = themeManager->GetTheme<PickerTheme>();
98 CHECK_NULL_VOID(theme);
99
100 NG::PickerTextStyle textStyle;
101 auto selectedStyle = theme->GetOptionStyle(true, false);
102 textStyle.textColor = selectedStyle.GetTextColor();
103 textStyle.fontSize = selectedStyle.GetFontSize();
104 textStyle.fontWeight = selectedStyle.GetFontWeight();
105 DatePickerModelNG::SetSelectedTextStyle(frameNode, theme, textStyle);
106 }
107
GetDatePickerTextStyle(ArkUINodeHandle node)108 ArkUI_CharPtr GetDatePickerTextStyle(ArkUINodeHandle node)
109 {
110 auto* frameNode = reinterpret_cast<FrameNode*>(node);
111 CHECK_NULL_RETURN(frameNode, "");
112 PickerTextStyle pickerTextStyle = DatePickerModelNG::getNormalTextStyle(frameNode);
113 std::vector<std::string> fontFamilies = pickerTextStyle.fontFamily.value_or(std::vector<std::string>());
114 std::string families;
115 if (fontFamilies.size() == 0) {
116 fontFamilies.emplace_back("HarmonyOS Sans");
117 }
118 //set index start
119 int index = 0;
120 for (auto& family : fontFamilies) {
121 families += family;
122 if (index != static_cast<int>(fontFamilies.size()) - 1) {
123 families += ",";
124 }
125 index++;
126 }
127 g_strValue = pickerTextStyle.textColor->ColorToString() + ";";
128 g_strValue = g_strValue + std::to_string(static_cast<int>(pickerTextStyle.fontSize->ConvertToFp())) + ";";
129 g_strValue =
130 g_strValue + StringUtils::ToString(pickerTextStyle.fontWeight.value_or(FontWeight::W100)) + ";";
131 g_strValue = g_strValue + families + ";";
132 g_strValue = g_strValue + StringUtils::ToStringNDK(pickerTextStyle.fontStyle.value_or(FontStyle::NORMAL));
133 return g_strValue.c_str();
134 }
135
SetDatePickerTextStyle(ArkUINodeHandle node,const char * fontInfo,uint32_t color,int32_t style)136 void SetDatePickerTextStyle(ArkUINodeHandle node, const char* fontInfo, uint32_t color, int32_t style)
137 {
138 auto* frameNode = reinterpret_cast<FrameNode*>(node);
139 CHECK_NULL_VOID(frameNode);
140 auto pipeline = frameNode->GetContext();
141 CHECK_NULL_VOID(pipeline);
142 auto themeManager = pipeline->GetThemeManager();
143 CHECK_NULL_VOID(themeManager);
144 auto theme = themeManager->GetTheme<PickerTheme>();
145 CHECK_NULL_VOID(theme);
146
147 NG::PickerTextStyle textStyle;
148 std::vector<std::string> res;
149 std::string fontValues = std::string(fontInfo);
150 StringUtils::StringSplitter(fontValues, DEFAULT_DELIMITER, res);
151
152 textStyle.fontSize = StringUtils::StringToCalcDimension(res[POS_0], false, DimensionUnit::FP);
153 if (style >= 0 && style < static_cast<int32_t>(FONT_STYLES.size())) {
154 textStyle.fontStyle = FONT_STYLES[style];
155 } else {
156 textStyle.fontStyle = FONT_STYLES[0];
157 }
158 textStyle.fontFamily = Framework::ConvertStrToFontFamilies(res[POS_2]);
159 textStyle.fontWeight = StringUtils::StringToFontWeight(res[POS_1]);
160 textStyle.textColor = Color(color);
161 DatePickerModelNG::SetNormalTextStyle(frameNode, theme, textStyle);
162 }
163
ResetDatePickerTextStyle(ArkUINodeHandle node)164 void ResetDatePickerTextStyle(ArkUINodeHandle node)
165 {
166 auto* frameNode = reinterpret_cast<FrameNode*>(node);
167 CHECK_NULL_VOID(frameNode);
168 auto pipeline = frameNode->GetContext();
169 CHECK_NULL_VOID(pipeline);
170 auto themeManager = pipeline->GetThemeManager();
171 CHECK_NULL_VOID(themeManager);
172 auto theme = themeManager->GetTheme<PickerTheme>();
173 CHECK_NULL_VOID(theme);
174
175 NG::PickerTextStyle textStyle;
176 auto normalStyle = theme->GetOptionStyle(false, false);
177 textStyle.textColor = normalStyle.GetTextColor();
178 textStyle.fontSize = normalStyle.GetFontSize();
179 textStyle.fontWeight = normalStyle.GetFontWeight();
180 DatePickerModelNG::SetNormalTextStyle(frameNode, theme, textStyle);
181 }
182
GetDisappearTextStyle(ArkUINodeHandle node)183 ArkUI_CharPtr GetDisappearTextStyle(ArkUINodeHandle node)
184 {
185 auto* frameNode = reinterpret_cast<FrameNode*>(node);
186 CHECK_NULL_RETURN(frameNode, "");
187 PickerTextStyle pickerTextStyle = DatePickerModelNG::getDisappearTextStyle(frameNode);
188 std::vector<std::string> fontFamilies = pickerTextStyle.fontFamily.value_or(std::vector<std::string>());
189 std::string families;
190 if (fontFamilies.size() == 0) {
191 fontFamilies.emplace_back("HarmonyOS Sans");
192 }
193 //set index start
194 int index = 0;
195 for (auto& family : fontFamilies) {
196 families += family;
197 if (index != static_cast<int>(fontFamilies.size()) - 1) {
198 families += ",";
199 }
200 index++;
201 }
202 g_strValue = pickerTextStyle.textColor->ColorToString() + ";";
203 g_strValue = g_strValue + std::to_string(static_cast<int>(pickerTextStyle.fontSize->ConvertToFp())) + ";";
204 g_strValue =
205 g_strValue + StringUtils::ToString(pickerTextStyle.fontWeight.value_or(FontWeight::W100)) + ";";
206 g_strValue = g_strValue + families + ";";
207 g_strValue = g_strValue + StringUtils::ToStringNDK(pickerTextStyle.fontStyle.value_or(FontStyle::NORMAL));
208 return g_strValue.c_str();
209 }
210
SetDisappearTextStyle(ArkUINodeHandle node,const char * fontInfo,uint32_t color,int32_t style)211 void SetDisappearTextStyle(ArkUINodeHandle node, const char* fontInfo, uint32_t color, int32_t style)
212 {
213 auto* frameNode = reinterpret_cast<FrameNode*>(node);
214 CHECK_NULL_VOID(frameNode);
215 auto pipeline = frameNode->GetContext();
216 CHECK_NULL_VOID(pipeline);
217 auto themeManager = pipeline->GetThemeManager();
218 CHECK_NULL_VOID(themeManager);
219 auto theme = themeManager->GetTheme<PickerTheme>();
220 CHECK_NULL_VOID(theme);
221
222 NG::PickerTextStyle textStyle;
223 std::vector<std::string> res;
224 std::string fontValues = std::string(fontInfo);
225 StringUtils::StringSplitter(fontValues, DEFAULT_DELIMITER, res);
226
227 textStyle.fontSize = StringUtils::StringToCalcDimension(res[POS_0], false, DimensionUnit::FP);
228 if (style >= 0 && style < static_cast<int32_t>(FONT_STYLES.size())) {
229 textStyle.fontStyle = FONT_STYLES[style];
230 } else {
231 textStyle.fontStyle = FONT_STYLES[0];
232 }
233 textStyle.fontFamily = Framework::ConvertStrToFontFamilies(res[POS_2]);
234 textStyle.fontWeight = StringUtils::StringToFontWeight(res[POS_1]);
235 textStyle.textColor = Color(color);
236 DatePickerModelNG::SetDisappearTextStyle(frameNode, theme, textStyle);
237 }
238
ResetDisappearTextStyle(ArkUINodeHandle node)239 void ResetDisappearTextStyle(ArkUINodeHandle node)
240 {
241 auto* frameNode = reinterpret_cast<FrameNode*>(node);
242 CHECK_NULL_VOID(frameNode);
243 auto pipeline = frameNode->GetContext();
244 CHECK_NULL_VOID(pipeline);
245 auto themeManager = pipeline->GetThemeManager();
246 CHECK_NULL_VOID(themeManager);
247 auto theme = themeManager->GetTheme<PickerTheme>();
248 CHECK_NULL_VOID(theme);
249
250 NG::PickerTextStyle textStyle;
251 auto disappearStyle = theme->GetDisappearOptionStyle();
252 textStyle.textColor = disappearStyle.GetTextColor();
253 textStyle.fontSize = disappearStyle.GetFontSize();
254 textStyle.fontWeight = disappearStyle.GetFontWeight();
255 DatePickerModelNG::SetDisappearTextStyle(frameNode, theme, textStyle);
256 }
257
GetLunar(ArkUINodeHandle node)258 ArkUI_Int32 GetLunar(ArkUINodeHandle node)
259 {
260 auto* frameNode = reinterpret_cast<FrameNode*>(node);
261 CHECK_NULL_RETURN(frameNode, ERROR_INT_CODE);
262 return DatePickerModelNG::getLunar(frameNode);
263 }
264
SetLunar(ArkUINodeHandle node,int lunar)265 void SetLunar(ArkUINodeHandle node, int lunar)
266 {
267 auto* frameNode = reinterpret_cast<FrameNode*>(node);
268 CHECK_NULL_VOID(frameNode);
269 DatePickerModelNG::SetShowLunar(frameNode, lunar);
270 }
271
ResetLunar(ArkUINodeHandle node)272 void ResetLunar(ArkUINodeHandle node)
273 {
274 auto* frameNode = reinterpret_cast<FrameNode*>(node);
275 CHECK_NULL_VOID(frameNode);
276 DatePickerModelNG::SetShowLunar(frameNode, false);
277 }
278
GetDatePickerBackgroundColor(ArkUINodeHandle node)279 ArkUI_Uint32 GetDatePickerBackgroundColor(ArkUINodeHandle node)
280 {
281 auto* frameNode = reinterpret_cast<FrameNode*>(node);
282 CHECK_NULL_RETURN(frameNode, ERROR_INT_CODE);
283 return DatePickerModelNG::getBackgroundColor(frameNode);
284 }
285
SetDatePickerBackgroundColor(ArkUINodeHandle node,uint32_t color)286 void SetDatePickerBackgroundColor(ArkUINodeHandle node, uint32_t color)
287 {
288 auto* frameNode = reinterpret_cast<FrameNode*>(node);
289 CHECK_NULL_VOID(frameNode);
290 DatePickerModelNG::SetBackgroundColor(frameNode, Color(color));
291 }
292
ResetDatePickerBackgroundColor(ArkUINodeHandle node)293 void ResetDatePickerBackgroundColor(ArkUINodeHandle node)
294 {
295 auto* frameNode = reinterpret_cast<FrameNode*>(node);
296 CHECK_NULL_VOID(frameNode);
297 DatePickerModelNG::SetBackgroundColor(frameNode, Color(Color::TRANSPARENT));
298 }
299
GetStartDate(ArkUINodeHandle node)300 ArkUI_CharPtr GetStartDate(ArkUINodeHandle node)
301 {
302 auto* frameNode = reinterpret_cast<FrameNode*>(node);
303 CHECK_NULL_RETURN(frameNode, "");
304 LunarDate lunarDate = DatePickerModelNG::getStartDate(frameNode);
305 g_strValue = std::to_string(static_cast<uint32_t>(lunarDate.year)) + "-";
306 g_strValue = g_strValue + std::to_string(static_cast<uint32_t>(lunarDate.month)) + "-";
307 g_strValue = g_strValue + std::to_string(static_cast<uint32_t>(lunarDate.day));
308 return g_strValue.c_str();
309 }
310
SetStartDate(ArkUINodeHandle node,uint32_t year,uint32_t month,uint32_t day)311 void SetStartDate(ArkUINodeHandle node, uint32_t year, uint32_t month, uint32_t day)
312 {
313 auto* frameNode = reinterpret_cast<FrameNode*>(node);
314 CHECK_NULL_VOID(frameNode);
315 auto pickerDate = PickerDate(year, month, day);
316 if (pickerDate.GetYear() < YEAR_1900) {
317 pickerDate.SetYear(YEAR_1970);
318 pickerDate.SetMonth(1);
319 pickerDate.SetDay(1);
320 }
321 DatePickerModelNG::SetStartDate(frameNode, pickerDate);
322 }
323
ResetStartDate(ArkUINodeHandle node)324 void ResetStartDate(ArkUINodeHandle node)
325 {
326 auto* frameNode = reinterpret_cast<FrameNode*>(node);
327 CHECK_NULL_VOID(frameNode);
328 DatePickerModelNG::SetStartDate(frameNode, PickerDate(1970, 1, 1));
329 }
330
GetEndDate(ArkUINodeHandle node)331 ArkUI_CharPtr GetEndDate(ArkUINodeHandle node)
332 {
333 auto* frameNode = reinterpret_cast<FrameNode*>(node);
334 CHECK_NULL_RETURN(frameNode, "");
335 LunarDate lunarDate = DatePickerModelNG::getEndDate(frameNode);
336 g_strValue = std::to_string(static_cast<uint32_t>(lunarDate.year)) + "-";
337 g_strValue = g_strValue + std::to_string(static_cast<uint32_t>(lunarDate.month)) + "-";
338 g_strValue = g_strValue + std::to_string(static_cast<uint32_t>(lunarDate.day));
339 return g_strValue.c_str();
340 }
341
SetEndDate(ArkUINodeHandle node,uint32_t year,uint32_t month,uint32_t day)342 void SetEndDate(ArkUINodeHandle node, uint32_t year, uint32_t month, uint32_t day)
343 {
344 auto* frameNode = reinterpret_cast<FrameNode*>(node);
345 CHECK_NULL_VOID(frameNode);
346 DatePickerModelNG::SetEndDate(frameNode, PickerDate(year, month, day));
347 }
348
ResetEndDate(ArkUINodeHandle node)349 void ResetEndDate(ArkUINodeHandle node)
350 {
351 auto* frameNode = reinterpret_cast<FrameNode*>(node);
352 CHECK_NULL_VOID(frameNode);
353 DatePickerModelNG::SetEndDate(frameNode, PickerDate(2100, 12, 31));
354 }
355
GetSelectedDate(ArkUINodeHandle node)356 ArkUI_CharPtr GetSelectedDate(ArkUINodeHandle node)
357 {
358 auto* frameNode = reinterpret_cast<FrameNode*>(node);
359 CHECK_NULL_RETURN(frameNode, "");
360 LunarDate lunarDate = DatePickerModelNG::getSelectedDate(frameNode);
361 g_strValue = std::to_string(static_cast<uint32_t>(lunarDate.year)) + "-";
362 g_strValue = g_strValue + std::to_string(static_cast<uint32_t>(lunarDate.month)) + "-";
363 g_strValue = g_strValue + std::to_string(static_cast<uint32_t>(lunarDate.day));
364 return g_strValue.c_str();
365 }
366
SetSelectedDate(ArkUINodeHandle node,uint32_t year,uint32_t month,uint32_t day)367 void SetSelectedDate(ArkUINodeHandle node, uint32_t year, uint32_t month, uint32_t day)
368 {
369 auto* frameNode = reinterpret_cast<FrameNode*>(node);
370 CHECK_NULL_VOID(frameNode);
371 DatePickerModelNG::SetSelectedDate(frameNode, PickerDate(year, month, day));
372 }
373
ResetSelectedDate(ArkUINodeHandle node)374 void ResetSelectedDate(ArkUINodeHandle node)
375 {
376 auto* frameNode = reinterpret_cast<FrameNode*>(node);
377 CHECK_NULL_VOID(frameNode);
378 time_t now = time(nullptr);
379 auto currentTm = localtime(&now);
380 CHECK_NULL_VOID(currentTm);
381 PickerDate pickerDate(currentTm->tm_year + 1900, currentTm->tm_mon + 1, currentTm->tm_mday);
382
383 DatePickerModelNG::SetSelectedDate(frameNode, pickerDate);
384 }
385
SetDatePickerMode(ArkUINodeHandle node,int value)386 void SetDatePickerMode(ArkUINodeHandle node, int value)
387 {
388 auto *frameNode = reinterpret_cast<FrameNode *>(node);
389 CHECK_NULL_VOID(frameNode);
390 if (value < 0 || value > static_cast<int32_t>(DatePickerMode::MONTH_AND_DAY)) {
391 return;
392 }
393 DatePickerModelNG::SetMode(frameNode, static_cast<DatePickerMode>(value));
394 }
395
ResetDatePickerMode(ArkUINodeHandle node)396 void ResetDatePickerMode(ArkUINodeHandle node)
397 {
398 auto *frameNode = reinterpret_cast<FrameNode *>(node);
399 CHECK_NULL_VOID(frameNode);
400 DatePickerModelNG::SetMode(frameNode, DatePickerMode::DATE);
401 }
402
GetDatePickerMode(ArkUINodeHandle node)403 ArkUI_Int32 GetDatePickerMode(ArkUINodeHandle node)
404 {
405 auto *frameNode = reinterpret_cast<FrameNode *>(node);
406 CHECK_NULL_RETURN(frameNode, ERROR_INT_CODE);
407 return static_cast<int>(DatePickerModelNG::getMode(frameNode));
408 }
409
GetEnableHapticFeedback(ArkUINodeHandle node)410 ArkUI_Bool GetEnableHapticFeedback(ArkUINodeHandle node)
411 {
412 auto* frameNode = reinterpret_cast<FrameNode*>(node);
413 CHECK_NULL_RETURN(frameNode, true);
414 return DatePickerModelNG::GetEnableHapticFeedback(frameNode);
415 }
416
SetEnableHapticFeedback(ArkUINodeHandle node,int enableHapticFeedback)417 void SetEnableHapticFeedback(ArkUINodeHandle node, int enableHapticFeedback)
418 {
419 auto* frameNode = reinterpret_cast<FrameNode*>(node);
420 CHECK_NULL_VOID(frameNode);
421 DatePickerModelNG::SetEnableHapticFeedback(frameNode, enableHapticFeedback);
422 }
423
ResetEnableHapticFeedback(ArkUINodeHandle node)424 void ResetEnableHapticFeedback(ArkUINodeHandle node)
425 {
426 auto* frameNode = reinterpret_cast<FrameNode*>(node);
427 CHECK_NULL_VOID(frameNode);
428 DatePickerModelNG::SetEnableHapticFeedback(frameNode, true);
429 }
430
SetDatePickerDigitalCrownSensitivity(ArkUINodeHandle node,int32_t CrownSensitivity)431 void SetDatePickerDigitalCrownSensitivity(ArkUINodeHandle node, int32_t CrownSensitivity)
432 {
433 auto* frameNode = reinterpret_cast<FrameNode*>(node);
434 CHECK_NULL_VOID(frameNode);
435 DatePickerModelNG::SetDigitalCrownSensitivity(frameNode, CrownSensitivity);
436 }
437
ResetDatePickerDigitalCrownSensitivity(ArkUINodeHandle node)438 void ResetDatePickerDigitalCrownSensitivity(ArkUINodeHandle node)
439 {
440 auto* frameNode = reinterpret_cast<FrameNode*>(node);
441 CHECK_NULL_VOID(frameNode);
442 DatePickerModelNG::SetDigitalCrownSensitivity(frameNode, DEFAULT_CROWNSENSITIVITY);
443 }
444
SetDatePickerOnDateChangeExt(ArkUINodeHandle node,void * callback)445 void SetDatePickerOnDateChangeExt(ArkUINodeHandle node, void* callback)
446 {
447 auto* frameNode = reinterpret_cast<FrameNode*>(node);
448 CHECK_NULL_VOID(frameNode);
449 auto onDateChange = reinterpret_cast<std::function<void(const BaseEventInfo*)>*>(callback);
450 DatePickerModelNG::SetOnDateChange(frameNode, std::move(*onDateChange));
451 }
452
ResetDatePickerOnDateChange(ArkUINodeHandle node)453 void ResetDatePickerOnDateChange(ArkUINodeHandle node)
454 {
455 auto* frameNode = reinterpret_cast<FrameNode*>(node);
456 CHECK_NULL_VOID(frameNode);
457 DatePickerModelNG::SetOnDateChange(frameNode, nullptr);
458 }
459
SetDatePickerOnChangeExt(ArkUINodeHandle node,void * callback)460 void SetDatePickerOnChangeExt(ArkUINodeHandle node, void* callback)
461 {
462 auto* frameNode = reinterpret_cast<FrameNode*>(node);
463 CHECK_NULL_VOID(frameNode);
464 auto onChange = reinterpret_cast<std::function<void(const BaseEventInfo*)>*>(callback);
465 DatePickerModelNG::SetOnChange(frameNode, std::move(*onChange));
466 }
467
ResetDatePickerOnChange(ArkUINodeHandle node)468 void ResetDatePickerOnChange(ArkUINodeHandle node)
469 {
470 auto* frameNode = reinterpret_cast<FrameNode*>(node);
471 CHECK_NULL_VOID(frameNode);
472 DatePickerModelNG::SetOnChange(frameNode, nullptr);
473 }
474
475 } // namespace
476
477 namespace NodeModifier {
GetDatePickerModifier()478 const ArkUIDatePickerModifier* GetDatePickerModifier()
479 {
480 CHECK_INITIALIZED_FIELDS_BEGIN(); // don't move this line
481 static const ArkUIDatePickerModifier modifier = {
482 .getSelectedTextStyle = GetSelectedTextStyle,
483 .setSelectedTextStyle = SetSelectedTextStyle,
484 .resetSelectedTextStyle = ResetSelectedTextStyle,
485 .getDatePickerTextStyle = GetDatePickerTextStyle,
486 .setDatePickerTextStyle = SetDatePickerTextStyle,
487 .resetDatePickerTextStyle = ResetDatePickerTextStyle,
488 .getDisappearTextStyle = GetDisappearTextStyle,
489 .setDisappearTextStyle = SetDisappearTextStyle,
490 .resetDisappearTextStyle = ResetDisappearTextStyle,
491 .getLunar = GetLunar,
492 .setLunar = SetLunar,
493 .resetLunar = ResetLunar,
494 .getStartDate = GetStartDate,
495 .setStartDate = SetStartDate,
496 .resetStartDate = ResetStartDate,
497 .getEndDate = GetEndDate,
498 .setEndDate = SetEndDate,
499 .resetEndDate = ResetEndDate,
500 .getSelectedDate = GetSelectedDate,
501 .setSelectedDate = SetSelectedDate,
502 .resetSelectedDate = ResetSelectedDate,
503 .getDatePickerBackgroundColor = GetDatePickerBackgroundColor,
504 .setDatePickerBackgroundColor = SetDatePickerBackgroundColor,
505 .resetDatePickerBackgroundColor = ResetDatePickerBackgroundColor,
506 .getDatePickerMode = GetDatePickerMode,
507 .setDatePickerMode = SetDatePickerMode,
508 .resetDatePickerMode = ResetDatePickerMode,
509 .getEnableHapticFeedback = GetEnableHapticFeedback,
510 .setEnableHapticFeedback = SetEnableHapticFeedback,
511 .resetEnableHapticFeedback = ResetEnableHapticFeedback,
512 .setDatePickerDigitalCrownSensitivity = SetDatePickerDigitalCrownSensitivity,
513 .resetDatePickerDigitalCrownSensitivity = ResetDatePickerDigitalCrownSensitivity,
514 .setDatePickerOnDateChange = SetDatePickerOnDateChangeExt,
515 .resetDatePickerOnDateChange = ResetDatePickerOnDateChange,
516 .setDatePickerOnChange = SetDatePickerOnChangeExt,
517 .resetDatePickerOnChange = ResetDatePickerOnChange,
518 };
519 CHECK_INITIALIZED_FIELDS_END(modifier, 0, 0, 0); // don't move this line
520
521 return &modifier;
522 }
523
GetCJUIDatePickerModifier()524 const CJUIDatePickerModifier* GetCJUIDatePickerModifier()
525 {
526 CHECK_INITIALIZED_FIELDS_BEGIN(); // don't move this line
527 static const CJUIDatePickerModifier modifier = {
528 .getSelectedTextStyle = GetSelectedTextStyle,
529 .setSelectedTextStyle = SetSelectedTextStyle,
530 .resetSelectedTextStyle = ResetSelectedTextStyle,
531 .getDatePickerTextStyle = GetDatePickerTextStyle,
532 .setDatePickerTextStyle = SetDatePickerTextStyle,
533 .resetDatePickerTextStyle = ResetDatePickerTextStyle,
534 .getDisappearTextStyle = GetDisappearTextStyle,
535 .setDisappearTextStyle = SetDisappearTextStyle,
536 .resetDisappearTextStyle = ResetDisappearTextStyle,
537 .getLunar = GetLunar,
538 .setLunar = SetLunar,
539 .resetLunar = ResetLunar,
540 .getStartDate = GetStartDate,
541 .setStartDate = SetStartDate,
542 .resetStartDate = ResetStartDate,
543 .getEndDate = GetEndDate,
544 .setEndDate = SetEndDate,
545 .resetEndDate = ResetEndDate,
546 .getSelectedDate = GetSelectedDate,
547 .setSelectedDate = SetSelectedDate,
548 .resetSelectedDate = ResetSelectedDate,
549 .getDatePickerBackgroundColor = GetDatePickerBackgroundColor,
550 .setDatePickerBackgroundColor = SetDatePickerBackgroundColor,
551 .resetDatePickerBackgroundColor = ResetDatePickerBackgroundColor,
552 .getDatePickerMode = GetDatePickerMode,
553 .setDatePickerMode = SetDatePickerMode,
554 .resetDatePickerMode = ResetDatePickerMode,
555 .getEnableHapticFeedback = GetEnableHapticFeedback,
556 .setEnableHapticFeedback = SetEnableHapticFeedback,
557 .resetEnableHapticFeedback = ResetEnableHapticFeedback,
558 };
559 CHECK_INITIALIZED_FIELDS_END(modifier, 0, 0, 0); // don't move this line
560
561 return &modifier;
562 }
SetDatePickerOnDateChange(ArkUINodeHandle node,void * extraParam)563 void SetDatePickerOnDateChange(ArkUINodeHandle node, void* extraParam)
564 {
565 auto* frameNode = reinterpret_cast<FrameNode*>(node);
566 CHECK_NULL_VOID(frameNode);
567 auto onDateChange = [extraParam](const BaseEventInfo* info) {
568 ArkUINodeEvent event;
569 event.kind = COMPONENT_ASYNC_EVENT;
570 event.extraParam = reinterpret_cast<intptr_t>(extraParam);
571 event.componentAsyncEvent.subKind = ON_DATE_PICKER_DATE_CHANGE;
572 const auto* eventInfo = TypeInfoHelper::DynamicCast<DatePickerChangeEvent>(info);
573 std::unique_ptr<JsonValue> argsPtr = JsonUtil::ParseJsonString(eventInfo->GetSelectedStr());
574 if (!argsPtr) {
575 event.componentAsyncEvent.data[0].i32 = 1970;
576 event.componentAsyncEvent.data[1].i32 = 1;
577 event.componentAsyncEvent.data[2].i32 = 1;
578 event.componentAsyncEvent.data[3].i32 = 0;
579 event.componentAsyncEvent.data[4].i32 = 0;
580 }
581 auto year = argsPtr->GetValue("year");
582 auto month = argsPtr->GetValue("month");
583 auto day = argsPtr->GetValue("day");
584 auto hour = argsPtr->GetValue("hour");
585 auto minute = argsPtr->GetValue("minute");
586 if (year && year->IsNumber()) {
587 event.componentAsyncEvent.data[0].i32 = year->GetInt();
588 }
589 if (month && month->IsNumber()) {
590 event.componentAsyncEvent.data[1].i32 = month->GetInt();
591 }
592 if (day && day->IsNumber()) {
593 event.componentAsyncEvent.data[2].i32 = day->GetInt();
594 }
595 if (hour && hour->IsNumber()) {
596 event.componentAsyncEvent.data[3].i32 = hour->GetInt();
597 }
598 if (minute && minute->IsNumber()) {
599 event.componentAsyncEvent.data[4].i32 = minute->GetInt();
600 }
601 SendArkUISyncEvent(&event);
602 };
603 DatePickerModelNG::SetOnDateChange(frameNode, std::move(onDateChange));
604 }
605 } // namespace NodeModifier
606 } // namespace OHOS::Ace::NG
607