1 /* 2 * Copyright (c) 2025 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_EVENT_HUB_H 17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERNS_NAVIGATION_NAV_BAR_EVENT_HUB_H 18 19 #include "base/memory/ace_type.h" 20 #include "core/components_ng/event/event_hub.h" 21 #include "core/components_ng/pattern/navigation/navigation_declaration.h" 22 23 namespace OHOS::Ace::NG { 24 using OnCoordScrollStartAction = std::function<void()>; 25 using OnCoordScrollUpdateAction = std::function<void(float)>; 26 using OnCoordScrollEndAction = std::function<void()>; 27 using BeforeCreateLayoutWrapper = std::function<void()>; 28 29 class NavBarEventHub : public EventHub { 30 DECLARE_ACE_TYPE(NavBarEventHub, EventHub); 31 public: SetOnCoordScrollStartAction(OnCoordScrollStartAction && action)32 void SetOnCoordScrollStartAction(OnCoordScrollStartAction&& action) 33 { 34 onCoordScrollStartAction_ = std::move(action); 35 } 36 FireOnCoordScrollStartAction()37 void FireOnCoordScrollStartAction() 38 { 39 if (onCoordScrollStartAction_) { 40 onCoordScrollStartAction_(); 41 } 42 } 43 HasOnCoordScrollStartAction()44 bool HasOnCoordScrollStartAction() 45 { 46 return onCoordScrollStartAction_ ? true : false; 47 } 48 SetOnCoordScrollUpdateAction(OnCoordScrollUpdateAction && action)49 void SetOnCoordScrollUpdateAction(OnCoordScrollUpdateAction&& action) 50 { 51 onCoordScrollUpdateAction_ = std::move(action); 52 } 53 FireOnCoordScrollUpdateAction(float currentOffset)54 void FireOnCoordScrollUpdateAction(float currentOffset) 55 { 56 if (onCoordScrollUpdateAction_) { 57 onCoordScrollUpdateAction_(currentOffset); 58 } 59 } 60 SetOnCoordScrollEndAction(OnCoordScrollEndAction && action)61 void SetOnCoordScrollEndAction(OnCoordScrollEndAction&& action) 62 { 63 onCoordScrollEndAction_ = std::move(action); 64 } 65 FireOnCoordScrollEndAction()66 void FireOnCoordScrollEndAction() 67 { 68 if (onCoordScrollEndAction_) { 69 onCoordScrollEndAction_(); 70 } 71 } 72 SetBeforeCreateLayoutWrapperCallBack(BeforeCreateLayoutWrapper && action)73 void SetBeforeCreateLayoutWrapperCallBack(BeforeCreateLayoutWrapper&& action) 74 { 75 beforeCreateLayoutWrapper_ = std::move(action); 76 } 77 FireBeforeCreateLayoutWrapperCallBack()78 void FireBeforeCreateLayoutWrapperCallBack() 79 { 80 if (beforeCreateLayoutWrapper_) { 81 beforeCreateLayoutWrapper_(); 82 } 83 } 84 85 private: 86 OnCoordScrollStartAction onCoordScrollStartAction_; 87 OnCoordScrollUpdateAction onCoordScrollUpdateAction_; 88 OnCoordScrollEndAction onCoordScrollEndAction_; 89 BeforeCreateLayoutWrapper beforeCreateLayoutWrapper_; 90 }; 91 92 } // namespace OHOS::Ace::NG 93 94 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERNS_NAVIGATION_NAV_BAR_EVENT_HUB_H