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