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_INDEXER_INDEXER_LAYOUT_PROPERTY_H
17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERN_INDEXER_INDEXER_LAYOUT_PROPERTY_H
18 
19 #include "base/geometry/axis.h"
20 #include "base/utils/macros.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_ng/pattern/indexer/indexer_theme.h"
25 #include "core/components_ng/property/property.h"
26 #include "core/pipeline_ng/pipeline_context.h"
27 
28 namespace OHOS::Ace::NG {
29 class InspectorFilter;
30 
31 class ACE_EXPORT IndexerLayoutProperty : public LayoutProperty {
32     DECLARE_ACE_TYPE(IndexerLayoutProperty, LayoutProperty);
33 
34 public:
35     IndexerLayoutProperty() = default;
36 
37     ~IndexerLayoutProperty() override = default;
38 
Clone()39     RefPtr<LayoutProperty> Clone() const override
40     {
41         auto value = MakeRefPtr<IndexerLayoutProperty>();
42         value->LayoutProperty::UpdateLayoutProperty(DynamicCast<LayoutProperty>(this));
43         value->propArrayValue_ = CloneArrayValue();
44         value->propActualArrayValue_ = CloneActualArrayValue();
45         value->propSelected_ = CloneSelected();
46         value->propColor_ = CloneColor();
47         value->propSelectedColor_ = CloneSelectedColor();
48         value->propPopupColor_ = ClonePopupColor();
49         value->propUsingPopup_ = CloneUsingPopup();
50         value->propSelectedFont_ = CloneSelectedFont();
51         value->propPopupFont_ = ClonePopupFont();
52         value->propFont_ = CloneFont();
53         value->propItemSize_ = CloneItemSize();
54         value->propAlignStyle_ = CloneAlignStyle();
55         value->propPopupPositionX_ = ClonePopupPositionX();
56         value->propPopupPositionY_ = ClonePopupPositionY();
57         value->propFontSize_ = CloneFontSize();
58         value->propFontWeight_ = CloneFontWeight();
59         value->propAutoCollapse_ = CloneAutoCollapse();
60         value->propPopupHorizontalSpace_ = ClonePopupHorizontalSpace();
61         value->propIsPopup_ = CloneIsPopup();
62         value->propAdaptiveWidth_ = CloneAdaptiveWidth();
63         value->propEnableHapticFeedback_ = CloneEnableHapticFeedback();
64         return value;
65     }
66 
Reset()67     void Reset() override
68     {
69         LayoutProperty::Reset();
70         ResetArrayValue();
71         ResetActualArrayValue();
72         ResetSelected();
73         ResetColor();
74         ResetSelectedColor();
75         ResetPopupColor();
76         ResetUsingPopup();
77         ResetSelectedFont();
78         ResetPopupFont();
79         ResetFont();
80         ResetItemSize();
81         ResetAlignStyle();
82         ResetPopupPositionX();
83         ResetPopupPositionY();
84         ResetFontSize();
85         ResetFontWeight();
86         ResetAutoCollapse();
87         ResetPopupHorizontalSpace();
88         ResetIsPopup();
89         ResetAdaptiveWidth();
90         ResetEnableHapticFeedback();
91     }
92 
93     void ToJsonValue(std::unique_ptr<JsonValue>& json, const InspectorFilter& filter) const override;
94 
95     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(ArrayValue, std::vector<std::string>, PROPERTY_UPDATE_MEASURE);
96     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(ActualArrayValue, std::vector<std::string>, PROPERTY_UPDATE_MEASURE);
97     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(Selected, int32_t, PROPERTY_UPDATE_NORMAL);
98     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(Color, Color, PROPERTY_UPDATE_NORMAL);
99     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(SelectedColor, Color, PROPERTY_UPDATE_NORMAL);
100     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(PopupColor, Color, PROPERTY_UPDATE_NORMAL);
101     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(UsingPopup, bool, PROPERTY_UPDATE_NORMAL);
102     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(SelectedFont, TextStyle, PROPERTY_UPDATE_NORMAL);
103     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(PopupFont, TextStyle, PROPERTY_UPDATE_NORMAL);
104     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(Font, TextStyle, PROPERTY_UPDATE_NORMAL);
105     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(ItemSize, Dimension, PROPERTY_UPDATE_MEASURE);
106     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(AlignStyle, NG::AlignStyle, PROPERTY_UPDATE_NORMAL);
107     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(PopupPositionX, Dimension, PROPERTY_UPDATE_NORMAL);
108     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(PopupPositionY, Dimension, PROPERTY_UPDATE_NORMAL);
109     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(FontSize, Dimension, PROPERTY_UPDATE_NORMAL);
110     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(FontWeight, FontWeight, PROPERTY_UPDATE_NORMAL);
111     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(AutoCollapse, bool, PROPERTY_UPDATE_MEASURE);
112     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(PopupHorizontalSpace, Dimension, PROPERTY_UPDATE_LAYOUT);
113     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(IsPopup, bool, PROPERTY_UPDATE_LAYOUT);
114     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(AdaptiveWidth, bool, PROPERTY_UPDATE_MEASURE);
115     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(EnableHapticFeedback, bool, PROPERTY_UPDATE_MEASURE);
116 
117 private:
118     static std::unique_ptr<JsonValue> ToJsonObjectValue(const TextStyle& textStyle);
119     static std::string AlignStyleToString(const AlignStyle& alignStyle);
120 };
121 } // namespace OHOS::Ace::NG
122 
123 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERN_INDEXER_INDEXER_LAYOUT_PROPERTY_H
124