• 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 OnChangeEvent(ChangeEvent&& onChangeEvent) override;
50     void SetResponseRegion(const std::vector<DimensionRect>& responseRegion) override;
51     void SetHoverEffect(HoverEffectType hoverEffect) override;
52     void Pop() override;
53     void SetPointRadius(const Dimension& switchPointRadius) override;
54     void ResetPointRadius() override;
55     void SetUnselectedColor(const Color& unselectedColor) override;
56     void SetTrackBorderRadius(const Dimension& borderRadius) override;
57     void ResetTrackBorderRadius() override;
58     static void SetPointRadius(FrameNode* frameNode, const Dimension& switchPointRadius);
59     static void ResetPointRadius(FrameNode* frameNode);
60     static void SetUnselectedColor(FrameNode* frameNode, const Color& unselectedColor);
61     static void SetTrackBorderRadius(FrameNode* frameNode, const Dimension& borderRadius);
62     static void ResetTrackBorderRadius(FrameNode* frameNode);
63     static RefPtr<FrameNode> CreateFrameNode(int32_t nodeId, ToggleType toggleType, bool isOn);
64     static void SetSelectedColor(FrameNode* frameNode, const std::optional<Color>& selectedColor);
65     static void SetSwitchPointColor(FrameNode* frameNode, const std::optional<Color>& switchPointColor);
66     static void SetBackgroundColor(FrameNode* frameNode, const Color& color);
67     static void OnChange(FrameNode* frameNode, ChangeEvent&& onChange);
68     static void SetHeight(FrameNode* frameNode, const Dimension& height);
69     static void SetResponseRegion(FrameNode* frameNode, const std::vector<DimensionRect>& responseRegion);
70     static void SetPadding(FrameNode* frameNode, const NG::PaddingPropertyF& args, const NG::PaddingProperty& newArgs);
71     static void SetHoverEffect(FrameNode* frameNode, HoverEffectType hoverEffect);
72     static void SetSwitchIsOn(FrameNode* frameNode, bool isOn);
73     static void SetBuilderFunc(FrameNode* frameNode, NG::SwitchMakeCallback&& jsMake);
74     static void SetChangeValue(FrameNode* frameNode, bool value);
75     static void SetToggleState(FrameNode* frameNode, bool isOn = false);
76 
77     static Color GetSelectedColor(FrameNode* frameNode);
78     static Color GetSwitchPointColor(FrameNode* frameNode);
79     static bool GetSwitchIsOn(FrameNode* frameNode);
80     static Color GetUnselectedColor(FrameNode* frameNode);
81 
82 private:
83     static void ReCreateFrameNode(
84         const RefPtr<FrameNode>& childFrameNode, int32_t nodeId, ToggleType toggleType, bool isOn);
85     static RefPtr<FrameNode> CreateCheckboxFrameNode(int32_t nodeId, bool isOn);
86     static RefPtr<FrameNode> CreateSwitchFrameNode(int32_t nodeId, bool isOn);
87     static RefPtr<FrameNode> CreateButtonFrameNode(int32_t nodeId, bool isOn);
88     static void AddNewChild(const RefPtr<UINode>& parentFrame, int32_t nodeId, int32_t index, ToggleType toggleType);
89     static int32_t RemoveNode(const RefPtr<FrameNode>& childFrameNode, int32_t nodeId);
90     static void UpdateSwitchIsOn(const RefPtr<FrameNode>& frameNode, bool isOn);
91     static void UpdateCheckboxIsOn(const RefPtr<FrameNode>& frameNode, bool isOn);
92     static void UpdateToggleButtonIsOn(const RefPtr<FrameNode>& frameNode, bool isOn);
93     static void ReplaceAllChild(const RefPtr<FrameNode>& oldFrameNode);
94 };
95 
96 } // namespace OHOS::Ace::NG
97 
98 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERNS_TOGGLE_TOGGLE_MODEL_NG_H
99