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