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_LIST_LIST_ITEM_EVENT_HUB_H
17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERNS_LIST_LIST_ITEM_EVENT_HUB_H
18 
19 #include "base/memory/ace_type.h"
20 #include "core/components_ng/base/ui_node.h"
21 #include "core/components_ng/event/event_hub.h"
22 #include "core/components_ng/event/gesture_event_hub.h"
23 #include "core/components_v2/list/list_properties.h"
24 
25 namespace OHOS::Ace::NG {
26 class ListItemEventHub : public EventHub {
27     DECLARE_ACE_TYPE(ListItemEventHub, EventHub)
28 
29 public:
30     ListItemEventHub() = default;
31     ~ListItemEventHub() override = default;
32 
SetOnSelect(OnSelectFunc && onSelect)33     void SetOnSelect(OnSelectFunc&& onSelect)
34     {
35         onSelectEvent_ = std::move(onSelect);
36     }
37 
GetOnSelect()38     const OnSelectFunc& GetOnSelect() const
39     {
40         return onSelectEvent_;
41     }
42 
SetStartOnDelete(OnDeleteEvent && onDelete)43     void SetStartOnDelete(OnDeleteEvent&& onDelete)
44     {
45         startOnDeleteEvent_ = std::move(onDelete);
46     }
47 
GetStartOnDelete()48     const OnDeleteEvent& GetStartOnDelete() const
49     {
50         return startOnDeleteEvent_;
51     }
52 
SetEndOnDelete(OnDeleteEvent && onDelete)53     void SetEndOnDelete(OnDeleteEvent&& onDelete)
54     {
55         endOnDeleteEvent_ = std::move(onDelete);
56     }
57 
GetEndOnDelete()58     const OnDeleteEvent& GetEndOnDelete() const
59     {
60         return endOnDeleteEvent_;
61     }
62 
SetOnEnterStartDeleteArea(OnEnterDeleteAreaEvent && onEnterDeleteArea)63     void SetOnEnterStartDeleteArea(OnEnterDeleteAreaEvent&& onEnterDeleteArea)
64     {
65         onEnterStartDeleteAreaEvent_ = std::move(onEnterDeleteArea);
66     }
67 
GetOnEnterStartDeleteArea()68     const OnEnterDeleteAreaEvent& GetOnEnterStartDeleteArea() const
69     {
70         return onEnterStartDeleteAreaEvent_;
71     }
72 
SetOnEnterEndDeleteArea(OnEnterDeleteAreaEvent && onEnterDeleteArea)73     void SetOnEnterEndDeleteArea(OnEnterDeleteAreaEvent&& onEnterDeleteArea)
74     {
75         onEnterEndDeleteAreaEvent_ = std::move(onEnterDeleteArea);
76     }
77 
GetOnEnterEndDeleteArea()78     const OnEnterDeleteAreaEvent& GetOnEnterEndDeleteArea() const
79     {
80         return onEnterEndDeleteAreaEvent_;
81     }
82 
SetOnExitStartDeleteArea(OnExitDeleteAreaEvent && onExitDeleteArea)83     void SetOnExitStartDeleteArea(OnExitDeleteAreaEvent&& onExitDeleteArea)
84     {
85         onExitStartDeleteAreaEvent_ = std::move(onExitDeleteArea);
86     }
87 
GetOnExitStartDeleteArea()88     const OnExitDeleteAreaEvent& GetOnExitStartDeleteArea() const
89     {
90         return onExitStartDeleteAreaEvent_;
91     }
92 
SetOnExitEndDeleteArea(OnExitDeleteAreaEvent && onExitDeleteArea)93     void SetOnExitEndDeleteArea(OnExitDeleteAreaEvent&& onExitDeleteArea)
94     {
95         onExitEndDeleteAreaEvent_ = std::move(onExitDeleteArea);
96     }
97 
GetOnExitEndDeleteArea()98     const OnExitDeleteAreaEvent& GetOnExitEndDeleteArea() const
99     {
100         return onExitEndDeleteAreaEvent_;
101     }
102 
SetSelectChangeEvent(OnSelectFunc && changeEvent)103     void SetSelectChangeEvent(OnSelectFunc&& changeEvent)
104     {
105         selectChangeEvent_ = std::move(changeEvent);
106     }
107 
FireSelectChangeEvent(bool select)108     void FireSelectChangeEvent(bool select) const
109     {
110         if (selectChangeEvent_) {
111             selectChangeEvent_(select);
112         }
113         if (onSelectEvent_) {
114             onSelectEvent_(select);
115         }
116     }
117 
SetOnOffsetChangeOffset(OnOffsetChangeFunc && onOffsetChange)118     void SetOnOffsetChangeOffset(OnOffsetChangeFunc&& onOffsetChange)
119     {
120         onOffsetChangeEvent_ = std::move(onOffsetChange);
121     }
122 
FireOffsetChangeEvent(int32_t offset)123     void FireOffsetChangeEvent(int32_t offset) const
124     {
125         if (onOffsetChangeEvent_) {
126             onOffsetChangeEvent_(offset);
127         }
128     }
129 
SetStartOnStateChange(OnStateChangedEvent && onStateChangeEvent)130     void SetStartOnStateChange(OnStateChangedEvent&& onStateChangeEvent)
131     {
132         startOnStateChangeEvent_ = std::move(onStateChangeEvent);
133     }
134 
SetEndOnStateChange(OnStateChangedEvent && onStateChangeEvent)135     void SetEndOnStateChange(OnStateChangedEvent&& onStateChangeEvent)
136     {
137         endOnStateChangeEvent_ = std::move(onStateChangeEvent);
138     }
139 
FireStateChangeEvent(SwipeActionState newState,bool isStart)140     void FireStateChangeEvent(SwipeActionState newState, bool isStart) const
141     {
142         if (isStart && startOnStateChangeEvent_) {
143             startOnStateChangeEvent_(newState);
144         }
145         if (!isStart && endOnStateChangeEvent_) {
146             endOnStateChangeEvent_(newState);
147         }
148     }
149 
150     int32_t GetIndex(const Point& point) const;
151 
152     std::string GetDragExtraParams(const std::string& extraInfo, const Point& point, DragEventType drag) override;
153 
154 private:
155     OnSelectFunc onSelectEvent_;
156     OnSelectFunc selectChangeEvent_;
157     OnDeleteEvent startOnDeleteEvent_;
158     OnDeleteEvent endOnDeleteEvent_;
159     OnEnterDeleteAreaEvent onEnterStartDeleteAreaEvent_;
160     OnEnterDeleteAreaEvent onEnterEndDeleteAreaEvent_;
161     OnExitDeleteAreaEvent onExitStartDeleteAreaEvent_;
162     OnExitDeleteAreaEvent onExitEndDeleteAreaEvent_;
163     OnOffsetChangeFunc onOffsetChangeEvent_;
164     OnStateChangedEvent startOnStateChangeEvent_;
165     OnStateChangedEvent endOnStateChangeEvent_;
166 };
167 } // namespace OHOS::Ace::NG
168 
169 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERNS_LIST_LIST_ITEM_EVENT_HUB_H
170