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