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