• 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 CheckBoxPaintProperty;
33 class DatePickerPattern;
34 class ACE_EXPORT DatePickerDialogView {
35 public:
36     static RefPtr<FrameNode> Show(const DialogProperties& dialogProps, const DatePickerSettingData& settingData,
37         const std::vector<ButtonInfo>& buttonInfos, std::map<std::string, NG::DialogEvent> dialogEvent,
38         std::map<std::string, NG::DialogGestureEvent> dialogCancelEvent);
39     static void SetStartDate(const RefPtr<FrameNode>& frameNode, const PickerDate& value);
40     static void SetEndDate(const RefPtr<FrameNode>& frameNode, const PickerDate& value);
41     static void SetSelectedDate(const RefPtr<FrameNode>& frameNode, const PickerDate& value);
42     static void SetMode(const RefPtr<FrameNode>& frameNode, const DatePickerMode& mode);
43     static void SetShowLunar(const RefPtr<FrameNode>& frameNode, bool lunar = false);
44     static void SetCanLoop(const RefPtr<FrameNode>& frameNode, bool isLoop = true);
45     static void SetDateTextProperties(const RefPtr<FrameNode>& frameNode, const PickerTextProperties& properties);
46     static void SetTimeTextProperties(const RefPtr<FrameNode>& frameNode, const PickerTextProperties& properties);
47     static void SetDialogChange(const RefPtr<FrameNode>& frameNode, DialogEvent&& onChange);
48     static void SetDialogDateChange(const RefPtr<FrameNode>& frameNode, DialogEvent&& onChange);
49     static void SetDialogAcceptEvent(const RefPtr<FrameNode>& frameNode, DialogEvent&& onChange);
50     static void SetDialogDateAcceptEvent(const RefPtr<FrameNode>& frameNode, DialogEvent&& onChange);
51     static void SetDialogSwitchEvent(std::function<bool()> switchEvent, const RefPtr<FrameNode>& pickerStack);
52     static RefPtr<FrameNode> CreateButtonNode(const RefPtr<FrameNode>& dateNode,
53         const RefPtr<FrameNode>& datePickerNode, const std::vector<ButtonInfo>& buttonInfos,
54         std::map<std::string, NG::DialogEvent> dialogEvent,
55         std::map<std::string, NG::DialogGestureEvent> dialogCancelEvent);
56     static RefPtr<FrameNode> CreateTitleButtonNode(const RefPtr<FrameNode>& dateNode);
57     static RefPtr<FrameNode> CreateTitleButtonRowNode();
58     static void CreateTitleIconNode(const RefPtr<FrameNode>& titleNode);
59     static RefPtr<FrameNode> CreateDividerNode(const RefPtr<FrameNode>& dateNode, bool isCreateDivider = false);
60     static RefPtr<FrameNode> CreateConfirmNode(const RefPtr<FrameNode>& dateNode,
61         const RefPtr<FrameNode>& datePickerNode, DialogEvent& acceptEvent, const std::vector<ButtonInfo>& buttonInfos);
62     static RefPtr<FrameNode> CreateCancelNode(NG::DialogGestureEvent& cancelEvent,
63         const RefPtr<FrameNode>& datePickerNode, const std::vector<ButtonInfo>& buttonInfos);
64     static RefPtr<FrameNode> CreateDateNode(int32_t dateNodeId, const DatePickerSettingData& settingData, bool hasTime);
65     static RefPtr<FrameNode> CreateColumnNode(int32_t nodeId, uint32_t showCount, bool isDate = true);
66     static void CreateNormalDateNode(const RefPtr<FrameNode>& dateNode, uint32_t showCount);
67     static void CreateSingleDateNode(const RefPtr<FrameNode>& dateNode, uint32_t showCount);
68     static RefPtr<FrameNode> CreateTimeNode(std::map<std::string, PickerTime> timePickerProperty,
69         const PickerTextProperties& properties, bool useMilitaryTime);
70     static RefPtr<FrameNode> CreateLunarSwitchTextNode();
71 
72     static bool switchFlag_;
73 
74 private:
75     static RefPtr<FrameNode> CreateStackNode();
76     static RefPtr<FrameNode> CreateColumnNode();
77     static RefPtr<FrameNode> CreateButtonNode();
78     static void UpdateCheckboxPaintProperty(const RefPtr<CheckBoxPaintProperty>& checkboxPaintProps,
79     bool isLunar, const CheckboxSettingData& checkboxSettingData);
80     static void CreateLunarswitchNode(const RefPtr<FrameNode>& contentColumn, const RefPtr<FrameNode>& dateNode,
81         std::function<void(const bool)>&& changeEvent, bool isLunar, const CheckboxSettingData& checkboxSettingData);
82     static void SetTitleMouseHoverEvent(const RefPtr<FrameNode>& titleRow);
83     static void HandleMouseEvent(const RefPtr<FrameNode>& titleButton, bool isHover);
84     static void PlayHoverAnimation(const RefPtr<FrameNode>& titleButton, const Color& color);
85     static void MountColumnNodeToPicker(
86         const RefPtr<FrameNode>& columnNode, const RefPtr<FrameNode>& pickerNode, uint32_t columnWeight = 1);
87     static void UpdateTitleRowLayoutProps(const RefPtr<FrameNode>& titleRow);
88     static void SetTimeNodeColumnWeight(const RefPtr<FrameNode>& timeNode, const DatePickerSettingData& settingData);
89     static RefPtr<FrameNode> CreateAndMountDateNode(
90         const DatePickerSettingData& settingData, const RefPtr<FrameNode>& pickerStack);
91     static RefPtr<FrameNode> CreateAndMountButtonTitleNode(
92         const RefPtr<FrameNode>& dateNode, const RefPtr<FrameNode>& contentColumn);
93     static std::function<void(bool)> CreateLunarChangeEvent(const RefPtr<FrameNode>& dateNode);
94     static RefPtr<FrameNode> CreateAndMountMonthDaysNode(const DatePickerSettingData& settingData,
95         const RefPtr<FrameNode>& dateNode, const RefPtr<FrameNode>& pickerRow,
96         std::function<void(bool)>&& lunarChangeEvent);
97     static bool SetSelectedDateAndFocus(const RefPtr<FrameNode>& monthDaysNode, const RefPtr<FrameNode>& dateNode);
98     static RefPtr<FrameNode> CreateAndMountTimeNode(const DatePickerSettingData& settingData,
99         const RefPtr<FrameNode>& monthDaysNode, const RefPtr<FrameNode>& pickerRow);
100     static std::function<void()> CreateAndSetDialogSwitchEvent(const RefPtr<FrameNode>& pickerStack,
101         const RefPtr<FrameNode>& contentColumn, const DatePickerSettingData& settingData);
102     static void SwitchPickerPage(const RefPtr<FrameNode>& pickerStack, const RefPtr<FrameNode>& contentColumn,
103         const RefPtr<DateTimeAnimationController>& animationController, bool useMilitary = false);
104     static void SwitchDatePickerPage(const RefPtr<FrameNode>& dateNode, bool isSwitchByTitle = false);
105     static void UpdateDateNodeVisibilityAndWeight(const RefPtr<LayoutProperty>& layoutProperty,
106         const RefPtr<LayoutProperty>& dateChildNodeLayoutProperty, bool isSwitchByTitle, uint32_t index);
107     static void HideContentChildrenButton(const RefPtr<FrameNode>& contentRow);
108     static void SwitchContentRowButton(const RefPtr<FrameNode>& contentRow, bool useMilitary = false);
109     static void ShowContentRowButton(const RefPtr<FrameNode>& contentRow, bool isFirstPage = true);
110     static bool InitContentRowVisibility(const RefPtr<FrameNode>& contentRow);
111     static bool UpdateButtonVisibility(const RefPtr<FrameNode>& buttonNode);
112     static void CreateAndAddTitleClickEvent(
113         std::function<void()>& titleSwitchEvent, const RefPtr<FrameNode>& buttonTitleNode);
114     static void BuildDialogAcceptAndCancelButton(const std::vector<ButtonInfo>& buttonInfos,
115         const DatePickerSettingData& settingData, const RefPtr<FrameNode>& acceptNode,
116         const RefPtr<FrameNode>& dateNode, const RefPtr<FrameNode>& dialogNode, const RefPtr<FrameNode>& contentColumn,
117         std::map<std::string, NG::DialogEvent> dialogEvent,
118         std::map<std::string, NG::DialogGestureEvent> dialogCancelEvent);
119     static void UpdateConfirmButtonTextLayoutProperty(
120         const RefPtr<TextLayoutProperty>& textLayoutProperty, const RefPtr<PickerTheme>& pickerTheme);
121     static void UpdateButtonLayoutProperty(
122         const RefPtr<ButtonLayoutProperty>& buttonConfirmLayoutProperty, const RefPtr<PickerTheme>& pickerTheme);
123     static void UpdateConfirmButtonMargin(
124         const RefPtr<ButtonLayoutProperty>& buttonConfirmLayoutProperty, const RefPtr<DialogTheme>& dialogTheme);
125     static void UpdateCancelButtonMargin(
126         const RefPtr<ButtonLayoutProperty>& buttonCancelLayoutProperty, const RefPtr<DialogTheme>& dialogTheme);
127     static void UpdateNextButtonMargin(const RefPtr<ButtonLayoutProperty>& buttonNextLayoutProperty);
128     static void UpdateButtonStyles(const std::vector<ButtonInfo>& buttonInfos, size_t index,
129         const RefPtr<ButtonLayoutProperty>& buttonLayoutProperty, const RefPtr<RenderContext>& buttonRenderContext);
130     static void UpdateButtonStyleAndRole(const std::vector<ButtonInfo>& buttonInfos, size_t index,
131         const RefPtr<ButtonLayoutProperty>& buttonLayoutProperty, const RefPtr<RenderContext>& buttonRenderContext,
132         const RefPtr<ButtonTheme>& buttonTheme);
133     static void UpdateContentPadding(const RefPtr<FrameNode>& contentColumn);
134     static void UpdateButtonDefaultFocus(const std::vector<ButtonInfo>& buttonInfos,
135         const RefPtr<FrameNode>& buttonNode, bool isConfirm);
136     static RefPtr<FrameNode> CreateNextPrevButtonNode(
137         std::function<void()> & switchEvent,
138         const RefPtr<FrameNode>& dateNode, const std::vector<ButtonInfo> &buttonInfos,
139         const RefPtr<FrameNode>& contentRow);
140     static void BuildDialogAcceptAndCancelButtonForAging(
141         const std::vector<ButtonInfo> &buttonInfos, const DatePickerSettingData &settingData,
142         const RefPtr<FrameNode> &timePickerNode, const RefPtr<FrameNode> &acceptNode,
143         const RefPtr<FrameNode> &dateNode, const RefPtr<FrameNode> &dialogNode,
144         const RefPtr<FrameNode> &contentColumn, std::map<std::string, NG::DialogEvent> dialogEvent,
145         std::map<std::string, NG::DialogGestureEvent> dialogCancelEvent);
146     static bool NeedAdaptForAging();
147     static RefPtr<FrameNode> CreateButtonNodeForAging(const DatePickerSettingData& settingData,
148         const RefPtr<FrameNode>& timePickerNode, const RefPtr<FrameNode>& monthAndDayNode,
149         const RefPtr<FrameNode>& datePickerNode, const std::vector<ButtonInfo>& buttonInfos,
150         std::map<std::string, NG::DialogEvent> dialogEvent,
151         std::map<std::string, NG::DialogGestureEvent> dialogCancelEvent);
152     static std::function<void()> CreateAndSetTimePickerSwitchEvent(
153         const RefPtr<FrameNode>& monthAndDayPickerNode, const RefPtr<FrameNode>& timePickerNode,
154         const RefPtr<FrameNode>& contentRow);
155     static std::function<void(const GestureEvent&)> CreateNextPrevClickEvent(
156         const RefPtr<FrameNode>& textNextPrevNode, const RefPtr<FrameNode>& nextPrevButtonNode,
157         const RefPtr<DialogTheme>& dialogTheme, const RefPtr<FrameNode>& dateNode,
158         std::function<void()>& switchEvent, const RefPtr<FrameNode>& contentRow);
159     static void SwitchTimePickerPage(
160         const RefPtr<FrameNode> &monthAndDayPickerNode, const RefPtr<FrameNode> &timePickerNode,
161         const RefPtr<FrameNode> &contentRow);
162     static bool GetIsUserSetTextProperties(const PickerTextProperties& properties);
163     static void SetAnimationProperty(const RefPtr<FrameNode>& pickerStack,
164         const RefPtr<FrameNode>& contentColumn, const RefPtr<DateTimeAnimationController>& animationController);
165     static std::function<void()> CloseDialogEvent(const RefPtr<FrameNode>& dateNode,
166         const RefPtr<FrameNode>& dialogNode);
167     static const Dimension ConvertFontSizeLimit(const Dimension& fontSizeValue,
168         const Dimension& fontSizeLimit, bool isUserSetFont = false);
169     static const Dimension ConvertFontScaleValue(const Dimension& fontSizeValue,
170         const Dimension& fontSizeLimit = 0.0_vp, bool isUserSetFont = false);
171     static const Dimension ConvertTitleFontScaleValue(const Dimension& fontSizeValue);
172     static const Dimension AdjustFontSizeScale(const Dimension& fontSizeValue, double fontScale);
173     static void GetUserSettingLimit();
174     static void UpdateCancelButtonTextLayoutProperty(
175         const RefPtr<TextLayoutProperty>& textCancelLayoutProperty, const RefPtr<PickerTheme>& pickerTheme);
176     static void UpdateTimePickerChildrenStatus(const RefPtr<FrameNode>& timePickerNode);
177     static void SwitchFocusStatus(
178         const RefPtr<FrameNode>& timePickerNode, const RefPtr<FrameNode>& monthAndDayPickerNode);
179     static DialogEvent GetDateChangeEvent(const RefPtr<FrameNode>& frameNode,
180         const std::map<std::string, NG::DialogEvent>& dialogEvent);
181     static void ToggleTitleDisplay(
182         RefPtr<DatePickerPattern>& datePickerPattern, RefPtr<DatePickerPattern>& monthDaysPickerPattern);
183     static std::string GetDialogAgingButtonText(bool isNext);
184     static std::string GetDialogNormalButtonText(bool isConfirm);
185     static bool switchTimePickerFlag_;
186     static bool switchDatePickerFlag_;
187     static bool isShowTime_;
188     static bool isUserSetFont_;
189     static bool isEnableHapticFeedback_;
190     static Dimension selectedTextStyleFont_;
191     static Dimension normalTextStyleFont_;
192     static Dimension disappearTextStyleFont_;
193     static DatePickerMode datePickerMode_;
194 };
195 } // namespace OHOS::Ace::NG
196 
197 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERNS_DATE_PICKER_DATE_PICKER_DIALOG_VIEW_H
198