1 /*
2  * Copyright (c) 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 
16 #include "frameworks/bridge/declarative_frontend/jsview/models/badge_model_impl.h"
17 
18 #include "core/components/badge/badge_component.h"
19 #include "core/components/badge/badge_theme.h"
20 #include "core/pipeline/pipeline_base.h"
21 #include "frameworks/bridge/declarative_frontend/view_stack_processor.h"
22 
23 namespace OHOS::Ace::Framework {
Create(BadgeParameters & badgeParameters)24 void BadgeModelImpl::Create(BadgeParameters& badgeParameters)
25 {
26     auto badge = AceType::MakeRefPtr<OHOS::Ace::BadgeComponent>();
27     auto pipeline = PipelineBase::GetCurrentContext();
28     CHECK_NULL_VOID(pipeline);
29     auto badgeTheme = pipeline->GetTheme<BadgeTheme>();
30 
31     if (badgeParameters.badgeValue.has_value()) {
32         badge->SetBadgeLabel(badgeParameters.badgeValue.value());
33     }
34 
35     if (badgeParameters.badgeCount.has_value()) {
36         badge->SetMessageCount(badgeParameters.badgeCount.value());
37     } else {
38         badge->SetMessageCount(badgeTheme->GetMessageCount());
39     }
40 
41     if (badgeParameters.badgeMaxCount.has_value()) {
42         badge->SetMaxCount(badgeParameters.badgeMaxCount.value());
43     }
44 
45     if (badgeParameters.badgeColor.has_value()) {
46         badge->SetBadgeColor(badgeParameters.badgeColor.value());
47     } else {
48         badge->SetBadgeColor(badgeTheme->GetBadgeColor());
49     }
50 
51     if (badgeParameters.badgeTextColor.has_value()) {
52         badge->SetBadgeTextColor(badgeParameters.badgeTextColor.value());
53     } else {
54         badge->SetBadgeTextColor(badgeTheme->GetBadgeTextColor());
55     }
56 
57     if (badgeParameters.badgeFontSize.has_value()) {
58         badge->SetBadgeFontSize(badgeParameters.badgeFontSize.value());
59     } else {
60         badge->SetBadgeFontSize(badgeTheme->GetBadgeFontSize());
61     }
62 
63     if (badgeParameters.badgeCircleSize.has_value()) {
64         badge->SetBadgeCircleSize(badgeParameters.badgeCircleSize.value());
65     } else {
66         badge->SetBadgeCircleSize(badgeTheme->GetBadgeCircleSize());
67     }
68 
69     SetPositionForBadge(badgeParameters);
70     ViewStackProcessor::GetInstance()->ClaimElementId(badge);
71     ViewStackProcessor::GetInstance()->Push(badge);
72 }
73 
SetPositionForBadge(BadgeParameters & badgeParameters)74 void BadgeModelImpl::SetPositionForBadge(BadgeParameters& badgeParameters)
75 {
76     auto badge = AceType::MakeRefPtr<OHOS::Ace::BadgeComponent>();
77     auto pipeline = PipelineBase::GetCurrentContext();
78     CHECK_NULL_VOID(pipeline);
79     auto badgeTheme = pipeline->GetTheme<BadgeTheme>();
80 
81     if (badgeParameters.badgePosition.has_value()) {
82         badge->SetBadgePosition(static_cast<BadgePosition>(badgeParameters.badgePosition.value()));
83     } else {
84         badge->SetBadgePosition(badgeTheme->GetBadgePosition());
85     }
86 
87     if (badgeParameters.badgePositionX.has_value()) {
88         badge->SetBadgePositionX(badgeParameters.badgePositionX.value());
89     } else {
90         badge->SetBadgePositionX(badgeTheme->GetBadgePositionX());
91     }
92 
93     if (badgeParameters.badgePositionY.has_value()) {
94         badge->SetBadgePositionY(badgeParameters.badgePositionY.value());
95     } else {
96         badge->SetBadgePositionY(badgeTheme->GetBadgePositionY());
97     }
98 
99     if (badgeParameters.isPositionXy.has_value()) {
100         badge->SetIsPositionXy(badgeParameters.isPositionXy.value());
101     } else {
102         badge->SetIsPositionXy(badgeTheme->GetIsPositionXy());
103     }
104 }
105 } // namespace OHOS::Ace::Framework
106