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 TextFieldEventHub : public EventHub { 29 DECLARE_ACE_TYPE(TextFieldEventHub, EventHub) 30 31 public: 32 TextFieldEventHub() = default; 33 ~TextFieldEventHub() override = default; 34 SetOnInputFilterError(const std::function<void (const std::string &)> & onInputFilterError)35 void SetOnInputFilterError(const std::function<void(const std::string&)>& onInputFilterError) 36 { 37 onInputFilterError_ = onInputFilterError; 38 } 39 FireOnInputFilterError(const std::string & value)40 void FireOnInputFilterError(const std::string& value) const 41 { 42 if (onInputFilterError_) { 43 LOGI("On filter error %{private}s", value.c_str()); 44 onInputFilterError_(value); 45 } 46 } 47 SetOnEditChanged(std::function<void (bool)> && func)48 void SetOnEditChanged(std::function<void(bool)>&& func) 49 { 50 onEditChanged_ = std::move(func); 51 } 52 FireOnEditChanged(bool value)53 void FireOnEditChanged(bool value) 54 { 55 if (onEditChanged_) { 56 LOGI("On edit change %{private}d", value); 57 onEditChanged_(value); 58 } 59 } 60 SetOnSubmit(std::function<void (int32_t)> && func)61 void SetOnSubmit(std::function<void(int32_t)>&& func) 62 { 63 onSubmit_ = std::move(func); 64 } 65 FireOnSubmit(int32_t value)66 void FireOnSubmit(int32_t value) 67 { 68 if (onSubmit_) { 69 LOGI("On submit %{private}d", value); 70 onSubmit_(value); 71 } 72 } 73 SetOnChange(std::function<void (const std::string &)> && func)74 void SetOnChange(std::function<void(const std::string&)>&& func) 75 { 76 onChange_ = std::move(func); 77 } 78 FireOnChange(const std::string & value)79 void FireOnChange(const std::string& value) 80 { 81 if (lastValue_.has_value() && lastValue_.value() == value) { 82 return; 83 } 84 if (onValueChangeEvent_) { 85 LOGI("On change event %{private}s", value.c_str()); 86 onValueChangeEvent_(value); 87 } 88 if (onChange_) { 89 LOGI("On change %{private}s", value.c_str()); 90 onChange_(value); 91 } 92 lastValue_ = value; 93 } 94 SetOnSelectionChange(std::function<void (int32_t,int32_t)> && func)95 void SetOnSelectionChange(std::function<void(int32_t, int32_t)>&& func) 96 { 97 onSelectionChange_ = std::move(func); 98 } 99 FireOnSelectionChange(int32_t selectionStart,int32_t selectionEnd)100 void FireOnSelectionChange(int32_t selectionStart, int32_t selectionEnd) 101 { 102 if (onSelectionChange_) { 103 LOGI("On selection change start %{private}d, end %{private}d", selectionStart, selectionEnd); 104 onSelectionChange_(selectionStart, selectionEnd); 105 } 106 } 107 SetOnCopy(std::function<void (const std::string &)> && func)108 void SetOnCopy(std::function<void(const std::string&)>&& func) 109 { 110 onCopy_ = std::move(func); 111 } 112 FireOnCopy(const std::string & value)113 void FireOnCopy(const std::string& value) 114 { 115 if (onCopy_) { 116 LOGI("On copy %{private}s", value.c_str()); 117 onCopy_(value); 118 } 119 } 120 SetOnCut(std::function<void (const std::string &)> && func)121 void SetOnCut(std::function<void(const std::string&)>&& func) 122 { 123 onCut_ = std::move(func); 124 } 125 FireOnCut(const std::string & value)126 void FireOnCut(const std::string& value) 127 { 128 if (onCut_) { 129 LOGI("On cut %{private}s", value.c_str()); 130 onCut_(value); 131 } 132 } 133 SetOnPaste(std::function<void (const std::string &)> && func)134 void SetOnPaste(std::function<void(const std::string&)>&& func) 135 { 136 onPaste_ = std::move(func); 137 } 138 FireOnPaste(const std::string & value)139 void FireOnPaste(const std::string& value) 140 { 141 if (onPaste_) { 142 LOGI("On paste %{private}s", value.c_str()); 143 onPaste_(value); 144 } 145 } 146 SetOnScroll(OnScrollEvent && onScroll)147 void SetOnScroll(OnScrollEvent&& onScroll) 148 { 149 onScrollEvent_ = std::move(onScroll); 150 } 151 GetOnScroll()152 const OnScrollEvent& GetOnScroll() const 153 { 154 return onScrollEvent_; 155 } 156 SetOnScrollBegin(OnScrollBeginEvent && onScrollBegin)157 void SetOnScrollBegin(OnScrollBeginEvent&& onScrollBegin) 158 { 159 onScrollBeginEvent_ = std::move(onScrollBegin); 160 } 161 GetOnScrollBegin()162 const OnScrollBeginEvent& GetOnScrollBegin() const 163 { 164 return onScrollBeginEvent_; 165 } 166 SetOnScrollFrameBegin(OnScrollFrameBeginEvent && onScrollFrameBegin)167 void SetOnScrollFrameBegin(OnScrollFrameBeginEvent&& onScrollFrameBegin) 168 { 169 onScrollFrameBeginEvent_ = std::move(onScrollFrameBegin); 170 } 171 GetOnScrollFrameBegin()172 const OnScrollFrameBeginEvent& GetOnScrollFrameBegin() const 173 { 174 return onScrollFrameBeginEvent_; 175 } 176 SetOnScrollStart(OnScrollStartEvent && onScrollStart)177 void SetOnScrollStart(OnScrollStartEvent&& onScrollStart) 178 { 179 onScrollStartEvent_ = std::move(onScrollStart); 180 } 181 GetOnScrollStart()182 const OnScrollStartEvent& GetOnScrollStart() const 183 { 184 return onScrollStartEvent_; 185 } 186 SetOnScrollStop(OnScrollStopEvent && onScrollStop)187 void SetOnScrollStop(OnScrollStopEvent&& onScrollStop) 188 { 189 onScrollStopEvent_ = std::move(onScrollStop); 190 } 191 GetOnScrollStop()192 const OnScrollStopEvent& GetOnScrollStop() const 193 { 194 return onScrollStopEvent_; 195 } 196 SetOnScrollIndex(OnScrollIndexEvent && onScrollIndex)197 void SetOnScrollIndex(OnScrollIndexEvent&& onScrollIndex) 198 { 199 onScrollIndexEvent_ = std::move(onScrollIndex); 200 } 201 GetOnScrollIndex()202 const OnScrollIndexEvent& GetOnScrollIndex() const 203 { 204 return onScrollIndexEvent_; 205 } 206 SetOnChangeEvent(std::function<void (const std::string &)> && func)207 void SetOnChangeEvent(std::function<void(const std::string&)>&& func) 208 { 209 onValueChangeEvent_ = std::move(func); 210 } 211 SetOnScrollChangeEvent(std::function<void (float,float)> && func)212 void SetOnScrollChangeEvent(std::function<void(float, float)>&& func) 213 { 214 onScrollChangeEvent_ = std::move(func); 215 } 216 FireOnScrollChangeEvent(float offsetX,float offsetY)217 void FireOnScrollChangeEvent(float offsetX, float offsetY) 218 { 219 if (onScrollChangeEvent_) { 220 onScrollChangeEvent_(offsetX, offsetY); 221 } 222 } 223 224 private: 225 std::optional<std::string> lastValue_; 226 227 OnScrollEvent onScrollEvent_; 228 OnScrollBeginEvent onScrollBeginEvent_; 229 OnScrollFrameBeginEvent onScrollFrameBeginEvent_; 230 OnScrollStartEvent onScrollStartEvent_; 231 OnScrollStopEvent onScrollStopEvent_; 232 OnScrollIndexEvent onScrollIndexEvent_; 233 std::function<void(float, float)> onScrollChangeEvent_; 234 235 std::function<void(const std::string&)> onInputFilterError_; 236 std::function<void(bool)> onEditChanged_; 237 std::function<void(int32_t)> onSubmit_; 238 std::function<void(const std::string&)> onChange_; 239 std::function<void(int32_t, int32_t)> onSelectionChange_; 240 241 std::function<void(const std::string&)> onCopy_; 242 std::function<void(const std::string&)> onCut_; 243 std::function<void(const std::string&)> onPaste_; 244 std::function<void(const std::string&)> onValueChangeEvent_; 245 ACE_DISALLOW_COPY_AND_MOVE(TextFieldEventHub); 246 }; 247 248 } // namespace OHOS::Ace::NG 249 250 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERNS_TEXT_FIELD_TEXT_FIELD_EVENT_HUB_H 251