• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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