1 /*
2 * Copyright (c) 2022-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/components_ng/pattern/picker/datepicker_model_ng.h"
16
17 #include <utility>
18
19 #include "base/geometry/dimension.h"
20 #include "base/i18n/date_time_sequence.h"
21 #include "base/memory/ace_type.h"
22 #include "base/utils/utils.h"
23 #include "core/components/picker/picker_date_component.h"
24 #include "core/components/picker/picker_theme.h"
25 #include "core/components_ng/base/frame_node.h"
26 #include "core/components_ng/base/view_stack_processor.h"
27 #include "core/components_ng/pattern/button/button_pattern.h"
28 #include "core/components_ng/pattern/linear_layout/linear_layout_pattern.h"
29 #include "core/components_ng/pattern/picker/datepicker_column_pattern.h"
30 #include "core/components_ng/pattern/picker/datepicker_pattern.h"
31 #include "core/components_ng/pattern/stack/stack_pattern.h"
32 #include "core/components_ng/pattern/text/text_layout_property.h"
33 #include "core/components_ng/pattern/text/text_pattern.h"
34 #include "core/components_v2/inspector/inspector_constants.h"
35
36 namespace OHOS::Ace::NG {
37 namespace {
38 constexpr float PICKER_MAXFONTSCALE = 1.0f;
39 constexpr int32_t BUFFER_NODE_NUMBER = 2;
40 } // namespace
CreateDatePicker(RefPtr<PickerTheme> pickerTheme)41 void DatePickerModelNG::CreateDatePicker(RefPtr<PickerTheme> pickerTheme)
42 {
43 auto* stack = ViewStackProcessor::GetInstance();
44 auto nodeId = stack->ClaimNodeId();
45 ACE_LAYOUT_SCOPED_TRACE("Create[%s][self:%d]", V2::DATE_PICKER_ETS_TAG, nodeId);
46 RefPtr<FrameNode> dateNode = FrameNode::GetOrCreateFrameNode(
47 V2::DATE_PICKER_ETS_TAG, nodeId, []() { return AceType::MakeRefPtr<DatePickerPattern>(); });
48 auto datePickerPattern = dateNode->GetPattern<DatePickerPattern>();
49 CHECK_NULL_VOID(datePickerPattern);
50 datePickerPattern->SetPickerTag(true);
51 auto language = AceApplicationInfo::GetInstance().GetLanguage();
52 OrderResult orderResult;
53 DateTimeSequence sequence;
54 orderResult = sequence.GetDateOrder(language);
55 dateOrder = orderResult.dateOrder;
56 dateTimeOrder = orderResult.dateTimeOrder;
57 if (language == "ug") {
58 datePickerPattern->SetDateOrder("y-d-M");
59 } else {
60 datePickerPattern->SetDateOrder(dateOrder);
61 }
62 bool hasYearNode = datePickerPattern->HasYearNode();
63 bool hasMonthNode = datePickerPattern->HasMonthNode();
64 bool hasDayNode = datePickerPattern->HasDayNode();
65
66 auto yearId = datePickerPattern->GetYearId();
67 auto monthId = datePickerPattern->GetMonthId();
68 auto dayId = datePickerPattern->GetDayId();
69 CHECK_NULL_VOID(pickerTheme);
70 uint32_t showCount = pickerTheme->GetShowOptionCount() + BUFFER_NODE_NUMBER;
71 datePickerPattern->SetShowCount(showCount);
72 RefPtr<FrameNode> yearColumnNode = FrameNode::GetOrCreateFrameNode(
73 V2::COLUMN_ETS_TAG, yearId, []() { return AceType::MakeRefPtr<DatePickerColumnPattern>(); });
74 CHECK_NULL_VOID(yearColumnNode);
75 if (!hasYearNode) {
76 for (uint32_t index = 0; index < showCount; index++) {
77 auto textNode = FrameNode::CreateFrameNode(
78 V2::TEXT_ETS_TAG, ElementRegister::GetInstance()->MakeUniqueId(), AceType::MakeRefPtr<TextPattern>());
79 CHECK_NULL_VOID(textNode);
80 textNode->MountToParent(yearColumnNode);
81 }
82 yearColumnNode->MarkModifyDone();
83 datePickerPattern->SetColumn(yearColumnNode);
84 }
85
86 RefPtr<FrameNode> monthColumnNode = FrameNode::GetOrCreateFrameNode(
87 V2::COLUMN_ETS_TAG, monthId, []() { return AceType::MakeRefPtr<DatePickerColumnPattern>(); });
88 CHECK_NULL_VOID(monthColumnNode);
89 if (!hasMonthNode) {
90 for (uint32_t index = 0; index < showCount; index++) {
91 auto textNode = FrameNode::CreateFrameNode(
92 V2::TEXT_ETS_TAG, ElementRegister::GetInstance()->MakeUniqueId(), AceType::MakeRefPtr<TextPattern>());
93 CHECK_NULL_VOID(textNode);
94 textNode->MountToParent(monthColumnNode);
95 }
96 monthColumnNode->MarkModifyDone();
97 datePickerPattern->SetColumn(monthColumnNode);
98 }
99
100 RefPtr<FrameNode> dayColumnNode = FrameNode::GetOrCreateFrameNode(
101 V2::COLUMN_ETS_TAG, dayId, []() { return AceType::MakeRefPtr<DatePickerColumnPattern>(); });
102 CHECK_NULL_VOID(dayColumnNode);
103 if (!hasDayNode) {
104 for (uint32_t index = 0; index < showCount; index++) {
105 auto textNode = FrameNode::CreateFrameNode(
106 V2::TEXT_ETS_TAG, ElementRegister::GetInstance()->MakeUniqueId(), AceType::MakeRefPtr<TextPattern>());
107 CHECK_NULL_VOID(textNode);
108 textNode->MountToParent(dayColumnNode);
109 }
110 dayColumnNode->MarkModifyDone();
111 datePickerPattern->SetColumn(dayColumnNode);
112 }
113
114 if (dateOrder == "M-d-y") {
115 if (!hasMonthNode) {
116 createMonthOrDayColumnNode(monthColumnNode, dateNode, Color::BLUE);
117 }
118 if (!hasDayNode) {
119 createMonthOrDayColumnNode(dayColumnNode, dateNode, Color::GRAY);
120 }
121 if (!hasYearNode) {
122 createYearColumnNode(yearColumnNode, dateNode);
123 }
124 } else {
125 if (!hasYearNode) {
126 createYearColumnNode(yearColumnNode, dateNode);
127 }
128 if (!hasMonthNode) {
129 createMonthOrDayColumnNode(monthColumnNode, dateNode, Color::BLUE);
130 }
131 if (!hasDayNode) {
132 createMonthOrDayColumnNode(dayColumnNode, dateNode, Color::GRAY);
133 }
134 }
135
136 stack->Push(dateNode);
137 }
138
createMonthOrDayColumnNode(const RefPtr<FrameNode> & columnNode,const RefPtr<FrameNode> & dateNode,Color buttonBackgroundColor)139 void DatePickerModelNG::createMonthOrDayColumnNode(const RefPtr<FrameNode>& columnNode,
140 const RefPtr<FrameNode>& dateNode, Color buttonBackgroundColor)
141 {
142 auto stackNode = CreateStackNode();
143 auto blendNode = CreateColumnNode();
144 auto buttonNode = CreateButtonNode();
145 buttonNode->GetRenderContext()->UpdateBackgroundColor(buttonBackgroundColor);
146 buttonNode->MountToParent(stackNode);
147 columnNode->MountToParent(blendNode);
148 blendNode->MountToParent(stackNode);
149 auto layoutProperty = stackNode->GetLayoutProperty<LayoutProperty>();
150 layoutProperty->UpdateAlignment(Alignment::CENTER);
151 layoutProperty->UpdateLayoutWeight(1);
152 stackNode->MountToParent(dateNode);
153 }
154
createYearColumnNode(const RefPtr<FrameNode> & columnNode,const RefPtr<FrameNode> & dateNode)155 void DatePickerModelNG::createYearColumnNode(const RefPtr<FrameNode>& columnNode,
156 const RefPtr<FrameNode>& dateNode)
157 {
158 auto stackYearNode = CreateStackNode();
159 auto blendYearNode = CreateColumnNode();
160 auto buttonYearNode = CreateButtonNode();
161 buttonYearNode->MountToParent(stackYearNode);
162 columnNode->MountToParent(blendYearNode);
163 blendYearNode->MountToParent(stackYearNode);
164 auto layoutProperty = stackYearNode->GetLayoutProperty<LayoutProperty>();
165 layoutProperty->UpdateAlignment(Alignment::CENTER);
166 layoutProperty->UpdateLayoutWeight(1);
167 stackYearNode->MountToParent(dateNode);
168 }
169
CreateStackNode()170 RefPtr<FrameNode> DatePickerModelNG::CreateStackNode()
171 {
172 auto stackId = ElementRegister::GetInstance()->MakeUniqueId();
173 return FrameNode::GetOrCreateFrameNode(
174 V2::STACK_ETS_TAG, stackId, []() { return AceType::MakeRefPtr<StackPattern>(); });
175 }
176
CreateColumnNode()177 RefPtr<FrameNode> DatePickerModelNG::CreateColumnNode()
178 {
179 auto columnId = ElementRegister::GetInstance()->MakeUniqueId();
180 return FrameNode::GetOrCreateFrameNode(
181 V2::COLUMN_ETS_TAG, columnId, []() { return AceType::MakeRefPtr<LinearLayoutPattern>(true); });
182 }
183
CreateButtonNode()184 RefPtr<FrameNode> DatePickerModelNG::CreateButtonNode()
185 {
186 auto buttonId = ElementRegister::GetInstance()->MakeUniqueId();
187 return FrameNode::GetOrCreateFrameNode(
188 V2::BUTTON_ETS_TAG, buttonId, []() { return AceType::MakeRefPtr<ButtonPattern>(); });
189 }
190
CreateFrameNode(int32_t nodeId)191 RefPtr<FrameNode> DatePickerModelNG::CreateFrameNode(int32_t nodeId)
192 {
193 auto dateNode = FrameNode::GetOrCreateFrameNode(
194 V2::DATE_PICKER_ETS_TAG, nodeId, []() { return AceType::MakeRefPtr<DatePickerPattern>(); });
195 auto datePickerPattern = dateNode->GetPattern<DatePickerPattern>();
196 CHECK_NULL_RETURN(datePickerPattern, dateNode);
197 datePickerPattern->SetPickerTag(true);
198 bool hasYearNode = datePickerPattern->HasYearNode();
199 bool hasMonthNode = datePickerPattern->HasMonthNode();
200 bool hasDayNode = datePickerPattern->HasDayNode();
201
202 auto yearId = datePickerPattern->GetYearId();
203 auto monthId = datePickerPattern->GetMonthId();
204 auto dayId = datePickerPattern->GetDayId();
205
206 auto pipeline = PipelineBase::GetCurrentContextSafely();
207 CHECK_NULL_RETURN(pipeline, dateNode);
208 auto pickerTheme = pipeline->GetTheme<PickerTheme>();
209 CHECK_NULL_RETURN(pickerTheme, dateNode);
210 uint32_t showCount = pickerTheme->GetShowOptionCount() + BUFFER_NODE_NUMBER;
211 datePickerPattern->SetShowCount(showCount);
212 SetDefaultAttributes(dateNode, pickerTheme);
213
214 auto yearColumnNode = FrameNode::GetOrCreateFrameNode(
215 V2::COLUMN_ETS_TAG, yearId, []() { return AceType::MakeRefPtr<DatePickerColumnPattern>(); });
216 CHECK_NULL_RETURN(yearColumnNode, dateNode);
217 if (!hasYearNode) {
218 for (uint32_t index = 0; index < showCount; index++) {
219 auto textNode = FrameNode::CreateFrameNode(
220 V2::TEXT_ETS_TAG, ElementRegister::GetInstance()->MakeUniqueId(), AceType::MakeRefPtr<TextPattern>());
221 CHECK_NULL_RETURN(textNode, dateNode);
222 textNode->MountToParent(yearColumnNode);
223 }
224 yearColumnNode->MarkModifyDone();
225 datePickerPattern->SetColumn(yearColumnNode);
226 }
227
228 auto monthColumnNode = FrameNode::GetOrCreateFrameNode(
229 V2::COLUMN_ETS_TAG, monthId, []() { return AceType::MakeRefPtr<DatePickerColumnPattern>(); });
230 CHECK_NULL_RETURN(monthColumnNode, dateNode);
231 if (!hasMonthNode) {
232 for (uint32_t index = 0; index < showCount; index++) {
233 auto textNode = FrameNode::CreateFrameNode(
234 V2::TEXT_ETS_TAG, ElementRegister::GetInstance()->MakeUniqueId(), AceType::MakeRefPtr<TextPattern>());
235 CHECK_NULL_RETURN(textNode, dateNode);
236 textNode->MountToParent(monthColumnNode);
237 }
238 monthColumnNode->MarkModifyDone();
239 datePickerPattern->SetColumn(monthColumnNode);
240 }
241
242 auto dayColumnNode = FrameNode::GetOrCreateFrameNode(
243 V2::COLUMN_ETS_TAG, dayId, []() { return AceType::MakeRefPtr<DatePickerColumnPattern>(); });
244 CHECK_NULL_RETURN(dayColumnNode, dateNode);
245 if (!hasDayNode) {
246 for (uint32_t index = 0; index < showCount; index++) {
247 auto textNode = FrameNode::CreateFrameNode(
248 V2::TEXT_ETS_TAG, ElementRegister::GetInstance()->MakeUniqueId(), AceType::MakeRefPtr<TextPattern>());
249 CHECK_NULL_RETURN(textNode, dateNode);
250 textNode->MountToParent(dayColumnNode);
251 }
252 dayColumnNode->MarkModifyDone();
253 datePickerPattern->SetColumn(dayColumnNode);
254 }
255
256 if (!hasYearNode) {
257 auto stackYearNode = CreateStackNode();
258 auto blendYearNode = CreateColumnNode();
259 auto buttonYearNode = CreateButtonNode();
260 buttonYearNode->MountToParent(stackYearNode);
261 yearColumnNode->MountToParent(blendYearNode);
262 blendYearNode->MountToParent(stackYearNode);
263 auto layoutProperty = stackYearNode->GetLayoutProperty<LayoutProperty>();
264 layoutProperty->UpdateAlignment(Alignment::CENTER);
265 layoutProperty->UpdateLayoutWeight(1);
266 stackYearNode->MountToParent(dateNode);
267 }
268 if (!hasMonthNode) {
269 auto stackMonthNode = CreateStackNode();
270 auto blendMonthNode = CreateColumnNode();
271 auto buttonMonthNode = CreateButtonNode();
272 buttonMonthNode->GetRenderContext()->UpdateBackgroundColor(Color::BLUE);
273 buttonMonthNode->MountToParent(stackMonthNode);
274 monthColumnNode->MountToParent(blendMonthNode);
275 blendMonthNode->MountToParent(stackMonthNode);
276 auto layoutProperty = stackMonthNode->GetLayoutProperty<LayoutProperty>();
277 layoutProperty->UpdateAlignment(Alignment::CENTER);
278 layoutProperty->UpdateLayoutWeight(1);
279 stackMonthNode->MountToParent(dateNode);
280 }
281 if (!hasDayNode) {
282 auto stackDayNode = CreateStackNode();
283 auto blendDayNode = CreateColumnNode();
284 auto buttonDayNode = CreateButtonNode();
285 buttonDayNode->GetRenderContext()->UpdateBackgroundColor(Color::GRAY);
286 buttonDayNode->MountToParent(stackDayNode);
287 dayColumnNode->MountToParent(blendDayNode);
288 blendDayNode->MountToParent(stackDayNode);
289 auto layoutProperty = stackDayNode->GetLayoutProperty<LayoutProperty>();
290 layoutProperty->UpdateAlignment(Alignment::CENTER);
291 layoutProperty->UpdateLayoutWeight(1);
292 stackDayNode->MountToParent(dateNode);
293 }
294 return dateNode;
295 }
296
SetShowLunar(bool lunar)297 void DatePickerModelNG::SetShowLunar(bool lunar)
298 {
299 ACE_UPDATE_LAYOUT_PROPERTY(DataPickerRowLayoutProperty, Lunar, lunar);
300 }
301
SetStartDate(const PickerDate & value)302 void DatePickerModelNG::SetStartDate(const PickerDate& value)
303 {
304 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
305 CHECK_NULL_VOID(frameNode);
306 auto datePickerPattern = frameNode->GetPattern<DatePickerPattern>();
307 CHECK_NULL_VOID(datePickerPattern);
308 datePickerPattern->SetStartDate(value);
309 ACE_UPDATE_LAYOUT_PROPERTY(DataPickerRowLayoutProperty, StartDate, datePickerPattern->GetStartDateLunar());
310 }
311
SetEndDate(const PickerDate & value)312 void DatePickerModelNG::SetEndDate(const PickerDate& value)
313 {
314 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
315 CHECK_NULL_VOID(frameNode);
316 auto datePickerPattern = frameNode->GetPattern<DatePickerPattern>();
317 CHECK_NULL_VOID(datePickerPattern);
318 datePickerPattern->SetEndDate(value);
319 ACE_UPDATE_LAYOUT_PROPERTY(DataPickerRowLayoutProperty, EndDate, datePickerPattern->GetEndDateLunar());
320 }
321
SetSelectedDate(const PickerDate & value)322 void DatePickerModelNG::SetSelectedDate(const PickerDate& value)
323 {
324 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
325 CHECK_NULL_VOID(frameNode);
326 auto datePickerPattern = frameNode->GetPattern<DatePickerPattern>();
327 CHECK_NULL_VOID(datePickerPattern);
328 datePickerPattern->SetSelectDate(value);
329 ACE_UPDATE_LAYOUT_PROPERTY(DataPickerRowLayoutProperty, SelectedDate, datePickerPattern->GetSelectDate());
330 }
331
SetOnChange(DateChangeEvent && onChange)332 void DatePickerModelNG::SetOnChange(DateChangeEvent&& onChange)
333 {
334 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
335 CHECK_NULL_VOID(frameNode);
336 auto eventHub = frameNode->GetEventHub<DatePickerEventHub>();
337 CHECK_NULL_VOID(eventHub);
338 eventHub->SetOnChange(std::move(onChange));
339 }
340
SetOnDateChange(DateChangeEvent && onChange)341 void DatePickerModelNG::SetOnDateChange(DateChangeEvent&& onChange)
342 {
343 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
344 CHECK_NULL_VOID(frameNode);
345 auto eventHub = frameNode->GetEventHub<DatePickerEventHub>();
346 CHECK_NULL_VOID(eventHub);
347 eventHub->SetOnDateChange(std::move(onChange));
348 }
349
SetOnDateChange(FrameNode * frameNode,DateChangeEvent && onChange)350 void DatePickerModelNG::SetOnDateChange(FrameNode* frameNode, DateChangeEvent&& onChange)
351 {
352 CHECK_NULL_VOID(frameNode);
353 auto eventHub = frameNode->GetEventHub<DatePickerEventHub>();
354 CHECK_NULL_VOID(eventHub);
355 eventHub->SetOnDateChange(std::move(onChange));
356 }
357
getDisappearTextStyle(FrameNode * frameNode)358 PickerTextStyle DatePickerModelNG::getDisappearTextStyle(FrameNode* frameNode)
359 {
360 PickerTextStyle pickerTextStyle;
361 CHECK_NULL_RETURN(frameNode, pickerTextStyle);
362 auto context = frameNode->GetContext();
363 CHECK_NULL_RETURN(context, pickerTextStyle);
364 auto theme = context->GetTheme<PickerTheme>();
365 CHECK_NULL_RETURN(theme, pickerTextStyle);
366 auto style = theme->GetDisappearOptionStyle();
367 ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(
368 DataPickerRowLayoutProperty, DisappearFontSize, pickerTextStyle.fontSize, frameNode, style.GetFontSize());
369 ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(
370 DataPickerRowLayoutProperty, DisappearColor, pickerTextStyle.textColor, frameNode, style.GetTextColor());
371 ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(
372 DataPickerRowLayoutProperty, DisappearWeight, pickerTextStyle.fontWeight, frameNode, style.GetFontWeight());
373 ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(DataPickerRowLayoutProperty, DisappearFontFamily,
374 pickerTextStyle.fontFamily, frameNode, style.GetFontFamilies());
375 ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(DataPickerRowLayoutProperty, DisappearFontStyle,
376 pickerTextStyle.fontStyle, frameNode, style.GetFontStyle());
377 return pickerTextStyle;
378 }
379
SetDisappearTextStyle(const RefPtr<PickerTheme> & theme,const PickerTextStyle & value)380 void DatePickerModelNG::SetDisappearTextStyle(const RefPtr<PickerTheme>& theme, const PickerTextStyle& value)
381 {
382 CHECK_NULL_VOID(theme);
383 auto disappearStyle = theme->GetDisappearOptionStyle();
384 if (value.fontSize.has_value() && value.fontSize->IsValid()) {
385 ACE_UPDATE_LAYOUT_PROPERTY(DataPickerRowLayoutProperty, DisappearFontSize,
386 ConvertFontScaleValue(value.fontSize.value()));
387 } else {
388 ACE_UPDATE_LAYOUT_PROPERTY(DataPickerRowLayoutProperty, DisappearFontSize,
389 ConvertFontScaleValue(disappearStyle.GetFontSize()));
390 }
391 ACE_UPDATE_LAYOUT_PROPERTY(
392 DataPickerRowLayoutProperty, DisappearColor, value.textColor.value_or(disappearStyle.GetTextColor()));
393 ACE_UPDATE_LAYOUT_PROPERTY(
394 DataPickerRowLayoutProperty, DisappearWeight, value.fontWeight.value_or(disappearStyle.GetFontWeight()));
395 ACE_UPDATE_LAYOUT_PROPERTY(
396 DataPickerRowLayoutProperty, DisappearFontFamily, value.fontFamily.value_or(disappearStyle.GetFontFamilies()));
397 ACE_UPDATE_LAYOUT_PROPERTY(
398 DataPickerRowLayoutProperty, DisappearFontStyle, value.fontStyle.value_or(disappearStyle.GetFontStyle()));
399 }
400
getNormalTextStyle(FrameNode * frameNode)401 PickerTextStyle DatePickerModelNG::getNormalTextStyle(FrameNode* frameNode)
402 {
403 PickerTextStyle pickerTextStyle;
404 CHECK_NULL_RETURN(frameNode, pickerTextStyle);
405 auto context = frameNode->GetContext();
406 CHECK_NULL_RETURN(context, pickerTextStyle);
407 auto theme = context->GetTheme<PickerTheme>();
408 CHECK_NULL_RETURN(theme, pickerTextStyle);
409 auto style = theme->GetOptionStyle(false, false);
410 ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(
411 DataPickerRowLayoutProperty, FontSize, pickerTextStyle.fontSize, frameNode,
412 ConvertFontScaleValue(style.GetFontSize()));
413 ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(
414 DataPickerRowLayoutProperty, Color, pickerTextStyle.textColor, frameNode, style.GetTextColor());
415 ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(
416 DataPickerRowLayoutProperty, Weight, pickerTextStyle.fontWeight, frameNode, style.GetFontWeight());
417 ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(DataPickerRowLayoutProperty, FontFamily,
418 pickerTextStyle.fontFamily, frameNode, style.GetFontFamilies());
419 ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(DataPickerRowLayoutProperty, FontStyle,
420 pickerTextStyle.fontStyle, frameNode, style.GetFontStyle());
421 return pickerTextStyle;
422 }
423
SetNormalTextStyle(const RefPtr<PickerTheme> & theme,const PickerTextStyle & value)424 void DatePickerModelNG::SetNormalTextStyle(const RefPtr<PickerTheme>& theme, const PickerTextStyle& value)
425 {
426 CHECK_NULL_VOID(theme);
427 auto normalStyle = theme->GetOptionStyle(false, false);
428 if (value.fontSize.has_value() && value.fontSize->IsValid()) {
429 ACE_UPDATE_LAYOUT_PROPERTY(DataPickerRowLayoutProperty, FontSize,
430 ConvertFontScaleValue(value.fontSize.value()));
431 } else {
432 ACE_UPDATE_LAYOUT_PROPERTY(DataPickerRowLayoutProperty, FontSize,
433 ConvertFontScaleValue(normalStyle.GetFontSize()));
434 }
435 ACE_UPDATE_LAYOUT_PROPERTY(
436 DataPickerRowLayoutProperty, Color, value.textColor.value_or(normalStyle.GetTextColor()));
437 ACE_UPDATE_LAYOUT_PROPERTY(
438 DataPickerRowLayoutProperty, Weight, value.fontWeight.value_or(normalStyle.GetFontWeight()));
439 ACE_UPDATE_LAYOUT_PROPERTY(
440 DataPickerRowLayoutProperty, FontFamily, value.fontFamily.value_or(normalStyle.GetFontFamilies()));
441 ACE_UPDATE_LAYOUT_PROPERTY(
442 DataPickerRowLayoutProperty, FontStyle, value.fontStyle.value_or(normalStyle.GetFontStyle()));
443 }
444
getSelectedTextStyle(FrameNode * frameNode)445 PickerTextStyle DatePickerModelNG::getSelectedTextStyle(FrameNode* frameNode)
446 {
447 PickerTextStyle pickerTextStyle;
448 CHECK_NULL_RETURN(frameNode, pickerTextStyle);
449 auto context = frameNode->GetContext();
450 CHECK_NULL_RETURN(context, pickerTextStyle);
451 auto theme = context->GetTheme<PickerTheme>();
452 CHECK_NULL_RETURN(theme, pickerTextStyle);
453 auto style = theme->GetOptionStyle(true, false);
454 ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(
455 DataPickerRowLayoutProperty, SelectedFontSize, pickerTextStyle.fontSize, frameNode,
456 ConvertFontScaleValue(style.GetFontSize()));
457 ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(
458 DataPickerRowLayoutProperty, SelectedColor, pickerTextStyle.textColor, frameNode, style.GetTextColor());
459 ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(
460 DataPickerRowLayoutProperty, SelectedWeight, pickerTextStyle.fontWeight, frameNode, style.GetFontWeight());
461 ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(DataPickerRowLayoutProperty, SelectedFontFamily,
462 pickerTextStyle.fontFamily, frameNode, style.GetFontFamilies());
463 ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(DataPickerRowLayoutProperty, SelectedFontStyle,
464 pickerTextStyle.fontStyle, frameNode, style.GetFontStyle());
465 return pickerTextStyle;
466 }
467
SetSelectedTextStyle(const RefPtr<PickerTheme> & theme,const PickerTextStyle & value)468 void DatePickerModelNG::SetSelectedTextStyle(const RefPtr<PickerTheme>& theme, const PickerTextStyle& value)
469 {
470 CHECK_NULL_VOID(theme);
471 auto selectedStyle = theme->GetOptionStyle(true, false);
472 if (value.fontSize.has_value() && value.fontSize->IsValid()) {
473 ACE_UPDATE_LAYOUT_PROPERTY(DataPickerRowLayoutProperty, SelectedFontSize,
474 ConvertFontScaleValue(value.fontSize.value()));
475 } else {
476 ACE_UPDATE_LAYOUT_PROPERTY(DataPickerRowLayoutProperty, SelectedFontSize,
477 ConvertFontScaleValue(selectedStyle.GetFontSize()));
478 }
479 ACE_UPDATE_LAYOUT_PROPERTY(
480 DataPickerRowLayoutProperty, SelectedColor, value.textColor.value_or(selectedStyle.GetTextColor()));
481 ACE_UPDATE_LAYOUT_PROPERTY(
482 DataPickerRowLayoutProperty, SelectedWeight, value.fontWeight.value_or(selectedStyle.GetFontWeight()));
483 ACE_UPDATE_LAYOUT_PROPERTY(
484 DataPickerRowLayoutProperty, SelectedFontFamily, value.fontFamily.value_or(selectedStyle.GetFontFamilies()));
485 ACE_UPDATE_LAYOUT_PROPERTY(
486 DataPickerRowLayoutProperty, SelectedFontStyle, value.fontStyle.value_or(selectedStyle.GetFontStyle()));
487 }
488
SetDefaultAttributes(RefPtr<FrameNode> & frameNode,const RefPtr<PickerTheme> & pickerTheme)489 void DatePickerModelNG::SetDefaultAttributes(RefPtr<FrameNode>& frameNode, const RefPtr<PickerTheme>& pickerTheme)
490 {
491 auto selectedStyle = pickerTheme->GetOptionStyle(true, false);
492 ACE_UPDATE_NODE_LAYOUT_PROPERTY(
493 DataPickerRowLayoutProperty, SelectedFontSize,
494 ConvertFontScaleValue(selectedStyle.GetFontSize()), frameNode);
495 ACE_UPDATE_NODE_LAYOUT_PROPERTY(
496 DataPickerRowLayoutProperty, SelectedColor, selectedStyle.GetTextColor(), frameNode);
497 ACE_UPDATE_NODE_LAYOUT_PROPERTY(
498 DataPickerRowLayoutProperty, SelectedWeight, selectedStyle.GetFontWeight(), frameNode);
499 ACE_UPDATE_NODE_LAYOUT_PROPERTY(
500 DataPickerRowLayoutProperty, SelectedFontFamily, selectedStyle.GetFontFamilies(), frameNode);
501 ACE_UPDATE_NODE_LAYOUT_PROPERTY(
502 DataPickerRowLayoutProperty, SelectedFontStyle, selectedStyle.GetFontStyle(), frameNode);
503
504 auto disappearStyle = pickerTheme->GetDisappearOptionStyle();
505 ACE_UPDATE_NODE_LAYOUT_PROPERTY(
506 DataPickerRowLayoutProperty, DisappearFontSize,
507 ConvertFontScaleValue(disappearStyle.GetFontSize()), frameNode);
508 ACE_UPDATE_NODE_LAYOUT_PROPERTY(
509 DataPickerRowLayoutProperty, DisappearColor, disappearStyle.GetTextColor(), frameNode);
510 ACE_UPDATE_NODE_LAYOUT_PROPERTY(
511 DataPickerRowLayoutProperty, DisappearWeight, disappearStyle.GetFontWeight(), frameNode);
512 ACE_UPDATE_NODE_LAYOUT_PROPERTY(
513 DataPickerRowLayoutProperty, DisappearFontFamily, disappearStyle.GetFontFamilies(), frameNode);
514 ACE_UPDATE_NODE_LAYOUT_PROPERTY(
515 DataPickerRowLayoutProperty, DisappearFontStyle, disappearStyle.GetFontStyle(), frameNode);
516
517 auto normalStyle = pickerTheme->GetOptionStyle(false, false);
518 ACE_UPDATE_NODE_LAYOUT_PROPERTY(DataPickerRowLayoutProperty, FontSize,
519 ConvertFontScaleValue(normalStyle.GetFontSize()), frameNode);
520 ACE_UPDATE_NODE_LAYOUT_PROPERTY(DataPickerRowLayoutProperty, Color, normalStyle.GetTextColor(), frameNode);
521 ACE_UPDATE_NODE_LAYOUT_PROPERTY(DataPickerRowLayoutProperty, Weight, normalStyle.GetFontWeight(), frameNode);
522 ACE_UPDATE_NODE_LAYOUT_PROPERTY(DataPickerRowLayoutProperty, FontFamily, normalStyle.GetFontFamilies(), frameNode);
523 ACE_UPDATE_NODE_LAYOUT_PROPERTY(DataPickerRowLayoutProperty, FontStyle, normalStyle.GetFontStyle(), frameNode);
524 }
525
HasUserDefinedDisappearFontFamily(bool isUserDefined)526 void DatePickerModelNG::HasUserDefinedDisappearFontFamily(bool isUserDefined)
527 {
528 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
529 CHECK_NULL_VOID(frameNode);
530 auto datePickerPattern = frameNode->GetPattern<DatePickerPattern>();
531 CHECK_NULL_VOID(datePickerPattern);
532 datePickerPattern->HasUserDefinedDisappearFontFamily(isUserDefined);
533 }
534
HasUserDefinedNormalFontFamily(bool isUserDefined)535 void DatePickerModelNG::HasUserDefinedNormalFontFamily(bool isUserDefined)
536 {
537 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
538 CHECK_NULL_VOID(frameNode);
539 auto datePickerPattern = frameNode->GetPattern<DatePickerPattern>();
540 CHECK_NULL_VOID(datePickerPattern);
541 datePickerPattern->HasUserDefinedNormalFontFamily(isUserDefined);
542 }
543
HasUserDefinedSelectedFontFamily(bool isUserDefined)544 void DatePickerModelNG::HasUserDefinedSelectedFontFamily(bool isUserDefined)
545 {
546 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
547 CHECK_NULL_VOID(frameNode);
548 auto datePickerPattern = frameNode->GetPattern<DatePickerPattern>();
549 CHECK_NULL_VOID(datePickerPattern);
550 datePickerPattern->HasUserDefinedSelectedFontFamily(isUserDefined);
551 }
552
SetBackgroundColor(const Color & color)553 void DatePickerModelNG::SetBackgroundColor(const Color& color)
554 {
555 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
556 CHECK_NULL_VOID(frameNode);
557 auto datePickerPattern = frameNode->GetPattern<DatePickerPattern>();
558 CHECK_NULL_VOID(datePickerPattern);
559 datePickerPattern->SetBackgroundColor(color);
560 }
561
SetBackgroundColor(FrameNode * frameNode,const Color & color)562 void DatePickerModelNG::SetBackgroundColor(FrameNode* frameNode, const Color& color)
563 {
564 CHECK_NULL_VOID(frameNode);
565 auto datePickerPattern = frameNode->GetPattern<DatePickerPattern>();
566 CHECK_NULL_VOID(datePickerPattern);
567 datePickerPattern->SetBackgroundColor(color);
568 }
569
SetStartDate(FrameNode * frameNode,const PickerDate & value)570 void DatePickerModelNG::SetStartDate(FrameNode* frameNode, const PickerDate& value)
571 {
572 CHECK_NULL_VOID(frameNode);
573 auto datePickerPattern = frameNode->GetPattern<DatePickerPattern>();
574 CHECK_NULL_VOID(datePickerPattern);
575 datePickerPattern->SetStartDate(value);
576 ACE_UPDATE_LAYOUT_PROPERTY(DataPickerRowLayoutProperty, StartDate, datePickerPattern->GetStartDateLunar());
577 }
578
SetEndDate(FrameNode * frameNode,const PickerDate & value)579 void DatePickerModelNG::SetEndDate(FrameNode* frameNode, const PickerDate& value)
580 {
581 CHECK_NULL_VOID(frameNode);
582 auto datePickerPattern = frameNode->GetPattern<DatePickerPattern>();
583 CHECK_NULL_VOID(datePickerPattern);
584 datePickerPattern->SetEndDate(value);
585 ACE_UPDATE_LAYOUT_PROPERTY(DataPickerRowLayoutProperty, EndDate, datePickerPattern->GetEndDateLunar());
586 }
587
SetSelectedDate(FrameNode * frameNode,const PickerDate & value)588 void DatePickerModelNG::SetSelectedDate(FrameNode* frameNode, const PickerDate& value)
589 {
590 CHECK_NULL_VOID(frameNode);
591 auto datePickerPattern = frameNode->GetPattern<DatePickerPattern>();
592 CHECK_NULL_VOID(datePickerPattern);
593 datePickerPattern->SetSelectDate(value);
594 ACE_UPDATE_LAYOUT_PROPERTY(DataPickerRowLayoutProperty, SelectedDate, datePickerPattern->GetSelectDate());
595 }
596
SetChangeEvent(DateChangeEvent && onChange)597 void DatePickerModelNG::SetChangeEvent(DateChangeEvent&& onChange)
598 {
599 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
600 CHECK_NULL_VOID(frameNode);
601 auto eventHub = frameNode->GetEventHub<DatePickerEventHub>();
602 CHECK_NULL_VOID(eventHub);
603 eventHub->SetChangeEvent(std::move(onChange));
604 }
605
SetDatePickerDialogShow(PickerDialogInfo & pickerDialog,NG::DatePickerSettingData & settingData,std::function<void ()> && onCancel,std::function<void (const std::string &)> && onAccept,std::function<void (const std::string &)> && onChange,std::function<void (const std::string &)> && onDateAccept,std::function<void (const std::string &)> && onDateChange,DatePickerType pickerType,PickerDialogEvent & pickerDialogEvent,const std::vector<ButtonInfo> & buttonInfos)606 void DatePickerDialogModelNG::SetDatePickerDialogShow(PickerDialogInfo& pickerDialog,
607 NG::DatePickerSettingData& settingData, std::function<void()>&& onCancel,
608 std::function<void(const std::string&)>&& onAccept, std::function<void(const std::string&)>&& onChange,
609 std::function<void(const std::string&)>&& onDateAccept, std::function<void(const std::string&)>&& onDateChange,
610 DatePickerType pickerType, PickerDialogEvent& pickerDialogEvent, const std::vector<ButtonInfo>& buttonInfos)
611 {
612 auto container = Container::Current();
613 if (!container) {
614 return;
615 }
616 auto pipelineContext = AccessibilityManager::DynamicCast<NG::PipelineContext>(container->GetPipelineContext());
617 if (!pipelineContext) {
618 return;
619 }
620
621 auto executor = pipelineContext->GetTaskExecutor();
622 if (!executor) {
623 return;
624 }
625 auto pipeline = PipelineBase::GetCurrentContext();
626 CHECK_NULL_VOID(pipeline);
627 auto theme = pipeline->GetTheme<DialogTheme>();
628 CHECK_NULL_VOID(theme);
629 std::map<std::string, NG::DialogEvent> dialogEvent;
630 std::map<std::string, NG::DialogGestureEvent> dialogCancelEvent;
631 std::map<std::string, NG::DialogCancelEvent> dialogLifeCycleEvent;
632 dialogEvent["changeId"] = onChange;
633 dialogEvent["acceptId"] = onAccept;
634 dialogEvent["dateChangeId"] = onDateChange;
635 dialogEvent["dateAcceptId"] = onDateAccept;
636 auto func = [onCancel](const GestureEvent& /* info */) {
637 if (onCancel) {
638 onCancel();
639 }
640 };
641 dialogCancelEvent["cancelId"] = func;
642 dialogLifeCycleEvent["didAppearId"] = pickerDialogEvent.onDidAppear;
643 dialogLifeCycleEvent["didDisappearId"] = pickerDialogEvent.onDidDisappear;
644 dialogLifeCycleEvent["willAppearId"] = pickerDialogEvent.onWillAppear;
645 dialogLifeCycleEvent["willDisappearId"] = pickerDialogEvent.onWillDisappear;
646 DialogProperties properties;
647 if (Container::LessThanAPIVersion(PlatformVersion::VERSION_ELEVEN)) {
648 properties.alignment = theme->GetAlignment();
649 }
650 if (pickerDialog.alignment.has_value()) {
651 properties.alignment = pickerDialog.alignment.value();
652 }
653 if (pickerDialog.backgroundColor.has_value()) {
654 properties.backgroundColor = pickerDialog.backgroundColor.value();
655 }
656 if (pickerDialog.backgroundBlurStyle.has_value()) {
657 properties.backgroundBlurStyle = pickerDialog.backgroundBlurStyle.value();
658 }
659 if (pickerDialog.shadow.has_value()) {
660 properties.shadow = pickerDialog.shadow.value();
661 }
662
663 properties.customStyle = false;
664 if (Container::LessThanAPIVersion(PlatformVersion::VERSION_ELEVEN)) {
665 properties.offset = DimensionOffset(Offset(0, -theme->GetMarginBottom().ConvertToPx()));
666 }
667 if (pickerDialog.offset.has_value()) {
668 properties.offset = pickerDialog.offset.value();
669 }
670
671 properties.maskRect = pickerDialog.maskRect;
672
673 std::map<std::string, PickerDate> datePickerProperty;
674 std::map<std::string, PickerTime> timePickerProperty;
675 if (pickerDialog.isStartDate == true) {
676 settingData.datePickerProperty["start"] = pickerDialog.parseStartDate;
677 }
678 if (pickerDialog.isEndDate == true) {
679 settingData.datePickerProperty["end"] = pickerDialog.parseEndDate;
680 }
681 if (pickerDialog.isSelectedDate == true) {
682 settingData.datePickerProperty["selected"] = pickerDialog.parseSelectedDate;
683 settingData.timePickerProperty["selected"] = pickerDialog.pickerTime;
684 }
685 auto context = AccessibilityManager::DynamicCast<NG::PipelineContext>(pipelineContext);
686 auto overlayManager = context ? context->GetOverlayManager() : nullptr;
687 executor->PostTask(
688 [properties, settingData, dialogEvent, dialogCancelEvent, dialogLifeCycleEvent, buttonInfos,
689 weak = WeakPtr<NG::OverlayManager>(overlayManager)] {
690 auto overlayManager = weak.Upgrade();
691 CHECK_NULL_VOID(overlayManager);
692 overlayManager->ShowDateDialog(
693 properties, settingData, dialogEvent, dialogCancelEvent, dialogLifeCycleEvent, buttonInfos);
694 },
695 TaskExecutor::TaskType::UI, "ArkUIDatePickerShowDateDialog");
696 }
697
SetSelectedTextStyle(FrameNode * frameNode,const RefPtr<PickerTheme> & theme,const PickerTextStyle & value)698 void DatePickerModelNG::SetSelectedTextStyle(
699 FrameNode* frameNode, const RefPtr<PickerTheme>& theme, const PickerTextStyle& value)
700 {
701 CHECK_NULL_VOID(theme);
702 auto selectedStyle = theme->GetOptionStyle(true, false);
703 if (value.fontSize.has_value() && value.fontSize->IsValid()) {
704 ACE_UPDATE_NODE_LAYOUT_PROPERTY(
705 DataPickerRowLayoutProperty, SelectedFontSize,
706 ConvertFontScaleValue(value.fontSize.value()), frameNode);
707 } else {
708 ACE_UPDATE_NODE_LAYOUT_PROPERTY(
709 DataPickerRowLayoutProperty, SelectedFontSize,
710 ConvertFontScaleValue(selectedStyle.GetFontSize()), frameNode);
711 }
712 ACE_UPDATE_NODE_LAYOUT_PROPERTY(
713 DataPickerRowLayoutProperty, SelectedColor, value.textColor.value_or(selectedStyle.GetTextColor()), frameNode);
714 ACE_UPDATE_NODE_LAYOUT_PROPERTY(DataPickerRowLayoutProperty, SelectedWeight,
715 value.fontWeight.value_or(selectedStyle.GetFontWeight()), frameNode);
716 ACE_UPDATE_NODE_LAYOUT_PROPERTY(DataPickerRowLayoutProperty, SelectedFontFamily,
717 value.fontFamily.value_or(selectedStyle.GetFontFamilies()), frameNode);
718 ACE_UPDATE_NODE_LAYOUT_PROPERTY(DataPickerRowLayoutProperty, SelectedFontStyle,
719 value.fontStyle.value_or(selectedStyle.GetFontStyle()), frameNode);
720 }
721
SetNormalTextStyle(FrameNode * frameNode,const RefPtr<PickerTheme> & theme,const PickerTextStyle & value)722 void DatePickerModelNG::SetNormalTextStyle(
723 FrameNode* frameNode, const RefPtr<PickerTheme>& theme, const PickerTextStyle& value)
724 {
725 CHECK_NULL_VOID(theme);
726 auto normalStyle = theme->GetOptionStyle(false, false);
727 if (value.fontSize.has_value() && value.fontSize->IsValid()) {
728 ACE_UPDATE_NODE_LAYOUT_PROPERTY(DataPickerRowLayoutProperty, FontSize,
729 ConvertFontScaleValue(value.fontSize.value()), frameNode);
730 } else {
731 ACE_UPDATE_NODE_LAYOUT_PROPERTY(DataPickerRowLayoutProperty, FontSize,
732 ConvertFontScaleValue(normalStyle.GetFontSize()), frameNode);
733 }
734 ACE_UPDATE_NODE_LAYOUT_PROPERTY(
735 DataPickerRowLayoutProperty, Color, value.textColor.value_or(normalStyle.GetTextColor()), frameNode);
736 ACE_UPDATE_NODE_LAYOUT_PROPERTY(
737 DataPickerRowLayoutProperty, Weight, value.fontWeight.value_or(normalStyle.GetFontWeight()), frameNode);
738 ACE_UPDATE_NODE_LAYOUT_PROPERTY(
739 DataPickerRowLayoutProperty, FontFamily, value.fontFamily.value_or(normalStyle.GetFontFamilies()), frameNode);
740 ACE_UPDATE_NODE_LAYOUT_PROPERTY(
741 DataPickerRowLayoutProperty, FontStyle, value.fontStyle.value_or(normalStyle.GetFontStyle()), frameNode);
742 }
743
SetDisappearTextStyle(FrameNode * frameNode,const RefPtr<PickerTheme> & theme,const PickerTextStyle & value)744 void DatePickerModelNG::SetDisappearTextStyle(
745 FrameNode* frameNode, const RefPtr<PickerTheme>& theme, const PickerTextStyle& value)
746 {
747 CHECK_NULL_VOID(theme);
748 auto disappearStyle = theme->GetDisappearOptionStyle();
749 if (value.fontSize.has_value() && value.fontSize->IsValid()) {
750 ACE_UPDATE_NODE_LAYOUT_PROPERTY(
751 DataPickerRowLayoutProperty, DisappearFontSize,
752 ConvertFontScaleValue(value.fontSize.value()), frameNode);
753 } else {
754 ACE_UPDATE_NODE_LAYOUT_PROPERTY(
755 DataPickerRowLayoutProperty, DisappearFontSize,
756 ConvertFontScaleValue(disappearStyle.GetFontSize()), frameNode);
757 }
758 ACE_UPDATE_NODE_LAYOUT_PROPERTY(DataPickerRowLayoutProperty, DisappearColor,
759 value.textColor.value_or(disappearStyle.GetTextColor()), frameNode);
760 ACE_UPDATE_NODE_LAYOUT_PROPERTY(DataPickerRowLayoutProperty, DisappearWeight,
761 value.fontWeight.value_or(disappearStyle.GetFontWeight()), frameNode);
762 ACE_UPDATE_NODE_LAYOUT_PROPERTY(DataPickerRowLayoutProperty, DisappearFontFamily,
763 value.fontFamily.value_or(disappearStyle.GetFontFamilies()), frameNode);
764 ACE_UPDATE_NODE_LAYOUT_PROPERTY(DataPickerRowLayoutProperty, DisappearFontStyle,
765 value.fontStyle.value_or(disappearStyle.GetFontStyle()), frameNode);
766 }
767
SetShowLunar(FrameNode * frameNode,bool lunar)768 void DatePickerModelNG::SetShowLunar(FrameNode* frameNode, bool lunar)
769 {
770 ACE_UPDATE_NODE_LAYOUT_PROPERTY(DataPickerRowLayoutProperty, Lunar, lunar, frameNode);
771 }
772
getLunar(FrameNode * frameNode)773 int32_t DatePickerModelNG::getLunar(FrameNode* frameNode)
774 {
775 CHECK_NULL_RETURN(frameNode, 0);
776 return frameNode->GetLayoutProperty<DataPickerRowLayoutProperty>()->GetLunar().value_or(0);
777 }
778
getStartDate(FrameNode * frameNode)779 LunarDate DatePickerModelNG::getStartDate(FrameNode* frameNode)
780 {
781 LunarDate lunarDate;
782 auto datePickerPattern = frameNode->GetPattern<DatePickerPattern>();
783 CHECK_NULL_RETURN(datePickerPattern, lunarDate);
784 auto dateSolar = datePickerPattern->GetStartDateSolar();
785 lunarDate.year = dateSolar.GetYear();
786 lunarDate.month = dateSolar.GetMonth();
787 lunarDate.day = dateSolar.GetDay();
788 return lunarDate;
789 }
790
getEndDate(FrameNode * frameNode)791 LunarDate DatePickerModelNG::getEndDate(FrameNode* frameNode)
792 {
793 LunarDate lunarDate;
794 auto datePickerPattern = frameNode->GetPattern<DatePickerPattern>();
795 CHECK_NULL_RETURN(datePickerPattern, lunarDate);
796 auto dateSolar = datePickerPattern->GetEndDateSolar();
797 lunarDate.year = dateSolar.GetYear();
798 lunarDate.month = dateSolar.GetMonth();
799 lunarDate.day = dateSolar.GetDay();
800 return lunarDate;
801 }
802
getSelectedDate(FrameNode * frameNode)803 LunarDate DatePickerModelNG::getSelectedDate(FrameNode* frameNode)
804 {
805 LunarDate lunarDate;
806 CHECK_NULL_RETURN(frameNode, lunarDate);
807 auto context = frameNode->GetContext();
808 CHECK_NULL_RETURN(context, lunarDate);
809 auto theme = context->GetTheme<PickerTheme>();
810 CHECK_NULL_RETURN(theme, lunarDate);
811 auto datePickerPattern = frameNode->GetPattern<DatePickerPattern>();
812 CHECK_NULL_RETURN(datePickerPattern, lunarDate);
813 PickerDate pickerDate = datePickerPattern->GetSelectedDate();
814 lunarDate.year = pickerDate.GetYear();
815 lunarDate.month = pickerDate.GetMonth();
816 lunarDate.day = pickerDate.GetDay();
817 return lunarDate;
818 }
819
getBackgroundColor(FrameNode * frameNode)820 uint32_t DatePickerModelNG::getBackgroundColor(FrameNode* frameNode)
821 {
822 CHECK_NULL_RETURN(frameNode, 0);
823 auto value = frameNode->GetPaintProperty<ScrollablePaintProperty>()->GetScrollBarColor();
824 return value->GetValue();
825 }
826
ConvertFontScaleValue(const Dimension & fontSizeValue)827 const Dimension DatePickerModelNG::ConvertFontScaleValue(const Dimension& fontSizeValue)
828 {
829 auto pipeline = PipelineContext::GetCurrentContext();
830 CHECK_NULL_RETURN(pipeline, fontSizeValue);
831
832 float fontScaleValue = pipeline->GetFontScale();
833 if (fontScaleValue == 0) {
834 return fontSizeValue;
835 }
836
837 if (GreatOrEqualCustomPrecision(fontScaleValue, PICKER_MAXFONTSCALE)) {
838 if (fontSizeValue.Unit() != DimensionUnit::VP) {
839 return Dimension(fontSizeValue / fontScaleValue);
840 }
841 }
842 return fontSizeValue;
843 }
844
HasUserDefinedOpacity()845 void DatePickerModelNG::HasUserDefinedOpacity()
846 {
847 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
848 CHECK_NULL_VOID(frameNode);
849 auto datePickerPattern = frameNode->GetPattern<DatePickerPattern>();
850 CHECK_NULL_VOID(datePickerPattern);
851 auto renderContext = frameNode->GetRenderContext();
852 CHECK_NULL_VOID(renderContext);
853 datePickerPattern->SetUserDefinedOpacity(renderContext->GetOpacityValue(1.0));
854 }
855 } // namespace OHOS::Ace::NG
856