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