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 
16 #ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERN_BADGE_BADGE_LAYOUT_PROPERTY_H
17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERN_BADGE_BADGE_LAYOUT_PROPERTY_H
18 
19 #include "base/geometry/axis.h"
20 #include "base/geometry/dimension.h"
21 #include "core/components/common/layout/constants.h"
22 #include "core/components/common/properties/text_style.h"
23 #include "core/components_ng/layout/layout_property.h"
24 #include "core/components_v2/inspector/utils.h"
25 
26 namespace OHOS::Ace::NG {
27 class InspectorFilter;
28 
29 class ACE_EXPORT BadgeLayoutProperty : public LayoutProperty {
30     DECLARE_ACE_TYPE(BadgeLayoutProperty, LayoutProperty);
31 
32 public:
33     BadgeLayoutProperty() = default;
34     ~BadgeLayoutProperty() override = default;
35 
Clone()36     RefPtr<LayoutProperty> Clone() const override
37     {
38         auto value = MakeRefPtr<BadgeLayoutProperty>();
39         value->LayoutProperty::UpdateLayoutProperty(AceType::DynamicCast<LayoutProperty>(this));
40         value->propBadgeValue_ = CloneBadgeValue();
41         value->propBadgeCount_ = CloneBadgeCount();
42         value->propBadgeMaxCount_ = CloneBadgeMaxCount();
43         value->propBadgePosition_ = CloneBadgePosition();
44         value->propBadgePositionX_ = CloneBadgePositionX();
45         value->propBadgePositionY_ = CloneBadgePositionY();
46         value->propIsPositionXy_ = CloneIsPositionXy();
47 
48         value->propBadgeColor_ = CloneBadgeColor();
49         value->propBadgeTextColor_ = CloneBadgeTextColor();
50         value->propBadgeTextColor_ = CloneBadgeBorderColor();
51         value->propBadgeCircleSize_ = CloneBadgeCircleSize();
52         value->propBadgeFontSize_ = CloneBadgeFontSize();
53         value->propBadgeFontWeight_ = CloneBadgeFontWeight();
54         value->propBadgeBorderWidth_ = CloneBadgeBorderWidth();
55         return value;
56     }
57 
Reset()58     void Reset() override
59     {
60         LayoutProperty::Reset();
61         ResetBadgeValue();
62         ResetBadgeCount();
63         ResetBadgeMaxCount();
64         ResetBadgePosition();
65         ResetBadgePositionX();
66         ResetBadgePositionY();
67         ResetIsPositionXy();
68 
69         ResetBadgeColor();
70         ResetBadgeTextColor();
71         ResetBadgeBorderColor();
72         ResetBadgeCircleSize();
73         ResetBadgeFontSize();
74         ResetBadgeFontWeight();
75         ResetBadgeBorderWidth();
76     }
77 
GetBadgeCircleRadius()78     double GetBadgeCircleRadius() const
79     {
80         return badgeCircleRadius_;
81     }
82 
SetBadgeCircleRadius(const double & badgeCircleRadius)83     void SetBadgeCircleRadius(const double& badgeCircleRadius)
84     {
85         badgeCircleRadius_ = badgeCircleRadius;
86     }
87 
88     void ToJsonValue(std::unique_ptr<JsonValue>& json, const InspectorFilter& filter) const override;
89 
GetBadgePositionString(BadgePosition position)90     std::string GetBadgePositionString(BadgePosition position) const
91     {
92         switch (position) {
93             case BadgePosition::RIGHT_TOP:
94                 return "BadgePosition.RightTop";
95             case BadgePosition::RIGHT:
96                 return "BadgePosition.Right";
97             case BadgePosition::LEFT:
98                 return "BadgePosition.Left";
99             default:
100                 break;
101         }
102         return "-";
103     }
104 
SetIsDefault(bool isDefaultFontSize,bool isDefaultBadgeSize)105     void SetIsDefault(bool isDefaultFontSize, bool isDefaultBadgeSize)
106     {
107         isDefaultFontSize_ = isDefaultFontSize;
108         isDefaultBadgeSize_ = isDefaultBadgeSize;
109     }
GetFontSizeIsDefault()110     bool GetFontSizeIsDefault() const
111     {
112         return isDefaultFontSize_;
113     }
GetBadgeSizeIsDefault()114     bool GetBadgeSizeIsDefault() const
115     {
116         return isDefaultBadgeSize_;
117     }
118 
119     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(BadgeValue, std::string, PROPERTY_UPDATE_MEASURE);
120     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(BadgeCount, int, PROPERTY_UPDATE_MEASURE);
121     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(BadgeMaxCount, int, PROPERTY_UPDATE_MEASURE);
122     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(BadgePosition, BadgePosition, PROPERTY_UPDATE_MEASURE);
123     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(BadgePositionX, Dimension, PROPERTY_UPDATE_MEASURE_SELF);
124     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(BadgePositionY, Dimension, PROPERTY_UPDATE_MEASURE_SELF);
125     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(IsPositionXy, bool, PROPERTY_UPDATE_MEASURE_SELF);
126 
127     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(BadgeColor, Color, PROPERTY_UPDATE_MEASURE);
128     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(BadgeTextColor, Color, PROPERTY_UPDATE_MEASURE);
129     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(BadgeBorderColor, Color, PROPERTY_UPDATE_MEASURE);
130     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(BadgeFontSize, Dimension, PROPERTY_UPDATE_MEASURE);
131     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(BadgeCircleSize, Dimension, PROPERTY_UPDATE_MEASURE);
132     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(BadgeFontWeight, FontWeight, PROPERTY_UPDATE_MEASURE);
133     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(BadgeBorderWidth, Dimension, PROPERTY_UPDATE_MEASURE);
134 
135 private:
136     double badgeCircleRadius_;
137     bool isDefaultFontSize_;
138     bool isDefaultBadgeSize_;
139 };
140 
141 } // namespace OHOS::Ace::NG
142 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERN_BADGE_BADGE_LAYOUT_PROPERTY_H
143