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