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, const MenuParam& menuParam); 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, const RefPtr<NavigationBarTheme>& theme); 63 static RefPtr<FrameNode> CreateBarItemTextNode(const std::string& text); 64 static RefPtr<FrameNode> CreateBarItemIconNode( 65 const BarItem& barItem, bool isButtonEnabled, const RefPtr<NavigationBarTheme>& theme); 66 static void InitTitleBarButtonEvent(const RefPtr<FrameNode>& buttonNode, const RefPtr<FrameNode>& iconNode, 67 bool isMoreButton, const BarItem& menuItem = BarItem(), bool isButtonEnabled = true); 68 static void SetAccessibility(const RefPtr<FrameNode>& node, const std::string& message); 69 static void UpdateBarItemNodeWithItem(const RefPtr<BarItemNode>& barItemNode, const BarItem& barItem, 70 bool isButtonEnabled, const RefPtr<NavigationBarTheme>& theme); 71 static void BuildMoreIemNode( 72 const RefPtr<BarItemNode>& barItemNode, bool isButtonEnabled, const RefPtr<NavigationBarTheme>& theme); 73 static uint32_t GetOrInitMaxMenuNums( 74 const RefPtr<NavigationBarTheme>& theme, const RefPtr<NavDestinationNodeBase>& navDestinationNodeBase); 75 static std::string GetTitleString(const RefPtr<TitleBarNode>& titleBarNode, bool isCustom); 76 static std::string GetSubtitleString(const RefPtr<TitleBarNode>& titleBarNode); 77 SetInnerChildId(const RefPtr<FrameNode> & node,const std::string & field,const std::string & nodeTag,const std::string & nodeValue,const std::string & parentId)78 static void SetInnerChildId(const RefPtr<FrameNode>& node, const std::string& field, const std::string& nodeTag, 79 const std::string& nodeValue, const std::string& parentId) 80 { 81 // navigation/navdestination Field + nodeTag + nodeValue + parentId 82 std::string id; 83 id.append(field); 84 id.append(nodeTag); 85 id.append("__"); 86 id.append(nodeValue); 87 id.append("__"); 88 id.append(parentId); 89 CHECK_NULL_VOID(node); 90 node->UpdateInspectorId(id); 91 } 92 93 static float ParseCalcDimensionToPx(const std::optional<CalcDimension>& value, const float titleBarWidth); 94 95 static void CreateOrUpdateMainTitle(const RefPtr<TitleBarNode>& titleBarNode, 96 const NG::NavigationTitleInfo& titleInfo, bool ignoreMainTitle); 97 static void CreateOrUpdateSubtitle(const RefPtr<TitleBarNode>& titleBarNode, 98 const NG::NavigationTitleInfo& titleInfo); 99 static void CreateOrUpdateDestinationMainTitle(const RefPtr<TitleBarNode>& titleBarNode, 100 const NG::NavigationTitleInfo& titleInfo); 101 static void CreateOrUpdateDestinationSubtitle(const RefPtr<TitleBarNode>& titleBarNode, 102 const NG::NavigationTitleInfo& titleInfo); 103 104 static float CalculateTitlebarOffset(const RefPtr<UINode>& titleBarNode); 105 static void FoldStatusChangedAnimation(const RefPtr<FrameNode>& host); 106 107 static bool IsNeedHoverModeAction(const RefPtr<TitleBarNode>& titleBarNode); 108 109 static RefPtr<FrameNode> CreatePopupDialogNode(const RefPtr<FrameNode> targetNode, 110 const std::vector<NG::BarItem>& menuItems, int32_t index, int32_t themeScopeId); 111 static RefPtr<FrameNode> CreateSymbolDialog( 112 const std::string& message, const RefPtr<FrameNode>& targetNode, int32_t themeScopeId); 113 static void UpdateTitleOrToolBarTranslateYAndOpacity(const RefPtr<NavDestinationNodeBase>& nodeBase, 114 const RefPtr<FrameNode>& barNode, float translate, bool isTitle); 115 static bool IsTitleBarHasOffsetY(const RefPtr<FrameNode>& titleBarNode); 116 static bool SetTitleAnimationElapsedTime(AnimationOption& option, const RefPtr<FrameNode>& pushEnterNode); 117 }; 118 119 } // namespace OHOS::Ace::NG 120 121 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERNS_NAVIGATION_NAVIGATION_TITLE_UTIL_H