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 if (pickerDialog.hoverModeArea.has_value()) {
663 properties.hoverModeArea = pickerDialog.hoverModeArea.value();
664 }
665 properties.enableHoverMode = pickerDialog.enableHoverMode;
666 properties.customStyle = false;
667 if (Container::LessThanAPIVersion(PlatformVersion::VERSION_ELEVEN)) {
668 properties.offset = DimensionOffset(Offset(0, -theme->GetMarginBottom().ConvertToPx()));
669 }
670 if (pickerDialog.offset.has_value()) {
671 properties.offset = pickerDialog.offset.value();
672 }
673
674 properties.maskRect = pickerDialog.maskRect;
675
676 std::map<std::string, PickerDate> datePickerProperty;
677 std::map<std::string, PickerTime> timePickerProperty;
678 if (pickerDialog.isStartDate == true) {
679 settingData.datePickerProperty["start"] = pickerDialog.parseStartDate;
680 }
681 if (pickerDialog.isEndDate == true) {
682 settingData.datePickerProperty["end"] = pickerDialog.parseEndDate;
683 }
684 if (pickerDialog.isSelectedDate == true) {
685 settingData.datePickerProperty["selected"] = pickerDialog.parseSelectedDate;
686 settingData.timePickerProperty["selected"] = pickerDialog.pickerTime;
687 }
688 auto context = AccessibilityManager::DynamicCast<NG::PipelineContext>(pipelineContext);
689 auto overlayManager = context ? context->GetOverlayManager() : nullptr;
690 executor->PostTask(
691 [properties, settingData, dialogEvent, dialogCancelEvent, dialogLifeCycleEvent, buttonInfos,
692 weak = WeakPtr<NG::OverlayManager>(overlayManager)] {
693 auto overlayManager = weak.Upgrade();
694 CHECK_NULL_VOID(overlayManager);
695 overlayManager->ShowDateDialog(
696 properties, settingData, dialogEvent, dialogCancelEvent, dialogLifeCycleEvent, buttonInfos);
697 },
698 TaskExecutor::TaskType::UI, "ArkUIDatePickerShowDateDialog");
699 }
700
SetSelectedTextStyle(FrameNode * frameNode,const RefPtr<PickerTheme> & theme,const PickerTextStyle & value)701 void DatePickerModelNG::SetSelectedTextStyle(
702 FrameNode* frameNode, const RefPtr<PickerTheme>& theme, const PickerTextStyle& value)
703 {
704 CHECK_NULL_VOID(theme);
705 auto selectedStyle = theme->GetOptionStyle(true, false);
706 if (value.fontSize.has_value() && value.fontSize->IsValid()) {
707 ACE_UPDATE_NODE_LAYOUT_PROPERTY(
708 DataPickerRowLayoutProperty, SelectedFontSize,
709 ConvertFontScaleValue(value.fontSize.value()), frameNode);
710 } else {
711 ACE_UPDATE_NODE_LAYOUT_PROPERTY(
712 DataPickerRowLayoutProperty, SelectedFontSize,
713 ConvertFontScaleValue(selectedStyle.GetFontSize()), frameNode);
714 }
715 ACE_UPDATE_NODE_LAYOUT_PROPERTY(
716 DataPickerRowLayoutProperty, SelectedColor, value.textColor.value_or(selectedStyle.GetTextColor()), frameNode);
717 ACE_UPDATE_NODE_LAYOUT_PROPERTY(DataPickerRowLayoutProperty, SelectedWeight,
718 value.fontWeight.value_or(selectedStyle.GetFontWeight()), frameNode);
719 ACE_UPDATE_NODE_LAYOUT_PROPERTY(DataPickerRowLayoutProperty, SelectedFontFamily,
720 value.fontFamily.value_or(selectedStyle.GetFontFamilies()), frameNode);
721 ACE_UPDATE_NODE_LAYOUT_PROPERTY(DataPickerRowLayoutProperty, SelectedFontStyle,
722 value.fontStyle.value_or(selectedStyle.GetFontStyle()), frameNode);
723 }
724
SetNormalTextStyle(FrameNode * frameNode,const RefPtr<PickerTheme> & theme,const PickerTextStyle & value)725 void DatePickerModelNG::SetNormalTextStyle(
726 FrameNode* frameNode, const RefPtr<PickerTheme>& theme, const PickerTextStyle& value)
727 {
728 CHECK_NULL_VOID(theme);
729 auto normalStyle = theme->GetOptionStyle(false, false);
730 if (value.fontSize.has_value() && value.fontSize->IsValid()) {
731 ACE_UPDATE_NODE_LAYOUT_PROPERTY(DataPickerRowLayoutProperty, FontSize,
732 ConvertFontScaleValue(value.fontSize.value()), frameNode);
733 } else {
734 ACE_UPDATE_NODE_LAYOUT_PROPERTY(DataPickerRowLayoutProperty, FontSize,
735 ConvertFontScaleValue(normalStyle.GetFontSize()), frameNode);
736 }
737 ACE_UPDATE_NODE_LAYOUT_PROPERTY(
738 DataPickerRowLayoutProperty, Color, value.textColor.value_or(normalStyle.GetTextColor()), frameNode);
739 ACE_UPDATE_NODE_LAYOUT_PROPERTY(
740 DataPickerRowLayoutProperty, Weight, value.fontWeight.value_or(normalStyle.GetFontWeight()), frameNode);
741 ACE_UPDATE_NODE_LAYOUT_PROPERTY(
742 DataPickerRowLayoutProperty, FontFamily, value.fontFamily.value_or(normalStyle.GetFontFamilies()), frameNode);
743 ACE_UPDATE_NODE_LAYOUT_PROPERTY(
744 DataPickerRowLayoutProperty, FontStyle, value.fontStyle.value_or(normalStyle.GetFontStyle()), frameNode);
745 }
746
SetDisappearTextStyle(FrameNode * frameNode,const RefPtr<PickerTheme> & theme,const PickerTextStyle & value)747 void DatePickerModelNG::SetDisappearTextStyle(
748 FrameNode* frameNode, const RefPtr<PickerTheme>& theme, const PickerTextStyle& value)
749 {
750 CHECK_NULL_VOID(theme);
751 auto disappearStyle = theme->GetDisappearOptionStyle();
752 if (value.fontSize.has_value() && value.fontSize->IsValid()) {
753 ACE_UPDATE_NODE_LAYOUT_PROPERTY(
754 DataPickerRowLayoutProperty, DisappearFontSize,
755 ConvertFontScaleValue(value.fontSize.value()), frameNode);
756 } else {
757 ACE_UPDATE_NODE_LAYOUT_PROPERTY(
758 DataPickerRowLayoutProperty, DisappearFontSize,
759 ConvertFontScaleValue(disappearStyle.GetFontSize()), frameNode);
760 }
761 ACE_UPDATE_NODE_LAYOUT_PROPERTY(DataPickerRowLayoutProperty, DisappearColor,
762 value.textColor.value_or(disappearStyle.GetTextColor()), frameNode);
763 ACE_UPDATE_NODE_LAYOUT_PROPERTY(DataPickerRowLayoutProperty, DisappearWeight,
764 value.fontWeight.value_or(disappearStyle.GetFontWeight()), frameNode);
765 ACE_UPDATE_NODE_LAYOUT_PROPERTY(DataPickerRowLayoutProperty, DisappearFontFamily,
766 value.fontFamily.value_or(disappearStyle.GetFontFamilies()), frameNode);
767 ACE_UPDATE_NODE_LAYOUT_PROPERTY(DataPickerRowLayoutProperty, DisappearFontStyle,
768 value.fontStyle.value_or(disappearStyle.GetFontStyle()), frameNode);
769 }
770
SetShowLunar(FrameNode * frameNode,bool lunar)771 void DatePickerModelNG::SetShowLunar(FrameNode* frameNode, bool lunar)
772 {
773 ACE_UPDATE_NODE_LAYOUT_PROPERTY(DataPickerRowLayoutProperty, Lunar, lunar, frameNode);
774 }
775
getLunar(FrameNode * frameNode)776 int32_t DatePickerModelNG::getLunar(FrameNode* frameNode)
777 {
778 CHECK_NULL_RETURN(frameNode, 0);
779 return frameNode->GetLayoutProperty<DataPickerRowLayoutProperty>()->GetLunar().value_or(0);
780 }
781
getStartDate(FrameNode * frameNode)782 LunarDate DatePickerModelNG::getStartDate(FrameNode* frameNode)
783 {
784 LunarDate lunarDate;
785 auto datePickerPattern = frameNode->GetPattern<DatePickerPattern>();
786 CHECK_NULL_RETURN(datePickerPattern, lunarDate);
787 auto dateSolar = datePickerPattern->GetStartDateSolar();
788 lunarDate.year = dateSolar.GetYear();
789 lunarDate.month = dateSolar.GetMonth();
790 lunarDate.day = dateSolar.GetDay();
791 return lunarDate;
792 }
793
getEndDate(FrameNode * frameNode)794 LunarDate DatePickerModelNG::getEndDate(FrameNode* frameNode)
795 {
796 LunarDate lunarDate;
797 auto datePickerPattern = frameNode->GetPattern<DatePickerPattern>();
798 CHECK_NULL_RETURN(datePickerPattern, lunarDate);
799 auto dateSolar = datePickerPattern->GetEndDateSolar();
800 lunarDate.year = dateSolar.GetYear();
801 lunarDate.month = dateSolar.GetMonth();
802 lunarDate.day = dateSolar.GetDay();
803 return lunarDate;
804 }
805
getSelectedDate(FrameNode * frameNode)806 LunarDate DatePickerModelNG::getSelectedDate(FrameNode* frameNode)
807 {
808 LunarDate lunarDate;
809 CHECK_NULL_RETURN(frameNode, lunarDate);
810 auto context = frameNode->GetContext();
811 CHECK_NULL_RETURN(context, lunarDate);
812 auto theme = context->GetTheme<PickerTheme>();
813 CHECK_NULL_RETURN(theme, lunarDate);
814 auto datePickerPattern = frameNode->GetPattern<DatePickerPattern>();
815 CHECK_NULL_RETURN(datePickerPattern, lunarDate);
816 PickerDate pickerDate = datePickerPattern->GetSelectedDate();
817 lunarDate.year = pickerDate.GetYear();
818 lunarDate.month = pickerDate.GetMonth();
819 lunarDate.day = pickerDate.GetDay();
820 return lunarDate;
821 }
822
getBackgroundColor(FrameNode * frameNode)823 uint32_t DatePickerModelNG::getBackgroundColor(FrameNode* frameNode)
824 {
825 CHECK_NULL_RETURN(frameNode, 0);
826 auto value = frameNode->GetPaintProperty<ScrollablePaintProperty>()->GetScrollBarColor();
827 return value->GetValue();
828 }
829
ConvertFontScaleValue(const Dimension & fontSizeValue)830 const Dimension DatePickerModelNG::ConvertFontScaleValue(const Dimension& fontSizeValue)
831 {
832 auto pipeline = PipelineContext::GetCurrentContext();
833 CHECK_NULL_RETURN(pipeline, fontSizeValue);
834
835 float fontScaleValue = pipeline->GetFontScale();
836 if (fontScaleValue == 0) {
837 return fontSizeValue;
838 }
839
840 if (GreatOrEqualCustomPrecision(fontScaleValue, PICKER_MAXFONTSCALE)) {
841 if (fontSizeValue.Unit() != DimensionUnit::VP) {
842 return Dimension(fontSizeValue / fontScaleValue);
843 }
844 }
845 return fontSizeValue;
846 }
847
HasUserDefinedOpacity()848 void DatePickerModelNG::HasUserDefinedOpacity()
849 {
850 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
851 CHECK_NULL_VOID(frameNode);
852 auto datePickerPattern = frameNode->GetPattern<DatePickerPattern>();
853 CHECK_NULL_VOID(datePickerPattern);
854 auto renderContext = frameNode->GetRenderContext();
855 CHECK_NULL_VOID(renderContext);
856 datePickerPattern->SetUserDefinedOpacity(renderContext->GetOpacityValue(1.0));
857 }
858 } // namespace OHOS::Ace::NG
859