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_PATTERNS_TEXT_PICKER_TEXT_PICKER_MODEL_NG_H
17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERNS_TEXT_PICKER_TEXT_PICKER_MODEL_NG_H
18 
19 #include "base/geometry/dimension.h"
20 #include "core/components/common/layout/constants.h"
21 #include "core/components/picker/picker_base_component.h"
22 #include "core/components_ng/pattern/text_picker/textpicker_event_hub.h"
23 #include "core/components_ng/pattern/text_picker/textpicker_model.h"
24 #include "core/components_ng/pattern/text_picker/textpicker_properties.h"
25 namespace OHOS::Ace::NG {
26 class ACE_FORCE_EXPORT TextPickerModelNG : public TextPickerModel {
27 public:
28     void Create(RefPtr<PickerTheme> pickerTheme, uint32_t columnKind) override;
29     void SetSelected(uint32_t value) override;
30     void SetRange(const std::vector<NG::RangeContent>& value) override;
31     void SetValue(const std::string& value) override;
32     void SetDefaultPickerItemHeight(const Dimension& value) override;
33     void SetGradientHeight(const Dimension& value) override;
34     void SetCanLoop(const bool value) override;
35     void SetDefaultAttributes(const RefPtr<PickerTheme>& pickerTheme) override;
36     void SetDisappearTextStyle(const RefPtr<PickerTheme>& pickerTheme, const NG::PickerTextStyle& value) override;
37     void SetNormalTextStyle(const RefPtr<PickerTheme>& pickerTheme, const NG::PickerTextStyle& value) override;
38     void SetSelectedTextStyle(const RefPtr<PickerTheme>& pickerTheme, const NG::PickerTextStyle& value) override;
39     void HasUserDefinedDisappearFontFamily(bool isUserDefined) override;
40     void HasUserDefinedNormalFontFamily(bool isUserDefined) override;
41     void HasUserDefinedSelectedFontFamily(bool isUserDefined) override;
42     void MultiInit(const RefPtr<PickerTheme> pickerTheme) override;
43     void SetColumns(const std::vector<NG::TextCascadePickerOptions>& options) override;
44     void SetIsCascade(bool isCascade) override;
45     void SetOnCascadeChange(TextCascadeChangeEvent&& onChange) override;
46     void SetOnScrollStop(TextCascadeChangeEvent&& onScrollStop) override;
47     void SetValues(const std::vector<std::string>& values) override;
48     void SetSelecteds(const std::vector<uint32_t>& values) override;
49     void SetBackgroundColor(const Color& color) override;
50     bool IsSingle() override;
51     bool GetSingleRange(std::vector<NG::RangeContent>& rangeValue) override;
IsCascade()52     bool IsCascade() override
53     {
54         return isCascade_;
55     }
56 
SetMaxCount(uint32_t maxCount)57     void SetMaxCount(uint32_t maxCount) override
58     {
59         maxCount_ = maxCount;
60     }
61 
GetMaxCount()62     uint32_t GetMaxCount() override
63     {
64         return maxCount_;
65     }
66 
SetSingleRange(bool isSingleRange)67     void SetSingleRange(bool isSingleRange) override
68     {
69         isSingleRange_ = isSingleRange;
70     }
71 
GetSingleRange()72     bool GetSingleRange() override
73     {
74         return isSingleRange_;
75     }
76 
SetTextPickerSingeRange(bool isSingleRange)77     static void SetTextPickerSingeRange(bool isSingleRange)
78     {
79         isSingleRange_ = isSingleRange;
80     }
81 
GetTextPickerSingeRange()82     static bool GetTextPickerSingeRange()
83     {
84         return isSingleRange_;
85     }
86 
87     void SetHasSelectAttr(bool value) override;
88     bool GetMultiOptions(std::vector<NG::TextCascadePickerOptions>& options) override;
89     void SetOnValueChangeEvent(TextCascadeValueChangeEvent&& onChange) override;
90     void SetOnSelectedChangeEvent(TextCascadeSelectedChangeEvent&& onChange) override;
91     void SetDivider(const ItemDivider& divider) override;
92     void HasUserDefinedOpacity() override;
93 
94     static void SetCanLoop(FrameNode* frameNode, const bool value);
95     static void SetSelected(FrameNode* frameNode, uint32_t value);
96     static void SetSelecteds(FrameNode* frameNode, const std::vector<uint32_t>& values);
97     static void SetHasSelectAttr(FrameNode* frameNode, bool value);
98     static void SetNormalTextStyle(
99         FrameNode* frameNode, const RefPtr<PickerTheme>& pickerTheme, const NG::PickerTextStyle& value);
100     static void SetSelectedTextStyle(
101         FrameNode* frameNode, const RefPtr<PickerTheme>& pickerTheme, const NG::PickerTextStyle& value);
102     static void SetDisappearTextStyle(
103         FrameNode* frameNode, const RefPtr<PickerTheme>& pickerTheme, const NG::PickerTextStyle& value);
104     static void SetDefaultPickerItemHeight(FrameNode* frameNode, const Dimension& value);
105     static void SetBackgroundColor(FrameNode* frameNode, const Color& color);
106     static bool IsSingle(FrameNode* frameNode);
107     static bool GetSingleRange(FrameNode* frameNode, std::vector<NG::RangeContent>& rangeValue);
108     static bool IsCascade(FrameNode* frameNode);
109     static bool GetMultiOptions(FrameNode* frameNode, std::vector<NG::TextCascadePickerOptions>& options);
110     static uint32_t GetMaxCount(FrameNode* frameNode);
111     static RefPtr<FrameNode> CreateFrameNode(int32_t nodeId);
112     static void SetRange(FrameNode* frameNode, const std::vector<NG::RangeContent>& value);
113     static void SetValue(FrameNode* frameNode, const std::string& value);
114     static void SetValues(FrameNode* frameNode, const std::vector<std::string>& values);
115     static void SetColumns(FrameNode* frameNode, const std::vector<NG::TextCascadePickerOptions>& options);
116     static void SetDefaultAttributes(RefPtr<FrameNode>& frameNode, const RefPtr<PickerTheme>& pickerTheme);
117     static void SetDivider(FrameNode* frameNode, const ItemDivider& divider);
118     static PickerTextStyle getSelectedTextStyle(FrameNode* frameNode);
119     static PickerTextStyle getNormalTextStyle(FrameNode* frameNode);
120     static PickerTextStyle getDisappearTextStyle(FrameNode* frameNode);
121     static int32_t getTextPickerSelectedIndex(FrameNode* frameNode);
122     static std::string getTextPickerValue(FrameNode* frameNode);
123     static std::string getTextPickerRange(FrameNode* frameNode);
124     static void SetGradientHeight(FrameNode* frameNode, const Dimension& value);
125     static void SetOnCascadeChange(FrameNode* frameNode, TextCascadeChangeEvent&& onChange);
126     static void SetOnScrollStop(FrameNode* frameNode, TextCascadeChangeEvent&& onScrollStop);
127     static int32_t GetSelectedSize(FrameNode* frameNode);
128     static std::string getTextPickerValues(FrameNode* frameNode);
129     static std::vector<uint32_t> getTextPickerSelecteds(FrameNode* frameNode);
130     static int32_t GetCanLoop(FrameNode* frameNode);
131     static Dimension GetDefaultPickerItemHeight(FrameNode* frameNode);
132     static void SetTextPickerRangeType(FrameNode* frameNode, int32_t rangeType);
133     static int32_t GetTextPickerRangeType(FrameNode* frameNode);
134     static const Dimension ConvertFontScaleValue(const Dimension& fontSizeValue);
135 private:
136     static RefPtr<FrameNode> CreateStackNode();
137     static RefPtr<FrameNode> CreateColumnNode();
138     static RefPtr<FrameNode> CreateButtonNode();
139     static RefPtr<FrameNode> CreateColumnNode(uint32_t columnKind, uint32_t showCount);
140     void SetUnCascadeColumns(const std::vector<NG::TextCascadePickerOptions>& options);
141     void SetCascadeColumns(const std::vector<NG::TextCascadePickerOptions>& options);
142     static void SetUnCascadeColumnsNode(FrameNode* frameNode, const std::vector<NG::TextCascadePickerOptions>& options);
143     static void SetCascadeColumnsNode(FrameNode* frameNode, const std::vector<NG::TextCascadePickerOptions>& options);
144 
145     static inline uint32_t showCount_ = 0;
146     std::vector<uint32_t> kinds_;
147     static inline bool isCascade_ = false;
148     static inline std::vector<NG::RangeContent> rangeValue_;
149     static inline std::vector<NG::TextCascadePickerOptions> options_;
150     uint32_t maxCount_ = 0;
151     static inline bool isSingleRange_ = true;
152 };
153 
154 class ACE_EXPORT TextPickerDialogModelNG : public TextPickerDialogModel {
155 public:
156     RefPtr<AceType> CreateObject() override;
157     void SetTextPickerDialogShow(RefPtr<AceType>& PickerText, NG::TextPickerSettingData& settingData,
158         std::function<void()>&& onCancel, std::function<void(const std::string&)>&& onAccept,
159         std::function<void(const std::string&)>&& onChange, std::function<void(const std::string&)>&& onScrollStop,
160         TextPickerDialog& textPickerDialog, TextPickerDialogEvent& textPickerDialogEvent,
161         const std::vector<ButtonInfo>& buttonInfos) override;
162 };
163 } // namespace OHOS::Ace::NG
164 
165 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERNS_TEXT_PICKER_TEXT_PICKER_MODEL_NG_H
166