1 /*
2  * Copyright (c) 2022-2023 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_MODEL_NG_H
17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERNS_SEARCH_SEARCH_MODEL_NG_H
18 
19 #include "base/memory/referenced.h"
20 #include "core/components_ng/base/frame_node.h"
21 #include "core/components_ng/pattern/search/search_model.h"
22 #include "core/components_ng/pattern/search/search_node.h"
23 
24 namespace OHOS::Ace::NG {
25 
26 class ACE_EXPORT SearchModelNG : public OHOS::Ace::SearchModel {
27 public:
28     RefPtr<TextFieldControllerBase> Create(const std::optional<std::string>& value,
29         const std::optional<std::string>& placeholder, const std::optional<std::string>& icon) override;
30     void RequestKeyboardOnFocus(bool needToRequest) override;
31     void SetSearchButton(const std::string& text) override;
32     void SetCaretWidth(const Dimension& value) override;
33     void SetCaretColor(const Color& color) override;
34     void SetSearchIconSize(const Dimension& value) override;
35     void SetSearchIconColor(const Color& color) override;
36     void SetSearchSrcPath(
37         const std::string& src, const std::string& bundleName, const std::string& moduleName) override;
38     void SetSearchSymbolIcon(std::function<void(WeakPtr<NG::FrameNode>)> iconSymbol) override;
39     void SetSearchDefaultIcon() override;
40     void SetSearchImageIcon(NG::IconOptions& iconOptions) override;
41     void SetCancelSymbolIcon(std::function<void(WeakPtr<NG::FrameNode>)> iconSymbol) override;
42     void SetCancelDefaultIcon() override;
43     void SetCancelImageIcon(NG::IconOptions& iconOptions) override;
44     void SetRightIconSrcPath(const std::string& src) override;
45     void SetCancelButtonStyle(CancelButtonStyle cancelButtonStyle) override;
46     void SetCancelIconSize(const Dimension& value) override;
47     void SetCancelIconColor(const Color& color) override;
48     void SetSearchButtonFontSize(const Dimension& value) override;
49     void SetSearchButtonFontColor(const Color& color) override;
50     void SetPlaceholderColor(const Color& color) override;
51     void SetPlaceholderFont(const Font& font) override;
52     void SetTextFont(const Font& font) override;
53     void SetTextColor(const Color& color) override;
54     void SetTextAlign(const TextAlign& textAlign) override;
55     void SetCopyOption(const CopyOptions& copyOptions) override;
56     void SetHeight(const Dimension& height) override;
SetOnSubmit(std::function<void (const std::string &)> && onSubmit)57     void SetOnSubmit(std::function<void(const std::string&)>&& onSubmit) override {};
58     void SetOnSubmit(std::function<void(const std::string&, NG::TextFieldCommonEvent&)>&& onSubmit) override;
59     void SetOnChange(std::function<void(const std::string&, PreviewText&)>&& onChange) override;
60     void SetOnTextSelectionChange(std::function<void(int32_t, int32_t)>&& func) override;
61     void SetOnScroll(std::function<void(float, float)>&& func) override;
62     void SetOnCopy(std::function<void(const std::string&)>&& func) override;
63     void SetOnCut(std::function<void(const std::string&)>&& func) override;
64     void SetOnWillInsertValueEvent(std::function<bool(const InsertValueInfo&)>&& func) override;
65     void SetOnDidInsertValueEvent(std::function<void(const InsertValueInfo&)>&& func) override;
66     void SetOnWillDeleteEvent(std::function<bool(const DeleteValueInfo&)>&& func) override;
67     void SetOnDidDeleteEvent(std::function<void(const DeleteValueInfo&)>&& func) override;
68     void SetOnPaste(std::function<void(const std::string&)>&& func) override;
69     void SetOnPasteWithEvent(std::function<void(const std::string&, NG::TextCommonEvent&)>&& func) override;
70     void SetOnChangeEvent(std::function<void(const std::string&)>&& onChangeEvent) override;
71     void SetSelectionMenuHidden(bool selectionMenuHidden) override;
72     void SetCustomKeyboard(const std::function<void ()> &&buildFunc, bool supportAvoidance = false) override;
73     void SetSearchEnterKeyType(TextInputAction value) override;
74     void SetInputFilter(const std::string& value, const std::function<void(const std::string&)>& onError) override;
75     void SetOnEditChanged(std::function<void(bool)>&& func) override;
76     void SetTextIndent(const Dimension& value) override;
77     void SetMaxLength(uint32_t value) override;
78     void ResetMaxLength() override;
79     void SetFontFeature(const FONT_FEATURES_LIST& value) override;
80     void SetType(TextInputType value) override;
81     void SetLetterSpacing(const Dimension& value) override;
82     void SetLineHeight(const Dimension& value) override;
83     void SetAdaptMinFontSize(const Dimension& value) override;
84     void SetAdaptMaxFontSize(const Dimension& value) override;
85     void SetTextDecoration(Ace::TextDecoration value) override;
86     void SetTextDecorationColor(const Color& value) override;
87     void SetTextDecorationStyle(Ace::TextDecorationStyle value) override;
88     void SetDragPreviewOptions(const NG::DragPreviewOption option) override;
89     void SetSelectedBackgroundColor(const Color& value) override;
90     void SetEnablePreviewText(bool enablePreviewText) override;
91     void SetSelectionMenuOptions(const NG::OnCreateMenuCallback&& onCreateMenuCallback,
92         const NG::OnMenuItemClickCallback&& onMenuItemClick) override;
93     void SetEnableHapticFeedback(bool state) override;
94     static RefPtr<SearchNode> CreateFrameNode(int32_t nodeId);
95     static void SetTextValue(FrameNode* frameNode, const std::optional<std::string>& value);
96     static void SetPlaceholder(FrameNode* frameNode, const std::optional<std::string>& placeholder);
97     static void SetIcon(FrameNode* frameNode, const std::optional<std::string>& icon);
98     static void SetCaretPosition(FrameNode* frameNode, const int32_t& value);
99     static void SetAdaptMinFontSize(FrameNode* frameNode, const Dimension& value);
100     static void SetInputFilter(
101         FrameNode* frameNode, const std::string& value, const std::function<void(const std::string&)>& onError);
102     static void SetAdaptMaxFontSize(FrameNode* frameNode, const Dimension& value);
103     static void SetTextIndent(FrameNode* frameNode, const Dimension& value);
104     static void RequestKeyboardOnFocus(FrameNode* frameNode, bool needToRequest);
105     void UpdateInspectorId(const std::string& key) override;
106     static void SetPlaceholderFont(FrameNode* frameNode, const Font& font);
107     static void SetSearchIconSize(FrameNode* frameNode, const Dimension& value);
108     static void SetSearchSrcPath(FrameNode* frameNode, const std::string& src);
109     static void SetSearchIconColor(FrameNode* frameNode, const Color& color);
110     static void SetSearchImageIcon(FrameNode* frameNode, IconOptions& iconOptions);
111     static void SetSearchButton(FrameNode* frameNode, const std::string& text);
112     static void SetSearchButtonFontSize(FrameNode* frameNode, const Dimension& value);
113     static void SetSearchButtonFontColor(FrameNode* frameNode, const Color& color);
114     static void SetTextColor(FrameNode* frameNode, const Color& color);
115     static void SetCopyOption(FrameNode* frameNode, const CopyOptions& copyOptions);
116     static void SetTextFont(FrameNode* frameNode, const Font& font);
117     static void SetPlaceholderColor(FrameNode* frameNode, const Color& color);
118     static void SetSelectionMenuHidden(FrameNode* frameNode, bool selectionMenuHidden);
119     static void SetCaretWidth(FrameNode* frameNode, const Dimension& value);
120     static void SetCaretColor(FrameNode* frameNode, const Color& color);
121     static void SetTextAlign(FrameNode* frameNode, const TextAlign& textAlign);
122     static void SetRightIconSrcPath(FrameNode* frameNode, const std::string& src);
123     static void SetCancelIconColor(FrameNode* frameNode, const Color& color);
124     static void SetCancelIconSize(FrameNode* frameNode, const Dimension& value);
125     static void SetCancelButtonStyle(FrameNode* frameNode, CancelButtonStyle style);
126     static void SetCancelImageIcon(FrameNode* frameNode, IconOptions& iconOptions);
127     static void SetHeight(FrameNode* frameNode, const Dimension& height);
128     static void SetFontFeature(FrameNode* frameNode, const FONT_FEATURES_LIST& value);
129     static void SetSearchEnterKeyType(FrameNode* frameNode, TextInputAction value);
130     static void SetTextDecoration(FrameNode* frameNode, Ace::TextDecoration value);
131     static void SetTextDecorationColor(FrameNode* frameNode, const Color& value);
132     static void SetTextDecorationStyle(FrameNode* frameNode, Ace::TextDecorationStyle value);
133     static void SetLetterSpacing(FrameNode* frameNode, const Dimension& value);
134     static void SetLineHeight(FrameNode* frameNode, const Dimension& value);
135     static void SetSelectedBackgroundColor(FrameNode* frameNode, const Color& value);
136     static void SetOnSubmit(FrameNode* frameNode,
137         std::function<void(const std::string&, NG::TextFieldCommonEvent&)>&& onSubmit);
138     static void SetOnChange(FrameNode* frameNode, std::function<void(const std::string&, PreviewText&)>&& onChange);
139     static void SetOnCopy(FrameNode* frameNode, std::function<void(const std::string&)>&& func);
140     static void SetOnCut(FrameNode* frameNode, std::function<void(const std::string&)>&& func);
141     static void SetOnPasteWithEvent(FrameNode* frameNode,
142                                     std::function<void(const std::string&, NG::TextCommonEvent&)>&& func);
143     static void SetMaxLength(FrameNode* frameNode, uint32_t value);
144     static void ResetMaxLength(FrameNode* frameNode);
145     static void SetType(FrameNode* frameNode, TextInputType value);
146     static void SetOnEditChange(FrameNode* frameNode, std::function<void(bool)>&& func);
147     static void SetOnTextSelectionChange(FrameNode* frameNode, std::function<void(int32_t, int32_t)>&& func);
148     static void SetOnContentScroll(FrameNode* frameNode, std::function<void(float, float)>&& func);
149     static void SetShowCounter(FrameNode* frameNode, bool value);
150     static void SetCounterType(FrameNode* frameNode, int32_t value);
151     static void SetShowCounterBorder(FrameNode* frameNode, bool value);
152     static RefPtr<TextFieldControllerBase> GetSearchController(FrameNode* frameNode);
153     static void SetOnWillInsertValueEvent(FrameNode* frameNode, std::function<bool(const InsertValueInfo&)>&& func);
154     static void SetOnDidInsertValueEvent(FrameNode* frameNode, std::function<void(const InsertValueInfo&)>&& func);
155     static void SetOnWillDeleteEvent(FrameNode* frameNode, std::function<bool(const DeleteValueInfo&)>&& func);
156     static void SetOnDidDeleteEvent(FrameNode* frameNode, std::function<void(const DeleteValueInfo&)>&& func);
157     static void SetEnablePreviewText(FrameNode* frameNode, bool enablePreviewText);
158     static void OnCreateMenuCallbackUpdate(FrameNode* frameNode, const NG::OnCreateMenuCallback&& onCreateMenuCallback);
159     static void OnMenuItemClickCallbackUpdate(
160         FrameNode* frameNode, const NG::OnMenuItemClickCallback&& onMenuItemClick);
161     static void SetId(FrameNode* frameNode, const std::string& key);
162     static void SetEnableHapticFeedback(FrameNode* frameNode, bool state);
163 
164 private:
165     static void CreateTextField(const RefPtr<SearchNode>& parentNode,
166         const std::optional<std::string>& placeholder, const std::optional<std::string>& value, bool hasTextFieldNode);
167     static RefPtr<SearchNode> CreateSearchNode(int32_t nodeId, const std::optional<std::string>& value,
168         const std::optional<std::string>& placeholder, const std::optional<std::string>& icon);
169     static void CreateButton(const RefPtr<SearchNode>& parentNode, bool hasButtonNode);
170     static void CreateCancelButton(const RefPtr<SearchNode>& parentNode, bool hasCancelButtonNode);
171     static RefPtr<SearchNode> GetOrCreateSearchNode(
172         const std::string& tag, int32_t nodeId, const std::function<RefPtr<Pattern>(void)>& patternCreator);
173     RefPtr<FrameNode> GetSearchTextFieldFrameNode() const;
174     static void TextFieldUpdateContext(const RefPtr<FrameNode>& frameNode);
175     static void CreateDivider(const RefPtr<SearchNode>& parentNode, bool hasDividerNode);
176 };
177 
178 } // namespace OHOS::Ace::NG
179 
180 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERNS_SEARCH_SEARCH_MODEL_NG_H
181