• 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, style.GetFontSize());
412     ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(
413         DataPickerRowLayoutProperty, Color, pickerTextStyle.textColor, frameNode, style.GetTextColor());
414     ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(
415         DataPickerRowLayoutProperty, Weight, pickerTextStyle.fontWeight, frameNode, style.GetFontWeight());
416     ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(DataPickerRowLayoutProperty, FontFamily,
417         pickerTextStyle.fontFamily, frameNode, style.GetFontFamilies());
418     ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(DataPickerRowLayoutProperty, FontStyle,
419         pickerTextStyle.fontStyle, frameNode, style.GetFontStyle());
420     return pickerTextStyle;
421 }
422 
SetNormalTextStyle(const RefPtr<PickerTheme> & theme,const PickerTextStyle & value)423 void DatePickerModelNG::SetNormalTextStyle(const RefPtr<PickerTheme>& theme, const PickerTextStyle& value)
424 {
425     CHECK_NULL_VOID(theme);
426     auto normalStyle = theme->GetOptionStyle(false, false);
427     if (value.fontSize.has_value() && value.fontSize->IsValid()) {
428         ACE_UPDATE_LAYOUT_PROPERTY(DataPickerRowLayoutProperty, FontSize,
429             ConvertFontScaleValue(value.fontSize.value()));
430     } else {
431         ACE_UPDATE_LAYOUT_PROPERTY(DataPickerRowLayoutProperty, FontSize,
432             ConvertFontScaleValue(normalStyle.GetFontSize()));
433     }
434     ACE_UPDATE_LAYOUT_PROPERTY(
435         DataPickerRowLayoutProperty, Color, value.textColor.value_or(normalStyle.GetTextColor()));
436     ACE_UPDATE_LAYOUT_PROPERTY(
437         DataPickerRowLayoutProperty, Weight, value.fontWeight.value_or(normalStyle.GetFontWeight()));
438     ACE_UPDATE_LAYOUT_PROPERTY(
439         DataPickerRowLayoutProperty, FontFamily, value.fontFamily.value_or(normalStyle.GetFontFamilies()));
440     ACE_UPDATE_LAYOUT_PROPERTY(
441         DataPickerRowLayoutProperty, FontStyle, value.fontStyle.value_or(normalStyle.GetFontStyle()));
442 }
443 
getSelectedTextStyle(FrameNode * frameNode)444 PickerTextStyle DatePickerModelNG::getSelectedTextStyle(FrameNode* frameNode)
445 {
446     PickerTextStyle pickerTextStyle;
447     CHECK_NULL_RETURN(frameNode, pickerTextStyle);
448     auto context = frameNode->GetContext();
449     CHECK_NULL_RETURN(context, pickerTextStyle);
450     auto theme = context->GetTheme<PickerTheme>();
451     CHECK_NULL_RETURN(theme, pickerTextStyle);
452     auto style = theme->GetOptionStyle(true, false);
453     ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(
454         DataPickerRowLayoutProperty, SelectedFontSize, pickerTextStyle.fontSize, frameNode, style.GetFontSize());
455     ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(
456         DataPickerRowLayoutProperty, SelectedColor, pickerTextStyle.textColor, frameNode, style.GetTextColor());
457     ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(
458         DataPickerRowLayoutProperty, SelectedWeight, pickerTextStyle.fontWeight, frameNode, style.GetFontWeight());
459     ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(DataPickerRowLayoutProperty, SelectedFontFamily,
460         pickerTextStyle.fontFamily, frameNode, style.GetFontFamilies());
461     ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(DataPickerRowLayoutProperty, SelectedFontStyle,
462         pickerTextStyle.fontStyle, frameNode, style.GetFontStyle());
463     return pickerTextStyle;
464 }
465 
SetSelectedTextStyle(const RefPtr<PickerTheme> & theme,const PickerTextStyle & value)466 void DatePickerModelNG::SetSelectedTextStyle(const RefPtr<PickerTheme>& theme, const PickerTextStyle& value)
467 {
468     CHECK_NULL_VOID(theme);
469     auto selectedStyle = theme->GetOptionStyle(true, false);
470     if (value.fontSize.has_value() && value.fontSize->IsValid()) {
471         ACE_UPDATE_LAYOUT_PROPERTY(DataPickerRowLayoutProperty, SelectedFontSize,
472             ConvertFontScaleValue(value.fontSize.value()));
473     } else {
474         ACE_UPDATE_LAYOUT_PROPERTY(DataPickerRowLayoutProperty, SelectedFontSize,
475             ConvertFontScaleValue(selectedStyle.GetFontSize()));
476     }
477     ACE_UPDATE_LAYOUT_PROPERTY(
478         DataPickerRowLayoutProperty, SelectedColor, value.textColor.value_or(selectedStyle.GetTextColor()));
479     ACE_UPDATE_LAYOUT_PROPERTY(
480         DataPickerRowLayoutProperty, SelectedWeight, value.fontWeight.value_or(selectedStyle.GetFontWeight()));
481     ACE_UPDATE_LAYOUT_PROPERTY(
482         DataPickerRowLayoutProperty, SelectedFontFamily, value.fontFamily.value_or(selectedStyle.GetFontFamilies()));
483     ACE_UPDATE_LAYOUT_PROPERTY(
484         DataPickerRowLayoutProperty, SelectedFontStyle, value.fontStyle.value_or(selectedStyle.GetFontStyle()));
485 }
486 
SetDefaultAttributes(RefPtr<FrameNode> & frameNode,const RefPtr<PickerTheme> & pickerTheme)487 void DatePickerModelNG::SetDefaultAttributes(RefPtr<FrameNode>& frameNode, const RefPtr<PickerTheme>& pickerTheme)
488 {
489     auto selectedStyle = pickerTheme->GetOptionStyle(true, false);
490     ACE_UPDATE_NODE_LAYOUT_PROPERTY(
491         DataPickerRowLayoutProperty, SelectedFontSize,
492         ConvertFontScaleValue(selectedStyle.GetFontSize()), frameNode);
493     ACE_UPDATE_NODE_LAYOUT_PROPERTY(
494         DataPickerRowLayoutProperty, SelectedColor, selectedStyle.GetTextColor(), frameNode);
495     ACE_UPDATE_NODE_LAYOUT_PROPERTY(
496         DataPickerRowLayoutProperty, SelectedWeight, selectedStyle.GetFontWeight(), frameNode);
497     ACE_UPDATE_NODE_LAYOUT_PROPERTY(
498         DataPickerRowLayoutProperty, SelectedFontFamily, selectedStyle.GetFontFamilies(), frameNode);
499     ACE_UPDATE_NODE_LAYOUT_PROPERTY(
500         DataPickerRowLayoutProperty, SelectedFontStyle, selectedStyle.GetFontStyle(), frameNode);
501 
502     auto disappearStyle = pickerTheme->GetDisappearOptionStyle();
503     ACE_UPDATE_NODE_LAYOUT_PROPERTY(
504         DataPickerRowLayoutProperty, DisappearFontSize,
505         ConvertFontScaleValue(disappearStyle.GetFontSize()), frameNode);
506     ACE_UPDATE_NODE_LAYOUT_PROPERTY(
507         DataPickerRowLayoutProperty, DisappearColor, disappearStyle.GetTextColor(), frameNode);
508     ACE_UPDATE_NODE_LAYOUT_PROPERTY(
509         DataPickerRowLayoutProperty, DisappearWeight, disappearStyle.GetFontWeight(), frameNode);
510     ACE_UPDATE_NODE_LAYOUT_PROPERTY(
511         DataPickerRowLayoutProperty, DisappearFontFamily, disappearStyle.GetFontFamilies(), frameNode);
512     ACE_UPDATE_NODE_LAYOUT_PROPERTY(
513         DataPickerRowLayoutProperty, DisappearFontStyle, disappearStyle.GetFontStyle(), frameNode);
514 
515     auto normalStyle = pickerTheme->GetOptionStyle(false, false);
516     ACE_UPDATE_NODE_LAYOUT_PROPERTY(DataPickerRowLayoutProperty, FontSize,
517         ConvertFontScaleValue(normalStyle.GetFontSize()), frameNode);
518     ACE_UPDATE_NODE_LAYOUT_PROPERTY(DataPickerRowLayoutProperty, Color, normalStyle.GetTextColor(), frameNode);
519     ACE_UPDATE_NODE_LAYOUT_PROPERTY(DataPickerRowLayoutProperty, Weight, normalStyle.GetFontWeight(), frameNode);
520     ACE_UPDATE_NODE_LAYOUT_PROPERTY(DataPickerRowLayoutProperty, FontFamily, normalStyle.GetFontFamilies(), frameNode);
521     ACE_UPDATE_NODE_LAYOUT_PROPERTY(DataPickerRowLayoutProperty, FontStyle, normalStyle.GetFontStyle(), frameNode);
522 }
523 
HasUserDefinedDisappearFontFamily(bool isUserDefined)524 void DatePickerModelNG::HasUserDefinedDisappearFontFamily(bool isUserDefined)
525 {
526     auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
527     CHECK_NULL_VOID(frameNode);
528     auto datePickerPattern = frameNode->GetPattern<DatePickerPattern>();
529     CHECK_NULL_VOID(datePickerPattern);
530     datePickerPattern->HasUserDefinedDisappearFontFamily(isUserDefined);
531 }
532 
HasUserDefinedNormalFontFamily(bool isUserDefined)533 void DatePickerModelNG::HasUserDefinedNormalFontFamily(bool isUserDefined)
534 {
535     auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
536     CHECK_NULL_VOID(frameNode);
537     auto datePickerPattern = frameNode->GetPattern<DatePickerPattern>();
538     CHECK_NULL_VOID(datePickerPattern);
539     datePickerPattern->HasUserDefinedNormalFontFamily(isUserDefined);
540 }
541 
HasUserDefinedSelectedFontFamily(bool isUserDefined)542 void DatePickerModelNG::HasUserDefinedSelectedFontFamily(bool isUserDefined)
543 {
544     auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
545     CHECK_NULL_VOID(frameNode);
546     auto datePickerPattern = frameNode->GetPattern<DatePickerPattern>();
547     CHECK_NULL_VOID(datePickerPattern);
548     datePickerPattern->HasUserDefinedSelectedFontFamily(isUserDefined);
549 }
550 
SetBackgroundColor(const Color & color)551 void DatePickerModelNG::SetBackgroundColor(const Color& color)
552 {
553     auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
554     CHECK_NULL_VOID(frameNode);
555     auto datePickerPattern = frameNode->GetPattern<DatePickerPattern>();
556     CHECK_NULL_VOID(datePickerPattern);
557     datePickerPattern->SetBackgroundColor(color);
558 }
559 
SetBackgroundColor(FrameNode * frameNode,const Color & color)560 void DatePickerModelNG::SetBackgroundColor(FrameNode* frameNode, const Color& color)
561 {
562     CHECK_NULL_VOID(frameNode);
563     auto datePickerPattern = frameNode->GetPattern<DatePickerPattern>();
564     CHECK_NULL_VOID(datePickerPattern);
565     datePickerPattern->SetBackgroundColor(color);
566 }
567 
SetStartDate(FrameNode * frameNode,const PickerDate & value)568 void DatePickerModelNG::SetStartDate(FrameNode* frameNode, const PickerDate& value)
569 {
570     CHECK_NULL_VOID(frameNode);
571     auto datePickerPattern = frameNode->GetPattern<DatePickerPattern>();
572     CHECK_NULL_VOID(datePickerPattern);
573     datePickerPattern->SetStartDate(value);
574     ACE_UPDATE_LAYOUT_PROPERTY(DataPickerRowLayoutProperty, StartDate, datePickerPattern->GetStartDateLunar());
575 }
576 
SetEndDate(FrameNode * frameNode,const PickerDate & value)577 void DatePickerModelNG::SetEndDate(FrameNode* frameNode, const PickerDate& value)
578 {
579     CHECK_NULL_VOID(frameNode);
580     auto datePickerPattern = frameNode->GetPattern<DatePickerPattern>();
581     CHECK_NULL_VOID(datePickerPattern);
582     datePickerPattern->SetEndDate(value);
583     ACE_UPDATE_LAYOUT_PROPERTY(DataPickerRowLayoutProperty, EndDate, datePickerPattern->GetEndDateLunar());
584 }
585 
SetSelectedDate(FrameNode * frameNode,const PickerDate & value)586 void DatePickerModelNG::SetSelectedDate(FrameNode* frameNode, const PickerDate& value)
587 {
588     CHECK_NULL_VOID(frameNode);
589     auto datePickerPattern = frameNode->GetPattern<DatePickerPattern>();
590     CHECK_NULL_VOID(datePickerPattern);
591     datePickerPattern->SetSelectDate(value);
592     ACE_UPDATE_LAYOUT_PROPERTY(DataPickerRowLayoutProperty, SelectedDate, datePickerPattern->GetSelectDate());
593 }
594 
SetChangeEvent(DateChangeEvent && onChange)595 void DatePickerModelNG::SetChangeEvent(DateChangeEvent&& onChange)
596 {
597     auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
598     CHECK_NULL_VOID(frameNode);
599     auto eventHub = frameNode->GetEventHub<DatePickerEventHub>();
600     CHECK_NULL_VOID(eventHub);
601     eventHub->SetChangeEvent(std::move(onChange));
602 }
603 
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)604 void DatePickerDialogModelNG::SetDatePickerDialogShow(PickerDialogInfo& pickerDialog,
605     NG::DatePickerSettingData& settingData, std::function<void()>&& onCancel,
606     std::function<void(const std::string&)>&& onAccept, std::function<void(const std::string&)>&& onChange,
607     std::function<void(const std::string&)>&& onDateAccept, std::function<void(const std::string&)>&& onDateChange,
608     DatePickerType pickerType, PickerDialogEvent& pickerDialogEvent, const std::vector<ButtonInfo>& buttonInfos)
609 {
610     auto container = Container::Current();
611     if (!container) {
612         return;
613     }
614     auto pipelineContext = AccessibilityManager::DynamicCast<NG::PipelineContext>(container->GetPipelineContext());
615     if (!pipelineContext) {
616         return;
617     }
618 
619     auto executor = pipelineContext->GetTaskExecutor();
620     if (!executor) {
621         return;
622     }
623     auto pipeline = PipelineBase::GetCurrentContext();
624     CHECK_NULL_VOID(pipeline);
625     auto theme = pipeline->GetTheme<DialogTheme>();
626     CHECK_NULL_VOID(theme);
627     std::map<std::string, NG::DialogEvent> dialogEvent;
628     std::map<std::string, NG::DialogGestureEvent> dialogCancelEvent;
629     std::map<std::string, NG::DialogCancelEvent> dialogLifeCycleEvent;
630     dialogEvent["changeId"] = onChange;
631     dialogEvent["acceptId"] = onAccept;
632     dialogEvent["dateChangeId"] = onDateChange;
633     dialogEvent["dateAcceptId"] = onDateAccept;
634     auto func = [onCancel](const GestureEvent& /* info */) {
635         if (onCancel) {
636             onCancel();
637         }
638     };
639     dialogCancelEvent["cancelId"] = func;
640     dialogLifeCycleEvent["didAppearId"] = pickerDialogEvent.onDidAppear;
641     dialogLifeCycleEvent["didDisappearId"] = pickerDialogEvent.onDidDisappear;
642     dialogLifeCycleEvent["willAppearId"] = pickerDialogEvent.onWillAppear;
643     dialogLifeCycleEvent["willDisappearId"] = pickerDialogEvent.onWillDisappear;
644     DialogProperties properties;
645     if (Container::LessThanAPIVersion(PlatformVersion::VERSION_ELEVEN)) {
646         properties.alignment = theme->GetAlignment();
647     }
648     if (pickerDialog.alignment.has_value()) {
649         properties.alignment = pickerDialog.alignment.value();
650     }
651     if (pickerDialog.backgroundColor.has_value()) {
652         properties.backgroundColor = pickerDialog.backgroundColor.value();
653     }
654     if (pickerDialog.backgroundBlurStyle.has_value()) {
655         properties.backgroundBlurStyle = pickerDialog.backgroundBlurStyle.value();
656     }
657     if (pickerDialog.shadow.has_value()) {
658         properties.shadow = pickerDialog.shadow.value();
659     }
660     if (pickerDialog.hoverModeArea.has_value()) {
661         properties.hoverModeArea = pickerDialog.hoverModeArea.value();
662     }
663     properties.enableHoverMode = pickerDialog.enableHoverMode;
664     properties.customStyle = false;
665     if (Container::LessThanAPIVersion(PlatformVersion::VERSION_ELEVEN)) {
666         properties.offset = DimensionOffset(Offset(0, -theme->GetMarginBottom().ConvertToPx()));
667     }
668     if (pickerDialog.offset.has_value()) {
669         properties.offset = pickerDialog.offset.value();
670     }
671 
672     properties.maskRect = pickerDialog.maskRect;
673 
674     std::map<std::string, PickerDate> datePickerProperty;
675     std::map<std::string, PickerTime> timePickerProperty;
676     if (pickerDialog.isStartDate == true) {
677         settingData.datePickerProperty["start"] = pickerDialog.parseStartDate;
678     }
679     if (pickerDialog.isEndDate == true) {
680         settingData.datePickerProperty["end"] = pickerDialog.parseEndDate;
681     }
682     if (pickerDialog.isSelectedDate == true) {
683         settingData.datePickerProperty["selected"] = pickerDialog.parseSelectedDate;
684         settingData.timePickerProperty["selected"] = pickerDialog.pickerTime;
685     }
686     auto context = AccessibilityManager::DynamicCast<NG::PipelineContext>(pipelineContext);
687     auto overlayManager = context ? context->GetOverlayManager() : nullptr;
688     executor->PostTask(
689         [properties, settingData, dialogEvent, dialogCancelEvent, dialogLifeCycleEvent, buttonInfos,
690             weak = WeakPtr<NG::OverlayManager>(overlayManager)] {
691             auto overlayManager = weak.Upgrade();
692             CHECK_NULL_VOID(overlayManager);
693             overlayManager->ShowDateDialog(
694                 properties, settingData, dialogEvent, dialogCancelEvent, dialogLifeCycleEvent, buttonInfos);
695         },
696         TaskExecutor::TaskType::UI, "ArkUIDatePickerShowDateDialog");
697 }
698 
SetSelectedTextStyle(FrameNode * frameNode,const RefPtr<PickerTheme> & theme,const PickerTextStyle & value)699 void DatePickerModelNG::SetSelectedTextStyle(
700     FrameNode* frameNode, const RefPtr<PickerTheme>& theme, const PickerTextStyle& value)
701 {
702     CHECK_NULL_VOID(theme);
703     auto selectedStyle = theme->GetOptionStyle(true, false);
704     if (value.fontSize.has_value() && value.fontSize->IsValid()) {
705         ACE_UPDATE_NODE_LAYOUT_PROPERTY(
706             DataPickerRowLayoutProperty, SelectedFontSize,
707             ConvertFontScaleValue(value.fontSize.value()), frameNode);
708     } else {
709         ACE_UPDATE_NODE_LAYOUT_PROPERTY(
710             DataPickerRowLayoutProperty, SelectedFontSize,
711             ConvertFontScaleValue(selectedStyle.GetFontSize()), frameNode);
712     }
713     ACE_UPDATE_NODE_LAYOUT_PROPERTY(
714         DataPickerRowLayoutProperty, SelectedColor, value.textColor.value_or(selectedStyle.GetTextColor()), frameNode);
715     ACE_UPDATE_NODE_LAYOUT_PROPERTY(DataPickerRowLayoutProperty, SelectedWeight,
716         value.fontWeight.value_or(selectedStyle.GetFontWeight()), frameNode);
717     ACE_UPDATE_NODE_LAYOUT_PROPERTY(DataPickerRowLayoutProperty, SelectedFontFamily,
718         value.fontFamily.value_or(selectedStyle.GetFontFamilies()), frameNode);
719     ACE_UPDATE_NODE_LAYOUT_PROPERTY(DataPickerRowLayoutProperty, SelectedFontStyle,
720         value.fontStyle.value_or(selectedStyle.GetFontStyle()), frameNode);
721 }
722 
SetNormalTextStyle(FrameNode * frameNode,const RefPtr<PickerTheme> & theme,const PickerTextStyle & value)723 void DatePickerModelNG::SetNormalTextStyle(
724     FrameNode* frameNode, const RefPtr<PickerTheme>& theme, const PickerTextStyle& value)
725 {
726     CHECK_NULL_VOID(theme);
727     auto normalStyle = theme->GetOptionStyle(false, false);
728     if (value.fontSize.has_value() && value.fontSize->IsValid()) {
729         ACE_UPDATE_NODE_LAYOUT_PROPERTY(DataPickerRowLayoutProperty, FontSize,
730             ConvertFontScaleValue(value.fontSize.value()), frameNode);
731     } else {
732         ACE_UPDATE_NODE_LAYOUT_PROPERTY(DataPickerRowLayoutProperty, FontSize,
733             ConvertFontScaleValue(normalStyle.GetFontSize()), frameNode);
734     }
735     ACE_UPDATE_NODE_LAYOUT_PROPERTY(
736         DataPickerRowLayoutProperty, Color, value.textColor.value_or(normalStyle.GetTextColor()), frameNode);
737     ACE_UPDATE_NODE_LAYOUT_PROPERTY(
738         DataPickerRowLayoutProperty, Weight, value.fontWeight.value_or(normalStyle.GetFontWeight()), frameNode);
739     ACE_UPDATE_NODE_LAYOUT_PROPERTY(
740         DataPickerRowLayoutProperty, FontFamily, value.fontFamily.value_or(normalStyle.GetFontFamilies()), frameNode);
741     ACE_UPDATE_NODE_LAYOUT_PROPERTY(
742         DataPickerRowLayoutProperty, FontStyle, value.fontStyle.value_or(normalStyle.GetFontStyle()), frameNode);
743 }
744 
SetDisappearTextStyle(FrameNode * frameNode,const RefPtr<PickerTheme> & theme,const PickerTextStyle & value)745 void DatePickerModelNG::SetDisappearTextStyle(
746     FrameNode* frameNode, const RefPtr<PickerTheme>& theme, const PickerTextStyle& value)
747 {
748     CHECK_NULL_VOID(theme);
749     auto disappearStyle = theme->GetDisappearOptionStyle();
750     if (value.fontSize.has_value() && value.fontSize->IsValid()) {
751         ACE_UPDATE_NODE_LAYOUT_PROPERTY(
752             DataPickerRowLayoutProperty, DisappearFontSize,
753             ConvertFontScaleValue(value.fontSize.value()), frameNode);
754     } else {
755         ACE_UPDATE_NODE_LAYOUT_PROPERTY(
756             DataPickerRowLayoutProperty, DisappearFontSize,
757             ConvertFontScaleValue(disappearStyle.GetFontSize()), frameNode);
758     }
759     ACE_UPDATE_NODE_LAYOUT_PROPERTY(DataPickerRowLayoutProperty, DisappearColor,
760         value.textColor.value_or(disappearStyle.GetTextColor()), frameNode);
761     ACE_UPDATE_NODE_LAYOUT_PROPERTY(DataPickerRowLayoutProperty, DisappearWeight,
762         value.fontWeight.value_or(disappearStyle.GetFontWeight()), frameNode);
763     ACE_UPDATE_NODE_LAYOUT_PROPERTY(DataPickerRowLayoutProperty, DisappearFontFamily,
764         value.fontFamily.value_or(disappearStyle.GetFontFamilies()), frameNode);
765     ACE_UPDATE_NODE_LAYOUT_PROPERTY(DataPickerRowLayoutProperty, DisappearFontStyle,
766         value.fontStyle.value_or(disappearStyle.GetFontStyle()), frameNode);
767 }
768 
SetShowLunar(FrameNode * frameNode,bool lunar)769 void DatePickerModelNG::SetShowLunar(FrameNode* frameNode, bool lunar)
770 {
771     ACE_UPDATE_NODE_LAYOUT_PROPERTY(DataPickerRowLayoutProperty, Lunar, lunar, frameNode);
772 }
773 
getLunar(FrameNode * frameNode)774 int32_t DatePickerModelNG::getLunar(FrameNode* frameNode)
775 {
776     CHECK_NULL_RETURN(frameNode, 0);
777     return frameNode->GetLayoutProperty<DataPickerRowLayoutProperty>()->GetLunar().value_or(0);
778 }
779 
getStartDate(FrameNode * frameNode)780 LunarDate DatePickerModelNG::getStartDate(FrameNode* frameNode)
781 {
782     LunarDate lunarDate;
783     auto datePickerPattern = frameNode->GetPattern<DatePickerPattern>();
784     CHECK_NULL_RETURN(datePickerPattern, lunarDate);
785     auto dateSolar = datePickerPattern->GetStartDateSolar();
786     lunarDate.year = dateSolar.GetYear();
787     lunarDate.month = dateSolar.GetMonth();
788     lunarDate.day = dateSolar.GetDay();
789     return lunarDate;
790 }
791 
getEndDate(FrameNode * frameNode)792 LunarDate DatePickerModelNG::getEndDate(FrameNode* frameNode)
793 {
794     LunarDate lunarDate;
795     auto datePickerPattern = frameNode->GetPattern<DatePickerPattern>();
796     CHECK_NULL_RETURN(datePickerPattern, lunarDate);
797     auto dateSolar = datePickerPattern->GetEndDateSolar();
798     lunarDate.year = dateSolar.GetYear();
799     lunarDate.month = dateSolar.GetMonth();
800     lunarDate.day = dateSolar.GetDay();
801     return lunarDate;
802 }
803 
getSelectedDate(FrameNode * frameNode)804 LunarDate DatePickerModelNG::getSelectedDate(FrameNode* frameNode)
805 {
806     LunarDate lunarDate;
807     CHECK_NULL_RETURN(frameNode, lunarDate);
808     auto context = frameNode->GetContext();
809     CHECK_NULL_RETURN(context, lunarDate);
810     auto theme = context->GetTheme<PickerTheme>();
811     CHECK_NULL_RETURN(theme, lunarDate);
812     auto datePickerPattern = frameNode->GetPattern<DatePickerPattern>();
813     CHECK_NULL_RETURN(datePickerPattern, lunarDate);
814     PickerDate pickerDate = datePickerPattern->GetSelectedDate();
815     lunarDate.year = pickerDate.GetYear();
816     lunarDate.month = pickerDate.GetMonth();
817     lunarDate.day = pickerDate.GetDay();
818     return lunarDate;
819 }
820 
getBackgroundColor(FrameNode * frameNode)821 uint32_t DatePickerModelNG::getBackgroundColor(FrameNode* frameNode)
822 {
823     CHECK_NULL_RETURN(frameNode, 0);
824     auto value = frameNode->GetPaintProperty<ScrollablePaintProperty>()->GetScrollBarColor();
825     return value->GetValue();
826 }
827 
ConvertFontScaleValue(const Dimension & fontSizeValue)828 const Dimension DatePickerModelNG::ConvertFontScaleValue(const Dimension& fontSizeValue)
829 {
830     auto pipeline = PipelineContext::GetCurrentContext();
831     CHECK_NULL_RETURN(pipeline, fontSizeValue);
832     auto maxAppFontScale = pipeline->GetMaxAppFontScale();
833     auto follow = pipeline->IsFollowSystem();
834     float fontScale = pipeline->GetFontScale();
835     if (NearZero(fontScale) || (fontSizeValue.Unit() == DimensionUnit::VP)) {
836         return fontSizeValue;
837     }
838     if (GreatOrEqualCustomPrecision(fontScale, PICKER_MAXFONTSCALE) && follow) {
839         fontScale = std::clamp(fontScale, 0.0f, maxAppFontScale);
840         if (!NearZero(fontScale)) {
841             return Dimension(fontSizeValue / fontScale);
842         }
843     }
844     return fontSizeValue;
845 }
846 
HasUserDefinedOpacity()847 void DatePickerModelNG::HasUserDefinedOpacity()
848 {
849     auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
850     CHECK_NULL_VOID(frameNode);
851     auto datePickerPattern = frameNode->GetPattern<DatePickerPattern>();
852     CHECK_NULL_VOID(datePickerPattern);
853     auto renderContext = frameNode->GetRenderContext();
854     CHECK_NULL_VOID(renderContext);
855     datePickerPattern->SetUserDefinedOpacity(renderContext->GetOpacityValue(1.0));
856 }
857 } // namespace OHOS::Ace::NG
858