1 /* 2 * Copyright (c) 2022-2024 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERN_TEXT_FIELD_TEXT_FIELD_LAYOUT_PROPERTY_H 17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERN_TEXT_FIELD_TEXT_FIELD_LAYOUT_PROPERTY_H 18 19 #include "core/common/ime/text_input_type.h" 20 #include "core/components/common/properties/text_style.h" 21 #include "core/components/text_field/textfield_theme.h" 22 #include "core/components_ng/base/inspector_filter.h" 23 #include "core/components_ng/layout/layout_property.h" 24 #include "core/components_ng/pattern/text/text_styles.h" 25 #include "core/components_ng/pattern/text_field/text_content_type.h" 26 #include "core/components_ng/pattern/text_field/text_field_model.h" 27 #include "core/components_ng/property/property.h" 28 #include "core/image/image_source_info.h" 29 30 namespace OHOS::Ace::NG { 31 class ACE_EXPORT TextFieldLayoutProperty : public LayoutProperty { 32 DECLARE_ACE_TYPE(TextFieldLayoutProperty, LayoutProperty); 33 34 public: 35 TextFieldLayoutProperty() = default; 36 37 ~TextFieldLayoutProperty() override = default; 38 Clone()39 RefPtr<LayoutProperty> Clone() const override 40 { 41 auto value = MakeRefPtr<TextFieldLayoutProperty>(); 42 Clone(value); 43 return value; 44 } 45 Reset()46 void Reset() override 47 { 48 LayoutProperty::Reset(); 49 ResetFontStyle(); 50 ResetTextLineStyle(); 51 ResetValue(); 52 ResetPlaceholderFontStyle(); 53 ResetPlaceholderTextLineStyle(); 54 ResetShowPasswordText(); 55 ResetPlaceholder(); 56 ResetTextInputType(); 57 ResetInputFilter(); 58 ResetShowPasswordIcon(); 59 ResetCopyOptions(); 60 ResetLastValue(); 61 ResetNeedFireOnChange(); 62 ResetWidthAuto(); 63 ResetErrorText(); 64 ResetShowErrorText(); 65 ResetShowCounter(); 66 ResetShowUnderline(); 67 ResetShowPasswordSourceInfo(); 68 ResetHidePasswordSourceInfo(); 69 ResetTextAlignChanged(); 70 ResetDisplayMode(); 71 ResetMaxViewLines(); 72 ResetNormalMaxViewLines(); 73 ResetSelectionMenuHidden(); 74 ResetPasswordRules(); 75 ResetEnableAutoFill(); 76 ResetCleanNodeStyle(); 77 ResetIconSize(); 78 ResetIconSrc(); 79 ResetBundleName(); 80 ResetModuleName(); 81 ResetIconColor(); 82 ResetSelectAllValue(); 83 ResetShowHighlightBorder(); 84 ResetSetCounter(); 85 ResetNumberOfLines(); 86 } 87 ToJsonValue(std::unique_ptr<JsonValue> & json,const InspectorFilter & filter)88 void ToJsonValue(std::unique_ptr<JsonValue>& json, const InspectorFilter& filter) const override 89 { 90 LayoutProperty::ToJsonValue(json, filter); 91 /* no fixed attr below, just return */ 92 if (filter.IsFastFilter()) { 93 return; 94 } 95 json->PutExtAttr("showPasswordIcon", propShowPasswordIcon_.value_or(true), filter); 96 json->PutExtAttr("showPassword", propShowPasswordText_.value_or(false), filter); 97 json->PutExtAttr("errorText", propErrorText_.value_or("").c_str(), filter); 98 json->PutExtAttr("showErrorText", propShowErrorText_.value_or(false), filter); 99 json->PutExtAttr("showCounter", propShowCounter_.value_or(false), filter); 100 json->PutExtAttr("highlightBorder", propShowHighlightBorder_.value_or(true), filter); 101 json->PutExtAttr("showUnderline", propShowUnderline_.value_or(false), filter); 102 json->PutExtAttr("passwordRules", propPasswordRules_.value_or("").c_str(), filter); 103 json->PutExtAttr("enableAutoFill", propEnableAutoFill_.value_or(true), filter); 104 auto jsonCancelButton = JsonUtil::Create(true); 105 jsonCancelButton->Put("style", static_cast<int32_t>(propCleanNodeStyle_.value_or(CleanNodeStyle::INPUT))); 106 auto jsonIconOptions = JsonUtil::Create(true); 107 jsonIconOptions->Put("size", propIconSize_.value_or(Dimension()).ToString().c_str()); 108 jsonIconOptions->Put("src", propIconSrc_.value_or("").c_str()); 109 jsonIconOptions->Put("color", propIconColor_.value_or(Color()).ColorToString().c_str()); 110 jsonCancelButton->Put("icon", jsonIconOptions->ToString().c_str()); 111 json->PutExtAttr("cancelButton", jsonCancelButton->ToString().c_str(), filter); 112 json->PutExtAttr("selectAll", propSelectAllValue_.value_or(false), filter); 113 json->PutExtAttr("letterSpacing", GetLetterSpacing().value_or(Dimension()).ToString().c_str(), filter); 114 json->PutExtAttr("lineHeight", GetLineHeight().value_or(0.0_vp).ToString().c_str(), filter); 115 json->PutExtAttr("lineSpacing", GetLineSpacing().value_or(0.0_vp).ToString().c_str(), filter); 116 auto jsonDecoration = JsonUtil::Create(true); 117 std::string type = V2::ConvertWrapTextDecorationToStirng( 118 GetTextDecoration().value_or(TextDecoration::NONE)); 119 jsonDecoration->Put("type", type.c_str()); 120 jsonDecoration->Put("color", GetTextDecorationColor().value_or(Color::BLACK).ColorToString().c_str()); 121 std::string style = V2::ConvertWrapTextDecorationStyleToString( 122 GetTextDecorationStyle().value_or(TextDecorationStyle::SOLID)); 123 jsonDecoration->Put("style", style.c_str()); 124 json->PutExtAttr("decoration", jsonDecoration->ToString().c_str(), filter); 125 json->PutExtAttr("minFontSize", GetAdaptMinFontSize().value_or(Dimension()).ToString().c_str(), filter); 126 json->PutExtAttr("maxFontSize", GetAdaptMaxFontSize().value_or(Dimension()).ToString().c_str(), filter); 127 json->PutExtAttr("heightAdaptivePolicy", V2::ConvertWrapTextHeightAdaptivePolicyToString( 128 GetHeightAdaptivePolicy().value_or(TextHeightAdaptivePolicy::MAX_LINES_FIRST)).c_str(), filter); 129 json->Put("wordBreak", 130 V2::ConvertWrapWordBreakToString(GetWordBreak().value_or(WordBreak::BREAK_WORD)).c_str()); 131 json->Put("textOverflow", 132 V2::ConvertWrapTextOverflowToString(GetTextOverflow().value_or(TextOverflow::CLIP)).c_str()); 133 json->PutExtAttr("textIndent", GetTextIndent().value_or(0.0_vp).ToString().c_str(), filter); 134 } 135 136 ACE_DEFINE_PROPERTY_GROUP(FontStyle, FontStyle); 137 ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(FontStyle, FontSize, Dimension, PROPERTY_UPDATE_MEASURE); 138 ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(FontStyle, TextColor, Color, PROPERTY_UPDATE_MEASURE_SELF); 139 ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(FontStyle, ItalicFontStyle, Ace::FontStyle, PROPERTY_UPDATE_MEASURE); 140 ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(FontStyle, FontWeight, FontWeight, PROPERTY_UPDATE_MEASURE); 141 ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(FontStyle, FontFamily, std::vector<std::string>, PROPERTY_UPDATE_MEASURE); 142 ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(FontStyle, FontFeature, FONT_FEATURES_LIST, PROPERTY_UPDATE_MEASURE); 143 ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(FontStyle, LetterSpacing, Dimension, PROPERTY_UPDATE_MEASURE); 144 ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(FontStyle, AdaptMinFontSize, Dimension, PROPERTY_UPDATE_MEASURE); 145 ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(FontStyle, AdaptMaxFontSize, Dimension, PROPERTY_UPDATE_MEASURE); 146 ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(FontStyle, TextDecoration, TextDecoration, PROPERTY_UPDATE_MEASURE); 147 ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(FontStyle, TextDecorationColor, Color, PROPERTY_UPDATE_MEASURE); 148 ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(FontStyle, TextDecorationStyle, TextDecorationStyle, PROPERTY_UPDATE_MEASURE); 149 150 ACE_DEFINE_PROPERTY_GROUP(TextLineStyle, TextLineStyle); 151 ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(TextLineStyle, TextAlign, TextAlign, PROPERTY_UPDATE_MEASURE_SELF); 152 ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(TextLineStyle, LineBreakStrategy, LineBreakStrategy, PROPERTY_UPDATE_MEASURE); 153 ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(TextLineStyle, MaxLength, uint32_t, PROPERTY_UPDATE_MEASURE); 154 ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(TextLineStyle, MaxLines, uint32_t, PROPERTY_UPDATE_MEASURE); 155 ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP( 156 TextLineStyle, HeightAdaptivePolicy, TextHeightAdaptivePolicy, PROPERTY_UPDATE_MEASURE); 157 ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(TextLineStyle, LineHeight, Dimension, PROPERTY_UPDATE_MEASURE); 158 ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(TextLineStyle, LineSpacing, Dimension, PROPERTY_UPDATE_MEASURE); 159 ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(TextLineStyle, WordBreak, WordBreak, PROPERTY_UPDATE_MEASURE); 160 ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(TextLineStyle, TextOverflow, TextOverflow, PROPERTY_UPDATE_MEASURE); 161 ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(TextLineStyle, TextIndent, Dimension, PROPERTY_UPDATE_MEASURE); 162 ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(TextLineStyle, NumberOfLines, int32_t, PROPERTY_UPDATE_MEASURE); 163 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(Value, std::string, PROPERTY_UPDATE_NORMAL); 164 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(PreviewText, PreviewText, PROPERTY_UPDATE_NORMAL); 165 166 ACE_DEFINE_PROPERTY_GROUP(PlaceholderFontStyle, FontStyle); 167 ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP_ITEM( 168 PlaceholderFontStyle, FontSize, PlaceholderFontSize, Dimension, PROPERTY_UPDATE_MEASURE); 169 ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP_ITEM( 170 PlaceholderFontStyle, TextColor, PlaceholderTextColor, Color, PROPERTY_UPDATE_MEASURE_SELF); 171 ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP_ITEM( 172 PlaceholderFontStyle, ItalicFontStyle, PlaceholderItalicFontStyle, Ace::FontStyle, PROPERTY_UPDATE_MEASURE); 173 ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP_ITEM( 174 PlaceholderFontStyle, FontWeight, PlaceholderFontWeight, FontWeight, PROPERTY_UPDATE_MEASURE); 175 ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP_ITEM( 176 PlaceholderFontStyle, FontFamily, PlaceholderFontFamily, std::vector<std::string>, PROPERTY_UPDATE_MEASURE); 177 178 ACE_DEFINE_PROPERTY_GROUP(PlaceholderTextLineStyle, TextLineStyle); 179 ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP_ITEM( 180 PlaceholderTextLineStyle, LineHeight, PlaceholderLineHeight, Dimension, PROPERTY_UPDATE_MEASURE); 181 ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP_ITEM( 182 PlaceholderTextLineStyle, TextAlign, PlaceholderTextAlign, TextAlign, PROPERTY_UPDATE_MEASURE); 183 ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP_ITEM( 184 PlaceholderTextLineStyle, MaxLength, PlaceholderMaxLength, uint32_t, PROPERTY_UPDATE_MEASURE); 185 ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP_ITEM( 186 PlaceholderTextLineStyle, MaxLines, PlaceholderMaxLines, uint32_t, PROPERTY_UPDATE_MEASURE); 187 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(Placeholder, std::string, PROPERTY_UPDATE_MEASURE); 188 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(ErrorText, std::string, PROPERTY_UPDATE_MEASURE); 189 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(ShowErrorText, bool, PROPERTY_UPDATE_MEASURE); 190 191 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(TextContentType, TextContentType, PROPERTY_UPDATE_MEASURE); 192 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(TextInputType, TextInputType, PROPERTY_UPDATE_MEASURE); 193 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(InputFilter, std::string, PROPERTY_UPDATE_MEASURE); 194 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(ShowPasswordText, bool, PROPERTY_UPDATE_MEASURE_SELF); 195 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(ShowPasswordIcon, bool, PROPERTY_UPDATE_MEASURE_SELF); 196 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(ShowCounter, bool, PROPERTY_UPDATE_MEASURE); 197 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(ShowUnderline, bool, PROPERTY_UPDATE_MEASURE); 198 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(DisplayMode, DisplayMode, PROPERTY_UPDATE_MEASURE); 199 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(MaxViewLines, uint32_t, PROPERTY_UPDATE_MEASURE); 200 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(NormalMaxViewLines, uint32_t, PROPERTY_UPDATE_MEASURE); 201 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(IsDisabled, bool, PROPERTY_UPDATE_MEASURE); 202 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(TextOverflowMaxLines, uint32_t, PROPERTY_UPDATE_MEASURE); 203 204 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(TextContentTypeChanged, bool, PROPERTY_UPDATE_MEASURE); 205 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(WidthAuto, bool, PROPERTY_UPDATE_MEASURE); 206 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(TypeChanged, bool, PROPERTY_UPDATE_MEASURE); 207 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(TextAlignChanged, bool, PROPERTY_UPDATE_MEASURE); 208 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(CopyOptions, CopyOptions, PROPERTY_UPDATE_MEASURE); 209 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(PreferredNewLineHeightNeedToUpdate, bool, PROPERTY_UPDATE_MEASURE); 210 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(PreferredTextLineHeightNeedToUpdate, bool, PROPERTY_UPDATE_MEASURE); 211 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(PreferredPlaceholderLineHeightNeedToUpdate, bool, PROPERTY_UPDATE_MEASURE); 212 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(LastValue, std::string, PROPERTY_UPDATE_MEASURE); 213 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(NeedFireOnChange, bool, PROPERTY_UPDATE_NORMAL); 214 215 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(ShowPasswordSourceInfo, ImageSourceInfo, PROPERTY_UPDATE_MEASURE); 216 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(HidePasswordSourceInfo, ImageSourceInfo, PROPERTY_UPDATE_MEASURE); 217 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(SelectionMenuHidden, bool, PROPERTY_UPDATE_MEASURE); 218 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(PasswordRules, std::string, PROPERTY_UPDATE_MEASURE); 219 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(EnableAutoFill, bool, PROPERTY_UPDATE_MEASURE); 220 221 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(SelectAllValue, bool, PROPERTY_UPDATE_NORMAL); 222 223 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(CleanNodeStyle, CleanNodeStyle, PROPERTY_UPDATE_MEASURE); 224 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(IconSize, CalcDimension, PROPERTY_UPDATE_MEASURE); 225 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(IconSrc, std::string, PROPERTY_UPDATE_MEASURE); 226 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(BundleName, std::string, PROPERTY_UPDATE_MEASURE); 227 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(ModuleName, std::string, PROPERTY_UPDATE_MEASURE); 228 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(IconColor, Color, PROPERTY_UPDATE_MEASURE); 229 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(IsShowCancelButton, bool, PROPERTY_UPDATE_MEASURE); 230 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(SetCounter, int32_t, PROPERTY_UPDATE_MEASURE); 231 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(ShowHighlightBorder, bool, PROPERTY_UPDATE_MEASURE); 232 233 protected: Clone(RefPtr<LayoutProperty> property)234 void Clone(RefPtr<LayoutProperty> property) const override 235 { 236 auto value = DynamicCast<TextFieldLayoutProperty>(property); 237 value->LayoutProperty::UpdateLayoutProperty(DynamicCast<LayoutProperty>(this)); 238 value->propFontStyle_ = CloneFontStyle(); 239 value->propTextLineStyle_ = CloneTextLineStyle(); 240 value->propValue_ = CloneValue(); 241 value->propPlaceholderFontStyle_ = ClonePlaceholderFontStyle(); 242 value->propPlaceholderTextLineStyle_ = ClonePlaceholderTextLineStyle(); 243 value->propPlaceholder_ = ClonePlaceholder(); 244 value->propTextInputType_ = CloneTextInputType(); 245 value->propInputFilter_ = CloneInputFilter(); 246 value->propShowPasswordIcon_ = CloneShowPasswordIcon(); 247 value->propCopyOptions_ = CloneCopyOptions(); 248 value->propLastValue_ = CloneLastValue(); 249 value->propNeedFireOnChange_ = CloneNeedFireOnChange(); 250 value->propWidthAuto_ = CloneWidthAuto(); 251 value->propErrorText_ = CloneErrorText(); 252 value->propShowErrorText_ = CloneShowErrorText(); 253 value->propShowCounter_ = CloneShowCounter(); 254 value->propShowUnderline_ = CloneShowUnderline(); 255 value->propShowPasswordSourceInfo_ = CloneShowPasswordSourceInfo(); 256 value->propHidePasswordSourceInfo_ = CloneHidePasswordSourceInfo(); 257 value->propTextAlignChanged_ = CloneTextAlignChanged(); 258 value->propDisplayMode_ = CloneDisplayMode(); 259 value->propMaxViewLines_ = CloneMaxViewLines(); 260 value->propIsDisabled_ = CloneIsDisabled(); 261 value->propSelectionMenuHidden_ = CloneSelectionMenuHidden(); 262 value->propPasswordRules_ = ClonePasswordRules(); 263 value->propEnableAutoFill_ = CloneEnableAutoFill(); 264 value->propShowPasswordText_ = CloneShowPasswordText(); 265 value->propCleanNodeStyle_ = CloneCleanNodeStyle(); 266 value->propIconSize_ = CloneIconSize(); 267 value->propIconSrc_ = CloneIconSrc(); 268 value->propIconColor_ = CloneIconColor(); 269 value->propSelectAllValue_ = CloneSelectAllValue(); 270 value->propSetCounter_ = CloneSetCounter(); 271 value->propShowHighlightBorder_ = CloneShowHighlightBorder(); 272 value->propBundleName_ = CloneBundleName(); 273 value->propModuleName_ = CloneModuleName(); 274 } 275 276 ACE_DISALLOW_COPY_AND_MOVE(TextFieldLayoutProperty); 277 }; 278 } // namespace OHOS::Ace::NG 279 280 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERN_TEXT_FIELD_TEXT_FIELD_LAYOUT_PROPERTY_H 281