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