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/data_panel_model_impl.h"
17
18 #include "base/utils/utils.h"
19 #include "bridge/declarative_frontend/view_stack_processor.h"
20 #include "core/components/data_panel/data_panel_component.h"
21
22 namespace OHOS::Ace::Framework {
23
24 constexpr size_t MAX_COUNT = 9;
Create(const std::vector<double> & values,double max,int32_t type)25 void DataPanelModelImpl::Create(const std::vector<double>& values, double max, int32_t type)
26 {
27 RefPtr<PercentageDataPanelComponent> component =
28 AceType::MakeRefPtr<PercentageDataPanelComponent>(ChartType::RAINBOW);
29 double valueSum = 0.0;
30 // values
31 size_t length = static_cast<size_t>(values.size());
32 for (size_t i = 0; i < length && i < MAX_COUNT; i++) {
33 auto value = values[i];
34 if (LessOrEqual(value, 0.0)) {
35 value = 0.0;
36 }
37 valueSum += value;
38 if (GreatOrEqual(valueSum, max) && max > 0) {
39 value = max - (valueSum - value);
40 if (NearEqual(value, 0.0)) {
41 break;
42 }
43 Segment segment;
44 segment.SetValue(value);
45 segment.SetColorType(SegmentStyleType::NONE);
46 component->AppendSegment(segment);
47 break;
48 }
49 Segment segment;
50 segment.SetValue(value);
51 segment.SetColorType(SegmentStyleType::NONE);
52 component->AppendSegment(segment);
53 }
54 if (LessOrEqual(max, 0.0)) {
55 max = valueSum;
56 }
57 component->SetMaxValue(max);
58 if (type == 1) {
59 component->SetPanelType(ChartType::LINE);
60 } else if (type == 0) {
61 component->SetPanelType(ChartType::RAINBOW);
62 }
63 RefPtr<ThemeManager> dataPanelManager = AceType::MakeRefPtr<ThemeManagerImpl>();
64 component->InitalStyle(dataPanelManager);
65 ViewStackProcessor::GetInstance()->ClaimElementId(component);
66 ViewStackProcessor::GetInstance()->Push(component);
67 }
68
SetEffect(bool isCloseEffect)69 void DataPanelModelImpl::SetEffect(bool isCloseEffect)
70 {
71 auto dataPanelComponent =
72 AceType::DynamicCast<DataPanelComponent>(ViewStackProcessor::GetInstance()->GetMainComponent());
73 CHECK_NULL_VOID(dataPanelComponent);
74 dataPanelComponent->SetEffects(!isCloseEffect);
75 }
76
77 } // namespace OHOS::Ace::Framework