1 /* 2 * Copyright (c) 2022 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_NAV_BAR_NODE_H 17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERNS_NAVIGATION_NAV_BAR_NODE_H 18 19 #include <cstdint> 20 #include <list> 21 22 #include "core/animation/page_transition_common.h" 23 #include "core/components_ng/base/frame_node.h" 24 #include "core/components_ng/base/group_node.h" 25 #include "core/components_ng/pattern/navigation/bar_item_node.h" 26 #include "core/components_ng/pattern/navigation/navigation_declaration.h" 27 #include "core/components_ng/property/property.h" 28 29 namespace OHOS::Ace::NG { 30 31 class ACE_EXPORT NavBarNode : public GroupNode { DECLARE_ACE_TYPE(NavBarNode,GroupNode)32 DECLARE_ACE_TYPE(NavBarNode, GroupNode) 33 public: 34 NavBarNode(const std::string& tag, int32_t nodeId, const RefPtr<Pattern>& pattern) : GroupNode(tag, nodeId, pattern) 35 {} 36 ~NavBarNode() override = default; 37 void AddChildToGroup(const RefPtr<UINode>& child, int32_t slot = DEFAULT_NODE_SLOT) override; 38 static RefPtr<NavBarNode> GetOrCreateNavBarNode( 39 const std::string& tag, int32_t nodeId, const std::function<RefPtr<Pattern>(void)>& patternCreator); 40 IsAtomicNode()41 bool IsAtomicNode() const override 42 { 43 return false; 44 } SetBackButton(const RefPtr<UINode> & button)45 void SetBackButton(const RefPtr<UINode>& button) 46 { 47 backButton_ = button; 48 } 49 GetBackButton()50 const RefPtr<UINode>& GetBackButton() const 51 { 52 return backButton_; 53 } 54 SetTitle(const RefPtr<UINode> & title)55 void SetTitle(const RefPtr<UINode>& title) 56 { 57 title_ = title; 58 } 59 GetTitle()60 const RefPtr<UINode>& GetTitle() const 61 { 62 return title_; 63 } 64 SetSubtitle(const RefPtr<UINode> & subtitle)65 void SetSubtitle(const RefPtr<UINode>& subtitle) 66 { 67 subtitle_ = subtitle; 68 } 69 GetSubtitle()70 const RefPtr<UINode>& GetSubtitle() const 71 { 72 return subtitle_; 73 } 74 SetMenu(const RefPtr<UINode> & menu)75 void SetMenu(const RefPtr<UINode>& menu) 76 { 77 menu_ = menu; 78 } 79 GetMenu()80 const RefPtr<UINode>& GetMenu() const 81 { 82 return menu_; 83 } 84 SetToolbarContainer(const RefPtr<UINode> & menu)85 void SetToolbarContainer(const RefPtr<UINode>& menu) 86 { 87 toolbarMenu_ = menu; 88 } 89 GetToolbarContainer()90 const RefPtr<UINode>& GetToolbarContainer() const 91 { 92 return toolbarMenu_; 93 } 94 SetMenuNode(const RefPtr<UINode> & menuNode)95 void SetMenuNode(const RefPtr<UINode>& menuNode) 96 { 97 moreMenuNode_ = menuNode; 98 } 99 SetToolbarMenuNode(const RefPtr<UINode> & menuNode)100 void SetToolbarMenuNode(const RefPtr<UINode>& menuNode) 101 { 102 toolbarMoreMenuNode_ = menuNode; 103 } 104 SetLandscapeMenuNode(const RefPtr<UINode> & moreLandscapeMenuNode)105 void SetLandscapeMenuNode(const RefPtr<UINode>& moreLandscapeMenuNode) 106 { 107 moreLandscapeMenuNode_ = moreLandscapeMenuNode; 108 } 109 SetLandscapeMenu(const RefPtr<UINode> & menu)110 void SetLandscapeMenu(const RefPtr<UINode>& menu) 111 { 112 landscapeMenu_ = menu; 113 } 114 GetLandscapeMenu()115 const RefPtr<UINode>& GetLandscapeMenu() const 116 { 117 return landscapeMenu_; 118 } 119 SetTitleBarNode(const RefPtr<UINode> & title)120 void SetTitleBarNode(const RefPtr<UINode>& title) 121 { 122 titleBarNode_ = title; 123 } 124 GetTitleBarNode()125 const RefPtr<UINode>& GetTitleBarNode() const 126 { 127 return titleBarNode_; 128 } 129 SetNavBarContentNode(const RefPtr<UINode> & navBarContentNode)130 void SetNavBarContentNode(const RefPtr<UINode>& navBarContentNode) 131 { 132 navBarContentNode_ = navBarContentNode; 133 } 134 GetNavBarContentNode()135 const RefPtr<UINode>& GetNavBarContentNode() const 136 { 137 return navBarContentNode_; 138 } 139 SetToolBarNode(const RefPtr<UINode> & toolBarNode)140 void SetToolBarNode(const RefPtr<UINode>& toolBarNode) 141 { 142 toolBarNode_ = toolBarNode; 143 } 144 GetToolBarNode()145 const RefPtr<UINode>& GetToolBarNode() const 146 { 147 return toolBarNode_; 148 } 149 SetPreToolBarNode(const RefPtr<UINode> & preToolBarNode)150 void SetPreToolBarNode(const RefPtr<UINode>& preToolBarNode) 151 { 152 preToolBarNode_ = preToolBarNode; 153 } 154 GetPreToolBarNode()155 const RefPtr<UINode>& GetPreToolBarNode() const 156 { 157 return preToolBarNode_; 158 } 159 SetToolBarDividerNode(const RefPtr<UINode> & toolBarDividerNode)160 void SetToolBarDividerNode(const RefPtr<UINode>& toolBarDividerNode) 161 { 162 toolBarDividerNode_ = toolBarDividerNode; 163 } 164 GetToolBarDividerNode()165 const RefPtr<UINode>& GetToolBarDividerNode() const 166 { 167 return toolBarDividerNode_; 168 } 169 SetNarBarUseToolbarConfiguration(bool isNewToolbar)170 void SetNarBarUseToolbarConfiguration(bool isNewToolbar) 171 { 172 isNewToolbar_ = isNewToolbar; 173 } 174 IsNavbarUseToolbarConfiguration()175 bool IsNavbarUseToolbarConfiguration() const 176 { 177 return isNewToolbar_; 178 } 179 SetIsTitleMenuNodeShowing(const bool isTitleMenuNodeShowing)180 void SetIsTitleMenuNodeShowing(const bool isTitleMenuNodeShowing) 181 { 182 isTitleMenuNodeShowing_ = isTitleMenuNodeShowing; 183 } 184 IsTitleMenuNodeShowing()185 bool IsTitleMenuNodeShowing() const 186 { 187 return isTitleMenuNodeShowing_; 188 } 189 190 std::string GetTitleString() const; 191 std::string GetSubtitleString() const; 192 std::string GetBarItemsString(bool isMenu) const; 193 void ToJsonValue(std::unique_ptr<JsonValue>& json) const override; 194 195 // custom node checking 196 ACE_DEFINE_PROPERTY_ITEM_FUNC_WITHOUT_GROUP(PrevTitleIsCustom, bool); OnPrevTitleIsCustomUpdate(bool value)197 void OnPrevTitleIsCustomUpdate(bool value) {} 198 ACE_DEFINE_PROPERTY_ITEM_FUNC_WITHOUT_GROUP(PrevMenuIsCustom, bool); OnPrevMenuIsCustomUpdate(bool value)199 void OnPrevMenuIsCustomUpdate(bool value) {} 200 ACE_DEFINE_PROPERTY_ITEM_FUNC_WITHOUT_GROUP(PrevToolBarIsCustom, bool); OnPrevToolBarIsCustomUpdate(bool value)201 void OnPrevToolBarIsCustomUpdate(bool value) {} 202 203 // node operation related 204 ACE_DEFINE_PROPERTY_ITEM_FUNC_WITHOUT_GROUP(BackButtonNodeOperation, ChildNodeOperation); OnBackButtonNodeOperationUpdate(ChildNodeOperation value)205 void OnBackButtonNodeOperationUpdate(ChildNodeOperation value) {} 206 ACE_DEFINE_PROPERTY_ITEM_FUNC_WITHOUT_GROUP(TitleNodeOperation, ChildNodeOperation); OnTitleNodeOperationUpdate(ChildNodeOperation value)207 void OnTitleNodeOperationUpdate(ChildNodeOperation value) {} 208 ACE_DEFINE_PROPERTY_ITEM_FUNC_WITHOUT_GROUP(SubtitleNodeOperation, ChildNodeOperation); OnSubtitleNodeOperationUpdate(ChildNodeOperation value)209 void OnSubtitleNodeOperationUpdate(ChildNodeOperation value) {} 210 ACE_DEFINE_PROPERTY_ITEM_FUNC_WITHOUT_GROUP(MenuNodeOperation, ChildNodeOperation); OnMenuNodeOperationUpdate(ChildNodeOperation value)211 void OnMenuNodeOperationUpdate(ChildNodeOperation value) {} 212 ACE_DEFINE_PROPERTY_ITEM_FUNC_WITHOUT_GROUP(ToolBarNodeOperation, ChildNodeOperation); OnToolBarNodeOperationUpdate(ChildNodeOperation value)213 void OnToolBarNodeOperationUpdate(ChildNodeOperation value) {} 214 SetTransitionType(PageTransitionType type)215 void SetTransitionType(PageTransitionType type) 216 { 217 transitionType_ = type; 218 } 219 GetTransitionType()220 PageTransitionType GetTransitionType() const 221 { 222 return transitionType_; 223 } 224 225 private: 226 RefPtr<UINode> backButton_; 227 RefPtr<UINode> title_; 228 RefPtr<UINode> subtitle_; 229 RefPtr<UINode> menu_; 230 RefPtr<UINode> toolbarMenu_; 231 RefPtr<UINode> landscapeMenu_; 232 RefPtr<UINode> moreMenuNode_; 233 RefPtr<UINode> toolbarMoreMenuNode_; 234 RefPtr<UINode> moreLandscapeMenuNode_; 235 RefPtr<UINode> titleBarNode_; 236 RefPtr<UINode> navBarContentNode_; 237 RefPtr<UINode> toolBarNode_; 238 RefPtr<UINode> preToolBarNode_; 239 RefPtr<UINode> toolBarDividerNode_; 240 bool isTitleMenuNodeShowing_ = false; 241 bool isNewToolbar_ = false; 242 PageTransitionType transitionType_ = PageTransitionType::NONE; 243 }; 244 245 } // namespace OHOS::Ace::NG 246 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERNS_NAVIGATION_NAV_BAR_NODE_H 247