• 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 
16 #ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERNS_DATE_PICKER_DATE_PICKER_DIALOG_VIEW_H
17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERNS_DATE_PICKER_DATE_PICKER_DIALOG_VIEW_H
18 
19 #include "base/utils/macros.h"
20 #include "core/components/common/layout/constants.h"
21 #include "core/components/picker/picker_base_component.h"
22 #include "core/components_ng/pattern/button/button_layout_property.h"
23 #include "core/components_ng/pattern/picker/datepicker_event_hub.h"
24 #include "core/components_ng/pattern/picker/datepicker_layout_property.h"
25 #include "core/components_ng/pattern/picker/datepicker_pattern.h"
26 #include "core/components_ng/pattern/picker/picker_type_define.h"
27 #include "core/components_ng/pattern/time_picker/timepicker_row_pattern.h"
28 #include "core/components_ng/pattern/picker/date_time_animation_controller.h"
29 
30 namespace OHOS::Ace::NG {
31 class DateTimeAnimationController;
32 class ACE_EXPORT DatePickerDialogView {
33 public:
34     static RefPtr<FrameNode> Show(const DialogProperties& dialogProps, const DatePickerSettingData& settingData,
35         const std::vector<ButtonInfo>& buttonInfos, std::map<std::string, NG::DialogEvent> dialogEvent,
36         std::map<std::string, NG::DialogGestureEvent> dialogCancelEvent);
37     static void SetStartDate(const RefPtr<FrameNode>& frameNode, const PickerDate& value);
38     static void SetEndDate(const RefPtr<FrameNode>& frameNode, const PickerDate& value);
39     static void SetSelectedDate(const RefPtr<FrameNode>& frameNode, const PickerDate& value);
40     static void SetShowLunar(const RefPtr<FrameNode>& frameNode, bool lunar = false);
41     static void SetDateTextProperties(const RefPtr<FrameNode>& frameNode, const PickerTextProperties& properties);
42     static void SetTimeTextProperties(const RefPtr<FrameNode>& frameNode, const PickerTextProperties& properties);
43     static void SetDialogChange(const RefPtr<FrameNode>& frameNode, DialogEvent&& onChange);
44     static void SetDialogDateChange(const RefPtr<FrameNode>& frameNode, DialogEvent&& onChange);
45     static void SetDialogAcceptEvent(const RefPtr<FrameNode>& frameNode, DialogEvent&& onChange);
46     static void SetDialogDateAcceptEvent(const RefPtr<FrameNode>& frameNode, DialogEvent&& onChange);
47     static void SetDialogSwitchEvent(std::function<bool()> switchEvent, const RefPtr<FrameNode>& pickerStack);
48     static RefPtr<FrameNode> CreateButtonNode(const RefPtr<FrameNode>& dateNode,
49         const RefPtr<FrameNode>& datePickerNode, const std::vector<ButtonInfo>& buttonInfos,
50         std::map<std::string, NG::DialogEvent> dialogEvent,
51         std::map<std::string, NG::DialogGestureEvent> dialogCancelEvent);
52     static RefPtr<FrameNode> CreateTitleButtonNode(const RefPtr<FrameNode>& dateNode);
53     static RefPtr<FrameNode> CreateTitleButtonRowNode();
54     static void CreateTitleIconNode(const RefPtr<FrameNode>& titleNode);
55     static RefPtr<FrameNode> CreateDividerNode(const RefPtr<FrameNode>& dateNode, bool isCreateDivider = false);
56     static RefPtr<FrameNode> CreateConfirmNode(const RefPtr<FrameNode>& dateNode,
57         const RefPtr<FrameNode>& datePickerNode, DialogEvent& acceptEvent, const std::vector<ButtonInfo>& buttonInfos);
58     static RefPtr<FrameNode> CreateCancelNode(NG::DialogGestureEvent& cancelEvent,
59         const RefPtr<FrameNode>& datePickerNode, const std::vector<ButtonInfo>& buttonInfos);
60     static RefPtr<FrameNode> CreateDateNode(int32_t dateNodeId, std::map<std::string, PickerDate> datePickerProperty,
61         const PickerTextProperties& properties, bool isLunar, bool hasTime);
62     static RefPtr<FrameNode> CreateColumnNode(int32_t nodeId, uint32_t showCount, bool isDate = true);
63     static void CreateNormalDateNode(const RefPtr<FrameNode>& dateNode, uint32_t showCount);
64     static void CreateSingleDateNode(const RefPtr<FrameNode>& dateNode, uint32_t showCount);
65     static RefPtr<FrameNode> CreateTimeNode(std::map<std::string, PickerTime> timePickerProperty,
66         const PickerTextProperties& properties, bool useMilitaryTime);
67     static RefPtr<FrameNode> CreateLunarSwitchTextNode();
68 
69     static bool switchFlag_;
70 
71 private:
72     static RefPtr<FrameNode> CreateStackNode();
73     static RefPtr<FrameNode> CreateColumnNode();
74     static RefPtr<FrameNode> CreateButtonNode();
75     static void CreateLunarswitchNode(const RefPtr<FrameNode>& contentColumn, const RefPtr<FrameNode>& dateNode,
76         std::function<void(const bool)>&& changeEvent, bool isLunar);
77     static void SetTitleMouseHoverEvent(const RefPtr<FrameNode>& titleRow);
78     static void HandleMouseEvent(const RefPtr<FrameNode>& titleButton, bool isHover);
79     static void PlayHoverAnimation(const RefPtr<FrameNode>& titleButton, const Color& color);
80     static void MountColumnNodeToPicker(
81         const RefPtr<FrameNode>& columnNode, const RefPtr<FrameNode>& pickerNode, uint32_t columnWeight = 1);
82     static void UpdateTitleRowLayoutProps(const RefPtr<FrameNode>& titleRow);
83     static void SetTimeNodeColumnWeight(const RefPtr<FrameNode>& timeNode, const DatePickerSettingData& settingData);
84     static RefPtr<FrameNode> CreateAndMountDateNode(
85         const DatePickerSettingData& settingData, const RefPtr<FrameNode>& pickerStack);
86     static RefPtr<FrameNode> CreateAndMountButtonTitleNode(
87         const RefPtr<FrameNode>& dateNode, const RefPtr<FrameNode>& contentColumn);
88     static std::function<void(bool)> CreateLunarChangeEvent(const RefPtr<FrameNode>& dateNode);
89     static RefPtr<FrameNode> CreateAndMountMonthDaysNode(const DatePickerSettingData& settingData,
90         const RefPtr<FrameNode>& dateNode, const RefPtr<FrameNode>& pickerRow,
91         std::function<void(bool)>&& lunarChangeEvent);
92     static RefPtr<FrameNode> CreateAndMountTimeNode(const DatePickerSettingData& settingData,
93         const RefPtr<FrameNode>& monthDaysNode, const RefPtr<FrameNode>& pickerRow);
94     static std::function<void()> CreateAndSetDialogSwitchEvent(const RefPtr<FrameNode>& pickerStack,
95         const RefPtr<FrameNode>& contentColumn, const DatePickerSettingData& settingData);
96     static void SwitchPickerPage(const RefPtr<FrameNode>& pickerStack, const RefPtr<FrameNode>& contentColumn,
97         const RefPtr<DateTimeAnimationController>& animationController, bool useMilitary = false);
98     static void SwitchDatePickerPage(const RefPtr<FrameNode>& dateNode, bool IsSwitchByTitle = false);
99     static void HideContentChildrenButton(const RefPtr<FrameNode>& contentRow);
100     static void SwitchContentRowButton(const RefPtr<FrameNode>& contentRow, bool useMilitary = false);
101     static void ShowContentRowButton(const RefPtr<FrameNode>& contentRow, bool isFirstPage = true);
102     static void CreateAndAddTitleClickEvent(
103         std::function<void()>& titleSwitchEvent, const RefPtr<FrameNode>& buttonTitleNode);
104     static void BuildDialogAcceptAndCancelButton(const std::vector<ButtonInfo>& buttonInfos,
105         const DatePickerSettingData& settingData, const RefPtr<FrameNode>& acceptNode,
106         const RefPtr<FrameNode>& dateNode, const RefPtr<FrameNode>& dialogNode, const RefPtr<FrameNode>& contentColumn,
107         std::map<std::string, NG::DialogEvent> dialogEvent,
108         std::map<std::string, NG::DialogGestureEvent> dialogCancelEvent);
109     static void UpdateConfirmButtonTextLayoutProperty(
110         const RefPtr<TextLayoutProperty>& textLayoutProperty, const RefPtr<PickerTheme>& pickerTheme);
111     static void UpdateButtonLayoutProperty(
112         const RefPtr<ButtonLayoutProperty>& buttonConfirmLayoutProperty, const RefPtr<PickerTheme>& pickerTheme);
113     static void UpdateConfirmButtonMargin(
114         const RefPtr<ButtonLayoutProperty>& buttonConfirmLayoutProperty, const RefPtr<DialogTheme>& dialogTheme);
115     static void UpdateCancelButtonMargin(
116         const RefPtr<ButtonLayoutProperty>& buttonCancelLayoutProperty, const RefPtr<DialogTheme>& dialogTheme);
117     static void UpdateNextButtonMargin(const RefPtr<ButtonLayoutProperty>& buttonNextLayoutProperty);
118     static void UpdateButtonStyles(const std::vector<ButtonInfo>& buttonInfos, size_t index,
119         const RefPtr<ButtonLayoutProperty>& buttonLayoutProperty, const RefPtr<RenderContext>& buttonRenderContext);
120     static void UpdateButtonStyleAndRole(const std::vector<ButtonInfo>& buttonInfos, size_t index,
121         const RefPtr<ButtonLayoutProperty>& buttonLayoutProperty, const RefPtr<RenderContext>& buttonRenderContext,
122         const RefPtr<ButtonTheme>& buttonTheme);
123     static void UpdateContentPadding(const RefPtr<FrameNode>& contentColumn);
124     static void UpdateButtonDefaultFocus(const std::vector<ButtonInfo>& buttonInfos,
125         const RefPtr<FrameNode>& buttonNode, bool isConfirm);
126     static RefPtr<FrameNode> CreateNextPrevButtonNode(
127         std::function<void()> & switchEvent,
128         const RefPtr<FrameNode>& dateNode, const std::vector<ButtonInfo> &buttonInfos,
129         const RefPtr<FrameNode>& contentRow);
130     static void BuildDialogAcceptAndCancelButtonForAging(
131         const std::vector<ButtonInfo> &buttonInfos, const DatePickerSettingData &settingData,
132         const RefPtr<FrameNode> &timePickerNode, const RefPtr<FrameNode> &acceptNode,
133         const RefPtr<FrameNode> &dateNode, const RefPtr<FrameNode> &dialogNode,
134         const RefPtr<FrameNode> &contentColumn, std::map<std::string, NG::DialogEvent> dialogEvent,
135         std::map<std::string, NG::DialogGestureEvent> dialogCancelEvent);
136     static bool NeedAdaptForAging();
137     static RefPtr<FrameNode> CreateButtonNodeForAging(const DatePickerSettingData& settingData,
138         const RefPtr<FrameNode>& timePickerNode, const RefPtr<FrameNode>& monthAndDayNode,
139         const RefPtr<FrameNode>& datePickerNode, const std::vector<ButtonInfo>& buttonInfos,
140         std::map<std::string, NG::DialogEvent> dialogEvent,
141         std::map<std::string, NG::DialogGestureEvent> dialogCancelEvent);
142     static std::function<void()> CreateAndSetTimePickerSwitchEvent(
143         const RefPtr<FrameNode>& monthAndDayPickerNode, const RefPtr<FrameNode>& timePickerNode,
144         const RefPtr<FrameNode>& contentRow);
145     static std::function<void(const GestureEvent&)> CreateNextPrevClickEvent(
146         const RefPtr<FrameNode>& textNextPrevNode, const RefPtr<FrameNode>& nextPrevButtonNode,
147         const RefPtr<DialogTheme>& dialogTheme, const RefPtr<FrameNode>& dateNode,
148         std::function<void()>& switchEvent, const RefPtr<FrameNode>& contentRow);
149     static void SwitchTimePickerPage(
150         const RefPtr<FrameNode> &monthAndDayPickerNode, const RefPtr<FrameNode> &timePickerNode,
151         const RefPtr<FrameNode> &contentRow);
152     static bool GetIsUserSetTextProperties(const PickerTextProperties& properties);
153     static void SetAnimationProperty(const RefPtr<FrameNode>& pickerStack,
154         const RefPtr<FrameNode>& contentColumn, const RefPtr<DateTimeAnimationController>& animationController);
155     static std::function<void()> CloseDialogEvent(const RefPtr<FrameNode>& dateNode,
156         const RefPtr<FrameNode>& dialogNode);
157     static const Dimension ConvertFontSizeLimit(const Dimension& fontSizeValue,
158         const Dimension& fontSizeLimit, bool isUserSetFont = false);
159     static const Dimension ConvertFontScaleValue(const Dimension& fontSizeValue,
160         const Dimension& fontSizeLimit = 0.0_vp, bool isUserSetFont = false);
161     static const Dimension ConvertTitleFontScaleValue(const Dimension& fontSizeValue);
162     static const Dimension AdjustFontSizeScale(const Dimension& fontSizeValue, double fontScale);
163     static void GetUserSettingLimit();
164     static void UpdateCancelButtonTextLayoutProperty(
165         const RefPtr<TextLayoutProperty>& textCancelLayoutProperty, const RefPtr<PickerTheme>& pickerTheme);
166     static void UpdateTimePickerChildrenStatus(const RefPtr<FrameNode>& timePickerNode);
167     static void SwitchFocusStatus(
168         const RefPtr<FrameNode>& timePickerNode, const RefPtr<FrameNode>& monthAndDayPickerNode);
169     static bool switchTimePickerFlag_;
170     static bool switchDatePickerFlag_;
171     static bool isShowTime_;
172     static bool isUserSetFont_;
173     static Dimension selectedTextStyleFont_;
174     static Dimension normalTextStyleFont_;
175     static Dimension disappearTextStyleFont_;
176 };
177 } // namespace OHOS::Ace::NG
178 
179 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERNS_DATE_PICKER_DATE_PICKER_DIALOG_VIEW_H
180