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_NAVIGATION_TITLE_UTIL_H 17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERNS_NAVIGATION_NAVIGATION_TITLE_UTIL_H 18 19 #include "base/memory/referenced.h" 20 #include "core/components_ng/base/ui_node.h" 21 #include "core/components_ng/base/view_abstract.h" 22 #include "core/components_ng/pattern/button/button_layout_property.h" 23 #include "core/components_ng/pattern/button/button_pattern.h" 24 #include "core/components_ng/pattern/image/image_layout_property.h" 25 #include "core/components_ng/pattern/image/image_pattern.h" 26 #include "core/components_ng/pattern/linear_layout/linear_layout_pattern.h" 27 #include "core/components_ng/pattern/menu/menu_view.h" 28 #include "core/components_ng/pattern/menu/wrapper/menu_wrapper_pattern.h" 29 #include "core/components_ng/pattern/navigation/bar_item_event_hub.h" 30 #include "core/components_ng/pattern/navigation/bar_item_pattern.h" 31 #include "core/components_ng/pattern/navigation/navdestination_node_base.h" 32 #include "core/components_ng/pattern/navigation/navigation_event_hub.h" 33 #include "core/components_ng/pattern/navigation/navigation_stack.h" 34 #include "core/components_ng/pattern/navigation/title_bar_layout_property.h" 35 #include "core/components_ng/pattern/navigation/title_bar_node.h" 36 #include "core/components_ng/pattern/navrouter/navdestination_context.h" 37 #include "core/components_ng/pattern/navrouter/navdestination_event_hub.h" 38 #include "core/components_ng/pattern/navrouter/navdestination_group_node.h" 39 #include "core/components_ng/pattern/navrouter/navdestination_layout_algorithm.h" 40 #include "core/components_ng/pattern/navrouter/navdestination_layout_property.h" 41 #include "core/components_ng/pattern/pattern.h" 42 #include "core/components_ng/syntax/shallow_builder.h" 43 44 namespace OHOS::Ace::NG { 45 46 class NavigationTitleUtil { 47 public: 48 static RefPtr<FrameNode> CreateMenuItems(const int32_t menuNodeId, 49 const std::vector<NG::BarItem>& menuItems, const RefPtr<NavDestinationNodeBase>& navDestinationNodeBase, 50 bool isButtonEnabled, const std::string& field, const std::string& parentId, 51 bool isCreateLandscapeMenu = false); 52 static void BuildMoreItemNodeAction(const RefPtr<FrameNode>& buttonNode, const RefPtr<BarItemNode>& barItemNode, 53 const RefPtr<FrameNode>& barMenuNode); 54 55 static bool BuildMoreButton(bool isButtonEnabled, const RefPtr<NavigationBarTheme>& theme, 56 const RefPtr<NavDestinationNodeBase>& nodeBase, const RefPtr<FrameNode>& menuNode, 57 std::vector<OptionParam>&& params, const std::string& field, const std::string& parentId, 58 bool isCreateLandscapeMenu); 59 static RefPtr<FrameNode> CreateMenuItemNode( 60 const RefPtr<NavigationBarTheme>& theme, const BarItem& menuItem, bool isButtonEnabled); 61 static RefPtr<FrameNode> CreateMenuItemButton(const RefPtr<NavigationBarTheme>& theme); 62 static RefPtr<BarItemNode> CreateBarItemNode(const bool isButtonEnabled); 63 static RefPtr<FrameNode> CreateBarItemTextNode(const std::string& text); 64 static RefPtr<FrameNode> CreateBarItemIconNode(const BarItem& barItem, bool isButtonEnabled); 65 static void InitTitleBarButtonEvent(const RefPtr<FrameNode>& buttonNode, const RefPtr<FrameNode>& iconNode, 66 bool isMoreButton, const BarItem& menuItem = BarItem(), bool isButtonEnabled = true); 67 static void SetAccessibility(const RefPtr<FrameNode>& node, const std::string& message); 68 static void UpdateBarItemNodeWithItem( 69 const RefPtr<BarItemNode>& barItemNode, const BarItem& barItem, bool isButtonEnabled); 70 static void BuildMoreIemNode(const RefPtr<BarItemNode>& barItemNode, bool isButtonEnabled); 71 static uint32_t GetOrInitMaxMenuNums( 72 const RefPtr<NavigationBarTheme>& theme, const RefPtr<NavDestinationNodeBase>& navDestinationNodeBase); 73 static void HandleLongPress( 74 const GestureEvent& info, const RefPtr<FrameNode>& menuNode, const std::vector<NG::BarItem>& menuItems); 75 static void HandleLongPressActionEnd(const RefPtr<FrameNode>& buttonNode); 76 static void InitDragAndLongPressEvent(const RefPtr<FrameNode>& menuNode, const std::vector<NG::BarItem>& menuItems); 77 78 static std::string GetTitleString(const RefPtr<TitleBarNode>& titleBarNode, bool isCustom); 79 static std::string GetSubtitleString(const RefPtr<TitleBarNode>& titleBarNode); 80 SetInnerChildId(const RefPtr<FrameNode> & node,const std::string & field,const std::string & nodeTag,const std::string & nodeValue,const std::string & parentId)81 static void SetInnerChildId(const RefPtr<FrameNode>& node, const std::string& field, const std::string& nodeTag, 82 const std::string& nodeValue, const std::string& parentId) 83 { 84 // navigation/navdestination Field + nodeTag + nodeValue + parentId 85 std::string id; 86 id.append(field); 87 id.append(nodeTag); 88 id.append("__"); 89 id.append(nodeValue); 90 id.append("__"); 91 id.append(parentId); 92 CHECK_NULL_VOID(node); 93 node->UpdateInspectorId(id); 94 } 95 96 static bool IsTitleBarHasOffsetY(const RefPtr<FrameNode>& titleBarNode); 97 static void CreateOrUpdateMainTitle(const RefPtr<TitleBarNode>& titleBarNode, 98 const NG::NavigationTitleInfo& titleInfo, bool ignoreMainTitle); 99 static void CreateOrUpdateSubtitle(const RefPtr<TitleBarNode>& titleBarNode, 100 const NG::NavigationTitleInfo& titleInfo); 101 static void CreateOrUpdateDestinationMainTitle(const RefPtr<TitleBarNode>& titleBarNode, 102 const NG::NavigationTitleInfo& titleInfo); 103 static void CreateOrUpdateDestinationSubtitle(const RefPtr<TitleBarNode>& titleBarNode, 104 const NG::NavigationTitleInfo& titleInfo); 105 106 static float CalculateTitlebarOffset(const RefPtr<UINode>& titleBarNode); 107 static void FoldStatusChangedAnimation(const RefPtr<FrameNode>& host); 108 109 static bool IsNeedHoverModeAction(const RefPtr<TitleBarNode>& titleBarNode); 110 111 static RefPtr<FrameNode> CreatePopupDialogNode( 112 const RefPtr<FrameNode> targetNode, const std::vector<NG::BarItem>& menuItems, int32_t index); 113 static RefPtr<FrameNode> CreateSymbolDialog(const std::string& message, const RefPtr<FrameNode>& targetNode); 114 static void UpdateTitleOrToolBarTranslateYAndOpacity(const RefPtr<NavDestinationNodeBase>& nodeBase, 115 const RefPtr<FrameNode>& barNode, float translate, bool isTitle); 116 static void InitDragEvent(const RefPtr<GestureEventHub>& gestureHub, const RefPtr<FrameNode>& menuNode, 117 const std::vector<NG::BarItem>& menuItems); 118 static void InitLongPressEvent(const RefPtr<GestureEventHub>& gestureHub, const RefPtr<FrameNode>& menuNode, 119 const std::vector<NG::BarItem>& menuItems); 120 }; 121 122 } // namespace OHOS::Ace::NG 123 124 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERNS_NAVIGATION_NAVIGATION_TITLE_UTIL_H