1 /*
2  * Copyright (c) 2022 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 "frameworks/bridge/declarative_frontend/jsview/models/gauge_model_impl.h"
17 
18 #include "base/log/log_wrapper.h"
19 #include "bridge/declarative_frontend/jsview/js_gauge.h"
20 #include "bridge/declarative_frontend/jsview/js_interactable_view.h"
21 #include "bridge/declarative_frontend/view_stack_processor.h"
22 #include "core/components/chart/chart_component.h"
23 #include "core/components/progress/progress_component.h"
24 
25 namespace OHOS::Ace::Framework {
26 
Create(float values,float min,float max)27 void GaugeModelImpl::Create(float values, float min, float max)
28 {
29     auto progressChild = AceType::MakeRefPtr<ProgressComponent>(min, values, min, max, ProgressType::GAUGE);
30     progressChild->SetIndicatorFlag(true);
31     progressChild->SetInspectorTag("Gauge");
32     ViewStackProcessor::GetInstance()->ClaimElementId(progressChild);
33     ViewStackProcessor::GetInstance()->Push(progressChild);
34     RefPtr<ProgressTheme> progressTheme = JSGauge::GetTheme<ProgressTheme>();
35     progressChild->InitStyle(progressTheme);
36 }
37 
SetValue(float value)38 void GaugeModelImpl::SetValue(float value)
39 {
40     auto component = ViewStackProcessor::GetInstance()->GetMainComponent();
41     auto gaugeComponent = AceType::DynamicCast<ProgressComponent>(component);
42     if (!gaugeComponent) {
43         return;
44     }
45     gaugeComponent->SetValue(value);
46 }
47 
SetStartAngle(float startAngle)48 void GaugeModelImpl::SetStartAngle(float startAngle)
49 {
50     auto component = ViewStackProcessor::GetInstance()->GetMainComponent();
51     auto gaugeComponent = AceType::DynamicCast<ProgressComponent>(component);
52     if (!gaugeComponent) {
53         return;
54     }
55     gaugeComponent->GetTrack()->GetTrackInfo()->SetStartDegree(startAngle);
56 }
57 
SetEndAngle(float endAngle)58 void GaugeModelImpl::SetEndAngle(float endAngle)
59 {
60     auto component = ViewStackProcessor::GetInstance()->GetMainComponent();
61     auto gaugeComponent = AceType::DynamicCast<ProgressComponent>(component);
62     if (!gaugeComponent) {
63         return;
64     }
65     gaugeComponent->GetTrack()->GetTrackInfo()->SetSweepDegree(endAngle);
66 }
67 
SetColors(const std::vector<Color> & colors,const std::vector<float> & values)68 void GaugeModelImpl::SetColors(const std::vector<Color>& colors, const std::vector<float>& values)
69 {
70     auto component = ViewStackProcessor::GetInstance()->GetMainComponent();
71     std::vector<double> values_old;
72     for (size_t i = 0; i < values.size(); ++i) {
73         values_old.push_back(values[i]);
74     }
75     auto gaugeComponent = AceType::DynamicCast<ProgressComponent>(component);
76     if (!gaugeComponent) {
77         return;
78     }
79     gaugeComponent->SetSectionsStyle(colors, values_old);
80 }
81 
SetStrokeWidth(const Dimension & strokeWidth)82 void GaugeModelImpl::SetStrokeWidth(const Dimension& strokeWidth)
83 {
84     auto component = ViewStackProcessor::GetInstance()->GetMainComponent();
85     auto gaugeComponent = AceType::DynamicCast<ProgressComponent>(component);
86     if (!gaugeComponent) {
87         return;
88     }
89     gaugeComponent->SetTrackThickness(strokeWidth);
90 }
91 
SetLabelMarkedText(const std::string labelTextString)92 void GaugeModelImpl::SetLabelMarkedText(const std::string labelTextString)
93 {
94     auto component = ViewStackProcessor::GetInstance()->GetMainComponent();
95     auto gaugeComponent = AceType::DynamicCast<ProgressComponent>(component);
96     gaugeComponent->SetLabelMarkedText(labelTextString);
97 }
98 
SetMarkedTextColor(const Color & color)99 void GaugeModelImpl::SetMarkedTextColor(const Color& color)
100 {
101     auto component = ViewStackProcessor::GetInstance()->GetMainComponent();
102     auto gaugeComponent = AceType::DynamicCast<ProgressComponent>(component);
103     gaugeComponent->SetMarkedTextColor(color);
104 }
105 
106 } // namespace OHOS::Ace::Framework