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