• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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_TEXT_FIELD_TEXT_FIELD_EVENT_HUB_H
17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERNS_TEXT_FIELD_TEXT_FIELD_EVENT_HUB_H
18 
19 #include <cstdint>
20 #include <utility>
21 
22 #include "base/memory/ace_type.h"
23 #include "base/utils/noncopyable.h"
24 #include "core/components_ng/event/event_hub.h"
25 #include "core/components_ng/pattern/scrollable/scrollable_properties.h"
26 
27 namespace OHOS::Ace::NG {
28 class TextFieldCommonEvent : public BaseEventInfo {
DECLARE_RELATIONSHIP_OF_CLASSES(TextFieldCommonEvent,BaseEventInfo)29     DECLARE_RELATIONSHIP_OF_CLASSES(TextFieldCommonEvent, BaseEventInfo)
30 public:
31     TextFieldCommonEvent() : BaseEventInfo("TextFieldCommonEvent") {}
32     ~TextFieldCommonEvent() override = default;
33 
IsKeepEditable()34     bool IsKeepEditable() const
35     {
36         return keepEditable_;
37     }
SetKeepEditable(bool keepEditable)38     void SetKeepEditable(bool keepEditable)
39     {
40         keepEditable_ = keepEditable;
41     }
GetText()42     std::string GetText() const
43     {
44         return text_;
45     }
SetText(std::string text)46     void SetText(std::string text)
47     {
48         text_ = text;
49     }
50 private:
51     bool keepEditable_ = false;
52     std::string text_;
53 };
54 
55 class TextFieldEventHub : public EventHub {
56     DECLARE_ACE_TYPE(TextFieldEventHub, EventHub)
57 
58 public:
59     TextFieldEventHub() = default;
60     ~TextFieldEventHub() override = default;
61 
SetOnInputFilterError(const std::function<void (const std::string &)> & onInputFilterError)62     void SetOnInputFilterError(const std::function<void(const std::string&)>& onInputFilterError)
63     {
64         onInputFilterError_ = onInputFilterError;
65     }
66 
FireOnInputFilterError(const std::string & value)67     void FireOnInputFilterError(const std::string& value) const
68     {
69         if (onInputFilterError_) {
70             LOGI("On filter error %{private}s", value.c_str());
71             onInputFilterError_(value);
72         }
73     }
74 
SetOnEditChanged(std::function<void (bool)> && func)75     void SetOnEditChanged(std::function<void(bool)>&& func)
76     {
77         onEditChanged_ = std::move(func);
78     }
79 
FireOnEditChanged(bool value)80     void FireOnEditChanged(bool value)
81     {
82         if (onEditChanged_) {
83             LOGI("On edit change %{private}d", value);
84             onEditChanged_(value);
85         }
86     }
87 
SetOnSubmit(std::function<void (int32_t,NG::TextFieldCommonEvent &)> && func)88     void SetOnSubmit(std::function<void(int32_t, NG::TextFieldCommonEvent&)>&& func)
89     {
90         onSubmit_ = std::move(func);
91     }
92 
FireOnSubmit(int32_t value,NG::TextFieldCommonEvent & event)93     void FireOnSubmit(int32_t value, NG::TextFieldCommonEvent& event)
94     {
95         if (onSubmit_) {
96             LOGI("On submit %{private}d", value);
97             onSubmit_(value, event);
98         }
99     }
100 
SetOnChange(std::function<void (const std::string &)> && func)101     void SetOnChange(std::function<void(const std::string&)>&& func)
102     {
103         onChange_ = std::move(func);
104     }
105 
GetOnChange()106     const std::function<void(const std::string&)>& GetOnChange() const
107     {
108         return onChange_;
109     }
110 
FireOnChange(const std::string & value)111     void FireOnChange(const std::string& value)
112     {
113         if (lastValue_.has_value() && lastValue_.value() == value) {
114             return;
115         }
116         if (onValueChangeEvent_) {
117             LOGI("On change event %{private}s", value.c_str());
118             onValueChangeEvent_(value);
119         }
120         if (onChange_) {
121             LOGI("On change %{private}s", value.c_str());
122             onChange_(value);
123         }
124         lastValue_ = value;
125     }
126 
SetOnSelectionChange(std::function<void (int32_t,int32_t)> && func)127     void SetOnSelectionChange(std::function<void(int32_t, int32_t)>&& func)
128     {
129         onSelectionChange_ = std::move(func);
130     }
131 
FireOnSelectionChange(int32_t selectionStart,int32_t selectionEnd)132     void FireOnSelectionChange(int32_t selectionStart, int32_t selectionEnd)
133     {
134         if (onSelectionChange_) {
135             LOGI("On selection change start %{private}d, end %{private}d", selectionStart, selectionEnd);
136             onSelectionChange_(selectionStart, selectionEnd);
137         }
138     }
139 
SetOnCopy(std::function<void (const std::string &)> && func)140     void SetOnCopy(std::function<void(const std::string&)>&& func)
141     {
142         onCopy_ = std::move(func);
143     }
144 
FireOnCopy(const std::string & value)145     void FireOnCopy(const std::string& value)
146     {
147         if (onCopy_) {
148             LOGI("On copy %{private}s", value.c_str());
149             onCopy_(value);
150         }
151     }
152 
SetOnCut(std::function<void (const std::string &)> && func)153     void SetOnCut(std::function<void(const std::string&)>&& func)
154     {
155         onCut_ = std::move(func);
156     }
157 
FireOnCut(const std::string & value)158     void FireOnCut(const std::string& value)
159     {
160         if (onCut_) {
161             LOGI("On cut %{private}s", value.c_str());
162             onCut_(value);
163         }
164     }
165 
SetOnPaste(std::function<void (const std::string &)> && func)166     void SetOnPaste(std::function<void(const std::string&)>&& func)
167     {
168         onPaste_ = std::move(func);
169     }
170 
FireOnPaste(const std::string & value)171     void FireOnPaste(const std::string& value)
172     {
173         if (onPaste_) {
174             LOGI("On paste %{private}s", value.c_str());
175             onPaste_(value);
176         }
177     }
178 
SetOnPasteWithEvent(std::function<void (const std::string &,NG::TextCommonEvent &)> && func)179     void SetOnPasteWithEvent(std::function<void(const std::string&, NG::TextCommonEvent&)>&& func)
180     {
181         onPasteWithEvent_ = std::move(func);
182     }
183 
FireOnPasteWithEvent(const std::string & value,NG::TextCommonEvent & event)184     void FireOnPasteWithEvent(const std::string& value, NG::TextCommonEvent& event)
185     {
186         if (onPasteWithEvent_) {
187             onPasteWithEvent_(value, event);
188         }
189     }
190 
SetOnScroll(OnScrollEvent && onScroll)191     void SetOnScroll(OnScrollEvent&& onScroll)
192     {
193         onScrollEvent_ = std::move(onScroll);
194     }
195 
GetOnScroll()196     const OnScrollEvent& GetOnScroll() const
197     {
198         return onScrollEvent_;
199     }
200 
SetOnScrollBegin(OnScrollBeginEvent && onScrollBegin)201     void SetOnScrollBegin(OnScrollBeginEvent&& onScrollBegin)
202     {
203         onScrollBeginEvent_ = std::move(onScrollBegin);
204     }
205 
GetOnScrollBegin()206     const OnScrollBeginEvent& GetOnScrollBegin() const
207     {
208         return onScrollBeginEvent_;
209     }
210 
SetOnScrollFrameBegin(OnScrollFrameBeginEvent && onScrollFrameBegin)211     void SetOnScrollFrameBegin(OnScrollFrameBeginEvent&& onScrollFrameBegin)
212     {
213         onScrollFrameBeginEvent_ = std::move(onScrollFrameBegin);
214     }
215 
GetOnScrollFrameBegin()216     const OnScrollFrameBeginEvent& GetOnScrollFrameBegin() const
217     {
218         return onScrollFrameBeginEvent_;
219     }
220 
SetOnScrollStart(OnScrollStartEvent && onScrollStart)221     void SetOnScrollStart(OnScrollStartEvent&& onScrollStart)
222     {
223         onScrollStartEvent_ = std::move(onScrollStart);
224     }
225 
GetOnScrollStart()226     const OnScrollStartEvent& GetOnScrollStart() const
227     {
228         return onScrollStartEvent_;
229     }
230 
SetOnScrollStop(OnScrollStopEvent && onScrollStop)231     void SetOnScrollStop(OnScrollStopEvent&& onScrollStop)
232     {
233         onScrollStopEvent_ = std::move(onScrollStop);
234     }
235 
GetOnScrollStop()236     const OnScrollStopEvent& GetOnScrollStop() const
237     {
238         return onScrollStopEvent_;
239     }
240 
SetOnScrollIndex(OnScrollIndexEvent && onScrollIndex)241     void SetOnScrollIndex(OnScrollIndexEvent&& onScrollIndex)
242     {
243         onScrollIndexEvent_ = std::move(onScrollIndex);
244     }
245 
GetOnScrollIndex()246     const OnScrollIndexEvent& GetOnScrollIndex() const
247     {
248         return onScrollIndexEvent_;
249     }
250 
SetOnChangeEvent(std::function<void (const std::string &)> && func)251     void SetOnChangeEvent(std::function<void(const std::string&)>&& func)
252     {
253         onValueChangeEvent_ = std::move(func);
254     }
255 
SetOnScrollChangeEvent(std::function<void (float,float)> && func)256     void SetOnScrollChangeEvent(std::function<void(float, float)>&& func)
257     {
258         onScrollChangeEvent_ = std::move(func);
259     }
260 
FireOnScrollChangeEvent(float offsetX,float offsetY)261     void FireOnScrollChangeEvent(float offsetX, float offsetY)
262     {
263         if (onScrollChangeEvent_) {
264             onScrollChangeEvent_(offsetX, offsetY);
265         }
266     }
267 
268 private:
269     std::optional<std::string> lastValue_;
270 
271     OnScrollEvent onScrollEvent_;
272     OnScrollBeginEvent onScrollBeginEvent_;
273     OnScrollFrameBeginEvent onScrollFrameBeginEvent_;
274     OnScrollStartEvent onScrollStartEvent_;
275     OnScrollStopEvent onScrollStopEvent_;
276     OnScrollIndexEvent onScrollIndexEvent_;
277     std::function<void(float, float)> onScrollChangeEvent_;
278 
279     std::function<void(const std::string&)> onInputFilterError_;
280     std::function<void(bool)> onEditChanged_;
281     std::function<void(int32_t, NG::TextFieldCommonEvent&)> onSubmit_;
282     std::function<void(const std::string&)> onChange_;
283     std::function<void(int32_t, int32_t)> onSelectionChange_;
284 
285     std::function<void(const std::string&)> onCopy_;
286     std::function<void(const std::string&)> onCut_;
287     std::function<void(const std::string&)> onPaste_;
288     std::function<void(const std::string&, NG::TextCommonEvent&)> onPasteWithEvent_;
289     std::function<void(const std::string&)> onValueChangeEvent_;
290     ACE_DISALLOW_COPY_AND_MOVE(TextFieldEventHub);
291 };
292 
293 } // namespace OHOS::Ace::NG
294 
295 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERNS_TEXT_FIELD_TEXT_FIELD_EVENT_HUB_H
296