1 /* 2 * Copyright (c) 2022 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_PATTERNS_SEARCH_SEARCH_NODE_H 17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERNS_SEARCH_SEARCH_NODE_H 18 19 #include <optional> 20 21 #include "core/components_ng/base/group_node.h" 22 #include "core/pipeline/base/element_register.h" 23 24 namespace OHOS::Ace::NG { 25 class IconOptions { 26 public: IconOptions(CalcDimension size)27 IconOptions(CalcDimension size) : size_(size) 28 {} 29 IconOptions(Color color,CalcDimension size)30 IconOptions(Color color, CalcDimension size) : color_(color), size_(size) 31 {} 32 33 IconOptions(std::string src, std::string bundleName = "", std::string moduleName = "") src_(src)34 : src_(src), bundleName_(bundleName), moduleName_(moduleName) 35 {} 36 IconOptions(CalcDimension size,std::string src,std::string bundleName,std::string moduleName)37 IconOptions(CalcDimension size, std::string src, std::string bundleName, std::string moduleName) 38 : size_(size), src_(src), bundleName_(bundleName), moduleName_(moduleName) 39 {} 40 IconOptions(Color color,CalcDimension size,std::string src,std::string bundleName,std::string moduleName)41 IconOptions(Color color, CalcDimension size, std::string src, std::string bundleName, std::string moduleName) 42 : color_(color), size_(size), src_(src), bundleName_(bundleName), moduleName_(moduleName) 43 {} 44 45 IconOptions() = default; 46 ~IconOptions() = default; 47 GetColor()48 std::optional<Color>& GetColor() 49 { 50 return color_; 51 } 52 GetSize()53 std::optional<Dimension>& GetSize() 54 { 55 return size_; 56 } 57 GetSrc()58 std::optional<std::string>& GetSrc() 59 { 60 return src_; 61 } 62 GetBundleName()63 std::optional<std::string>& GetBundleName() 64 { 65 return bundleName_; 66 } 67 GetModuleName()68 std::optional<std::string>& GetModuleName() 69 { 70 return moduleName_; 71 } 72 UpdateSrc(std::string src,std::string bundleName,std::string moduleName)73 void UpdateSrc(std::string src, std::string bundleName, std::string moduleName) 74 { 75 src_ = src; 76 moduleName_ = moduleName; 77 bundleName_ = bundleName; 78 } 79 UpdateSize(Dimension size)80 void UpdateSize(Dimension size) 81 { 82 size_ = size; 83 } 84 UpdateColor(Color color)85 void UpdateColor(Color color) 86 { 87 color_ = color; 88 } 89 90 bool operator==(const IconOptions& info) const 91 { 92 return color_ == info.color_ && size_ == info.size_ && src_ == info.src_ && bundleName_ == info.bundleName_ && 93 moduleName_ == info.moduleName_; 94 } 95 96 bool operator!=(const IconOptions& info) const 97 { 98 return !(operator==(info)); 99 } 100 ToString()101 std::string ToString() const 102 { 103 auto json = JsonUtil::Create(true); 104 if (src_.has_value()) { 105 json->Put("src", src_.value().c_str()); 106 } 107 if (bundleName_.has_value()) { 108 json->Put("bundleName", bundleName_.value().c_str()); 109 } 110 if (moduleName_.has_value()) { 111 json->Put("moduleName", moduleName_.value().c_str()); 112 } 113 if (size_.has_value()) { 114 json->Put("size", size_.value().ToString().c_str()); 115 } 116 if (color_.has_value()) { 117 json->Put("color", color_.value().ToString().c_str()); 118 } 119 return json->ToString(); 120 } 121 122 private: 123 std::optional<Color> color_; 124 std::optional<Dimension> size_; 125 std::optional<std::string> src_; 126 std::optional<std::string> bundleName_; 127 std::optional<std::string> moduleName_; 128 }; 129 130 class ACE_EXPORT SearchNode : public GroupNode { 131 DECLARE_ACE_TYPE(SearchNode, GroupNode); 132 133 public: 134 SearchNode(const std::string& tag, int32_t nodeId, const RefPtr<Pattern>& pattern, bool isRoot = false) GroupNode(tag,nodeId,pattern,isRoot)135 : GroupNode(tag, nodeId, pattern, isRoot) 136 {} 137 ~SearchNode() override = default; 138 139 void AddChildToGroup(const RefPtr<UINode>& child, int32_t slot = DEFAULT_NODE_SLOT) override; HasTextFieldNode()140 bool HasTextFieldNode() const 141 { 142 return textFieldId_.has_value(); 143 } 144 HasSearchIconNodeCreated()145 bool HasSearchIconNodeCreated() const 146 { 147 return searchIconNodeCreated_; 148 } 149 HasButtonNode()150 bool HasButtonNode() const 151 { 152 return buttonId_.has_value(); 153 } 154 HasDividerNode()155 bool HasDividerNode() const 156 { 157 return dividerId_.has_value(); 158 } 159 HasCancelIconNodeCreated()160 bool HasCancelIconNodeCreated() const 161 { 162 return cancelIconNodeCreated_; 163 } 164 HasCancelButtonNode()165 bool HasCancelButtonNode() const 166 { 167 return cancelButtonId_.has_value(); 168 } 169 GetTextFieldId()170 int32_t GetTextFieldId() 171 { 172 if (!textFieldId_.has_value()) { 173 textFieldId_ = ElementRegister::GetInstance()->MakeUniqueId(); 174 } 175 return textFieldId_.value(); 176 } 177 GetButtonId()178 int32_t GetButtonId() 179 { 180 if (!buttonId_.has_value()) { 181 buttonId_ = ElementRegister::GetInstance()->MakeUniqueId(); 182 } 183 return buttonId_.value(); 184 } 185 GetCancelButtonId()186 int32_t GetCancelButtonId() 187 { 188 if (!cancelButtonId_.has_value()) { 189 cancelButtonId_ = ElementRegister::GetInstance()->MakeUniqueId(); 190 } 191 return cancelButtonId_.value(); 192 } 193 GetDividerId()194 int32_t GetDividerId() 195 { 196 if (!dividerId_.has_value()) { 197 dividerId_ = ElementRegister::GetInstance()->MakeUniqueId(); 198 } 199 return dividerId_.value(); 200 } 201 GetSearchImageIconSize()202 Dimension& GetSearchImageIconSize() 203 { 204 return searchImageIconOptions_.GetSize().value(); 205 } 206 GetCancelImageIconSize()207 Dimension& GetCancelImageIconSize() 208 { 209 return cancelImageIconOptions_.GetSize().value(); 210 } 211 GetSearchSymbolIconSize()212 const Dimension& GetSearchSymbolIconSize() const 213 { 214 return searchSymbolIconSize_; 215 } 216 GetCancelSymbolIconSize()217 const Dimension& GetCancelSymbolIconSize() const 218 { 219 return cancelSymbolIconSize_; 220 } 221 GetSearchSymbolIconColor()222 const Color& GetSearchSymbolIconColor() const 223 { 224 return searchSymbolIconColor_; 225 } 226 GetCancelSymbolIconColor()227 const Color& GetCancelSymbolIconColor() const 228 { 229 return cancelSymbolIconColor_; 230 } 231 GetSearchImageIconColor()232 Color& GetSearchImageIconColor() 233 { 234 return searchImageIconOptions_.GetColor().value(); 235 } 236 GetCancelImageIconColor()237 Color& GetCancelImageIconColor() 238 { 239 return cancelImageIconOptions_.GetColor().value(); 240 } 241 GetSearchImageIconOptions()242 IconOptions& GetSearchImageIconOptions() 243 { 244 return searchImageIconOptions_; 245 } 246 GetCancelImageIconOptions()247 IconOptions& GetCancelImageIconOptions() 248 { 249 return cancelImageIconOptions_; 250 } 251 SetSearchImageIconSize(Dimension searchIconSize)252 void SetSearchImageIconSize(Dimension searchIconSize) 253 { 254 searchImageIconOptions_.UpdateSize(searchIconSize); 255 } 256 SetCancelImageIconSize(Dimension cancelIconSize)257 void SetCancelImageIconSize(Dimension cancelIconSize) 258 { 259 cancelImageIconOptions_.UpdateSize(cancelIconSize); 260 } 261 SetSearchSymbolIconSize(Dimension searchIconSize)262 void SetSearchSymbolIconSize(Dimension searchIconSize) 263 { 264 searchSymbolIconSize_ = searchIconSize; 265 } 266 SetCancelSymbolIconSize(Dimension cancelIconSize)267 void SetCancelSymbolIconSize(Dimension cancelIconSize) 268 { 269 cancelSymbolIconSize_ = cancelIconSize; 270 } 271 SetSearchSymbolIconColor(Color searchIconColor)272 void SetSearchSymbolIconColor(Color searchIconColor) 273 { 274 searchSymbolIconColor_ = searchIconColor; 275 } 276 SetCancelSymbolIconColor(Color cancelIconColor)277 void SetCancelSymbolIconColor(Color cancelIconColor) 278 { 279 cancelSymbolIconColor_ = cancelIconColor; 280 } 281 SetSearchImageIconColor(Color searchIconColor)282 void SetSearchImageIconColor(Color searchIconColor) 283 { 284 searchImageIconOptions_.UpdateColor(searchIconColor); 285 } 286 SetCancelImageIconColor(Color cancelIconColor)287 void SetCancelImageIconColor(Color cancelIconColor) 288 { 289 cancelImageIconOptions_.UpdateColor(cancelIconColor); 290 } 291 SetSearchImageIconOptions(IconOptions options)292 void SetSearchImageIconOptions(IconOptions options) 293 { 294 searchImageIconOptions_ = options; 295 } 296 SetCancelImageIconOptions(IconOptions options)297 void SetCancelImageIconOptions(IconOptions options) 298 { 299 cancelImageIconOptions_ = options; 300 } 301 UpdateHasSearchIconNodeCreated(bool hasNodeCreated)302 void UpdateHasSearchIconNodeCreated(bool hasNodeCreated) 303 { 304 searchIconNodeCreated_ = hasNodeCreated; 305 } 306 UpdateHasCancelIconNodeCreated(bool hasNodeCreated)307 void UpdateHasCancelIconNodeCreated(bool hasNodeCreated) 308 { 309 cancelIconNodeCreated_ = hasNodeCreated; 310 } 311 312 private: 313 std::optional<int32_t> textFieldId_; 314 std::optional<int32_t> buttonId_; 315 std::optional<int32_t> cancelButtonId_; 316 std::optional<int32_t> dividerId_; 317 318 std::set<int32_t> searchChildren_; 319 320 Dimension searchSymbolIconSize_ = 16.0_fp; 321 Color searchSymbolIconColor_; 322 Dimension cancelSymbolIconSize_ = 16.0_fp; 323 Color cancelSymbolIconColor_; 324 bool searchIconNodeCreated_ = false; 325 bool cancelIconNodeCreated_ = false; 326 327 IconOptions searchImageIconOptions_ = IconOptions(16.0_vp); 328 IconOptions cancelImageIconOptions_ = IconOptions(16.0_vp); 329 }; 330 331 } // namespace OHOS::Ace::NG 332 333 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERNS_SEARCH_SEARCH_NODE_H