1 /* 2 * Copyright (c) 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_NAVIGATION_NAVIGATION_MODEL_NG_H 17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERNS_NAVIGATION_NAVIGATION_MODEL_NG_H 18 19 #include "core/common/resource/resource_object.h" 20 #include "core/components_ng/pattern/navigation/navigation_model.h" 21 #include "core/components_ng/pattern/navigation/nav_bar_node.h" 22 #include "core/components_ng/pattern/navigation/navigation_group_node.h" 23 #include "core/components_ng/base/navigation_register.h" 24 25 namespace OHOS::Ace::NG { 26 class ACE_EXPORT NavigationModelNG : public OHOS::Ace::NavigationModel { 27 public: 28 void Create(bool useHomeDestination = false) override; 29 void SetNavigationStack() override; 30 void SetNavigationStack(const RefPtr<NG::NavigationStack>& navigationStack) override; 31 void SetNavigationStackWithCreatorAndUpdater(std::function<RefPtr<NG::NavigationStack>()> creator, 32 std::function<void(RefPtr<NG::NavigationStack>)> updater) override; 33 void SetNavigationStackProvided(bool provided) override; 34 void SetNavigationPathInfo(const std::string& moduleName, const std::string& pagePath) override; 35 bool ParseCommonTitle(bool hasSubTitle, bool hasMainTitle, const std::string& subtitle, 36 const std::string& title, bool ignoreMainTitle = false) override; 37 bool ParseCommonTitle(bool hasSubTitle, bool hasMainTitle, const RefPtr<ResourceObject>& subResObj, 38 const RefPtr<ResourceObject>& mainResObj) override; 39 void UpdateMainTitle( 40 const RefPtr<NG::TitleBarNode>& titleBarNode, const RefPtr<ResourceObject>& mainResObj) override; 41 void UpdateSubTitle( 42 const RefPtr<NG::TitleBarNode>& titleBarNode, const RefPtr<ResourceObject>& subResObj) override; 43 44 void SetTitle(const std::string& title, bool hasSubTitle = false) override; 45 void SetTitlebarOptions(NavigationTitlebarOptions&& opt) override; 46 void SetCustomTitle(const RefPtr<AceType>& customNode) override; 47 void SetTitleHeight(const Dimension& height, bool isValid = true) override; 48 void SetTitleHeight(const Dimension& height, const RefPtr<ResourceObject>& resObj) override; 49 void SetTitleMode(NG::NavigationTitleMode mode) override; 50 void SetSubtitle(const std::string& subtitle) override; 51 void SetEnableModeChangeAnimation(bool isEnable) override; 52 void SetSplitPlaceholder(const RefPtr<NG::UINode>& splitPlaceholder) override; 53 void SetHideTitleBar(bool hideTitleBar, bool animated = false) override; 54 void SetHideNavBar(bool hideNavBar) override; 55 void SetBackButtonIcon(const std::function<void(WeakPtr<NG::FrameNode>)>& symbolApply, const std::string& src, 56 const ImageOption& imageOption, RefPtr<PixelMap>& pixMap, const std::vector<std::string>& nameList, 57 bool userDefinedAccessibilityText = false, const std::string& backButtonAccessibilityText = "") override; 58 void SetBackButtonIcon(const std::function<void(WeakPtr<NG::FrameNode>)>& symbolApply, 59 const RefPtr<ResourceObject>& resObj, const ImageOption& imageOption, RefPtr<PixelMap>& pixMap, 60 const std::vector<std::string>& nameList, bool userDefinedAccessibilityText = false, 61 const std::string& backButtonAccessibilityText = "") override; 62 void SetBackButtonIconTextRes(const std::function<void(WeakPtr<NG::FrameNode>)>& symbolApply, 63 const std::string& src, const NG::ImageOption& imageOption, RefPtr<PixelMap>& pixMap, 64 const std::vector<std::string>& nameList, bool userDefinedAccessibilityText, 65 const RefPtr<ResourceObject>& resObj) override; 66 void SetBackButtonIconSrcAndTextRes(const std::function<void(WeakPtr<NG::FrameNode>)>& symbolApply, 67 const RefPtr<ResourceObject>& backButtonResObj, const ImageOption& imageOption, RefPtr<PixelMap>& pixMap, 68 const std::vector<std::string>& nameList, bool userDefinedAccessibilityText, 69 const RefPtr<ResourceObject>& backButtonTextResObj) override; 70 void UpdateBackButtonIcon(const std::vector<std::string>& nameList, 71 NG::FrameNode* frameNode, const RefPtr<ResourceObject>& backButtonIconResObj) override; 72 void UpdateBackButtonIconText(bool userDefinedAccessibilityText, 73 const RefPtr<NG::TitleBarNode>& titleBarNode, const RefPtr<ResourceObject>& backButtonTextResObj) override; 74 void SetHideBackButton(bool hideBackButton) override; 75 void SetHideToolBar(bool hideToolBar, bool animated = false) override; 76 void SetCustomToolBar(const RefPtr<AceType>& customNode) override; 77 bool NeedSetItems() override; 78 79 void SetToolBarItems(std::vector<NG::BarItem>&& toolBarItems) override; 80 void SetToolbarConfiguration(std::vector<NG::BarItem>&& toolBarItems) override; 81 void SetToolbarConfiguration(std::vector<NG::BarItem>&& toolBarItems, MoreButtonOptions&& opt) override; 82 void SetToolbarOptions(NavigationToolbarOptions&& opt) override; 83 void SetHideItemText(bool isHideItemText) override; 84 void SetEnableToolBarAdaptation(bool enable) override; 85 void SetToolbarMorebuttonOptions(MoreButtonOptions&& opt) override; 86 void SetMenuItems(std::vector<NG::BarItem>&& menuItems) override; 87 void SetMenuOptions(NG::NavigationMenuOptions&& opt) override; 88 void SetCustomMenu(const RefPtr<AceType>& customNode) override; 89 void SetOnTitleModeChange(std::function<void(NG::NavigationTitleMode)>&& onTitleModeChange, 90 std::function<void(const BaseEventInfo* baseInfo)>&& eventInfo) override; 91 void SetUsrNavigationMode(NG::NavigationMode mode) override; 92 void SetNavBarPosition(NG::NavBarPosition mode) override; 93 void SetNavBarWidth(const Dimension& value, bool isDoubleBind = false) override; 94 void SetNavBarWidth(const RefPtr<ResourceObject>& navBarWidthResObj) override; 95 void SetMinNavBarWidth(const Dimension& value) override; 96 void SetMaxNavBarWidth(const Dimension& value) override; 97 void SetMinNavBarWidth(const RefPtr<ResourceObject>& minNavBarWidthResObj) override; 98 void SetMaxNavBarWidth(const RefPtr<ResourceObject>& maxNavBarWidthResObj) override; 99 void SetMinContentWidth(const Dimension& value) override; 100 void SetMinContentWidth(const RefPtr<ResourceObject>& minContentWidthResObj) override; 101 void SetOnNavBarStateChange(std::function<void(bool)>&& onNavBarStateChange) override; 102 void SetNavigationMode(NG::NavigationMode mode) override; 103 void SetNavDestination(std::function<void(std::string)>&& builder) override; 104 RefPtr<NG::NavigationStack> GetNavigationStack() override; 105 void SetMenuCount(int32_t menuCount) override; 106 void SetOnNavigationModeChange(std::function<void(NG::NavigationMode)>&& onModeChange) override; 107 void SetOnNavBarWidthChangeEvent(OnNavBarWidthChangeEvent event) override; 108 void SetCustomTransition(NavigationTransitionEvent&& animationTransition) override; 109 void SetIsCustomAnimation(bool isCustom) override; 110 void SetRecoverable(bool recoverable) override; 111 void SetEnableDragBar(bool enableDragBar) override; 112 void ResetResObj(NavigationPatternType type, const std::string& key) override; 113 void ResetSplitPlaceholder() override; 114 115 static RefPtr<FrameNode> CreateFrameNode(int32_t nodeId); 116 static void SetNavigationStack(FrameNode* frameNode); 117 static void SetHideToolBar(FrameNode* frameNode, bool hideToolBar, bool animated); 118 static void SetEnableModeChangeAnimation(FrameNode* frameNode, bool isEnable); 119 static void SetSplitPlaceholder(FrameNode* frameNode, FrameNode* splitPlaceholder); 120 static void ResetSplitPlaceholder(FrameNode* frameNode); 121 static void SetMinContentWidth(FrameNode* frameNode, const Dimension& value); 122 static void SetMinContentWidth(FrameNode* frameNode, const RefPtr<ResourceObject>& minContentWidthResObj); 123 static void SetMinNavBarWidth(FrameNode* frameNode, const Dimension& value); 124 static void SetMinNavBarWidth(FrameNode* frameNode, const RefPtr<ResourceObject>& minNavBarWidthResObj); 125 static void SetMaxNavBarWidth(FrameNode* frameNode, const Dimension& value); 126 static void SetMaxNavBarWidth(FrameNode* frameNode, const RefPtr<ResourceObject>& maxNavBarWidthResObj); 127 static void SetNavBarWidth(FrameNode* frameNode, const Dimension& value); 128 static void SetNavBarWidth(FrameNode* frameNode, const RefPtr<ResourceObject>& navBarWidthResObj); 129 static void SetNavBarPosition(FrameNode* frameNode, NG::NavBarPosition mode); 130 static void SetUsrNavigationMode(FrameNode* frameNode, NavigationMode mode); 131 static void SetBackButtonIcon(FrameNode* frameNode, const std::function<void(WeakPtr<NG::FrameNode>)>& symbolApply, 132 const std::string& src, const ImageOption& imageOption, RefPtr<PixelMap>& pixMap); 133 static void SetBackButtonIcon(FrameNode* frameNode, const std::function<void(WeakPtr<NG::FrameNode>)>& symbolApply, 134 const ImageOption& imageOption, RefPtr<PixelMap>& pixMap, const RefPtr<ResourceObject>& backButtonIconResObj); 135 static void SetHideNavBar(FrameNode* frameNode, bool hideNavBar); 136 static void SetHideTitleBar(FrameNode* frameNode, bool hideTitleBar, bool animated); 137 static void SetSubtitle(FrameNode* frameNode, const std::string& subtitle); 138 static void SetHideBackButton(FrameNode* frameNode, bool hideBackButton); 139 static void SetTitleMode(FrameNode* frameNode, NG::NavigationTitleMode mode); 140 static void SetRecoverable(FrameNode* frameNode, bool recoverable); 141 static void SetEnableDragBar(FrameNode* frameNode, bool enableDragBar); 142 static void SetEnableToolBarAdaptation(FrameNode* frameNode, bool enable); 143 144 void SetIgnoreLayoutSafeArea(const NG::IgnoreLayoutSafeAreaOpts& opts) override; 145 static void SetIgnoreLayoutSafeArea(FrameNode* frameNode, const NG::IgnoreLayoutSafeAreaOpts& opts); 146 void SetSystemBarStyle(const RefPtr<SystemBarStyle>& style) override; 147 static void ParseCommonTitle(FrameNode* frameNode, const NG::NavigationTitleInfo& titleInfo, 148 bool ignoreMainTitle = false); 149 static void ParseCommonTitle( 150 FrameNode* frameNode, const RefPtr<ResourceObject>& titleResObj, const RefPtr<ResourceObject>& subtitleResObj); 151 static void UpdateMainTitleInfo( 152 const RefPtr<NG::TitleBarNode>& titleBarNode, const RefPtr<ResourceObject>& mainResObj); 153 static void UpdateSubTitleInfo( 154 const RefPtr<NG::TitleBarNode>& titleBarNode, const RefPtr<ResourceObject>& subResObj); 155 static void SetTitlebarOptions(FrameNode* frameNode, NavigationTitlebarOptions&& opt); 156 static void SetMenuItems(FrameNode* frameNode, std::vector<NG::BarItem>&& menuItems); 157 static void SetMenuItemAction(FrameNode* frameNode, std::function<void()>&& action, uint32_t index); 158 static void SetMenuItemSymbol(FrameNode* frameNode, 159 std::function<void(WeakPtr<NG::FrameNode>)>&& symbol, uint32_t index); 160 static void SetCustomTitle(FrameNode* frameNode, const RefPtr<AceType>& customNode); 161 static RefPtr<FrameNode> GetCustomTitle(FrameNode* frameNode); 162 static void SetTitleHeight(FrameNode* frameNode, const Dimension& height, bool isValid = true); 163 static void SetOnCoordScrollStartAction(FrameNode* frameNode, std::function<void()>&& onCoordScrollStart); 164 static void SetOnCoordScrollUpdateAction(FrameNode* frameNode, std::function<void(float)>&& onCoordScrollUpdate); 165 static void SetOnCoordScrollEndAction(FrameNode* frameNode, std::function<void()>&& onCoordScrollEnd); 166 static void SetSystemBarStyle(FrameNode* frameNode, const RefPtr<SystemBarStyle>& style); 167 static bool IsDoubleBindBlock(const RefPtr<NavigationPattern>& navigationPattern); 168 static void SetOnNavigationModeChange(FrameNode* frameNode, std::function<void(NG::NavigationMode)>&& onModeChange); 169 static void SetOnTitleModeChange(FrameNode* frameNode, 170 std::function<void(NG::NavigationTitleMode)>&& onTitleModeChange, 171 std::function<void(const BaseEventInfo* baseInfo)>&& eventInfo); 172 static void SetIsCustomAnimation(FrameNode* frameNode, bool isCustom); 173 static void SetToolBarItems(FrameNode* frameNode, std::vector<NG::BarItem>&& toolBarItems); 174 static RefPtr<NG::NavigationStack> GetNavigationStack(FrameNode* frameNode); 175 static void SetOnNavBarStateChange(FrameNode* frameNode, std::function<void(bool)>&& onNavBarStateChange); 176 static CalcDimension ParseTitleHeight( 177 const RefPtr<NG::TitleBarNode>& titleBarNode, const RefPtr<ResourceObject>& resObj); 178 static void ResetResObj(FrameNode* frameNode, NavigationPatternType type, const std::string& key); 179 static void SetIsCustomTitleBarSize(FrameNode* frameNode, bool isCustom); 180 static void SetBeforeCreateLayoutWrapperCallBack( 181 FrameNode* frameNode, std::function<void()>&& beforeCreateLayoutWrapper); 182 virtual bool UseHomeDestination() const override; 183 virtual void SetHomePathInfoWithCallback( 184 std::function<void(const RefPtr<NavigationStack>&)>&& setHomePathInfoCallback) override; 185 186 private: 187 bool CreatePrimaryContentIfNeeded(const RefPtr<NavigationGroupNode>& navigationGroupNode); 188 bool CreateForceSplitPlaceHolderIfNeeded(const RefPtr<NavigationGroupNode>& navigationGroupNode); 189 bool CreateNavBarNodeIfNeeded(const RefPtr<NavigationGroupNode>& navigationGroupNode); 190 bool CreateNavBarNodeChildsIfNeeded(const RefPtr<NavBarNode>& navBarNode); 191 bool CreateContentNodeIfNeeded(const RefPtr<NavigationGroupNode>& navigationGroupNode); 192 bool CreateDividerNodeIfNeeded(const RefPtr<NavigationGroupNode>& navigationGroupNode); 193 static void SetHideNavBarInner(const RefPtr<NavigationGroupNode>& navigationGroupNode, bool hideNavBar); 194 static bool CreateBackButtonNode(RefPtr<FrameNode>& backButtonNode); 195 static bool UpdateBackButtonProperty(const RefPtr<FrameNode>& backButtonNode); 196 void SetToolbarNavigationMode(NavigationMode mode); // Only used for the toolbar in 'container_modal' component 197 static bool navBarWidthDoubleBind_; 198 }; 199 } // namespace OHOS::Ace::NG 200 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERNS_NAVIGATION_NAVIGATION_MODEL_NG_H 201