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/pattern/navigation/title_bar_node.h" 28 #include "core/components_ng/property/property.h" 29 30 namespace OHOS::Ace::NG { 31 32 class ACE_EXPORT NavBarNode : public GroupNode { DECLARE_ACE_TYPE(NavBarNode,GroupNode)33 DECLARE_ACE_TYPE(NavBarNode, GroupNode) 34 public: 35 NavBarNode(const std::string& tag, int32_t nodeId, const RefPtr<Pattern>& pattern) : GroupNode(tag, nodeId, pattern) 36 {} 37 ~NavBarNode() override = default; 38 void AddChildToGroup(const RefPtr<UINode>& child, int32_t slot = DEFAULT_NODE_SLOT) override; 39 static RefPtr<NavBarNode> GetOrCreateNavBarNode( 40 const std::string& tag, int32_t nodeId, const std::function<RefPtr<Pattern>(void)>& patternCreator); 41 IsAtomicNode()42 bool IsAtomicNode() const override 43 { 44 return false; 45 } 46 SetMenu(const RefPtr<UINode> & menu)47 void SetMenu(const RefPtr<UINode>& menu) 48 { 49 menu_ = menu; 50 } 51 GetMenu()52 const RefPtr<UINode>& GetMenu() const 53 { 54 return menu_; 55 } 56 SetToolbarContainer(const RefPtr<UINode> & menu)57 void SetToolbarContainer(const RefPtr<UINode>& menu) 58 { 59 toolbarMenu_ = menu; 60 } 61 GetToolbarContainer()62 const RefPtr<UINode>& GetToolbarContainer() const 63 { 64 return toolbarMenu_; 65 } 66 SetMenuNode(const RefPtr<UINode> & menuNode)67 void SetMenuNode(const RefPtr<UINode>& menuNode) 68 { 69 moreMenuNode_ = menuNode; 70 } 71 SetToolbarMenuNode(const RefPtr<UINode> & menuNode)72 void SetToolbarMenuNode(const RefPtr<UINode>& menuNode) 73 { 74 toolbarMoreMenuNode_ = menuNode; 75 } 76 SetLandscapeMenuNode(const RefPtr<UINode> & moreLandscapeMenuNode)77 void SetLandscapeMenuNode(const RefPtr<UINode>& moreLandscapeMenuNode) 78 { 79 moreLandscapeMenuNode_ = moreLandscapeMenuNode; 80 } 81 SetLandscapeMenu(const RefPtr<UINode> & menu)82 void SetLandscapeMenu(const RefPtr<UINode>& menu) 83 { 84 landscapeMenu_ = menu; 85 } 86 GetLandscapeMenu()87 const RefPtr<UINode>& GetLandscapeMenu() const 88 { 89 return landscapeMenu_; 90 } 91 SetTitleBarNode(const RefPtr<UINode> & title)92 void SetTitleBarNode(const RefPtr<UINode>& title) 93 { 94 titleBarNode_ = title; 95 } 96 GetTitleBarNode()97 const RefPtr<UINode>& GetTitleBarNode() const 98 { 99 return titleBarNode_; 100 } 101 SetNavBarContentNode(const RefPtr<UINode> & navBarContentNode)102 void SetNavBarContentNode(const RefPtr<UINode>& navBarContentNode) 103 { 104 navBarContentNode_ = navBarContentNode; 105 } 106 GetNavBarContentNode()107 const RefPtr<UINode>& GetNavBarContentNode() const 108 { 109 return navBarContentNode_; 110 } 111 SetToolBarNode(const RefPtr<UINode> & toolBarNode)112 void SetToolBarNode(const RefPtr<UINode>& toolBarNode) 113 { 114 toolBarNode_ = toolBarNode; 115 } 116 GetToolBarNode()117 const RefPtr<UINode>& GetToolBarNode() const 118 { 119 return toolBarNode_; 120 } 121 SetPreToolBarNode(const RefPtr<UINode> & preToolBarNode)122 void SetPreToolBarNode(const RefPtr<UINode>& preToolBarNode) 123 { 124 preToolBarNode_ = preToolBarNode; 125 } 126 GetPreToolBarNode()127 const RefPtr<UINode>& GetPreToolBarNode() const 128 { 129 return preToolBarNode_; 130 } 131 SetToolBarDividerNode(const RefPtr<UINode> & toolBarDividerNode)132 void SetToolBarDividerNode(const RefPtr<UINode>& toolBarDividerNode) 133 { 134 toolBarDividerNode_ = toolBarDividerNode; 135 } 136 GetToolBarDividerNode()137 const RefPtr<UINode>& GetToolBarDividerNode() const 138 { 139 return toolBarDividerNode_; 140 } 141 SetNarBarUseToolbarConfiguration(bool isNewToolbar)142 void SetNarBarUseToolbarConfiguration(bool isNewToolbar) 143 { 144 isNewToolbar_ = isNewToolbar; 145 } 146 IsNavbarUseToolbarConfiguration()147 bool IsNavbarUseToolbarConfiguration() const 148 { 149 return isNewToolbar_; 150 } 151 SetIsTitleMenuNodeShowing(const bool isTitleMenuNodeShowing)152 void SetIsTitleMenuNodeShowing(const bool isTitleMenuNodeShowing) 153 { 154 isTitleMenuNodeShowing_ = isTitleMenuNodeShowing; 155 } 156 IsTitleMenuNodeShowing()157 bool IsTitleMenuNodeShowing() const 158 { 159 return isTitleMenuNodeShowing_; 160 } 161 162 std::string GetTitleString() const; 163 std::string GetSubtitleString() const; 164 std::string GetBarItemsString(bool isMenu) const; 165 void ToJsonValue(std::unique_ptr<JsonValue>& json) const override; 166 167 // custom node checking 168 ACE_DEFINE_PROPERTY_ITEM_FUNC_WITHOUT_GROUP(PrevTitleIsCustom, bool); OnPrevTitleIsCustomUpdate(bool value)169 void OnPrevTitleIsCustomUpdate(bool value) {} 170 ACE_DEFINE_PROPERTY_ITEM_FUNC_WITHOUT_GROUP(PrevMenuIsCustom, bool); OnPrevMenuIsCustomUpdate(bool value)171 void OnPrevMenuIsCustomUpdate(bool value) {} 172 ACE_DEFINE_PROPERTY_ITEM_FUNC_WITHOUT_GROUP(PrevToolBarIsCustom, bool); OnPrevToolBarIsCustomUpdate(bool value)173 void OnPrevToolBarIsCustomUpdate(bool value) {} 174 175 // node operation related 176 ACE_DEFINE_PROPERTY_ITEM_FUNC_WITHOUT_GROUP(MenuNodeOperation, ChildNodeOperation); OnMenuNodeOperationUpdate(ChildNodeOperation value)177 void OnMenuNodeOperationUpdate(ChildNodeOperation value) {} 178 ACE_DEFINE_PROPERTY_ITEM_FUNC_WITHOUT_GROUP(ToolBarNodeOperation, ChildNodeOperation); OnToolBarNodeOperationUpdate(ChildNodeOperation value)179 void OnToolBarNodeOperationUpdate(ChildNodeOperation value) {} 180 SetTransitionType(PageTransitionType type)181 void SetTransitionType(PageTransitionType type) 182 { 183 transitionType_ = type; 184 } 185 GetTransitionType()186 PageTransitionType GetTransitionType() const 187 { 188 return transitionType_; 189 } 190 191 private: 192 RefPtr<UINode> menu_; 193 RefPtr<UINode> toolbarMenu_; 194 RefPtr<UINode> landscapeMenu_; 195 RefPtr<UINode> moreMenuNode_; 196 RefPtr<UINode> toolbarMoreMenuNode_; 197 RefPtr<UINode> moreLandscapeMenuNode_; 198 RefPtr<UINode> titleBarNode_; 199 RefPtr<UINode> navBarContentNode_; 200 RefPtr<UINode> toolBarNode_; 201 RefPtr<UINode> preToolBarNode_; 202 RefPtr<UINode> toolBarDividerNode_; 203 bool isTitleMenuNodeShowing_ = false; 204 bool isNewToolbar_ = false; 205 PageTransitionType transitionType_ = PageTransitionType::NONE; 206 }; 207 208 } // namespace OHOS::Ace::NG 209 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERNS_NAVIGATION_NAV_BAR_NODE_H 210