1 /* 2 * Copyright (c) 2024 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_NAVDESTINATION_NODE_BASE_H 17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERNS_NAVIGATION_NAVDESTINATION_NODE_BASE_H 18 19 #include <cstdint> 20 21 #include "core/animation/page_transition_common.h" 22 #include "core/components_ng/base/group_node.h" 23 #include "core/components_ng/pattern/navigation/navigation_declaration.h" 24 #include "core/components_ng/pattern/pattern.h" 25 #include "core/components_ng/property/property.h" 26 27 namespace OHOS::Ace::NG { 28 class NavDestinationNodeBase : public GroupNode { DECLARE_ACE_TYPE(NavDestinationNodeBase,GroupNode)29 DECLARE_ACE_TYPE(NavDestinationNodeBase, GroupNode) 30 public: 31 NavDestinationNodeBase(const std::string& tag, int32_t nodeId, const RefPtr<Pattern>& pattern) 32 : GroupNode(tag, nodeId, pattern) {} 33 ~NavDestinationNodeBase() override = default; 34 IsAtomicNode()35 bool IsAtomicNode() const override 36 { 37 return false; 38 } 39 SetMenu(const RefPtr<UINode> & menu)40 void SetMenu(const RefPtr<UINode>& menu) 41 { 42 menu_ = menu; 43 } 44 GetMenu()45 const RefPtr<UINode>& GetMenu() const 46 { 47 return menu_; 48 } 49 SetToolbarContainer(const RefPtr<UINode> & menu)50 void SetToolbarContainer(const RefPtr<UINode>& menu) 51 { 52 toolbarMenu_ = menu; 53 } 54 GetToolbarContainer()55 const RefPtr<UINode>& GetToolbarContainer() const 56 { 57 return toolbarMenu_; 58 } 59 SetMenuNode(const RefPtr<UINode> & menuNode)60 void SetMenuNode(const RefPtr<UINode>& menuNode) 61 { 62 moreMenuNode_ = menuNode; 63 } 64 SetToolbarMenuNode(const RefPtr<UINode> & menuNode)65 void SetToolbarMenuNode(const RefPtr<UINode>& menuNode) 66 { 67 toolbarMoreMenuNode_ = menuNode; 68 } 69 SetLandscapeMenuNode(const RefPtr<UINode> & moreLandscapeMenuNode)70 void SetLandscapeMenuNode(const RefPtr<UINode>& moreLandscapeMenuNode) 71 { 72 moreLandscapeMenuNode_ = moreLandscapeMenuNode; 73 } 74 SetLandscapeMenu(const RefPtr<UINode> & menu)75 void SetLandscapeMenu(const RefPtr<UINode>& menu) 76 { 77 landscapeMenu_ = menu; 78 } 79 GetLandscapeMenu()80 const RefPtr<UINode>& GetLandscapeMenu() const 81 { 82 return landscapeMenu_; 83 } 84 SetContentNode(const RefPtr<UINode> & contentNode)85 void SetContentNode(const RefPtr<UINode>& contentNode) 86 { 87 contentNode_ = contentNode; 88 } 89 GetContentNode()90 const RefPtr<UINode>& GetContentNode() const 91 { 92 return contentNode_; 93 } 94 SetTitleBarNode(const RefPtr<UINode> & title)95 void SetTitleBarNode(const RefPtr<UINode>& title) 96 { 97 titleBarNode_ = title; 98 } 99 GetTitleBarNode()100 const RefPtr<UINode>& GetTitleBarNode() const 101 { 102 return titleBarNode_; 103 } 104 SetToolBarNode(const RefPtr<UINode> & toolBarNode)105 void SetToolBarNode(const RefPtr<UINode>& toolBarNode) 106 { 107 toolBarNode_ = toolBarNode; 108 } 109 GetToolBarNode()110 const RefPtr<UINode>& GetToolBarNode() const 111 { 112 return toolBarNode_; 113 } 114 SetPreToolBarNode(const RefPtr<UINode> & preToolBarNode)115 void SetPreToolBarNode(const RefPtr<UINode>& preToolBarNode) 116 { 117 preToolBarNode_ = preToolBarNode; 118 } 119 GetPreToolBarNode()120 const RefPtr<UINode>& GetPreToolBarNode() const 121 { 122 return preToolBarNode_; 123 } 124 SetToolBarDividerNode(const RefPtr<UINode> & toolBarDividerNode)125 void SetToolBarDividerNode(const RefPtr<UINode>& toolBarDividerNode) 126 { 127 toolBarDividerNode_ = toolBarDividerNode; 128 } 129 GetToolBarDividerNode()130 const RefPtr<UINode>& GetToolBarDividerNode() const 131 { 132 return toolBarDividerNode_; 133 } 134 SetIsUseToolbarConfiguration(bool isNewToolbar)135 void SetIsUseToolbarConfiguration(bool isNewToolbar) 136 { 137 isNewToolbar_ = isNewToolbar; 138 } 139 140 bool IsToolBarVisible() const; 141 IsUseToolbarConfiguration()142 bool IsUseToolbarConfiguration() const 143 { 144 return isNewToolbar_; 145 } 146 147 std::string GetBarItemsString(bool isMenu) const; IsNodeInvisible(const RefPtr<FrameNode> & node)148 virtual bool IsNodeInvisible(const RefPtr<FrameNode>& node) { return false; } 149 150 // custom node checking 151 ACE_DEFINE_PROPERTY_ITEM_FUNC_WITHOUT_GROUP(PrevTitleIsCustom, bool); OnPrevTitleIsCustomUpdate(bool value)152 void OnPrevTitleIsCustomUpdate(bool value) {} 153 ACE_DEFINE_PROPERTY_ITEM_FUNC_WITHOUT_GROUP(PrevMenuIsCustom, bool); OnPrevMenuIsCustomUpdate(bool value)154 void OnPrevMenuIsCustomUpdate(bool value) {} 155 ACE_DEFINE_PROPERTY_ITEM_FUNC_WITHOUT_GROUP(PrevToolBarIsCustom, bool); OnPrevToolBarIsCustomUpdate(bool value)156 void OnPrevToolBarIsCustomUpdate(bool value) {} 157 158 // node operation related 159 ACE_DEFINE_PROPERTY_ITEM_FUNC_WITHOUT_GROUP(MenuNodeOperation, ChildNodeOperation); OnMenuNodeOperationUpdate(ChildNodeOperation value)160 void OnMenuNodeOperationUpdate(ChildNodeOperation value) {} 161 ACE_DEFINE_PROPERTY_ITEM_FUNC_WITHOUT_GROUP(ToolBarNodeOperation, ChildNodeOperation); OnToolBarNodeOperationUpdate(ChildNodeOperation value)162 void OnToolBarNodeOperationUpdate(ChildNodeOperation value) {} 163 SetTransitionType(PageTransitionType type)164 void SetTransitionType(PageTransitionType type) 165 { 166 transitionType_ = type; 167 } 168 GetTransitionType()169 PageTransitionType GetTransitionType() const 170 { 171 return transitionType_; 172 } 173 GetLanguageDirection()174 float GetLanguageDirection() 175 { 176 return AceApplicationInfo::GetInstance().IsRightToLeft() ? -1.0f : 1.0f; 177 } 178 179 protected: 180 RefPtr<UINode> contentNode_; 181 RefPtr<UINode> menu_; 182 RefPtr<UINode> toolbarMenu_; 183 RefPtr<UINode> landscapeMenu_; 184 RefPtr<UINode> moreMenuNode_; 185 RefPtr<UINode> toolbarMoreMenuNode_; 186 RefPtr<UINode> moreLandscapeMenuNode_; 187 RefPtr<UINode> titleBarNode_; 188 RefPtr<UINode> toolBarNode_; 189 RefPtr<UINode> preToolBarNode_; 190 RefPtr<UINode> toolBarDividerNode_; 191 bool isNewToolbar_ = false; 192 PageTransitionType transitionType_ = PageTransitionType::NONE; 193 }; 194 } // namespace OHOS::Ace::NG 195 196 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERNS_NAVIGATION_NAVDESTINATION_NODE_BASE_H