1 /*
2 * Copyright (c) 2022-2024 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 #include "core/components_ng/pattern/text_field/text_field_model_ng.h"
17
18 #include <cstddef>
19
20 #include "base/geometry/dimension.h"
21 #include "base/memory/ace_type.h"
22 #include "base/memory/referenced.h"
23 #include "base/utils/utils.h"
24 #include "core/common/ime/text_edit_controller.h"
25 #include "core/common/ime/text_input_type.h"
26 #include "core/common/udmf/udmf_client.h"
27 #include "core/components/common/properties/text_style.h"
28 #include "core/components_ng/base/view_stack_processor.h"
29 #include "core/components_ng/pattern/text_field/text_field_event_hub.h"
30 #include "core/components_ng/pattern/text_field/text_field_layout_property.h"
31 #include "core/components_ng/pattern/text_field/text_field_paint_property.h"
32 #include "core/components_ng/pattern/text_field/text_field_pattern.h"
33 #include "core/components_ng/property/measure_property.h"
34 #include "core/components_v2/inspector/inspector_constants.h"
35
36 namespace OHOS::Ace::NG {
37 namespace {
38 const std::string DROP_TYPE_STYLED_STRING = "ApplicationDefinedType";
39 }
CreateNode(const std::optional<std::string> & placeholder,const std::optional<std::string> & value,bool isTextArea)40 void TextFieldModelNG::CreateNode(
41 const std::optional<std::string>& placeholder, const std::optional<std::string>& value, bool isTextArea)
42 {
43 auto* stack = ViewStackProcessor::GetInstance();
44 auto nodeId = stack->ClaimNodeId();
45 ACE_LAYOUT_SCOPED_TRACE("Create[%s][self:%d]", isTextArea ? V2::TEXTAREA_ETS_TAG : V2::TEXTINPUT_ETS_TAG, nodeId);
46 auto frameNode = FrameNode::GetOrCreateFrameNode(isTextArea ? V2::TEXTAREA_ETS_TAG : V2::TEXTINPUT_ETS_TAG, nodeId,
47 []() { return AceType::MakeRefPtr<TextFieldPattern>(); });
48 stack->Push(frameNode);
49 auto textFieldLayoutProperty = frameNode->GetLayoutProperty<TextFieldLayoutProperty>();
50 CHECK_NULL_VOID(textFieldLayoutProperty);
51 auto textfieldPaintProperty = frameNode->GetPaintProperty<TextFieldPaintProperty>();
52 CHECK_NULL_VOID(textfieldPaintProperty);
53 std::set<std::string> allowDropSet({ DROP_TYPE_PLAIN_TEXT, DROP_TYPE_HYPERLINK, DROP_TYPE_STYLED_STRING });
54 frameNode->SetAllowDrop(allowDropSet);
55 auto pattern = frameNode->GetPattern<TextFieldPattern>();
56 pattern->SetModifyDoneStatus(false);
57 pattern->ResetContextAttr();
58 auto textValue = pattern->GetTextValue();
59 if (value.has_value() && value.value() != textValue) {
60 auto changed = pattern->InitValueText(value.value());
61 pattern->SetTextChangedAtCreation(changed);
62 }
63 textFieldLayoutProperty->UpdatePlaceholder(placeholder.value_or(""));
64 if (!isTextArea) {
65 textFieldLayoutProperty->UpdateMaxLines(1);
66 textFieldLayoutProperty->UpdatePlaceholderMaxLines(1);
67 pattern->SetTextInputFlag(true);
68 } else {
69 textFieldLayoutProperty->UpdatePlaceholderMaxLines(Infinity<uint32_t>());
70 }
71 pattern->SetTextFieldController(AceType::MakeRefPtr<TextFieldController>());
72 pattern->GetTextFieldController()->SetPattern(AceType::WeakClaim(AceType::RawPtr(pattern)));
73 pattern->SetTextEditController(AceType::MakeRefPtr<TextEditController>());
74 pattern->InitSurfaceChangedCallback();
75 pattern->RegisterWindowSizeCallback();
76 pattern->InitSurfacePositionChangedCallback();
77 pattern->InitTheme();
78 auto pipeline = frameNode->GetContext();
79 CHECK_NULL_VOID(pipeline);
80 if (pipeline->GetHasPreviewTextOption()) {
81 pattern->SetSupportPreviewText(pipeline->GetSupportPreviewText());
82 }
83 auto themeManager = pipeline->GetThemeManager();
84 CHECK_NULL_VOID(themeManager);
85 auto textFieldTheme = pattern->GetTheme();
86 CHECK_NULL_VOID(textFieldTheme);
87 textfieldPaintProperty->UpdatePressBgColor(textFieldTheme->GetPressColor());
88 textfieldPaintProperty->UpdateHoverBgColor(textFieldTheme->GetHoverColor());
89 SetCaretColor(textFieldTheme->GetCursorColor());
90 CaretStyle caretStyle;
91 caretStyle.caretWidth = textFieldTheme->GetCursorWidth();
92 SetCaretStyle(caretStyle);
93 AddDragFrameNodeToManager();
94 TAG_LOGI(AceLogTag::ACE_TEXT_FIELD, "text field create node, id = %{public}d", nodeId);
95 if (frameNode->IsFirstBuilding()) {
96 auto draggable = pipeline->GetDraggable<TextFieldTheme>();
97 SetDraggable(draggable);
98 auto gestureHub = frameNode->GetOrCreateGestureEventHub();
99 CHECK_NULL_VOID(gestureHub);
100 gestureHub->SetTextDraggable(true);
101 }
102 }
103
CreateFrameNode(int32_t nodeId,const std::optional<std::string> & placeholder,const std::optional<std::string> & value,bool isTextArea)104 RefPtr<FrameNode> TextFieldModelNG::CreateFrameNode(int32_t nodeId, const std::optional<std::string>& placeholder,
105 const std::optional<std::string>& value, bool isTextArea)
106 {
107 auto frameNode = FrameNode::CreateFrameNode(
108 isTextArea ? V2::TEXTAREA_ETS_TAG : V2::TEXTINPUT_ETS_TAG, nodeId, AceType::MakeRefPtr<TextFieldPattern>());
109 auto textFieldLayoutProperty = frameNode->GetLayoutProperty<TextFieldLayoutProperty>();
110 CHECK_NULL_RETURN(textFieldLayoutProperty, nullptr);
111 auto pattern = frameNode->GetPattern<TextFieldPattern>();
112 pattern->SetModifyDoneStatus(false);
113 auto textValue = pattern->GetTextValue();
114 if (value.has_value() && value.value() != textValue) {
115 pattern->InitEditingValueText(value.value());
116 }
117 textFieldLayoutProperty->UpdatePlaceholder(placeholder.value_or(""));
118 if (!isTextArea) {
119 textFieldLayoutProperty->UpdateMaxLines(1);
120 textFieldLayoutProperty->UpdatePlaceholderMaxLines(1);
121 pattern->SetTextInputFlag(true);
122 } else {
123 textFieldLayoutProperty->UpdatePlaceholderMaxLines(Infinity<uint32_t>());
124 }
125 pattern->SetTextFieldController(AceType::MakeRefPtr<TextFieldController>());
126 pattern->GetTextFieldController()->SetPattern(AceType::WeakClaim(AceType::RawPtr(pattern)));
127 pattern->SetTextEditController(AceType::MakeRefPtr<TextEditController>());
128 pattern->InitSurfaceChangedCallback();
129 pattern->InitSurfacePositionChangedCallback();
130 pattern->InitTheme();
131 auto pipeline = frameNode->GetContext();
132 CHECK_NULL_RETURN(pipeline, nullptr);
133 if (pipeline->GetHasPreviewTextOption()) {
134 pattern->SetSupportPreviewText(pipeline->GetSupportPreviewText());
135 }
136 ProcessDefaultStyleAndBehaviors(frameNode);
137 TAG_LOGI(AceLogTag::ACE_TEXT_FIELD, "text field create node in c-api");
138 return frameNode;
139 }
140
SetDraggable(bool draggable)141 void TextFieldModelNG::SetDraggable(bool draggable)
142 {
143 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
144 CHECK_NULL_VOID(frameNode);
145 frameNode->SetDraggable(draggable);
146 }
147
SetShowUnderline(bool showUnderLine)148 void TextFieldModelNG::SetShowUnderline(bool showUnderLine)
149 {
150 ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, ShowUnderline, showUnderLine);
151 }
152
SetFontFeature(const FONT_FEATURES_LIST & value)153 void TextFieldModelNG::SetFontFeature(const FONT_FEATURES_LIST& value)
154 {
155 ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, FontFeature, value);
156 }
157
SetFontFeature(FrameNode * frameNode,const FONT_FEATURES_LIST & value)158 void TextFieldModelNG::SetFontFeature(FrameNode* frameNode, const FONT_FEATURES_LIST& value)
159 {
160 ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, FontFeature, value, frameNode);
161 }
162
SetAutoWidth(FrameNode * frameNode)163 void TextFieldModelNG::SetAutoWidth(FrameNode* frameNode)
164 {
165 CHECK_NULL_VOID(frameNode);
166 ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, WidthAuto, true, frameNode);
167 ViewAbstract::ClearWidthOrHeight(frameNode, true);
168 }
169
SetWidth(FrameNode * frameNode,const std::string & value)170 void TextFieldModelNG::SetWidth(FrameNode* frameNode, const std::string& value)
171 {
172 if (value == "auto") {
173 SetAutoWidth(frameNode);
174 return;
175 }
176 CHECK_NULL_VOID(frameNode);
177 ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, WidthAuto, false, frameNode);
178 CalcDimension result;
179 StringUtils::StringToCalcDimensionNG(value, result, false, DimensionUnit::VP);
180 ViewAbstract::SetWidth(frameNode, NG::CalcLength(result));
181 }
182
ClearWidth(FrameNode * frameNode)183 void TextFieldModelNG::ClearWidth(FrameNode* frameNode)
184 {
185 CHECK_NULL_VOID(frameNode);
186 ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, WidthAuto, false, frameNode);
187 ViewAbstract::ClearWidthOrHeight(frameNode, true);
188 }
189
SetUserUnderlineColor(UserUnderlineColor userColor)190 void TextFieldModelNG::SetUserUnderlineColor(UserUnderlineColor userColor)
191 {
192 auto pattern = ViewStackProcessor::GetInstance()->GetMainFrameNodePattern<TextFieldPattern>();
193 CHECK_NULL_VOID(pattern);
194 pattern->SetUserUnderlineColor(userColor);
195 }
196
SetNormalUnderlineColor(const Color & normalColor)197 void TextFieldModelNG::SetNormalUnderlineColor(const Color& normalColor)
198 {
199 auto pattern = ViewStackProcessor::GetInstance()->GetMainFrameNodePattern<TextFieldPattern>();
200 CHECK_NULL_VOID(pattern);
201 pattern->SetNormalUnderlineColor(normalColor);
202 }
203
ProcessDefaultStyleAndBehaviors(const RefPtr<FrameNode> & frameNode)204 void TextFieldModelNG::ProcessDefaultStyleAndBehaviors(const RefPtr<FrameNode>& frameNode)
205 {
206 auto pipeline = frameNode->GetContext();
207 CHECK_NULL_VOID(pipeline);
208 auto themeManager = pipeline->GetThemeManager();
209 CHECK_NULL_VOID(themeManager);
210 auto textFieldTheme = themeManager->GetTheme<TextFieldTheme>();
211 CHECK_NULL_VOID(textFieldTheme);
212 auto textfieldPaintProperty = frameNode->GetPaintProperty<TextFieldPaintProperty>();
213 CHECK_NULL_VOID(textfieldPaintProperty);
214 std::set<std::string> allowDropSet({ DROP_TYPE_PLAIN_TEXT, DROP_TYPE_HYPERLINK, DROP_TYPE_STYLED_STRING });
215 frameNode->SetAllowDrop(allowDropSet);
216 textfieldPaintProperty->UpdatePressBgColor(textFieldTheme->GetPressColor());
217 textfieldPaintProperty->UpdateHoverBgColor(textFieldTheme->GetHoverColor());
218 auto renderContext = frameNode->GetRenderContext();
219 renderContext->UpdateBackgroundColor(textFieldTheme->GetBgColor());
220 auto radius = textFieldTheme->GetBorderRadius();
221 textfieldPaintProperty->UpdateCursorColor(textFieldTheme->GetCursorColor());
222 BorderRadiusProperty borderRadius { radius.GetX(), radius.GetY(), radius.GetY(), radius.GetX() };
223 renderContext->UpdateBorderRadius(borderRadius);
224 auto dragDropManager = pipeline->GetDragDropManager();
225 CHECK_NULL_VOID(dragDropManager);
226 dragDropManager->AddTextFieldDragFrameNode(frameNode->GetId(), AceType::WeakClaim(AceType::RawPtr(frameNode)));
227 PaddingProperty paddings;
228 auto themePadding = textFieldTheme->GetPadding();
229 paddings.top = NG::CalcLength(themePadding.Top().ConvertToPx());
230 paddings.bottom = NG::CalcLength(themePadding.Bottom().ConvertToPx());
231 paddings.left = NG::CalcLength(themePadding.Left().ConvertToPx());
232 paddings.right = NG::CalcLength(themePadding.Right().ConvertToPx());
233 auto layoutProperty = frameNode->GetLayoutProperty<LayoutProperty>();
234 layoutProperty->UpdatePadding(paddings);
235 if (frameNode->IsFirstBuilding()) {
236 auto draggable = pipeline->GetDraggable<TextFieldTheme>();
237 frameNode->SetDraggable(draggable);
238 auto gestureHub = frameNode->GetOrCreateGestureEventHub();
239 CHECK_NULL_VOID(gestureHub);
240 gestureHub->SetTextDraggable(true);
241 }
242 }
243
CreateTextInput(const std::optional<std::string> & placeholder,const std::optional<std::string> & value)244 RefPtr<TextFieldControllerBase> TextFieldModelNG::CreateTextInput(
245 const std::optional<std::string>& placeholder, const std::optional<std::string>& value)
246 {
247 CreateNode(placeholder, value, false);
248 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
249 CHECK_NULL_RETURN(frameNode, nullptr);
250 auto pattern = frameNode->GetPattern<TextFieldPattern>();
251 CHECK_NULL_RETURN(pattern, nullptr);
252 auto focusHub = pattern->GetFocusHub();
253 CHECK_NULL_RETURN(focusHub, nullptr);
254 focusHub->SetFocusType(FocusType::NODE);
255 focusHub->SetFocusStyleType(FocusStyleType::CUSTOM_REGION);
256 return pattern->GetTextFieldController();
257 };
258
CreateTextArea(const std::optional<std::string> & placeholder,const std::optional<std::string> & value)259 RefPtr<TextFieldControllerBase> TextFieldModelNG::CreateTextArea(
260 const std::optional<std::string>& placeholder, const std::optional<std::string>& value)
261 {
262 CreateNode(placeholder, value, true);
263 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
264 CHECK_NULL_RETURN(frameNode, nullptr);
265 auto pattern = frameNode->GetPattern<TextFieldPattern>();
266 CHECK_NULL_RETURN(pattern, nullptr);
267 return pattern->GetTextFieldController();
268 }
269
SetWidthAuto(bool isAuto)270 void TextFieldModelNG::SetWidthAuto(bool isAuto)
271 {
272 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
273 CHECK_NULL_VOID(frameNode);
274 ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, WidthAuto, isAuto);
275 }
276
RequestKeyboardOnFocus(bool needToRequest)277 void TextFieldModelNG::RequestKeyboardOnFocus(bool needToRequest)
278 {
279 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
280 CHECK_NULL_VOID(frameNode);
281 auto pattern = frameNode->GetPattern<TextFieldPattern>();
282 pattern->SetNeedToRequestKeyboardOnFocus(needToRequest);
283 }
284
SetType(TextInputType value)285 void TextFieldModelNG::SetType(TextInputType value)
286 {
287 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
288 CHECK_NULL_VOID(frameNode);
289 auto layoutProperty = frameNode->GetLayoutProperty<TextFieldLayoutProperty>();
290 if (layoutProperty->HasTextInputType() && layoutProperty->GetTextInputTypeValue() != value) {
291 layoutProperty->UpdateTypeChanged(true);
292 }
293 if (layoutProperty) {
294 layoutProperty->UpdateTextInputType(value);
295 }
296 }
297
SetPlaceholderColor(const Color & value)298 void TextFieldModelNG::SetPlaceholderColor(const Color& value)
299 {
300 ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, PlaceholderTextColor, value);
301 }
302
SetContentType(const TextContentType & value)303 void TextFieldModelNG::SetContentType(const TextContentType& value)
304 {
305 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
306 CHECK_NULL_VOID(frameNode);
307 auto layoutProperty = frameNode->GetLayoutProperty<TextFieldLayoutProperty>();
308 CHECK_NULL_VOID(layoutProperty);
309 if (layoutProperty->HasTextContentType() && layoutProperty->GetTextContentTypeValue() != value) {
310 layoutProperty->UpdateTextContentTypeChanged(true);
311 }
312 ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, TextContentType, value);
313 }
314
SetPlaceholderFont(const Font & value)315 void TextFieldModelNG::SetPlaceholderFont(const Font& value)
316 {
317 if (value.fontSize.has_value()) {
318 ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, PlaceholderFontSize, value.fontSize.value());
319 }
320 if (value.fontStyle) {
321 ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, PlaceholderItalicFontStyle, value.fontStyle.value());
322 }
323 if (value.fontWeight) {
324 ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, PlaceholderFontWeight, value.fontWeight.value());
325 }
326 if (!value.fontFamilies.empty()) {
327 ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, PlaceholderFontFamily, value.fontFamilies);
328 }
329 ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, PreferredPlaceholderLineHeightNeedToUpdate, true);
330 }
331
SetEnterKeyType(TextInputAction value)332 void TextFieldModelNG::SetEnterKeyType(TextInputAction value)
333 {
334 auto pattern = ViewStackProcessor::GetInstance()->GetMainFrameNodePattern<TextFieldPattern>();
335 CHECK_NULL_VOID(pattern);
336 if (value == TextInputAction::UNSPECIFIED) {
337 value = pattern->IsTextArea() ? TextInputAction::NEW_LINE : TextInputAction::DONE;
338 }
339 pattern->UpdateTextInputAction(value);
340 }
341
SetCaretColor(const Color & value)342 void TextFieldModelNG::SetCaretColor(const Color& value)
343 {
344 ACE_UPDATE_PAINT_PROPERTY(TextFieldPaintProperty, CursorColor, value);
345 }
346
SetCaretStyle(const CaretStyle & value)347 void TextFieldModelNG::SetCaretStyle(const CaretStyle& value)
348 {
349 if (value.caretWidth.has_value()) {
350 ACE_UPDATE_PAINT_PROPERTY(TextFieldPaintProperty, CursorWidth, value.caretWidth.value());
351 }
352 }
353
SetCaretPosition(const int32_t & value)354 void TextFieldModelNG::SetCaretPosition(const int32_t& value)
355 {
356 auto frameNode = ViewStackProcessor ::GetInstance()->GetMainFrameNode();
357 CHECK_NULL_VOID(frameNode);
358 auto pattern = frameNode->GetPattern<TextFieldPattern>();
359 pattern->SetCaretPosition(value);
360 }
361
SetSelectedBackgroundColor(const Color & value)362 void TextFieldModelNG::SetSelectedBackgroundColor(const Color& value)
363 {
364 ACE_UPDATE_PAINT_PROPERTY(TextFieldPaintProperty, SelectedBackgroundColor, value);
365 }
366
SetTextAlign(TextAlign value)367 void TextFieldModelNG::SetTextAlign(TextAlign value)
368 {
369 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
370 CHECK_NULL_VOID(frameNode);
371 auto pattern = frameNode->GetPattern<TextFieldPattern>();
372 CHECK_NULL_VOID(pattern);
373 TextAlign newValue = value;
374 if (!pattern->IsTextArea() && newValue == TextAlign::JUSTIFY) {
375 newValue = TextAlign::START;
376 }
377 auto layoutProperty = frameNode->GetLayoutProperty<TextFieldLayoutProperty>();
378 if (layoutProperty->GetTextAlignValue(TextAlign::START) != newValue) {
379 layoutProperty->UpdateTextAlignChanged(true);
380 }
381 ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, TextAlign, newValue);
382 }
383
SetLineBreakStrategy(LineBreakStrategy value)384 void TextFieldModelNG::SetLineBreakStrategy(LineBreakStrategy value)
385 {
386 ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, LineBreakStrategy, value);
387 }
388
SetMaxLength(uint32_t value)389 void TextFieldModelNG::SetMaxLength(uint32_t value)
390 {
391 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
392 CHECK_NULL_VOID(frameNode);
393 uint32_t preMaxLength = GetMaxLength(frameNode);
394 ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, MaxLength, value, frameNode);
395 if (preMaxLength != value) {
396 auto pattern = frameNode->GetPattern<TextFieldPattern>();
397 CHECK_NULL_VOID(pattern);
398 CHECK_NULL_VOID(pattern->HasFocus());
399 pattern->UpdateShowCountBorderStyle();
400 }
401 }
402
ResetMaxLength()403 void TextFieldModelNG::ResetMaxLength()
404 {
405 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
406 CHECK_NULL_VOID(frameNode);
407 auto textFieldLayoutProperty = frameNode->GetLayoutProperty<TextFieldLayoutProperty>();
408 if (textFieldLayoutProperty) {
409 textFieldLayoutProperty->ResetMaxLength();
410 }
411 }
SetMaxLines(uint32_t value)412 void TextFieldModelNG::SetMaxLines(uint32_t value)
413 {
414 ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, MaxLines, value);
415 }
SetFontSize(const Dimension & value)416 void TextFieldModelNG::SetFontSize(const Dimension& value)
417 {
418 ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, FontSize, value);
419 ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, PreferredTextLineHeightNeedToUpdate, true);
420 }
SetFontWeight(FontWeight value)421 void TextFieldModelNG::SetFontWeight(FontWeight value)
422 {
423 ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, FontWeight, value);
424 ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, PreferredTextLineHeightNeedToUpdate, true);
425 }
SetTextColor(const Color & value)426 void TextFieldModelNG::SetTextColor(const Color& value)
427 {
428 ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, TextColor, value);
429 ACE_UPDATE_RENDER_CONTEXT(ForegroundColor, value);
430 ACE_RESET_RENDER_CONTEXT(RenderContext, ForegroundColorStrategy);
431 ACE_UPDATE_RENDER_CONTEXT(ForegroundColorFlag, true);
432 ACE_UPDATE_PAINT_PROPERTY(TextFieldPaintProperty, TextColorFlagByUser, value);
433 }
SetWordBreak(Ace::WordBreak value)434 void TextFieldModelNG::SetWordBreak(Ace::WordBreak value)
435 {
436 ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, WordBreak, value);
437 }
SetFontStyle(Ace::FontStyle value)438 void TextFieldModelNG::SetFontStyle(Ace::FontStyle value)
439 {
440 ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, ItalicFontStyle, value);
441 ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, PreferredTextLineHeightNeedToUpdate, true);
442 }
SetFontFamily(const std::vector<std::string> & value)443 void TextFieldModelNG::SetFontFamily(const std::vector<std::string>& value)
444 {
445 ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, FontFamily, value);
446 ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, PreferredTextLineHeightNeedToUpdate, true);
447 }
448
SetInputFilter(const std::string & value,const std::function<void (const std::string &)> & onError)449 void TextFieldModelNG::SetInputFilter(const std::string& value, const std::function<void(const std::string&)>& onError)
450 {
451 ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, InputFilter, value);
452 auto eventHub = ViewStackProcessor::GetInstance()->GetMainFrameNodeEventHub<TextFieldEventHub>();
453 CHECK_NULL_VOID(eventHub);
454 eventHub->SetOnInputFilterError(onError);
455 }
456
SetInputStyle(InputStyle value)457 void TextFieldModelNG::SetInputStyle(InputStyle value)
458 {
459 ACE_UPDATE_PAINT_PROPERTY(TextFieldPaintProperty, InputStyle, value);
460 }
461
SetShowPasswordIcon(bool value)462 void TextFieldModelNG::SetShowPasswordIcon(bool value)
463 {
464 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
465 CHECK_NULL_VOID(frameNode);
466 auto layoutProperty = frameNode->GetLayoutProperty<TextFieldLayoutProperty>();
467 CHECK_NULL_VOID(layoutProperty);
468 auto pattern = frameNode->GetPattern<TextFieldPattern>();
469 CHECK_NULL_VOID(pattern);
470 ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, ShowPasswordIcon, value);
471 }
472
SetShowPasswordText(bool value)473 void TextFieldModelNG::SetShowPasswordText(bool value)
474 {
475 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
476 CHECK_NULL_VOID(frameNode);
477 auto layoutProperty = frameNode->GetLayoutProperty<TextFieldLayoutProperty>();
478 CHECK_NULL_VOID(layoutProperty);
479 auto pattern = frameNode->GetPattern<TextFieldPattern>();
480 CHECK_NULL_VOID(pattern);
481 ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, ShowPasswordText, value);
482 }
483
SetOnEditChanged(std::function<void (bool)> && func)484 void TextFieldModelNG::SetOnEditChanged(std::function<void(bool)>&& func)
485 {
486 auto eventHub = ViewStackProcessor::GetInstance()->GetMainFrameNodeEventHub<TextFieldEventHub>();
487 CHECK_NULL_VOID(eventHub);
488 eventHub->SetOnEditChanged(std::move(func));
489 }
490
SetOnSubmit(std::function<void (int32_t,NG::TextFieldCommonEvent &)> && func)491 void TextFieldModelNG::SetOnSubmit(std::function<void(int32_t, NG::TextFieldCommonEvent&)>&& func)
492 {
493 auto eventHub = ViewStackProcessor::GetInstance()->GetMainFrameNodeEventHub<TextFieldEventHub>();
494 CHECK_NULL_VOID(eventHub);
495 eventHub->SetOnSubmit(std::move(func));
496 }
497
SetOnChange(std::function<void (const std::string &,PreviewText &)> && func)498 void TextFieldModelNG::SetOnChange(std::function<void(const std::string&, PreviewText&)>&& func)
499 {
500 auto eventHub = ViewStackProcessor::GetInstance()->GetMainFrameNodeEventHub<TextFieldEventHub>();
501 CHECK_NULL_VOID(eventHub);
502 eventHub->SetOnChange(std::move(func));
503 }
504
SetOnTextSelectionChange(std::function<void (int32_t,int32_t)> && func)505 void TextFieldModelNG::SetOnTextSelectionChange(std::function<void(int32_t, int32_t)>&& func)
506 {
507 auto eventHub = ViewStackProcessor::GetInstance()->GetMainFrameNodeEventHub<TextFieldEventHub>();
508 CHECK_NULL_VOID(eventHub);
509 eventHub->SetOnSelectionChange(std::move(func));
510 }
511
SetOnTextSelectionChange(FrameNode * frameNode,std::function<void (int32_t,int32_t)> && func)512 void TextFieldModelNG::SetOnTextSelectionChange(FrameNode* frameNode, std::function<void(int32_t, int32_t)>&& func)
513 {
514 CHECK_NULL_VOID(frameNode);
515 auto eventHub = frameNode->GetEventHub<TextFieldEventHub>();
516 CHECK_NULL_VOID(eventHub);
517 eventHub->SetOnSelectionChange(std::move(func));
518 }
519
SetOnSecurityStateChange(std::function<void (bool)> && func)520 void TextFieldModelNG::SetOnSecurityStateChange(std::function<void(bool)>&& func)
521 {
522 auto eventHub = ViewStackProcessor::GetInstance()->GetMainFrameNodeEventHub<TextFieldEventHub>();
523 CHECK_NULL_VOID(eventHub);
524 eventHub->SetOnSecurityStateChange(std::move(func));
525 }
526
SetOnContentScroll(std::function<void (float,float)> && func)527 void TextFieldModelNG::SetOnContentScroll(std::function<void(float, float)>&& func)
528 {
529 auto eventHub = ViewStackProcessor::GetInstance()->GetMainFrameNodeEventHub<TextFieldEventHub>();
530 CHECK_NULL_VOID(eventHub);
531 eventHub->SetOnScrollChangeEvent(std::move(func));
532 }
533
SetOnCopy(std::function<void (const std::string &)> && func)534 void TextFieldModelNG::SetOnCopy(std::function<void(const std::string&)>&& func)
535 {
536 auto eventHub = ViewStackProcessor::GetInstance()->GetMainFrameNodeEventHub<TextFieldEventHub>();
537 CHECK_NULL_VOID(eventHub);
538 eventHub->SetOnCopy(std::move(func));
539 }
540
SetOnCut(std::function<void (const std::string &)> && func)541 void TextFieldModelNG::SetOnCut(std::function<void(const std::string&)>&& func)
542 {
543 auto eventHub = ViewStackProcessor::GetInstance()->GetMainFrameNodeEventHub<TextFieldEventHub>();
544 CHECK_NULL_VOID(eventHub);
545 eventHub->SetOnCut(std::move(func));
546 }
547
SetOnPaste(std::function<void (const std::string &)> && func)548 void TextFieldModelNG::SetOnPaste(std::function<void(const std::string&)>&& func)
549 {
550 auto eventHub = ViewStackProcessor::GetInstance()->GetMainFrameNodeEventHub<TextFieldEventHub>();
551 CHECK_NULL_VOID(eventHub);
552 eventHub->SetOnPaste(std::move(func));
553 }
554
SetOnPasteWithEvent(std::function<void (const std::string &,NG::TextCommonEvent &)> && func)555 void TextFieldModelNG::SetOnPasteWithEvent(std::function<void(const std::string&, NG::TextCommonEvent&)>&& func)
556 {
557 auto eventHub = ViewStackProcessor::GetInstance()->GetMainFrameNodeEventHub<TextFieldEventHub>();
558 CHECK_NULL_VOID(eventHub);
559 eventHub->SetOnPasteWithEvent(std::move(func));
560 }
561
SetCopyOption(CopyOptions copyOption)562 void TextFieldModelNG::SetCopyOption(CopyOptions copyOption)
563 {
564 ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, CopyOptions, copyOption);
565 }
566
AddDragFrameNodeToManager() const567 void TextFieldModelNG::AddDragFrameNodeToManager() const
568 {
569 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
570 CHECK_NULL_VOID(frameNode);
571 auto pipeline = frameNode->GetContext();
572 CHECK_NULL_VOID(pipeline);
573 auto dragDropManager = pipeline->GetDragDropManager();
574 CHECK_NULL_VOID(dragDropManager);
575 dragDropManager->AddTextFieldDragFrameNode(frameNode->GetId(), AceType::WeakClaim(frameNode));
576 }
577
SetForegroundColor(const Color & value)578 void TextFieldModelNG::SetForegroundColor(const Color& value)
579 {
580 ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, TextColor, value);
581 }
582
SetPasswordIcon(const PasswordIcon & passwordIcon)583 void TextFieldModelNG::SetPasswordIcon(const PasswordIcon& passwordIcon)
584 {
585 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
586 CHECK_NULL_VOID(frameNode);
587 auto pattern = frameNode->GetPattern<TextFieldPattern>();
588 CHECK_NULL_VOID(pattern);
589 if (passwordIcon.showResult != "") {
590 ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, ShowPasswordSourceInfo,
591 ImageSourceInfo(passwordIcon.showResult, passwordIcon.showBundleName, passwordIcon.showModuleName));
592 } else {
593 ImageSourceInfo showSystemSourceInfo;
594 showSystemSourceInfo.SetResourceId(InternalResource::ResourceId::SHOW_PASSWORD_SVG);
595 ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, ShowPasswordSourceInfo, showSystemSourceInfo);
596 }
597 if (passwordIcon.hideResult != "") {
598 ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, HidePasswordSourceInfo,
599 ImageSourceInfo(passwordIcon.hideResult, passwordIcon.hideBundleName, passwordIcon.hideModuleName));
600 } else {
601 ImageSourceInfo hideSystemSourceInfo;
602 hideSystemSourceInfo.SetResourceId(InternalResource::ResourceId::HIDE_PASSWORD_SVG);
603 ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, HidePasswordSourceInfo, hideSystemSourceInfo);
604 }
605 }
606
SetShowUnit(std::function<void ()> && unitFunction)607 void TextFieldModelNG::SetShowUnit(std::function<void()>&& unitFunction)
608 {
609 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
610 CHECK_NULL_VOID(frameNode);
611 auto pattern = frameNode->GetPattern<TextFieldPattern>();
612 CHECK_NULL_VOID(pattern);
613 RefPtr<NG::UINode> unitNode;
614 if (unitFunction) {
615 NG::ScopedViewStackProcessor builderViewStackProcessor;
616 unitFunction();
617 unitNode = NG::ViewStackProcessor::GetInstance()->Finish();
618 }
619 if (unitNode) {
620 pattern->SetUnitNode(unitNode);
621 }
622 }
623
SetShowError(const std::string & errorText,bool visible)624 void TextFieldModelNG::SetShowError(const std::string& errorText, bool visible)
625 {
626 ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, ErrorText, errorText);
627 ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, ShowErrorText, visible);
628 }
629
SetShowCounter(bool value)630 void TextFieldModelNG::SetShowCounter(bool value)
631 {
632 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
633 CHECK_NULL_VOID(frameNode);
634 auto pattern = frameNode->GetPattern<TextFieldPattern>();
635 CHECK_NULL_VOID(pattern);
636 pattern->SetCounterState(false);
637 if (value) {
638 pattern->AddCounterNode();
639 } else {
640 pattern->CleanCounterNode();
641 }
642 ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, ShowCounter, value);
643 }
644
SetCounterType(int32_t value)645 void TextFieldModelNG::SetCounterType(int32_t value)
646 {
647 auto frameNode = ViewStackProcessor ::GetInstance()->GetMainFrameNode();
648 CHECK_NULL_VOID(frameNode);
649 auto layoutProperty = frameNode->GetLayoutProperty<TextFieldLayoutProperty>();
650 CHECK_NULL_VOID(layoutProperty);
651 ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, SetCounter, value);
652 }
653
SetShowCounterBorder(bool value)654 void TextFieldModelNG::SetShowCounterBorder(bool value)
655 {
656 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
657 CHECK_NULL_VOID(frameNode);
658 auto pattern = frameNode->GetPattern<TextFieldPattern>();
659 CHECK_NULL_VOID(pattern);
660 pattern->SetCounterState(false);
661 ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, ShowHighlightBorder, value);
662 }
663
SetShowCounterBorder(FrameNode * frameNode,bool value)664 void TextFieldModelNG::SetShowCounterBorder(FrameNode* frameNode, bool value)
665 {
666 CHECK_NULL_VOID(frameNode);
667 auto pattern = frameNode->GetPattern<TextFieldPattern>();
668 CHECK_NULL_VOID(pattern);
669 pattern->SetCounterState(false);
670 ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, ShowHighlightBorder, value, frameNode);
671 }
672
SetBarState(OHOS::Ace::DisplayMode value)673 void TextFieldModelNG::SetBarState(OHOS::Ace::DisplayMode value)
674 {
675 ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, DisplayMode, value);
676 }
677
SetMaxViewLines(uint32_t value)678 void TextFieldModelNG::SetMaxViewLines(uint32_t value)
679 {
680 ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, MaxViewLines, value);
681 }
682
SetNormalMaxViewLines(uint32_t value)683 void TextFieldModelNG::SetNormalMaxViewLines(uint32_t value)
684 {
685 ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, NormalMaxViewLines, value);
686 }
687
SetBackgroundColor(const Color & color,bool tmp)688 void TextFieldModelNG::SetBackgroundColor(const Color& color, bool tmp)
689 {
690 Color backgroundColor = color;
691 if (tmp) {
692 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
693 CHECK_NULL_VOID(frameNode);
694 auto pipeline = frameNode->GetContextRefPtr();
695 CHECK_NULL_VOID(pipeline);
696 auto themeManager = pipeline->GetThemeManager();
697 CHECK_NULL_VOID(themeManager);
698 auto theme = themeManager->GetTheme<TextFieldTheme>();
699 CHECK_NULL_VOID(theme);
700 backgroundColor = theme->GetBgColor();
701 }
702 NG::ViewAbstract::SetBackgroundColor(backgroundColor);
703 ACE_UPDATE_PAINT_PROPERTY(TextFieldPaintProperty, BackgroundColor, backgroundColor);
704 }
705
SetBackgroundColor(FrameNode * frameNode,const Color & color)706 void TextFieldModelNG::SetBackgroundColor(FrameNode* frameNode, const Color& color)
707 {
708 CHECK_NULL_VOID(frameNode);
709 NG::ViewAbstract::SetBackgroundColor(frameNode, color);
710 ACE_UPDATE_NODE_PAINT_PROPERTY(TextFieldPaintProperty, BackgroundColor, color, frameNode);
711 }
712
SetHeight(const Dimension & value)713 void TextFieldModelNG::SetHeight(const Dimension& value) {}
714
SetMargin()715 void TextFieldModelNG::SetMargin()
716 {
717 auto frameNode = ViewStackProcessor ::GetInstance()->GetMainFrameNode();
718 CHECK_NULL_VOID(frameNode);
719 auto layoutProperty = frameNode->GetLayoutProperty<TextFieldLayoutProperty>();
720 CHECK_NULL_VOID(layoutProperty);
721 const auto& margin = layoutProperty->GetMarginProperty();
722 CHECK_NULL_VOID(margin);
723 MarginProperty userMargin;
724 userMargin.top = margin->top;
725 userMargin.bottom = margin->bottom;
726 userMargin.left = margin->left;
727 userMargin.right = margin->right;
728 ACE_UPDATE_PAINT_PROPERTY(TextFieldPaintProperty, MarginByUser, userMargin);
729 }
730
SetPadding(const NG::PaddingProperty & newPadding,Edge oldPadding,bool tmp)731 void TextFieldModelNG::SetPadding(const NG::PaddingProperty& newPadding, Edge oldPadding, bool tmp)
732 {
733 if (tmp) {
734 SetDefaultPadding();
735 return;
736 }
737 NG::ViewAbstract::SetPadding(newPadding);
738 ACE_UPDATE_PAINT_PROPERTY(TextFieldPaintProperty, PaddingByUser, newPadding);
739 }
740
SetDefaultPadding()741 void TextFieldModelNG::SetDefaultPadding()
742 {
743 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
744 CHECK_NULL_VOID(frameNode);
745 auto pattern = frameNode->GetPattern<TextFieldPattern>();
746 CHECK_NULL_VOID(pattern);
747 auto theme = pattern->GetTheme();
748 CHECK_NULL_VOID(theme);
749 auto themePadding = theme->GetPadding();
750 PaddingProperty paddings;
751 paddings.top = NG::CalcLength(themePadding.Top().ConvertToPx());
752 paddings.bottom = NG::CalcLength(themePadding.Bottom().ConvertToPx());
753 paddings.left = NG::CalcLength(themePadding.Left().ConvertToPx());
754 paddings.right = NG::CalcLength(themePadding.Right().ConvertToPx());
755 ViewAbstract::SetPadding(paddings);
756 ACE_UPDATE_PAINT_PROPERTY(TextFieldPaintProperty, PaddingByUser, paddings);
757 }
758
SetHoverEffect(HoverEffectType hoverEffect)759 void TextFieldModelNG::SetHoverEffect(HoverEffectType hoverEffect)
760 {
761 NG::ViewAbstract::SetHoverEffect(hoverEffect);
762 }
763
SetOnChangeEvent(std::function<void (const std::string &)> && func)764 void TextFieldModelNG::SetOnChangeEvent(std::function<void(const std::string&)>&& func)
765 {
766 auto eventHub = ViewStackProcessor::GetInstance()->GetMainFrameNodeEventHub<TextFieldEventHub>();
767 CHECK_NULL_VOID(eventHub);
768 eventHub->SetOnChangeEvent(std::move(func));
769 }
770
SetSelectionMenuHidden(bool selectionMenuHidden)771 void TextFieldModelNG::SetSelectionMenuHidden(bool selectionMenuHidden)
772 {
773 ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, SelectionMenuHidden, selectionMenuHidden);
774 }
775
SetCustomKeyboard(const std::function<void ()> && buildFunc,bool supportAvoidance)776 void TextFieldModelNG::SetCustomKeyboard(const std::function<void()>&& buildFunc, bool supportAvoidance)
777 {
778 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
779 CHECK_NULL_VOID(frameNode);
780 auto pattern = frameNode->GetPattern<TextFieldPattern>();
781 if (pattern) {
782 pattern->SetCustomKeyboardOption(supportAvoidance);
783 pattern->SetCustomKeyboard(std::move(buildFunc));
784 }
785 }
786
SetPasswordRules(const std::string & passwordRules)787 void TextFieldModelNG::SetPasswordRules(const std::string& passwordRules)
788 {
789 ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, PasswordRules, passwordRules);
790 }
791
SetEnableAutoFill(bool enableAutoFill)792 void TextFieldModelNG::SetEnableAutoFill(bool enableAutoFill)
793 {
794 ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, EnableAutoFill, enableAutoFill);
795 }
796
SetAdaptMinFontSize(const Dimension & value)797 void TextFieldModelNG::SetAdaptMinFontSize(const Dimension& value)
798 {
799 ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, AdaptMinFontSize, value);
800 }
801
SetAdaptMaxFontSize(const Dimension & value)802 void TextFieldModelNG::SetAdaptMaxFontSize(const Dimension& value)
803 {
804 ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, AdaptMaxFontSize, value);
805 }
806
SetHeightAdaptivePolicy(TextHeightAdaptivePolicy value)807 void TextFieldModelNG::SetHeightAdaptivePolicy(TextHeightAdaptivePolicy value)
808 {
809 ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, HeightAdaptivePolicy, value);
810 }
811
SetCleanNodeStyle(CleanNodeStyle cleanNodeStyle)812 void TextFieldModelNG::SetCleanNodeStyle(CleanNodeStyle cleanNodeStyle)
813 {
814 ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, CleanNodeStyle, cleanNodeStyle);
815 }
816
SetCancelIconSize(const CalcDimension & iconSize)817 void TextFieldModelNG::SetCancelIconSize(const CalcDimension& iconSize)
818 {
819 ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, IconSize, iconSize);
820 }
SetAdaptMinFontSize(FrameNode * frameNode,const Dimension & value)821 void TextFieldModelNG::SetAdaptMinFontSize(FrameNode* frameNode, const Dimension& value)
822 {
823 ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, AdaptMinFontSize, value, frameNode);
824 }
825
SetAdaptMaxFontSize(FrameNode * frameNode,const Dimension & value)826 void TextFieldModelNG::SetAdaptMaxFontSize(FrameNode* frameNode, const Dimension& value)
827 {
828 ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, AdaptMaxFontSize, value, frameNode);
829 }
830
SetHeightAdaptivePolicy(FrameNode * frameNode,TextHeightAdaptivePolicy value)831 void TextFieldModelNG::SetHeightAdaptivePolicy(FrameNode* frameNode, TextHeightAdaptivePolicy value)
832 {
833 ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, HeightAdaptivePolicy, value, frameNode);
834 }
835
SetCanacelIconSrc(const std::string & iconSrc,const std::string & bundleName,const std::string & moduleName)836 void TextFieldModelNG::SetCanacelIconSrc(
837 const std::string& iconSrc, const std::string& bundleName, const std::string& moduleName)
838 {
839 ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, IconSrc, iconSrc);
840 ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, BundleName, bundleName);
841 ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, ModuleName, moduleName);
842 }
843
SetCancelIconColor(const Color & iconColor)844 void TextFieldModelNG::SetCancelIconColor(const Color& iconColor)
845 {
846 ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, IconColor, iconColor);
847 }
848
SetIsShowCancelButton(bool isShowCancelButton)849 void TextFieldModelNG::SetIsShowCancelButton(bool isShowCancelButton)
850 {
851 ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, IsShowCancelButton, isShowCancelButton);
852 }
853
SetSelectAllValue(bool isSelectAllValue)854 void TextFieldModelNG::SetSelectAllValue(bool isSelectAllValue)
855 {
856 ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, SelectAllValue, isSelectAllValue);
857 }
858
SetLetterSpacing(const Dimension & value)859 void TextFieldModelNG::SetLetterSpacing(const Dimension& value)
860 {
861 ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, LetterSpacing, value);
862 }
863
SetLineHeight(const Dimension & value)864 void TextFieldModelNG::SetLineHeight(const Dimension& value)
865 {
866 ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, LineHeight, value);
867 }
868
SetLineSpacing(const Dimension & value)869 void TextFieldModelNG::SetLineSpacing(const Dimension& value)
870 {
871 ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, LineSpacing, value);
872 }
873
SetTextDecoration(Ace::TextDecoration value)874 void TextFieldModelNG::SetTextDecoration(Ace::TextDecoration value)
875 {
876 ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, TextDecoration, value);
877 }
878
SetTextDecorationColor(const Color & value)879 void TextFieldModelNG::SetTextDecorationColor(const Color& value)
880 {
881 ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, TextDecorationColor, value);
882 }
883
SetTextDecorationStyle(Ace::TextDecorationStyle value)884 void TextFieldModelNG::SetTextDecorationStyle(Ace::TextDecorationStyle value)
885 {
886 ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, TextDecorationStyle, value);
887 }
888
SetBackBorder()889 void TextFieldModelNG::SetBackBorder()
890 {
891 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
892 CHECK_NULL_VOID(frameNode);
893 auto renderContext = frameNode->GetRenderContext();
894 CHECK_NULL_VOID(renderContext);
895 if (renderContext->HasBorderRadius()) {
896 ACE_UPDATE_PAINT_PROPERTY(
897 TextFieldPaintProperty, BorderRadiusFlagByUser, renderContext->GetBorderRadius().value());
898 }
899 if (renderContext->HasBorderColor()) {
900 ACE_UPDATE_PAINT_PROPERTY(
901 TextFieldPaintProperty, BorderColorFlagByUser, renderContext->GetBorderColor().value());
902 }
903 if (renderContext->HasBorderWidth()) {
904 ACE_UPDATE_PAINT_PROPERTY(
905 TextFieldPaintProperty, BorderWidthFlagByUser, renderContext->GetBorderWidth().value());
906 }
907 if (renderContext->HasBorderStyle()) {
908 ACE_UPDATE_PAINT_PROPERTY(
909 TextFieldPaintProperty, BorderStyleFlagByUser, renderContext->GetBorderStyle().value());
910 }
911 }
912
SetTextOverflow(Ace::TextOverflow value)913 void TextFieldModelNG::SetTextOverflow(Ace::TextOverflow value)
914 {
915 ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, TextOverflow, value);
916 }
917
SetTextIndent(const Dimension & value)918 void TextFieldModelNG::SetTextIndent(const Dimension& value)
919 {
920 ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, TextIndent, value);
921 }
922
SetTextOverflow(FrameNode * frameNode,Ace::TextOverflow value)923 void TextFieldModelNG::SetTextOverflow(FrameNode* frameNode, Ace::TextOverflow value)
924 {
925 ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, TextOverflow, value, frameNode);
926 }
927
SetTextIndent(FrameNode * frameNode,const Dimension & value)928 void TextFieldModelNG::SetTextIndent(FrameNode* frameNode, const Dimension& value)
929 {
930 ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, TextIndent, value, frameNode);
931 }
932
SetInputStyle(FrameNode * frameNode,InputStyle value)933 void TextFieldModelNG::SetInputStyle(FrameNode* frameNode, InputStyle value)
934 {
935 CHECK_NULL_VOID(frameNode);
936 ACE_UPDATE_NODE_PAINT_PROPERTY(TextFieldPaintProperty, InputStyle, value, frameNode);
937 auto pattern = frameNode->GetPattern<TextFieldPattern>();
938 if (pattern->GetTextInputFlag() && value == InputStyle::DEFAULT) {
939 auto textFieldLayoutProperty = frameNode->GetLayoutProperty<TextFieldLayoutProperty>();
940 CHECK_NULL_VOID(textFieldLayoutProperty);
941 textFieldLayoutProperty->UpdateMaxLines(1);
942 textFieldLayoutProperty->UpdatePlaceholderMaxLines(1);
943 }
944 }
945
RequestKeyboardOnFocus(FrameNode * frameNode,bool needToRequest)946 void TextFieldModelNG::RequestKeyboardOnFocus(FrameNode* frameNode, bool needToRequest)
947 {
948 CHECK_NULL_VOID(frameNode);
949 auto pattern = frameNode->GetPattern<TextFieldPattern>();
950 pattern->SetNeedToRequestKeyboardOnFocus(needToRequest);
951 }
952
SetBarState(FrameNode * frameNode,OHOS::Ace::DisplayMode value)953 void TextFieldModelNG::SetBarState(FrameNode* frameNode, OHOS::Ace::DisplayMode value)
954 {
955 ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, DisplayMode, value, frameNode);
956 }
957
SetPasswordIcon(FrameNode * frameNode,const PasswordIcon & passwordIcon)958 void TextFieldModelNG::SetPasswordIcon(FrameNode* frameNode, const PasswordIcon& passwordIcon)
959 {
960 CHECK_NULL_VOID(frameNode);
961 auto pattern = frameNode->GetPattern<TextFieldPattern>();
962 CHECK_NULL_VOID(pattern);
963 if (passwordIcon.showResult != "") {
964 ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, ShowPasswordSourceInfo,
965 ImageSourceInfo(passwordIcon.showResult,
966 passwordIcon.showBundleName, passwordIcon.showModuleName), frameNode);
967 } else {
968 ImageSourceInfo showSystemSourceInfo;
969 showSystemSourceInfo.SetResourceId(InternalResource::ResourceId::SHOW_PASSWORD_SVG);
970 ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, ShowPasswordSourceInfo,
971 showSystemSourceInfo, frameNode);
972 }
973 if (passwordIcon.hideResult != "") {
974 ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, HidePasswordSourceInfo,
975 ImageSourceInfo(passwordIcon.hideResult,
976 passwordIcon.hideBundleName, passwordIcon.hideModuleName), frameNode);
977 } else {
978 ImageSourceInfo hideSystemSourceInfo;
979 hideSystemSourceInfo.SetResourceId(InternalResource::ResourceId::HIDE_PASSWORD_SVG);
980 ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, HidePasswordSourceInfo,
981 hideSystemSourceInfo, frameNode);
982 }
983 }
984
SetSelectedBackgroundColor(FrameNode * frameNode,const Color & value)985 void TextFieldModelNG::SetSelectedBackgroundColor(FrameNode* frameNode, const Color& value)
986 {
987 ACE_UPDATE_NODE_PAINT_PROPERTY(TextFieldPaintProperty, SelectedBackgroundColor, value, frameNode);
988 }
989
SetMaxViewLines(FrameNode * frameNode,uint32_t value)990 void TextFieldModelNG::SetMaxViewLines(FrameNode* frameNode, uint32_t value)
991 {
992 ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, MaxViewLines, value, frameNode);
993 }
994
SetNormalMaxViewLines(FrameNode * frameNode,uint32_t value)995 void TextFieldModelNG::SetNormalMaxViewLines(FrameNode* frameNode, uint32_t value)
996 {
997 auto normalMaxViewLines = value <= 0 ? Infinity<uint32_t>() : value;
998 ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, NormalMaxViewLines, normalMaxViewLines, frameNode);
999 }
1000
SetType(FrameNode * frameNode,TextInputType value)1001 void TextFieldModelNG::SetType(FrameNode* frameNode, TextInputType value)
1002 {
1003 CHECK_NULL_VOID(frameNode);
1004 auto layoutProperty = frameNode->GetLayoutProperty<TextFieldLayoutProperty>();
1005 if (layoutProperty->HasTextInputType() && layoutProperty->GetTextInputTypeValue() != value) {
1006 layoutProperty->UpdateTypeChanged(true);
1007 }
1008 ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, TextInputType, value, frameNode);
1009 }
1010
SetContentType(const FrameNode * frameNode,const TextContentType & value)1011 void TextFieldModelNG::SetContentType(const FrameNode* frameNode, const TextContentType& value)
1012 {
1013 CHECK_NULL_VOID(frameNode);
1014 auto layoutProperty = frameNode->GetLayoutProperty<TextFieldLayoutProperty>();
1015 CHECK_NULL_VOID(layoutProperty);
1016 if (layoutProperty->HasTextContentType() && layoutProperty->GetTextContentTypeValue() != value) {
1017 layoutProperty->UpdateTextContentTypeChanged(true);
1018 }
1019 ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, TextContentType, value, frameNode);
1020 }
1021
SetCopyOption(FrameNode * frameNode,CopyOptions copyOption)1022 void TextFieldModelNG::SetCopyOption(FrameNode* frameNode, CopyOptions copyOption)
1023 {
1024 ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, CopyOptions, copyOption, frameNode);
1025 }
1026
SetShowPasswordIcon(FrameNode * frameNode,bool value)1027 void TextFieldModelNG::SetShowPasswordIcon(FrameNode* frameNode, bool value)
1028 {
1029 CHECK_NULL_VOID(frameNode);
1030 auto layoutProperty = frameNode->GetLayoutProperty<TextFieldLayoutProperty>();
1031 CHECK_NULL_VOID(layoutProperty);
1032 auto pattern = frameNode->GetPattern<TextFieldPattern>();
1033 CHECK_NULL_VOID(pattern);
1034 ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, ShowPasswordIcon, value, frameNode);
1035 }
1036
SetShowPassword(FrameNode * frameNode,bool value)1037 void TextFieldModelNG::SetShowPassword(FrameNode* frameNode, bool value)
1038 {
1039 CHECK_NULL_VOID(frameNode);
1040 auto layoutProperty = frameNode->GetLayoutProperty<TextFieldLayoutProperty>();
1041 CHECK_NULL_VOID(layoutProperty);
1042 auto pattern = frameNode->GetPattern<TextFieldPattern>();
1043 CHECK_NULL_VOID(pattern);
1044 ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, ShowPasswordText, value, frameNode);
1045 }
1046
SetTextAlign(FrameNode * frameNode,TextAlign value)1047 void TextFieldModelNG::SetTextAlign(FrameNode* frameNode, TextAlign value)
1048 {
1049 CHECK_NULL_VOID(frameNode);
1050 auto pattern = frameNode->GetPattern<TextFieldPattern>();
1051 CHECK_NULL_VOID(pattern);
1052 TextAlign newValue = value;
1053 if (!pattern->IsTextArea() && newValue == TextAlign::JUSTIFY) {
1054 newValue = TextAlign::START;
1055 }
1056 auto layoutProperty = frameNode->GetLayoutProperty<TextFieldLayoutProperty>();
1057 if (layoutProperty->GetTextAlignValue(TextAlign::START) != newValue) {
1058 layoutProperty->UpdateTextAlignChanged(true);
1059 }
1060 ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, TextAlign, newValue, frameNode);
1061 }
1062
SetTextColor(FrameNode * frameNode,const Color & value)1063 void TextFieldModelNG::SetTextColor(FrameNode* frameNode, const Color& value)
1064 {
1065 ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, TextColor, value, frameNode);
1066 ACE_UPDATE_NODE_RENDER_CONTEXT(ForegroundColor, value, frameNode);
1067 ACE_RESET_NODE_RENDER_CONTEXT(RenderContext, ForegroundColorStrategy, frameNode);
1068 ACE_UPDATE_NODE_RENDER_CONTEXT(ForegroundColorFlag, true, frameNode);
1069 }
1070
SetCaretPosition(FrameNode * frameNode,const int32_t & value)1071 void TextFieldModelNG::SetCaretPosition(FrameNode* frameNode, const int32_t& value)
1072 {
1073 CHECK_NULL_VOID(frameNode);
1074 auto pattern = frameNode->GetPattern<TextFieldPattern>();
1075 pattern->SetCaretPosition(value);
1076 }
1077
SetFontStyle(FrameNode * frameNode,Ace::FontStyle value)1078 void TextFieldModelNG::SetFontStyle(FrameNode* frameNode, Ace::FontStyle value)
1079 {
1080 ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, ItalicFontStyle, value, frameNode);
1081 ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, PreferredTextLineHeightNeedToUpdate, true, frameNode);
1082 }
1083
SetMaxLength(FrameNode * frameNode,uint32_t value)1084 void TextFieldModelNG::SetMaxLength(FrameNode* frameNode, uint32_t value)
1085 {
1086 CHECK_NULL_VOID(frameNode);
1087 uint32_t preMaxLength = GetMaxLength(frameNode);
1088 ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, MaxLength, value, frameNode);
1089 if (preMaxLength != value) {
1090 auto pattern = frameNode->GetPattern<TextFieldPattern>();
1091 CHECK_NULL_VOID(pattern);
1092 CHECK_NULL_VOID(pattern->HasFocus());
1093 pattern->UpdateShowCountBorderStyle();
1094 }
1095 }
1096
ResetMaxLength(FrameNode * frameNode)1097 void TextFieldModelNG::ResetMaxLength(FrameNode* frameNode)
1098 {
1099 CHECK_NULL_VOID(frameNode);
1100 auto textFieldLayoutProperty = frameNode->GetLayoutProperty<TextFieldLayoutProperty>();
1101 if (textFieldLayoutProperty) {
1102 textFieldLayoutProperty->ResetMaxLength();
1103 }
1104 }
1105
SetCaretStyle(FrameNode * frameNode,const CaretStyle & value)1106 void TextFieldModelNG::SetCaretStyle(FrameNode* frameNode, const CaretStyle& value)
1107 {
1108 if (value.caretWidth.has_value()) {
1109 ACE_UPDATE_NODE_PAINT_PROPERTY(TextFieldPaintProperty, CursorWidth, value.caretWidth.value(), frameNode);
1110 }
1111 }
1112
SetPlaceholderColor(FrameNode * frameNode,const Color & value)1113 void TextFieldModelNG::SetPlaceholderColor(FrameNode* frameNode, const Color& value)
1114 {
1115 ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, PlaceholderTextColor, value, frameNode);
1116 }
1117
SetFontWeight(FrameNode * frameNode,FontWeight value)1118 void TextFieldModelNG::SetFontWeight(FrameNode* frameNode, FontWeight value)
1119 {
1120 ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, FontWeight, value, frameNode);
1121 ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, PreferredTextLineHeightNeedToUpdate, true, frameNode);
1122 }
1123
SetShowUnderline(FrameNode * frameNode,bool showUnderLine)1124 void TextFieldModelNG::SetShowUnderline(FrameNode* frameNode, bool showUnderLine)
1125 {
1126 ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, ShowUnderline, showUnderLine, frameNode);
1127 }
1128
SetUserUnderlineColor(FrameNode * frameNode,UserUnderlineColor userColor)1129 void TextFieldModelNG::SetUserUnderlineColor(FrameNode* frameNode, UserUnderlineColor userColor)
1130 {
1131 auto pattern = AceType::DynamicCast<TextFieldPattern>(frameNode->GetPattern());
1132 CHECK_NULL_VOID(pattern);
1133 pattern->SetUserUnderlineColor(userColor);
1134 }
1135
SetNormalUnderlineColor(FrameNode * frameNode,const Color & normalColor)1136 void TextFieldModelNG::SetNormalUnderlineColor(FrameNode* frameNode, const Color& normalColor)
1137 {
1138 auto pattern = AceType::DynamicCast<TextFieldPattern>(frameNode->GetPattern());
1139 CHECK_NULL_VOID(pattern);
1140 pattern->SetNormalUnderlineColor(normalColor);
1141 }
1142
SetEnterKeyType(FrameNode * frameNode,TextInputAction value)1143 void TextFieldModelNG::SetEnterKeyType(FrameNode* frameNode, TextInputAction value)
1144 {
1145 auto pattern = AceType::DynamicCast<TextFieldPattern>(frameNode->GetPattern());
1146 CHECK_NULL_VOID(pattern);
1147 if (value == TextInputAction::UNSPECIFIED) {
1148 value = pattern->IsTextArea() ? TextInputAction::NEW_LINE : TextInputAction::DONE;
1149 }
1150 pattern->UpdateTextInputAction(value);
1151 }
1152
SetFontFamily(FrameNode * frameNode,const std::vector<std::string> & value)1153 void TextFieldModelNG::SetFontFamily(FrameNode* frameNode, const std::vector<std::string>& value)
1154 {
1155 ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, FontFamily, value, frameNode);
1156 ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, PreferredTextLineHeightNeedToUpdate, true, frameNode);
1157 }
1158
SetMaxLines(FrameNode * frameNode,uint32_t value)1159 void TextFieldModelNG::SetMaxLines(FrameNode* frameNode, uint32_t value)
1160 {
1161 ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, MaxLines, value, frameNode);
1162 }
1163
SetPlaceholderFont(FrameNode * frameNode,const Font & value)1164 void TextFieldModelNG::SetPlaceholderFont(FrameNode* frameNode, const Font& value)
1165 {
1166 if (value.fontSize.has_value()) {
1167 ACE_UPDATE_NODE_LAYOUT_PROPERTY(
1168 TextFieldLayoutProperty, PlaceholderFontSize, value.fontSize.value(), frameNode);
1169 }
1170 if (value.fontStyle) {
1171 ACE_UPDATE_NODE_LAYOUT_PROPERTY(
1172 TextFieldLayoutProperty, PlaceholderItalicFontStyle, value.fontStyle.value(), frameNode);
1173 }
1174 if (value.fontWeight) {
1175 ACE_UPDATE_NODE_LAYOUT_PROPERTY(
1176 TextFieldLayoutProperty, PlaceholderFontWeight, value.fontWeight.value(), frameNode);
1177 }
1178 if (!value.fontFamilies.empty()) {
1179 ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, PlaceholderFontFamily, value.fontFamilies, frameNode);
1180 }
1181 ACE_UPDATE_NODE_LAYOUT_PROPERTY(
1182 TextFieldLayoutProperty, PreferredPlaceholderLineHeightNeedToUpdate, true, frameNode);
1183 }
1184
SetFontSize(FrameNode * frameNode,const Dimension & value)1185 void TextFieldModelNG::SetFontSize(FrameNode* frameNode, const Dimension& value)
1186 {
1187 ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, FontSize, value, frameNode);
1188 ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, PreferredTextLineHeightNeedToUpdate, true, frameNode);
1189 }
1190
SetCaretColor(FrameNode * frameNode,const Color & value)1191 void TextFieldModelNG::SetCaretColor(FrameNode* frameNode, const Color& value)
1192 {
1193 ACE_UPDATE_NODE_PAINT_PROPERTY(TextFieldPaintProperty, CursorColor, value, frameNode);
1194 }
1195
SetSelectionMenuHidden(FrameNode * frameNode,bool selectionMenuHidden)1196 void TextFieldModelNG::SetSelectionMenuHidden(FrameNode* frameNode, bool selectionMenuHidden)
1197 {
1198 ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, SelectionMenuHidden, selectionMenuHidden, frameNode);
1199 }
1200
GetSelectionMenuHidden(FrameNode * frameNode)1201 bool TextFieldModelNG::GetSelectionMenuHidden(FrameNode* frameNode)
1202 {
1203 bool value = false;
1204 ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(
1205 TextFieldLayoutProperty, SelectionMenuHidden, value, frameNode, value);
1206 return value;
1207 }
1208
SetPasswordRules(FrameNode * frameNode,const std::string & passwordRules)1209 void TextFieldModelNG::SetPasswordRules(FrameNode* frameNode, const std::string& passwordRules)
1210 {
1211 ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, PasswordRules, passwordRules, frameNode);
1212 }
1213
SetEnableAutoFill(FrameNode * frameNode,bool enableAutoFill)1214 void TextFieldModelNG::SetEnableAutoFill(FrameNode* frameNode, bool enableAutoFill)
1215 {
1216 ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, EnableAutoFill, enableAutoFill, frameNode);
1217 }
1218
SetShowCounter(FrameNode * frameNode,bool value)1219 void TextFieldModelNG::SetShowCounter(FrameNode* frameNode, bool value)
1220 {
1221 CHECK_NULL_VOID(frameNode);
1222 auto pattern = frameNode->GetPattern<TextFieldPattern>();
1223 CHECK_NULL_VOID(pattern);
1224 pattern->SetCounterState(false);
1225 ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, ShowCounter, value, frameNode);
1226 if (value) {
1227 pattern->AddCounterNode();
1228 } else {
1229 pattern->CleanCounterNode();
1230 }
1231 }
1232
SetShowError(FrameNode * frameNode,const std::string & errorText,bool visible)1233 void TextFieldModelNG::SetShowError(FrameNode* frameNode, const std::string& errorText, bool visible)
1234 {
1235 ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, ErrorText, errorText, frameNode);
1236 ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, ShowErrorText, visible, frameNode);
1237 }
1238
SetCounterType(FrameNode * frameNode,int32_t value)1239 void TextFieldModelNG::SetCounterType(FrameNode* frameNode, int32_t value)
1240 {
1241 CHECK_NULL_VOID(frameNode);
1242 auto layoutProperty = frameNode->GetLayoutProperty<TextFieldLayoutProperty>();
1243 CHECK_NULL_VOID(layoutProperty);
1244 ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, SetCounter, value, frameNode);
1245 }
1246
SetOnChange(FrameNode * frameNode,std::function<void (const std::string &,PreviewText &)> && func)1247 void TextFieldModelNG::SetOnChange(FrameNode* frameNode, std::function<void(const std::string&, PreviewText&)>&& func)
1248 {
1249 CHECK_NULL_VOID(frameNode);
1250 auto eventHub = frameNode->GetEventHub<TextFieldEventHub>();
1251 CHECK_NULL_VOID(eventHub);
1252 eventHub->SetOnChange(std::move(func));
1253 }
1254
SetOnContentSizeChange(FrameNode * frameNode,std::function<void (float,float)> && func)1255 void TextFieldModelNG::SetOnContentSizeChange(FrameNode* frameNode, std::function<void(float, float)>&& func)
1256 {
1257 CHECK_NULL_VOID(frameNode);
1258 auto eventHub = frameNode->GetEventHub<TextFieldEventHub>();
1259 CHECK_NULL_VOID(eventHub);
1260 eventHub->SetOnContentSizeChange(std::move(func));
1261 }
1262
SetTextFieldText(FrameNode * frameNode,const std::string & value)1263 void TextFieldModelNG::SetTextFieldText(FrameNode* frameNode, const std::string& value)
1264 {
1265 CHECK_NULL_VOID(frameNode);
1266 auto pattern = frameNode->GetPattern<TextFieldPattern>();
1267 auto textValue = pattern->GetTextValue();
1268 if (value != textValue) {
1269 pattern->InitEditingValueText(value);
1270 }
1271 }
1272
SetTextFieldPlaceHolder(FrameNode * frameNode,const std::string & placeholder)1273 void TextFieldModelNG::SetTextFieldPlaceHolder(FrameNode* frameNode, const std::string& placeholder)
1274 {
1275 CHECK_NULL_VOID(frameNode);
1276 auto textFieldLayoutProperty = frameNode->GetLayoutProperty<TextFieldLayoutProperty>();
1277 textFieldLayoutProperty->UpdatePlaceholder(placeholder);
1278 }
1279
StopTextFieldEditing(FrameNode * frameNode)1280 void TextFieldModelNG::StopTextFieldEditing(FrameNode* frameNode)
1281 {
1282 CHECK_NULL_VOID(frameNode);
1283 auto pattern = frameNode->GetPattern<TextFieldPattern>();
1284 if (pattern) {
1285 pattern->StopEditing();
1286 }
1287 }
1288
SetOnSubmit(FrameNode * frameNode,std::function<void (int32_t,NG::TextFieldCommonEvent &)> && func)1289 void TextFieldModelNG::SetOnSubmit(FrameNode* frameNode, std::function<void(int32_t, NG::TextFieldCommonEvent&)>&& func)
1290 {
1291 CHECK_NULL_VOID(frameNode);
1292 auto eventHub = frameNode->GetEventHub<TextFieldEventHub>();
1293 CHECK_NULL_VOID(eventHub);
1294 eventHub->SetOnSubmit(std::move(func));
1295 }
1296
SetOnCut(FrameNode * frameNode,std::function<void (const std::string &)> && func)1297 void TextFieldModelNG::SetOnCut(FrameNode* frameNode, std::function<void(const std::string&)>&& func)
1298 {
1299 CHECK_NULL_VOID(frameNode);
1300 auto eventHub = frameNode->GetEventHub<TextFieldEventHub>();
1301 CHECK_NULL_VOID(eventHub);
1302 eventHub->SetOnCut(std::move(func));
1303 }
1304
SetOnPasteWithEvent(FrameNode * frameNode,std::function<void (const std::string &,NG::TextCommonEvent &)> && func)1305 void TextFieldModelNG::SetOnPasteWithEvent(
1306 FrameNode* frameNode, std::function<void(const std::string&, NG::TextCommonEvent&)>&& func)
1307 {
1308 CHECK_NULL_VOID(frameNode);
1309 auto eventHub = frameNode->GetEventHub<TextFieldEventHub>();
1310 CHECK_NULL_VOID(eventHub);
1311 eventHub->SetOnPasteWithEvent(std::move(func));
1312 }
1313
SetCleanNodeStyle(FrameNode * frameNode,CleanNodeStyle cleanNodeStyle)1314 void TextFieldModelNG::SetCleanNodeStyle(FrameNode* frameNode, CleanNodeStyle cleanNodeStyle)
1315 {
1316 ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, CleanNodeStyle, cleanNodeStyle, frameNode);
1317 }
1318
SetIsShowCancelButton(FrameNode * frameNode,bool isShowCancelButton)1319 void TextFieldModelNG::SetIsShowCancelButton(FrameNode* frameNode, bool isShowCancelButton)
1320 {
1321 ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, IsShowCancelButton, isShowCancelButton, frameNode);
1322 }
1323
SetCancelIconSize(FrameNode * frameNode,const CalcDimension & iconSize)1324 void TextFieldModelNG::SetCancelIconSize(FrameNode* frameNode, const CalcDimension& iconSize)
1325 {
1326 ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, IconSize, iconSize, frameNode);
1327 }
1328
SetCanacelIconSrc(FrameNode * frameNode,const std::string & iconSrc)1329 void TextFieldModelNG::SetCanacelIconSrc(FrameNode* frameNode, const std::string& iconSrc)
1330 {
1331 ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, IconSrc, iconSrc, frameNode);
1332 }
1333
SetCancelIconColor(FrameNode * frameNode,const Color & iconColor)1334 void TextFieldModelNG::SetCancelIconColor(FrameNode* frameNode, const Color& iconColor)
1335 {
1336 ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, IconColor, iconColor, frameNode);
1337 }
1338
GetPlaceholderText(FrameNode * frameNode)1339 std::string TextFieldModelNG::GetPlaceholderText(FrameNode* frameNode)
1340 {
1341 std::string value;
1342 ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(TextFieldLayoutProperty, Placeholder, value, frameNode, value);
1343 return value;
1344 }
1345
GetTextFieldText(FrameNode * frameNode)1346 std::string TextFieldModelNG::GetTextFieldText(FrameNode* frameNode)
1347 {
1348 std::string value;
1349 CHECK_NULL_RETURN(frameNode, value);
1350 auto pattern = frameNode->GetPattern<TextFieldPattern>();
1351 return pattern->GetTextValue();
1352 }
1353
GetCaretColor(FrameNode * frameNode)1354 Color TextFieldModelNG::GetCaretColor(FrameNode* frameNode)
1355 {
1356 Color value;
1357 ACE_GET_NODE_PAINT_PROPERTY_WITH_DEFAULT_VALUE(TextFieldPaintProperty, CursorColor, value, frameNode, value);
1358 return value;
1359 }
1360
GetCaretStyle(FrameNode * frameNode)1361 Dimension TextFieldModelNG::GetCaretStyle(FrameNode* frameNode)
1362 {
1363 Dimension value;
1364 ACE_GET_NODE_PAINT_PROPERTY_WITH_DEFAULT_VALUE(TextFieldPaintProperty, CursorWidth, value, frameNode, value);
1365 return value;
1366 }
1367
GetShowUnderline(FrameNode * frameNode)1368 bool TextFieldModelNG::GetShowUnderline(FrameNode* frameNode)
1369 {
1370 bool value = false;
1371 ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(TextFieldLayoutProperty, ShowUnderline, value, frameNode, value);
1372 return value;
1373 }
1374
GetMaxLength(FrameNode * frameNode)1375 uint32_t TextFieldModelNG::GetMaxLength(FrameNode* frameNode)
1376 {
1377 uint32_t value = 0;
1378 ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(TextFieldLayoutProperty, MaxLength, value, frameNode, value);
1379 return value;
1380 }
1381
GetEnterKeyType(FrameNode * frameNode)1382 TextInputAction TextFieldModelNG::GetEnterKeyType(FrameNode* frameNode)
1383 {
1384 TextInputAction value = TextInputAction::UNSPECIFIED;
1385 CHECK_NULL_RETURN(frameNode, value);
1386 auto pattern = frameNode->GetPattern<TextFieldPattern>();
1387 return pattern->GetTextInputActionValue(
1388 frameNode->GetTag() == V2::TEXTAREA_ETS_TAG ? TextInputAction::NEW_LINE : TextInputAction::DONE);
1389 }
1390
GetPlaceholderColor(FrameNode * frameNode)1391 Color TextFieldModelNG::GetPlaceholderColor(FrameNode* frameNode)
1392 {
1393 Color value;
1394 ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(
1395 TextFieldLayoutProperty, PlaceholderTextColor, value, frameNode, value);
1396 return value;
1397 }
1398
GetPlaceholderFont(FrameNode * frameNode)1399 Font TextFieldModelNG::GetPlaceholderFont(FrameNode* frameNode)
1400 {
1401 std::vector<std::string> fontFamilies;
1402 Dimension fontSize;
1403 Ace::FontStyle fontStyle = Ace::FontStyle::NORMAL;
1404 Ace::FontWeight fontWeight = Ace::FontWeight::NORMAL;
1405 ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(
1406 TextFieldLayoutProperty, PlaceholderFontSize, fontSize, frameNode, Dimension());
1407 ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(
1408 TextFieldLayoutProperty, PlaceholderItalicFontStyle, fontStyle, frameNode, fontStyle);
1409 ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(
1410 TextFieldLayoutProperty, PlaceholderFontWeight, fontWeight, frameNode, fontWeight);
1411 ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(
1412 TextFieldLayoutProperty, PlaceholderFontFamily, fontFamilies, frameNode, fontFamilies);
1413 Font value { fontWeight, fontSize, fontStyle, fontFamilies };
1414 return value;
1415 }
1416
GetRequestKeyboardOnFocus(FrameNode * frameNode)1417 bool TextFieldModelNG::GetRequestKeyboardOnFocus(FrameNode* frameNode)
1418 {
1419 bool value = false;
1420 CHECK_NULL_RETURN(frameNode, value);
1421 auto pattern = frameNode->GetPattern<TextFieldPattern>();
1422 return pattern->NeedToRequestKeyboardOnFocus();
1423 }
1424
GetType(FrameNode * frameNode)1425 TextInputType TextFieldModelNG::GetType(FrameNode* frameNode)
1426 {
1427 TextInputType value = TextInputType::UNSPECIFIED;
1428 ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(TextFieldLayoutProperty, TextInputType, value, frameNode, value);
1429 return value;
1430 }
1431
GetSelectedBackgroundColor(FrameNode * frameNode)1432 Color TextFieldModelNG::GetSelectedBackgroundColor(FrameNode* frameNode)
1433 {
1434 Color value;
1435 ACE_GET_NODE_PAINT_PROPERTY_WITH_DEFAULT_VALUE(
1436 TextFieldPaintProperty, SelectedBackgroundColor, value, frameNode, value);
1437 return value;
1438 }
1439
GetShowPasswordIcon(FrameNode * frameNode)1440 bool TextFieldModelNG::GetShowPasswordIcon(FrameNode* frameNode)
1441 {
1442 bool value = false;
1443 ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(TextFieldLayoutProperty, ShowPasswordIcon, value, frameNode, value);
1444 return value;
1445 }
1446
GetShowPassword(FrameNode * frameNode)1447 bool TextFieldModelNG::GetShowPassword(FrameNode* frameNode)
1448 {
1449 bool value = false;
1450 ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(TextFieldLayoutProperty, ShowPasswordText, value, frameNode, value);
1451 return value;
1452 }
1453
GetTextFieldEditing(FrameNode * frameNode)1454 bool TextFieldModelNG::GetTextFieldEditing(FrameNode* frameNode)
1455 {
1456 bool value = false;
1457 CHECK_NULL_RETURN(frameNode, value);
1458 auto pattern = frameNode->GetPattern<TextFieldPattern>();
1459 return pattern->HasFocus();
1460 }
1461
GetShowCancelButton(FrameNode * frameNode)1462 bool TextFieldModelNG::GetShowCancelButton(FrameNode* frameNode)
1463 {
1464 bool value = false;
1465 ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(
1466 TextFieldLayoutProperty, IsShowCancelButton, value, frameNode, value);
1467 return value;
1468 }
1469
GetCancelIconSize(FrameNode * frameNode)1470 CalcDimension TextFieldModelNG::GetCancelIconSize(FrameNode* frameNode)
1471 {
1472 CalcDimension value;
1473 ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(TextFieldLayoutProperty, IconSize, value, frameNode, value);
1474 return value;
1475 }
1476
GetCanacelIconSrc(FrameNode * frameNode)1477 std::string TextFieldModelNG::GetCanacelIconSrc(FrameNode* frameNode)
1478 {
1479 std::string value;
1480 ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(TextFieldLayoutProperty, IconSrc, value, frameNode, value);
1481 return value;
1482 }
1483
GetCancelIconColor(FrameNode * frameNode)1484 Color TextFieldModelNG::GetCancelIconColor(FrameNode* frameNode)
1485 {
1486 Color value;
1487 ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(TextFieldLayoutProperty, IconColor, value, frameNode, value);
1488 return value;
1489 }
1490
GetTextAlign(FrameNode * frameNode)1491 TextAlign TextFieldModelNG::GetTextAlign(FrameNode* frameNode)
1492 {
1493 TextAlign value = TextAlign::START;
1494 ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(TextFieldLayoutProperty, TextAlign, value, frameNode, value);
1495 return value;
1496 }
GetTextColor(FrameNode * frameNode)1497 Color TextFieldModelNG::GetTextColor(FrameNode* frameNode)
1498 {
1499 Color value;
1500 ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(TextFieldLayoutProperty, TextColor, value, frameNode, value);
1501 return value;
1502 }
GetFontStyle(FrameNode * frameNode)1503 Ace::FontStyle TextFieldModelNG::GetFontStyle(FrameNode* frameNode)
1504 {
1505 Ace::FontStyle value = Ace::FontStyle::NORMAL;
1506 ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(TextFieldLayoutProperty, ItalicFontStyle, value, frameNode, value);
1507 return value;
1508 }
GetFontWeight(FrameNode * frameNode)1509 FontWeight TextFieldModelNG::GetFontWeight(FrameNode* frameNode)
1510 {
1511 FontWeight value = FontWeight::NORMAL;
1512 ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(TextFieldLayoutProperty, FontWeight, value, frameNode, value);
1513 return value;
1514 }
GetFontSize(FrameNode * frameNode)1515 Dimension TextFieldModelNG::GetFontSize(FrameNode* frameNode)
1516 {
1517 Dimension value;
1518 ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(TextFieldLayoutProperty, FontSize, value, frameNode, Dimension());
1519 return value;
1520 }
GetCleanNodeStyle(FrameNode * frameNode)1521 CleanNodeStyle TextFieldModelNG::GetCleanNodeStyle(FrameNode* frameNode)
1522 {
1523 CleanNodeStyle value = CleanNodeStyle::INPUT;
1524 ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(TextFieldLayoutProperty, CleanNodeStyle, value, frameNode, value);
1525 return value;
1526 }
GetShowCounter(FrameNode * frameNode)1527 bool TextFieldModelNG::GetShowCounter(FrameNode* frameNode)
1528 {
1529 bool value = false;
1530 ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(TextFieldLayoutProperty, ShowCounter, value, frameNode, value);
1531 return static_cast<int>(value);
1532 }
GetCounterType(FrameNode * frameNode)1533 int TextFieldModelNG::GetCounterType(FrameNode* frameNode)
1534 {
1535 int value = -1;
1536 ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(TextFieldLayoutProperty, SetCounter, value, frameNode, value);
1537 return value;
1538 }
GetShowCounterBorder(FrameNode * frameNode)1539 bool TextFieldModelNG::GetShowCounterBorder(FrameNode* frameNode)
1540 {
1541 bool value = true;
1542 ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(
1543 TextFieldLayoutProperty, ShowHighlightBorder, value, frameNode, value);
1544 return value;
1545 }
1546
SetTextSelection(FrameNode * frameNode,int32_t start,int32_t end)1547 void TextFieldModelNG::SetTextSelection(FrameNode* frameNode, int32_t start, int32_t end)
1548 {
1549 CHECK_NULL_VOID(frameNode);
1550 auto pattern = frameNode->GetPattern<TextFieldPattern>();
1551 CHECK_NULL_VOID(pattern);
1552 auto wideText = pattern->GetWideText();
1553 int32_t length = static_cast<int32_t>(wideText.length());
1554 start = std::clamp(start, 0, length);
1555 end = std::clamp(end, 0, length);
1556 pattern->SetSelectionFlag(start, end);
1557 }
1558
GetTextSelectionIndex(FrameNode * frameNode,bool isEnd)1559 int32_t TextFieldModelNG::GetTextSelectionIndex(FrameNode* frameNode, bool isEnd)
1560 {
1561 int32_t defaultValue = 0;
1562 auto pattern = frameNode->GetPattern<TextFieldPattern>();
1563 CHECK_NULL_RETURN(pattern, defaultValue);
1564 auto selectController = pattern->GetTextSelectController();
1565 if (isEnd) {
1566 return selectController->GetEndIndex();
1567 }
1568 return selectController->GetStartIndex();
1569 }
1570
ResetTextInputPadding(FrameNode * frameNode)1571 void TextFieldModelNG::ResetTextInputPadding(FrameNode* frameNode)
1572 {
1573 CHECK_NULL_VOID(frameNode);
1574 auto pipeline = frameNode->GetContext();
1575 CHECK_NULL_VOID(pipeline);
1576 auto themeManager = pipeline->GetThemeManager();
1577 CHECK_NULL_VOID(themeManager);
1578 auto textFieldTheme = themeManager->GetTheme<TextFieldTheme>();
1579 CHECK_NULL_VOID(textFieldTheme);
1580 auto themePadding = textFieldTheme->GetPadding();
1581 PaddingProperty paddings;
1582 paddings.top = NG::CalcLength(themePadding.Top().ConvertToPx());
1583 paddings.bottom = NG::CalcLength(themePadding.Bottom().ConvertToPx());
1584 paddings.left = NG::CalcLength(themePadding.Left().ConvertToPx());
1585 paddings.right = NG::CalcLength(themePadding.Right().ConvertToPx());
1586 ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, Padding, paddings, frameNode);
1587 }
1588
SetTextDecoration(FrameNode * frameNode,TextDecoration value)1589 void TextFieldModelNG::SetTextDecoration(FrameNode* frameNode, TextDecoration value)
1590 {
1591 ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, TextDecoration, value, frameNode);
1592 }
1593
SetTextDecorationColor(FrameNode * frameNode,const Color & value)1594 void TextFieldModelNG::SetTextDecorationColor(FrameNode* frameNode, const Color& value)
1595 {
1596 ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, TextDecorationColor, value, frameNode);
1597 }
1598
SetTextDecorationStyle(FrameNode * frameNode,TextDecorationStyle value)1599 void TextFieldModelNG::SetTextDecorationStyle(FrameNode* frameNode, TextDecorationStyle value)
1600 {
1601 ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, TextDecorationStyle, value, frameNode);
1602 }
1603
SetLetterSpacing(FrameNode * frameNode,const Dimension & value)1604 void TextFieldModelNG::SetLetterSpacing(FrameNode* frameNode, const Dimension& value)
1605 {
1606 ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, LetterSpacing, value, frameNode);
1607 }
1608
SetLineHeight(FrameNode * frameNode,const Dimension & value)1609 void TextFieldModelNG::SetLineHeight(FrameNode* frameNode, const Dimension& value)
1610 {
1611 ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, LineHeight, value, frameNode);
1612 }
1613
SetLineSpacing(FrameNode * frameNode,const Dimension & value)1614 void TextFieldModelNG::SetLineSpacing(FrameNode* frameNode, const Dimension& value)
1615 {
1616 ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, LineSpacing, value, frameNode);
1617 }
1618
SetWordBreak(FrameNode * frameNode,Ace::WordBreak value)1619 void TextFieldModelNG::TextFieldModelNG::SetWordBreak(FrameNode* frameNode, Ace::WordBreak value)
1620 {
1621 ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, WordBreak, value, frameNode);
1622 }
1623
SetLineBreakStrategy(FrameNode * frameNode,LineBreakStrategy value)1624 void TextFieldModelNG::SetLineBreakStrategy(FrameNode* frameNode, LineBreakStrategy value)
1625 {
1626 ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, LineBreakStrategy, value, frameNode);
1627 }
1628
SetSelectAllValue(FrameNode * frameNode,bool isSelectAllValue)1629 void TextFieldModelNG::SetSelectAllValue(FrameNode* frameNode, bool isSelectAllValue)
1630 {
1631 ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, SelectAllValue, isSelectAllValue, frameNode);
1632 }
1633
SetBlurOnSubmit(FrameNode * frameNode,bool blurOnSubmit)1634 void TextFieldModelNG::SetBlurOnSubmit(FrameNode* frameNode, bool blurOnSubmit)
1635 {
1636 CHECK_NULL_VOID(frameNode);
1637 auto pattern = frameNode->GetPattern<TextFieldPattern>();
1638 CHECK_NULL_VOID(pattern);
1639 return pattern->SetBlurOnSubmit(blurOnSubmit);
1640 }
1641
GetBlurOnSubmit(FrameNode * frameNode)1642 bool TextFieldModelNG::GetBlurOnSubmit(FrameNode* frameNode)
1643 {
1644 CHECK_NULL_RETURN(frameNode, true);
1645 auto pattern = frameNode->GetPattern<TextFieldPattern>();
1646 CHECK_NULL_RETURN(pattern, true);
1647 return pattern->GetBlurOnSubmit();
1648 }
1649
SetOnEditChange(FrameNode * frameNode,std::function<void (bool)> && func)1650 void TextFieldModelNG::SetOnEditChange(FrameNode* frameNode, std::function<void(bool)>&& func)
1651 {
1652 CHECK_NULL_VOID(frameNode);
1653 auto eventHub = frameNode->GetEventHub<TextFieldEventHub>();
1654 CHECK_NULL_VOID(eventHub);
1655 eventHub->SetOnEditChanged(std::move(func));
1656 }
1657
SetInputFilter(FrameNode * frameNode,const std::string & value,const std::function<void (const std::string &)> & onError)1658 void TextFieldModelNG::SetInputFilter(FrameNode* frameNode,
1659 const std::string& value, const std::function<void(const std::string&)>& onError)
1660 {
1661 CHECK_NULL_VOID(frameNode);
1662 ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, InputFilter, value, frameNode);
1663 auto eventHub = frameNode->GetEventHub<TextFieldEventHub>();
1664 CHECK_NULL_VOID(eventHub);
1665 eventHub->SetOnInputFilterError(onError);
1666 }
1667
SetOnContentScroll(FrameNode * frameNode,std::function<void (float,float)> && func)1668 void TextFieldModelNG::SetOnContentScroll(FrameNode* frameNode, std::function<void(float, float)>&& func)
1669 {
1670 CHECK_NULL_VOID(frameNode);
1671 auto eventHub = frameNode->GetEventHub<TextFieldEventHub>();
1672 CHECK_NULL_VOID(eventHub);
1673 eventHub->SetOnScrollChangeEvent(std::move(func));
1674 }
1675
SetOnCopy(FrameNode * frameNode,std::function<void (const std::string &)> && func)1676 void TextFieldModelNG::SetOnCopy(FrameNode* frameNode, std::function<void(const std::string&)>&& func)
1677 {
1678 CHECK_NULL_VOID(frameNode);
1679 auto eventHub = frameNode->GetEventHub<TextFieldEventHub>();
1680 CHECK_NULL_VOID(eventHub);
1681 eventHub->SetOnCopy(std::move(func));
1682 }
1683
SetOnEditChanged(FrameNode * frameNode,std::function<void (bool)> && func)1684 void TextFieldModelNG::SetOnEditChanged(FrameNode* frameNode, std::function<void(bool)>&& func)
1685 {
1686 CHECK_NULL_VOID(frameNode);
1687 auto eventHub = frameNode->GetEventHub<TextFieldEventHub>();
1688 CHECK_NULL_VOID(eventHub);
1689 eventHub->SetOnEditChanged(std::move(func));
1690 }
1691
SetCustomKeyboard(FrameNode * frameNode,FrameNode * customKeyboard,bool supportAvoidance)1692 void TextFieldModelNG::SetCustomKeyboard(FrameNode* frameNode, FrameNode* customKeyboard, bool supportAvoidance)
1693 {
1694 CHECK_NULL_VOID(frameNode);
1695 auto pattern = frameNode->GetPattern<TextFieldPattern>();
1696 if (pattern) {
1697 pattern->SetCustomKeyboardWithNode(AceType::Claim<UINode>(customKeyboard));
1698 pattern->SetCustomKeyboardOption(supportAvoidance);
1699 }
1700 }
1701
SetInputFilter(FrameNode * frameNode,const std::string & value)1702 void TextFieldModelNG::SetInputFilter(FrameNode* frameNode, const std::string& value)
1703 {
1704 ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, InputFilter, value, frameNode);
1705 }
1706
SetInputFilterError(FrameNode * frameNode,const std::function<void (const std::string &)> & onError)1707 void TextFieldModelNG::SetInputFilterError(FrameNode* frameNode, const std::function<void(const std::string&)>& onError)
1708 {
1709 CHECK_NULL_VOID(frameNode);
1710 auto eventHub = frameNode->GetEventHub<TextFieldEventHub>();
1711 CHECK_NULL_VOID(eventHub);
1712 eventHub->SetOnInputFilterError(onError);
1713 }
1714
GetWordBreak(FrameNode * frameNode)1715 Ace::WordBreak TextFieldModelNG::GetWordBreak(FrameNode* frameNode)
1716 {
1717 Ace::WordBreak value = Ace::WordBreak::BREAK_WORD;
1718 ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(TextFieldLayoutProperty, WordBreak, value, frameNode, value);
1719 return value;
1720 }
1721
GetEnableAutoFill(FrameNode * frameNode)1722 bool TextFieldModelNG::GetEnableAutoFill(FrameNode* frameNode)
1723 {
1724 bool value = true;
1725 ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(TextFieldLayoutProperty, EnableAutoFill, value, frameNode, value);
1726 return value;
1727 }
1728
GetContentType(FrameNode * frameNode)1729 TextContentType TextFieldModelNG::GetContentType(FrameNode* frameNode)
1730 {
1731 TextContentType value = TextContentType::UNSPECIFIED;
1732 ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(TextFieldLayoutProperty, TextContentType, value, frameNode, value);
1733 return value;
1734 }
1735
GetUnderLineColor(FrameNode * frameNode)1736 UserUnderlineColor TextFieldModelNG::GetUnderLineColor(FrameNode* frameNode)
1737 {
1738 CHECK_NULL_RETURN(frameNode, UserUnderlineColor());
1739 auto pattern = frameNode->GetPattern<TextFieldPattern>();
1740 return pattern->GetUserUnderlineColor();
1741 }
1742
GetPasswordRules(FrameNode * frameNode)1743 std::string TextFieldModelNG::GetPasswordRules(FrameNode* frameNode)
1744 {
1745 std::string value;
1746 ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(TextFieldLayoutProperty, PasswordRules, value, frameNode, value);
1747 return value;
1748 }
1749
GetSelectAllValue(FrameNode * frameNode)1750 bool TextFieldModelNG::GetSelectAllValue(FrameNode* frameNode)
1751 {
1752 bool value = false;
1753 ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(TextFieldLayoutProperty, SelectAllValue, value, frameNode, value);
1754 return value;
1755 }
1756
GetInputFilter(FrameNode * frameNode)1757 std::string TextFieldModelNG::GetInputFilter(FrameNode* frameNode)
1758 {
1759 std::string value;
1760 ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(TextFieldLayoutProperty, InputFilter, value, frameNode, value);
1761 return value;
1762 }
1763
GetOrCreateController(FrameNode * frameNode)1764 RefPtr<TextFieldControllerBase> TextFieldModelNG::GetOrCreateController(FrameNode* frameNode)
1765 {
1766 CHECK_NULL_RETURN(frameNode, nullptr);
1767 auto pattern = frameNode->GetPattern<TextFieldPattern>();
1768 CHECK_NULL_RETURN(pattern, nullptr);
1769 if (!pattern->GetTextFieldController()) {
1770 auto controller = AceType::MakeRefPtr<NG::TextFieldController>();
1771 pattern->SetTextFieldController(controller);
1772 controller->SetPattern(AceType::WeakClaim(AceType::RawPtr(pattern)));
1773 }
1774 return pattern->GetTextFieldController();
1775 }
1776
GetInputStyle(FrameNode * frameNode)1777 InputStyle TextFieldModelNG::GetInputStyle(FrameNode* frameNode)
1778 {
1779 InputStyle value = InputStyle::DEFAULT;
1780 ACE_GET_NODE_PAINT_PROPERTY_WITH_DEFAULT_VALUE(TextFieldPaintProperty, InputStyle, value, frameNode, value);
1781 return value;
1782 }
1783
GetFontFeature(FrameNode * frameNode)1784 FONT_FEATURES_LIST TextFieldModelNG::GetFontFeature(FrameNode* frameNode)
1785 {
1786 FONT_FEATURES_LIST value;
1787 ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(TextFieldLayoutProperty, FontFeature, value, frameNode, value);
1788 return value;
1789 }
1790
GetAdaptMinFontSize(FrameNode * frameNode)1791 Dimension TextFieldModelNG::GetAdaptMinFontSize(FrameNode* frameNode)
1792 {
1793 Dimension value;
1794 ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(TextFieldLayoutProperty, AdaptMinFontSize, value, frameNode, value);
1795 return value;
1796 }
1797
SetOnWillInsertValueEvent(std::function<bool (const InsertValueInfo &)> && func)1798 void TextFieldModelNG::SetOnWillInsertValueEvent(std::function<bool(const InsertValueInfo&)>&& func)
1799 {
1800 auto eventHub = ViewStackProcessor::GetInstance()->GetMainFrameNodeEventHub<TextFieldEventHub>();
1801 CHECK_NULL_VOID(eventHub);
1802 eventHub->SetOnWillInsertValueEvent(std::move(func));
1803 }
1804
SetOnDidInsertValueEvent(std::function<void (const InsertValueInfo &)> && func)1805 void TextFieldModelNG::SetOnDidInsertValueEvent(std::function<void(const InsertValueInfo&)>&& func)
1806 {
1807 auto eventHub = ViewStackProcessor::GetInstance()->GetMainFrameNodeEventHub<TextFieldEventHub>();
1808 CHECK_NULL_VOID(eventHub);
1809 eventHub->SetOnDidInsertValueEvent(std::move(func));
1810 }
1811
SetOnWillDeleteEvent(std::function<bool (const DeleteValueInfo &)> && func)1812 void TextFieldModelNG::SetOnWillDeleteEvent(std::function<bool(const DeleteValueInfo&)>&& func)
1813 {
1814 auto eventHub = ViewStackProcessor::GetInstance()->GetMainFrameNodeEventHub<TextFieldEventHub>();
1815 CHECK_NULL_VOID(eventHub);
1816 eventHub->SetOnWillDeleteEvent(std::move(func));
1817 }
1818
SetOnDidDeleteEvent(std::function<void (const DeleteValueInfo &)> && func)1819 void TextFieldModelNG::SetOnDidDeleteEvent(std::function<void(const DeleteValueInfo&)>&& func)
1820 {
1821 auto eventHub = ViewStackProcessor::GetInstance()->GetMainFrameNodeEventHub<TextFieldEventHub>();
1822 CHECK_NULL_VOID(eventHub);
1823 eventHub->SetOnDidDeleteEvent(std::move(func));
1824 }
1825
SetSelectionMenuOptions(const NG::OnCreateMenuCallback && onCreateMenuCallback,const NG::OnMenuItemClickCallback && onMenuItemClick)1826 void TextFieldModelNG::SetSelectionMenuOptions(
1827 const NG::OnCreateMenuCallback&& onCreateMenuCallback, const NG::OnMenuItemClickCallback&& onMenuItemClick)
1828 {
1829 auto textFieldPattern = ViewStackProcessor::GetInstance()->GetMainFrameNodePattern<TextFieldPattern>();
1830 CHECK_NULL_VOID(textFieldPattern);
1831 textFieldPattern->OnSelectionMenuOptionsUpdate(std::move(onCreateMenuCallback), std::move(onMenuItemClick));
1832 }
1833
SetEnablePreviewText(bool enablePreviewText)1834 void TextFieldModelNG::SetEnablePreviewText(bool enablePreviewText)
1835 {
1836 auto pattern = ViewStackProcessor::GetInstance()->GetMainFrameNodePattern<TextFieldPattern>();
1837 CHECK_NULL_VOID(pattern);
1838 pattern->SetSupportPreviewText(enablePreviewText);
1839 }
1840
SetEnableHapticFeedback(bool state)1841 void TextFieldModelNG::SetEnableHapticFeedback(bool state)
1842 {
1843 auto pattern = ViewStackProcessor::GetInstance()->GetMainFrameNodePattern<TextFieldPattern>();
1844 CHECK_NULL_VOID(pattern);
1845 pattern->SetEnableHapticFeedback(state);
1846 }
1847
GetAdaptMaxFontSize(FrameNode * frameNode)1848 Dimension TextFieldModelNG::GetAdaptMaxFontSize(FrameNode* frameNode)
1849 {
1850 Dimension value;
1851 ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(TextFieldLayoutProperty, AdaptMaxFontSize, value, frameNode, value);
1852 return value;
1853 }
1854
GetLineHeight(FrameNode * frameNode)1855 Dimension TextFieldModelNG::GetLineHeight(FrameNode* frameNode)
1856 {
1857 Dimension value;
1858 ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(TextFieldLayoutProperty, LineHeight, value, frameNode, value);
1859 return value;
1860 }
1861
GetMaxLines(FrameNode * frameNode)1862 uint32_t TextFieldModelNG::GetMaxLines(FrameNode* frameNode)
1863 {
1864 uint32_t value = 3;
1865 ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(TextFieldLayoutProperty, MaxLines, value, frameNode, value);
1866 return value;
1867 }
1868
SetPadding(FrameNode * frameNode,NG::PaddingProperty & newPadding)1869 void TextFieldModelNG::SetPadding(FrameNode* frameNode, NG::PaddingProperty& newPadding)
1870 {
1871 CHECK_NULL_VOID(frameNode);
1872 NG::ViewAbstract::SetPadding(frameNode, newPadding);
1873 ACE_UPDATE_NODE_PAINT_PROPERTY(TextFieldPaintProperty, PaddingByUser, newPadding, frameNode);
1874 }
1875
GetCustomKeyboard(FrameNode * frameNode)1876 RefPtr<UINode> TextFieldModelNG::GetCustomKeyboard(FrameNode* frameNode)
1877 {
1878 CHECK_NULL_RETURN(frameNode, nullptr);
1879 auto pattern = frameNode->GetPattern<TextFieldPattern>();
1880 CHECK_NULL_RETURN(pattern, nullptr);
1881 return pattern->GetCustomKeyboard();
1882 }
1883
GetCustomKeyboardOption(FrameNode * frameNode)1884 bool TextFieldModelNG::GetCustomKeyboardOption(FrameNode* frameNode)
1885 {
1886 CHECK_NULL_RETURN(frameNode, false);
1887 auto pattern = frameNode->GetPattern<TextFieldPattern>();
1888 CHECK_NULL_RETURN(pattern, false);
1889 return pattern->GetCustomKeyboardOption();
1890 }
1891
SetShowKeyBoardOnFocus(FrameNode * frameNode,bool value)1892 void TextFieldModelNG::SetShowKeyBoardOnFocus(FrameNode* frameNode, bool value)
1893 {
1894 CHECK_NULL_VOID(frameNode);
1895 auto pattern = frameNode->GetPattern<TextFieldPattern>();
1896 CHECK_NULL_VOID(pattern);
1897 pattern->SetShowKeyBoardOnFocus(value);
1898 }
1899
GetShowKeyBoardOnFocus(FrameNode * frameNode)1900 bool TextFieldModelNG::GetShowKeyBoardOnFocus(FrameNode* frameNode)
1901 {
1902 CHECK_NULL_RETURN(frameNode, true);
1903 auto pattern = frameNode->GetPattern<TextFieldPattern>();
1904 CHECK_NULL_RETURN(pattern, true);
1905 return pattern->GetShowKeyBoardOnFocus();
1906 }
1907
SetNumberOfLines(FrameNode * frameNode,int32_t value)1908 void TextFieldModelNG::SetNumberOfLines(FrameNode* frameNode, int32_t value)
1909 {
1910 CHECK_NULL_VOID(frameNode);
1911 ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, NumberOfLines, value, frameNode);
1912 }
1913
GetNumberOfLines(FrameNode * frameNode)1914 int32_t TextFieldModelNG::GetNumberOfLines(FrameNode* frameNode)
1915 {
1916 int32_t value = -1;
1917 ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(TextFieldLayoutProperty, NumberOfLines, value, frameNode, value);
1918 return value;
1919 }
1920
ResetNumberOfLines(FrameNode * frameNode)1921 void TextFieldModelNG::ResetNumberOfLines(FrameNode* frameNode)
1922 {
1923 CHECK_NULL_VOID(frameNode);
1924 auto textFieldLayoutProperty = frameNode->GetLayoutProperty<TextFieldLayoutProperty>();
1925 if (textFieldLayoutProperty) {
1926 textFieldLayoutProperty->ResetNumberOfLines();
1927 }
1928 }
1929
SetBorderWidth(FrameNode * frameNode,NG::BorderWidthProperty borderWidth)1930 void TextFieldModelNG::SetBorderWidth(FrameNode* frameNode, NG::BorderWidthProperty borderWidth)
1931 {
1932 CHECK_NULL_VOID(frameNode);
1933 NG::ViewAbstract::SetBorderWidth(frameNode, borderWidth);
1934 ACE_UPDATE_NODE_PAINT_PROPERTY(TextFieldPaintProperty, BorderWidthFlagByUser, borderWidth, frameNode);
1935 }
1936
SetBorderRadius(FrameNode * frameNode,NG::BorderRadiusProperty borderRadius)1937 void TextFieldModelNG::SetBorderRadius(FrameNode* frameNode, NG::BorderRadiusProperty borderRadius)
1938 {
1939 CHECK_NULL_VOID(frameNode);
1940 NG::ViewAbstract::SetBorderRadius(frameNode, borderRadius);
1941 ACE_UPDATE_NODE_PAINT_PROPERTY(TextFieldPaintProperty, BorderRadiusFlagByUser, borderRadius, frameNode);
1942 }
1943
SetBorderColor(FrameNode * frameNode,NG::BorderColorProperty borderColors)1944 void TextFieldModelNG::SetBorderColor(FrameNode* frameNode, NG::BorderColorProperty borderColors)
1945 {
1946 CHECK_NULL_VOID(frameNode);
1947 NG::ViewAbstract::SetBorderColor(frameNode, borderColors);
1948 ACE_UPDATE_NODE_PAINT_PROPERTY(TextFieldPaintProperty, BorderColorFlagByUser, borderColors, frameNode);
1949 }
1950
SetBorderStyle(FrameNode * frameNode,NG::BorderStyleProperty borderStyles)1951 void TextFieldModelNG::SetBorderStyle(FrameNode* frameNode, NG::BorderStyleProperty borderStyles)
1952 {
1953 CHECK_NULL_VOID(frameNode);
1954 NG::ViewAbstract::SetBorderStyle(frameNode, borderStyles);
1955 ACE_UPDATE_NODE_PAINT_PROPERTY(TextFieldPaintProperty, BorderStyleFlagByUser, borderStyles, frameNode);
1956 }
1957
SetMargin(FrameNode * frameNode,NG::PaddingProperty & margin)1958 void TextFieldModelNG::SetMargin(FrameNode* frameNode, NG::PaddingProperty& margin)
1959 {
1960 CHECK_NULL_VOID(frameNode);
1961 MarginProperty userMargin;
1962 userMargin.top = margin.top;
1963 userMargin.bottom = margin.bottom;
1964 userMargin.left = margin.left;
1965 userMargin.right = margin.right;
1966 ACE_UPDATE_NODE_PAINT_PROPERTY(TextFieldPaintProperty, MarginByUser, userMargin, frameNode);
1967 }
1968
GetMargin(FrameNode * frameNode)1969 PaddingProperty TextFieldModelNG::GetMargin(FrameNode* frameNode)
1970 {
1971 CalcLength defaultDimen = CalcLength(0, DimensionUnit::VP);
1972 NG::PaddingProperty margins;
1973 margins.top = std::optional<CalcLength>(defaultDimen);
1974 margins.right = std::optional<CalcLength>(defaultDimen);
1975 margins.bottom = std::optional<CalcLength>(defaultDimen);
1976 margins.left = std::optional<CalcLength>(defaultDimen);
1977 auto textfieldPaintProperty = frameNode->GetPaintProperty<TextFieldPaintProperty>();
1978 CHECK_NULL_RETURN(textfieldPaintProperty, margins);
1979 if (textfieldPaintProperty->HasMarginByUser()) {
1980 const auto& property = textfieldPaintProperty->GetMarginByUserValue();
1981 margins.top = std::optional<CalcLength>(property.top);
1982 margins.right = std::optional<CalcLength>(property.right);
1983 margins.bottom = std::optional<CalcLength>(property.bottom);
1984 margins.left = std::optional<CalcLength>(property.left);
1985 }
1986 return margins;
1987 }
1988
SetOnWillInsertValueEvent(FrameNode * frameNode,std::function<bool (const InsertValueInfo &)> && func)1989 void TextFieldModelNG::SetOnWillInsertValueEvent(FrameNode* frameNode,
1990 std::function<bool(const InsertValueInfo&)>&& func)
1991 {
1992 CHECK_NULL_VOID(frameNode);
1993 auto eventHub = frameNode->GetEventHub<TextFieldEventHub>();
1994 CHECK_NULL_VOID(eventHub);
1995 eventHub->SetOnWillInsertValueEvent(std::move(func));
1996 }
1997
SetOnDidInsertValueEvent(FrameNode * frameNode,std::function<void (const InsertValueInfo &)> && func)1998 void TextFieldModelNG::SetOnDidInsertValueEvent(FrameNode* frameNode,
1999 std::function<void(const InsertValueInfo&)>&& func)
2000 {
2001 CHECK_NULL_VOID(frameNode);
2002 auto eventHub = frameNode->GetEventHub<TextFieldEventHub>();
2003 CHECK_NULL_VOID(eventHub);
2004 eventHub->SetOnDidInsertValueEvent(std::move(func));
2005 }
2006
SetOnWillDeleteEvent(FrameNode * frameNode,std::function<bool (const DeleteValueInfo &)> && func)2007 void TextFieldModelNG::SetOnWillDeleteEvent(FrameNode* frameNode,
2008 std::function<bool(const DeleteValueInfo&)>&& func)
2009 {
2010 CHECK_NULL_VOID(frameNode);
2011 auto eventHub = frameNode->GetEventHub<TextFieldEventHub>();
2012 CHECK_NULL_VOID(eventHub);
2013 eventHub->SetOnWillDeleteEvent(std::move(func));
2014 }
2015
SetOnDidDeleteEvent(FrameNode * frameNode,std::function<void (const DeleteValueInfo &)> && func)2016 void TextFieldModelNG::SetOnDidDeleteEvent(FrameNode* frameNode,
2017 std::function<void(const DeleteValueInfo&)>&& func)
2018 {
2019 CHECK_NULL_VOID(frameNode);
2020 auto eventHub = frameNode->GetEventHub<TextFieldEventHub>();
2021 CHECK_NULL_VOID(eventHub);
2022 eventHub->SetOnDidDeleteEvent(std::move(func));
2023 }
2024
SetSelectionMenuOptions(FrameNode * frameNode,const NG::OnCreateMenuCallback && onCreateMenuCallback,const NG::OnMenuItemClickCallback && onMenuItemClick)2025 void TextFieldModelNG::SetSelectionMenuOptions(FrameNode* frameNode,
2026 const NG::OnCreateMenuCallback&& onCreateMenuCallback, const NG::OnMenuItemClickCallback&& onMenuItemClick)
2027 {
2028 CHECK_NULL_VOID(frameNode);
2029 auto textFieldPattern = ViewStackProcessor::GetInstance()->GetMainFrameNodePattern<TextFieldPattern>();
2030 CHECK_NULL_VOID(textFieldPattern);
2031 textFieldPattern->OnSelectionMenuOptionsUpdate(std::move(onCreateMenuCallback), std::move(onMenuItemClick));
2032 }
2033
SetEnablePreviewText(FrameNode * frameNode,bool enablePreviewText)2034 void TextFieldModelNG::SetEnablePreviewText(FrameNode* frameNode, bool enablePreviewText)
2035 {
2036 CHECK_NULL_VOID(frameNode);
2037 auto pattern = frameNode->GetPattern<TextFieldPattern>();
2038 CHECK_NULL_VOID(pattern);
2039 pattern->SetSupportPreviewText(enablePreviewText);
2040 }
2041
GetPadding(FrameNode * frameNode)2042 PaddingProperty TextFieldModelNG::GetPadding(FrameNode* frameNode)
2043 {
2044 NG::PaddingProperty paddings = NG::ViewAbstract::GetPadding(frameNode);
2045 auto textfieldPaintProperty = frameNode->GetPaintProperty<TextFieldPaintProperty>();
2046 CHECK_NULL_RETURN(textfieldPaintProperty, paddings);
2047 if (textfieldPaintProperty->HasPaddingByUser()) {
2048 const auto& property = textfieldPaintProperty->GetPaddingByUserValue();
2049 paddings.top = std::optional<CalcLength>(property.top);
2050 paddings.right = std::optional<CalcLength>(property.right);
2051 paddings.bottom = std::optional<CalcLength>(property.bottom);
2052 paddings.left = std::optional<CalcLength>(property.left);
2053 }
2054 return paddings;
2055 }
2056
SetEnableHapticFeedback(FrameNode * frameNode,bool state)2057 void TextFieldModelNG::SetEnableHapticFeedback(FrameNode* frameNode, bool state)
2058 {
2059 CHECK_NULL_VOID(frameNode);
2060 auto pattern = frameNode->GetPattern<TextFieldPattern>();
2061 CHECK_NULL_VOID(pattern);
2062 pattern->SetEnableHapticFeedback(state);
2063 }
2064
SetJSTextEditableController(FrameNode * frameNode,const RefPtr<Referenced> & controller)2065 void TextFieldModelNG::SetJSTextEditableController(FrameNode* frameNode, const RefPtr<Referenced>& controller)
2066 {
2067 CHECK_NULL_VOID(frameNode);
2068 auto pattern = frameNode->GetPattern<TextFieldPattern>();
2069 CHECK_NULL_VOID(pattern);
2070 pattern->SetJSTextEditableController(controller);
2071 }
2072
GetJSTextEditableController(FrameNode * frameNode)2073 RefPtr<Referenced> TextFieldModelNG::GetJSTextEditableController(FrameNode* frameNode)
2074 {
2075 CHECK_NULL_RETURN(frameNode, nullptr);
2076 auto pattern = frameNode->GetPattern<TextFieldPattern>();
2077 CHECK_NULL_RETURN(pattern, nullptr);
2078 return pattern->GetJSTextEditableController();
2079 }
2080 } // namespace OHOS::Ace::NG
2081