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_STEPPER_STEPPER_EVENT_HUB_H 17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERNS_STEPPER_STEPPER_EVENT_HUB_H 18 19 #include "core/components_ng/event/event_hub.h" 20 #include "core/common/recorder/event_recorder.h" 21 #include "core/components_ng/base/frame_node.h" 22 23 namespace OHOS::Ace::NG { 24 25 using RoutineCallbackEvent = std::function<void()>; 26 using IndexCallbackEvent = std::function<void(int32_t, int32_t)>; 27 using IndexChangeEvent = std::function<void(int32_t)>; 28 29 class StepperEventHub : public EventHub { 30 DECLARE_ACE_TYPE(StepperEventHub, EventHub) 31 32 public: 33 StepperEventHub() = default; 34 ~StepperEventHub() override = default; 35 SetFinishEvent(RoutineCallbackEvent && finishEvent)36 void SetFinishEvent(RoutineCallbackEvent&& finishEvent) 37 { 38 finishEvent_ = finishEvent; 39 } SetSkipEvent(RoutineCallbackEvent && skipEvent)40 void SetSkipEvent(RoutineCallbackEvent&& skipEvent) 41 { 42 skipEvent_ = skipEvent; 43 } SetChangeEvent(IndexCallbackEvent && changeEvent)44 void SetChangeEvent(IndexCallbackEvent&& changeEvent) 45 { 46 changeEvent_ = changeEvent; 47 } SetNextEvent(IndexCallbackEvent && nextEvent)48 void SetNextEvent(IndexCallbackEvent&& nextEvent) 49 { 50 nextEvent_ = nextEvent; 51 } SetPreviousEvent(IndexCallbackEvent && previousEvent)52 void SetPreviousEvent(IndexCallbackEvent&& previousEvent) 53 { 54 previousEvent_ = previousEvent; 55 } 56 FireFinishEvent(int32_t index)57 void FireFinishEvent(int32_t index) const 58 { 59 if (finishEvent_) { 60 finishEvent_(); 61 } 62 RecordEvent(Recorder::EventType::STEPPER_FINISH, index); 63 } FireSkipEvent(int32_t index)64 void FireSkipEvent(int32_t index) const 65 { 66 if (skipEvent_) { 67 skipEvent_(); 68 } 69 RecordEvent(Recorder::EventType::STEPPER_SKIP, index); 70 } FireChangeEvent(int32_t prevIndex,int32_t index)71 void FireChangeEvent(int32_t prevIndex, int32_t index) const 72 { 73 if (onChangeEvent_) { 74 onChangeEvent_(index); 75 } 76 if (changeEvent_) { 77 changeEvent_(prevIndex, index); 78 } 79 } FireNextEvent(int32_t index,int32_t pendingIndex)80 void FireNextEvent(int32_t index, int32_t pendingIndex) const 81 { 82 if (nextEvent_) { 83 nextEvent_(index, pendingIndex); 84 } 85 RecordEvent(Recorder::EventType::STEPPER_NEXT, index); 86 } FirePreviousEvent(int32_t index,int32_t pendingIndex)87 void FirePreviousEvent(int32_t index, int32_t pendingIndex) const 88 { 89 if (previousEvent_) { 90 previousEvent_(index, pendingIndex); 91 } 92 RecordEvent(Recorder::EventType::STEPPER_PREVIOUS, index); 93 } SetOnChangeEvent(IndexChangeEvent && onChangeEvent)94 void SetOnChangeEvent(IndexChangeEvent&& onChangeEvent) 95 { 96 onChangeEvent_ = onChangeEvent; 97 } 98 99 private: RecordEvent(Recorder::EventType eventType,int32_t index)100 void RecordEvent(Recorder::EventType eventType, int32_t index) const 101 { 102 if (!Recorder::EventRecorder::Get().IsComponentRecordEnable()) { 103 return; 104 } 105 Recorder::EventParamsBuilder builder; 106 auto host = GetFrameNode(); 107 if (host) { 108 auto id = host->GetInspectorIdValue(""); 109 builder.SetId(id).SetType(host->GetHostTag()).SetDescription(host->GetAutoEventParamValue("")); 110 } 111 builder.SetEventType(eventType).SetIndex(index); 112 Recorder::EventRecorder::Get().OnEvent(std::move(builder)); 113 } 114 115 RoutineCallbackEvent finishEvent_; 116 RoutineCallbackEvent skipEvent_; 117 IndexCallbackEvent changeEvent_; 118 IndexCallbackEvent nextEvent_; 119 IndexCallbackEvent previousEvent_; 120 IndexChangeEvent onChangeEvent_; 121 122 ACE_DISALLOW_COPY_AND_MOVE(StepperEventHub); 123 }; 124 125 } // namespace OHOS::Ace::NG 126 127 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERNS_STEPPER_STEPPER_EVENT_HUB_H 128