1 /*
2 * Copyright (c) 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 #include "core/components_ng/pattern/linear_indicator/linear_indicator_model_ng.h"
17
18 #include "core/components_ng/pattern/linear_indicator/linear_indicator_pattern.h"
19 #include "core/pipeline_ng/pipeline_context.h"
20
21 namespace OHOS::Ace::NG {
Create(std::size_t progressCount)22 RefPtr<NG::LinearIndicatorController> LinearIndicatorModelNG::Create(std::size_t progressCount)
23 {
24 auto* stack = ViewStackProcessor::GetInstance();
25 auto nodeId = stack->ClaimNodeId();
26 auto frameNode = FrameNode::GetOrCreateFrameNode(
27 V2::LINEARINDICATOR_ETS_TAG, nodeId, []() { return AceType::MakeRefPtr<LinearIndicatorPattern>(); });
28 auto pattern = frameNode->GetPattern<LinearIndicatorPattern>();
29 SetProgressCount(frameNode, progressCount);
30 stack->Push(frameNode);
31 return pattern->GetController();
32 }
33
SetProgressCount(OHOS::Ace::RefPtr<OHOS::Ace::NG::FrameNode> frameNode,std::size_t progressCount)34 void LinearIndicatorModelNG::SetProgressCount(
35 OHOS::Ace::RefPtr<OHOS::Ace::NG::FrameNode> frameNode, std::size_t progressCount)
36 {
37 ACE_UPDATE_NODE_LAYOUT_PROPERTY(LinearIndicatorLayoutProperty, ProgressCount, progressCount, frameNode);
38 }
39
SetSpace(const Dimension & value)40 void LinearIndicatorModelNG::SetSpace(const Dimension& value)
41 {
42 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
43 CHECK_NULL_VOID(frameNode);
44 ACE_UPDATE_NODE_LAYOUT_PROPERTY(LinearIndicatorLayoutProperty, Space, value, frameNode);
45 }
46
SetStrokeWidth(const Dimension & value)47 void LinearIndicatorModelNG::SetStrokeWidth(const Dimension& value)
48 {
49 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
50 CHECK_NULL_VOID(frameNode);
51 ACE_UPDATE_NODE_LAYOUT_PROPERTY(LinearIndicatorLayoutProperty, StrokeWidth, value, frameNode);
52 }
53
SetStrokeRadius(const Dimension & value)54 void LinearIndicatorModelNG::SetStrokeRadius(const Dimension& value)
55 {
56 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
57 CHECK_NULL_VOID(frameNode);
58 ACE_UPDATE_NODE_LAYOUT_PROPERTY(LinearIndicatorLayoutProperty, StrokeRadius, value, frameNode);
59 }
60
SetTrackBackgroundColor(const Color & value)61 void LinearIndicatorModelNG::SetTrackBackgroundColor(const Color& value)
62 {
63 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
64 CHECK_NULL_VOID(frameNode);
65 ACE_UPDATE_NODE_LAYOUT_PROPERTY(LinearIndicatorLayoutProperty, TrackBackgroundColor, value, frameNode);
66 }
67
SetTrackColor(const Color & value)68 void LinearIndicatorModelNG::SetTrackColor(const Color& value)
69 {
70 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
71 CHECK_NULL_VOID(frameNode);
72 ACE_UPDATE_NODE_LAYOUT_PROPERTY(LinearIndicatorLayoutProperty, TrackColor, value, frameNode);
73 }
74
Loop(bool value)75 void LinearIndicatorModelNG::Loop(bool value)
76 {
77 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
78 CHECK_NULL_VOID(frameNode);
79 ACE_UPDATE_NODE_LAYOUT_PROPERTY(LinearIndicatorLayoutProperty, Loop, value, frameNode);
80 }
81
OnChange(std::function<void (int index,float progress)> && event)82 void LinearIndicatorModelNG::OnChange(std::function<void(int index, float progress)>&& event)
83 {
84 auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
85 CHECK_NULL_VOID(frameNode);
86 auto pattern = frameNode->GetPattern<LinearIndicatorPattern>();
87 CHECK_NULL_VOID(pattern);
88 pattern->GetController()->OnChange(std::move(event));
89 }
90
SetIndicatorStyleSpace(FrameNode * frameNode,const Dimension & space)91 void LinearIndicatorModelNG::SetIndicatorStyleSpace(FrameNode* frameNode, const Dimension& space)
92 {
93 ACE_UPDATE_NODE_LAYOUT_PROPERTY(LinearIndicatorLayoutProperty, Space, space, frameNode);
94 }
95
SetIndicatorStyleStrokeWidth(FrameNode * frameNode,const Dimension & strokeWidth)96 void LinearIndicatorModelNG::SetIndicatorStyleStrokeWidth(FrameNode* frameNode, const Dimension& strokeWidth)
97 {
98 ACE_UPDATE_NODE_LAYOUT_PROPERTY(LinearIndicatorLayoutProperty, StrokeWidth, strokeWidth, frameNode);
99 }
100
SetIndicatorStyleStrokeRadius(FrameNode * frameNode,const Dimension & strokeRadius)101 void LinearIndicatorModelNG::SetIndicatorStyleStrokeRadius(FrameNode* frameNode, const Dimension& strokeRadius)
102 {
103 ACE_UPDATE_NODE_LAYOUT_PROPERTY(LinearIndicatorLayoutProperty, StrokeRadius, strokeRadius, frameNode);
104 }
105
SetIndicatorStyleTrackBackgroundColor(FrameNode * frameNode,const Color & trackBackgroundColor)106 void LinearIndicatorModelNG::SetIndicatorStyleTrackBackgroundColor(
107 FrameNode* frameNode, const Color& trackBackgroundColor)
108 {
109 ACE_UPDATE_NODE_LAYOUT_PROPERTY(
110 LinearIndicatorLayoutProperty, TrackBackgroundColor, trackBackgroundColor, frameNode);
111 }
112
SetIndicatorStyleTrackColor(FrameNode * frameNode,const Color & trackColor)113 void LinearIndicatorModelNG::SetIndicatorStyleTrackColor(FrameNode* frameNode, const Color& trackColor)
114 {
115 ACE_UPDATE_NODE_LAYOUT_PROPERTY(LinearIndicatorLayoutProperty, TrackColor, trackColor, frameNode);
116 }
117
SetLoop(FrameNode * frameNode,bool value)118 void LinearIndicatorModelNG::SetLoop(FrameNode* frameNode, bool value)
119 {
120 ACE_UPDATE_NODE_LAYOUT_PROPERTY(LinearIndicatorLayoutProperty, Loop, value, frameNode);
121 }
122
SetOnChange(FrameNode * frameNode,std::function<void (int index,float progress)> && event)123 void LinearIndicatorModelNG::SetOnChange(FrameNode* frameNode, std::function<void(int index, float progress)>&& event)
124 {
125 auto pattern = frameNode->GetPattern<LinearIndicatorPattern>();
126 CHECK_NULL_VOID(pattern);
127 pattern->GetController()->OnChange(std::move(event));
128 }
129 } // namespace OHOS::Ace::NG
130