• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 #ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERNS_TOGGLE_TOGGLE_MODEL_NG_H
16 #define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERNS_TOGGLE_TOGGLE_MODEL_NG_H
17 
18 #include "core/components_ng/base/common_configuration.h"
19 #include "core/components_ng/base/frame_node.h"
20 #include "core/interfaces/arkoala/arkoala_api.h"
21 #include "core/components_ng/pattern/toggle/toggle_model.h"
22 
23 namespace OHOS::Ace::NG {
24 
25 class ToggleConfiguration : public CommonConfiguration {
26     public:
ToggleConfiguration(bool enabled,bool isOn)27         ToggleConfiguration(bool enabled, bool isOn)
28             : CommonConfiguration(enabled), isOn_(isOn)
29         {}
30         bool isOn_;
31 };
32 class ArkUI_Toggle_Params final : public ArkUI_Params {
33 public:
34     ToggleType toggleType;
35     bool isOn;
36 };
37 using SwitchMakeCallback = std::function<RefPtr<FrameNode>(const ToggleConfiguration& toggleConfiguration)>;
38 class ACE_EXPORT ToggleModelNG : public OHOS::Ace::ToggleModel {
39 public:
40     void Create(ToggleType toggleType, bool isOn) override;
41     void SetSelectedColor(const std::optional<Color>& selectedColor) override;
42     void SetSwitchPointColor(const std::optional<Color>& switchPointColor) override;
43     void OnChange(ChangeEvent&& onChange) override;
44     void SetWidth(const Dimension& width) override;
45     void SetHeight(const Dimension& height) override;
46     void SetBackgroundColor(const Color& color, bool flag) override;
47     bool IsToggle() override;
48     void SetPadding(const NG::PaddingPropertyF& args, const NG::PaddingProperty& newArgs) override;
49     void SetIsUserSetMargin(bool isUserSet) override;
50     void OnChangeEvent(ChangeEvent&& onChangeEvent) override;
51     void SetResponseRegion(const std::vector<DimensionRect>& responseRegion) override;
52     void SetHoverEffect(HoverEffectType hoverEffect) override;
53     void Pop() override;
54     void SetPointRadius(const Dimension& switchPointRadius) override;
55     void ResetPointRadius() override;
56     void SetUnselectedColor(const Color& unselectedColor) override;
57     void SetTrackBorderRadius(const Dimension& borderRadius) override;
58     void ResetTrackBorderRadius() override;
59     void CreateWithColorResourceObj(const RefPtr<ResourceObject>& resObj,
60         const ToggleColorType toggleColorType) override;
61     void CreateWithDimensionVpResourceObj(const RefPtr<ResourceObject>& resObj,
62         const ToggleDimensionType toggleDimensionType) override;
63     void SetSwitchPointColorSetByUser(const bool flag) override;
64     void SetUnselectedColorSetByUser(const bool flag) override;
65 
66     static void SetUnselectedColorSetByUser(FrameNode* frameNode, const bool flag);
67     static void SetSwitchPointColorSetByUser(FrameNode* frameNode, const bool flag);
68     static void SetPointRadius(FrameNode* frameNode, const Dimension& switchPointRadius);
69     static void ResetPointRadius(FrameNode* frameNode);
70     static void SetUnselectedColor(FrameNode* frameNode, const Color& unselectedColor);
71     static void SetTrackBorderRadius(FrameNode* frameNode, const Dimension& borderRadius);
72     static void ResetTrackBorderRadius(FrameNode* frameNode);
73     static RefPtr<FrameNode> CreateFrameNode(int32_t nodeId, ToggleType toggleType, bool isOn);
74     static void SetSelectedColor(FrameNode* frameNode, const std::optional<Color>& selectedColor);
75     static void SetSwitchPointColor(FrameNode* frameNode, const std::optional<Color>& switchPointColor);
76     static void SetBackgroundColor(FrameNode* frameNode, const Color& color);
77     static void OnChange(FrameNode* frameNode, ChangeEvent&& onChange);
78     static void SetHeight(FrameNode* frameNode, const Dimension& height);
79     static void SetResponseRegion(FrameNode* frameNode, const std::vector<DimensionRect>& responseRegion);
80     static void SetPadding(FrameNode* frameNode, const NG::PaddingPropertyF& args, const NG::PaddingProperty& newArgs);
81     static void SetIsUserSetMargin(FrameNode* frameNode, bool isUserSet);
82     static void SetHoverEffect(FrameNode* frameNode, HoverEffectType hoverEffect);
83     static void SetSwitchIsOn(FrameNode* frameNode, bool isOn);
84     static void SetBuilderFunc(FrameNode* frameNode, NG::SwitchMakeCallback&& jsMake);
85     static void SetChangeValue(FrameNode* frameNode, bool value);
86     static void SetToggleState(FrameNode* frameNode, bool isOn = false);
87 
88     static Color GetSelectedColor(FrameNode* frameNode);
89     static Color GetSwitchPointColor(FrameNode* frameNode);
90     static bool GetSwitchIsOn(FrameNode* frameNode);
91     static Color GetUnselectedColor(FrameNode* frameNode);
92 
93     static void SetSwitchDefaultColor(FrameNode* frameNode, const ToggleColorType type);
94     static void SetCheckboxDefaultColor(FrameNode* frameNode, const ToggleColorType type);
95     static void SetButtonDefaultColor(FrameNode* frameNode, const ToggleColorType type);
96     static void CreateWithSwitchResourceObj(FrameNode* node, const ToggleColorType toggleColorType,
97         const RefPtr<ResourceObject>& resObj, const std::string& key);
98     static void CreateWithCheckBoxResourceObj(FrameNode* node, const ToggleColorType toggleColorType,
99         const RefPtr<ResourceObject>& resObj, const std::string& key);
100     static void CreateWithButtonResourceObj(FrameNode* node, const ToggleColorType toggleColorType,
101         const RefPtr<ResourceObject>& resObj, const std::string& key);
102     static void CreateWithResourceObj(
103         FrameNode* node, const ToggleDimensionType toggleDimensionType, const RefPtr<ResourceObject>& resObj);
104     static void CreateWithResourceObj(
105         const FrameNode* node, const ToggleColorType toggleColorType, const RefPtr<ResourceObject>& resObj);
106 
107 private:
108     static void ReCreateFrameNode(
109         const RefPtr<FrameNode>& childFrameNode, int32_t nodeId, ToggleType toggleType, bool isOn);
110     static RefPtr<FrameNode> CreateCheckboxFrameNode(int32_t nodeId, bool isOn);
111     static RefPtr<FrameNode> CreateSwitchFrameNode(int32_t nodeId, bool isOn);
112     static RefPtr<FrameNode> CreateButtonFrameNode(int32_t nodeId, bool isOn);
113     static void AddNewChild(const RefPtr<UINode>& parentFrame, int32_t nodeId, int32_t index, ToggleType toggleType);
114     static int32_t RemoveNode(const RefPtr<FrameNode>& childFrameNode, int32_t nodeId);
115     static void UpdateSwitchIsOn(const RefPtr<FrameNode>& frameNode, bool isOn);
116     static void UpdateCheckboxIsOn(const RefPtr<FrameNode>& frameNode, bool isOn);
117     static void UpdateToggleButtonIsOn(const RefPtr<FrameNode>& frameNode, bool isOn);
118     static void ReplaceAllChild(const RefPtr<FrameNode>& oldFrameNode);
119     static std::string ColorTypeToString(const ToggleColorType toggleColorType);
120     static std::string DimensionTypeToString(const ToggleDimensionType toggleDimensionType);
121 };
122 
123 } // namespace OHOS::Ace::NG
124 
125 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERNS_TOGGLE_TOGGLE_MODEL_NG_H
126