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