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_SLIDER_SLIDER_MODEL_NG_H
17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERNS_SLIDER_SLIDER_MODEL_NG_H
18 
19 #include "core/components_ng/base/common_configuration.h"
20 #include "core/components_ng/base/frame_node.h"
21 #include "core/components_ng/pattern/slider/slider_event_hub.h"
22 #include "core/components_ng/pattern/slider/slider_model.h"
23 
24 namespace OHOS::Ace::NG {
25 class SliderConfiguration : public CommonConfiguration {
26 public:
SliderConfiguration(double value,double min,double max,double step,bool enabled)27     SliderConfiguration(double value, double min, double max, double step, bool enabled)
28         : CommonConfiguration(enabled), value_(value), min_(min), max_(max), step_(step)
29     {}
30     double value_;
31     double min_;
32     double max_;
33     double step_;
34 };
35 using SliderMakeCallback =
36     std::function<RefPtr<FrameNode>(const SliderConfiguration& sliderConfiguration)>;
37 class ACE_EXPORT SliderModelNG : public SliderModel {
38 public:
39     void Create(float value, float step, float min, float max) override;
40     void SetSliderMode(const SliderMode& value) override;
41     void SetDirection(Axis value) override;
42     void SetReverse(bool value) override;
43     void SetBlockColor(const Color& value) override;
SetTrackBackgroundColor(const Color & value)44     void SetTrackBackgroundColor(const Color& value) override {};
45     void SetTrackBackgroundColor(const Gradient& value, bool isResourceColor = false) override;
46     void SetSelectColor(const Color& value) override;
47     void SetMinLabel(float value) override;
48     void SetMaxLabel(float value) override;
49     void SetShowSteps(bool value) override;
50     void SetShowTips(bool value, const std::optional<std::string>& content) override;
51     void SetThickness(const Dimension& value) override;
52     void SetBlockBorderColor(const Color& value) override;
53     void SetBlockBorderWidth(const Dimension& value) override;
54     void SetStepColor(const Color& value) override;
55     void SetTrackBorderRadius(const Dimension& value) override;
56     void SetSelectedBorderRadius(const Dimension& value) override;
57     void SetBlockSize(const Dimension& width, const Dimension& height) override;
58     void SetBlockType(BlockStyleType value) override;
59     void SetBlockImage(const std::string& value, const std::string& bundleName, const std::string& moduleName) override;
60     void SetBlockShape(const RefPtr<BasicShape>& value) override;
61     void SetStepSize(const Dimension& value) override;
62     void SetSliderInteractionMode(SliderInteraction mode) override;
63     void SetMinResponsiveDistance(float value) override;
64     void SetValidSlideRange(float fromValue, float toValue) override;
65 
66     void SetOnChange(SliderOnChangeEvent&& eventOnChange) override;
67     void SetOnChangeEvent(SliderOnValueChangeEvent&& onChangeEvent) override;
68 
69     void ResetBlockBorderColor() override;
70     void ResetBlockBorderWidth() override;
71     void ResetStepColor() override;
72     void ResetTrackBorderRadius() override;
73     void ResetSelectedBorderRadius() override;
74     void ResetBlockSize() override;
75     void ResetBlockType() override;
76     void ResetBlockImage() override;
77     void ResetBlockShape() override;
78     void ResetStepSize() override;
79     void ResetSliderInteractionMode() override;
80     void ResetMinResponsiveDistance() override;
81     void ResetValidSlideRange() override;
82 
83     static void SetShowTips(FrameNode* frameNode, bool value, const std::optional<std::string>& content);
84     static void SetThickness(FrameNode* frameNode, const Dimension& value);
85     static void SetStepSize(FrameNode* frameNode, const Dimension& value);
86     static void SetBlockType(FrameNode* frameNode, BlockStyleType value);
87     static void SetBlockShape(FrameNode* frameNode, const RefPtr<BasicShape>& value);
88     static void SetBlockSize(FrameNode* frameNode, const Dimension& width, const Dimension& height);
89     static void SetTrackBorderRadius(FrameNode* frameNode, const Dimension& value);
90     static void SetStepColor(FrameNode* frameNode, const Color& value);
91     static void SetBlockBorderColor(FrameNode* frameNode, const Color& value);
92     static void SetBlockBorderWidth(FrameNode* frameNode, const Dimension& value);
93     static void SetBlockColor(FrameNode* frameNode, const Color& value);
94     static void SetTrackBackgroundColor(FrameNode* frameNode, const Gradient& value, bool isResourceColor = false);
95     static void SetSelectColor(FrameNode* frameNode, const Color& value);
96     static void SetShowSteps(FrameNode* frameNode, bool value);
97     static void SetSliderInteractionMode(FrameNode* frameNode, SliderInteraction mode);
98     static void SetMinResponsiveDistance(FrameNode* frameNode, float value);
99     static void SetValidSlideRange(FrameNode* frameNode, float fromValue, float toValue);
100     static void SetBlockImage(
101         FrameNode* frameNode, const std::string& value, const std::string& bundleName, const std::string& moduleName);
102     static void SetSelectedBorderRadius(FrameNode* frameNode, const Dimension& value);
103 
104     static void ResetBlockBorderColor(FrameNode* frameNode);
105     static void ResetBlockBorderWidth(FrameNode* frameNode);
106     static void ResetStepColor(FrameNode* frameNode);
107     static void ResetTrackBorderRadius(FrameNode* frameNode);
108     static void ResetBlockSize(FrameNode* frameNode);
109     static void ResetBlockType(FrameNode* frameNode);
110     static void ResetBlockImage(FrameNode* frameNode);
111     static void ResetBlockShape(FrameNode* frameNode);
112     static void ResetStepSize(FrameNode* frameNode);
113     static void ResetBlockColor(FrameNode* frameNode);
114     static void ResetValidSlideRange(FrameNode* frameNode);
115     static void ResetSelectedBorderRadius(FrameNode* frameNode);
116     static void ResetSliderInteractionMode(FrameNode* frameNode);
117     static void ResetMinResponsiveDistance(FrameNode* frameNode);
118 
119     static RefPtr<FrameNode> CreateFrameNode(int32_t nodeId);
120     static void SetOnChange(FrameNode* frameNode, SliderOnChangeEvent&& eventOnChange);
121     static void SetSliderValue(FrameNode* frameNode, float value);
122     static void SetMinLabel(FrameNode* frameNode, float value);
123     static void SetMaxLabel(FrameNode* frameNode, float value);
124     static void SetDirection(FrameNode* frameNode, Axis value);
125     static void SetStep(FrameNode* frameNode, float value);
126     static void SetReverse(FrameNode* frameNode, bool value);
127     static void SetSliderMode(FrameNode* frameNode, const SliderMode& value);
128 
129     static Color GetBlockColor(FrameNode* frameNode);
130     static Gradient GetTrackBackgroundColor(FrameNode* frameNode);
131     static Color GetSelectColor(FrameNode* frameNode);
132     static bool GetShowSteps(FrameNode* frameNode);
133     static BlockStyleType GetBlockType(FrameNode* frameNode);
134     static float GetSliderValue(FrameNode* frameNode);
135     static float GetMinLabel(FrameNode* frameNode);
136     static float GetMaxLabel(FrameNode* frameNode);
137     static OHOS::Ace::Axis GetDirection(FrameNode* frameNode);
138     static float GetStep(FrameNode* frameNode);
139     static bool GetReverse(FrameNode* frameNode);
140     static SliderModel::SliderMode GetSliderMode(FrameNode* frameNode);
141     static std::string GetBlockImageValue(FrameNode* frameNode);
142     static RefPtr<BasicShape> GetBlockShape(FrameNode* frameNode);
143     static Gradient CreateSolidGradient(Color value);
144     static void SetBuilderFunc(FrameNode* frameNode, SliderMakeCallback&& jsMake);
145     static void SetChangeValue(FrameNode* frameNode, double value, int32_t mode);
146     static Dimension GetThickness(FrameNode* frameNode);
147     static RefPtr<SliderModel::SliderValidRange> GetValidSlideRange(FrameNode* frameNode);
148 
149 private:
150     void SetSliderValue(float value);
151 };
152 
153 } // namespace OHOS::Ace::NG
154 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERNS_SLIDER_SLIDER_MODEL_NG_H
155