• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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_GRID_GRID_LAYOUT_PROPERTY_H
17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERN_GRID_GRID_LAYOUT_PROPERTY_H
18 
19 #include "core/components_ng/layout/layout_property.h"
20 #include "core/components_ng/pattern/grid/grid_constants.h"
21 #include "core/components_ng/pattern/grid/grid_layout_options.h"
22 
23 namespace OHOS::Ace::NG {
24 class InspectorFilter;
25 
26 class ACE_EXPORT GridLayoutProperty : public LayoutProperty {
27     DECLARE_ACE_TYPE(GridLayoutProperty, LayoutProperty);
28 
29 public:
30     GridLayoutProperty() = default;
31     ~GridLayoutProperty() override = default;
32 
Clone()33     RefPtr<LayoutProperty> Clone() const override
34     {
35         auto value = MakeRefPtr<GridLayoutProperty>();
36         value->LayoutProperty::UpdateLayoutProperty(DynamicCast<LayoutProperty>(this));
37         value->propRowsTemplate_ = CloneRowsTemplate();
38         value->propColumnsTemplate_ = CloneColumnsTemplate();
39         value->propRowsGap_ = CloneRowsGap();
40         value->propColumnsGap_ = CloneColumnsGap();
41         value->propCachedCount_ = CloneCachedCount();
42         value->propGridDirection_ = CloneGridDirection();
43         value->propMaxCount_ = CloneMaxCount();
44         value->propMinCount_ = CloneMinCount();
45         value->propCellLength_ = CloneCellLength();
46         value->propScrollEnabled_ = CloneScrollEnabled();
47         value->propLayoutOptions_ = CloneLayoutOptions();
48         return value;
49     }
50 
Reset()51     void Reset() override
52     {
53         LayoutProperty::Reset();
54         ResetColumnsTemplate();
55         ResetRowsTemplate();
56         ResetColumnsGap();
57         ResetRowsGap();
58         ResetCachedCount();
59         ResetGridDirection();
60         ResetMaxCount();
61         ResetMinCount();
62         ResetCellLength();
63         ResetScrollEnabled();
64         ResetLayoutOptions();
65     }
66 
67     void ToJsonValue(std::unique_ptr<JsonValue>& json, const InspectorFilter& filter) const override;
68 
IsVertical()69     bool IsVertical() const
70     {
71         bool columnsTemplateValid = propColumnsTemplate_.has_value() && !propColumnsTemplate_.value().empty();
72         bool rowsTemplateValid = propRowsTemplate_.has_value() && !propRowsTemplate_.value().empty();
73         return columnsTemplateValid ||
74                (!columnsTemplateValid && !rowsTemplateValid);
75     }
76 
IsConfiguredScrollable()77     bool IsConfiguredScrollable() const
78     {
79         bool columnsTemplateSet = !propColumnsTemplate_.value_or("").empty();
80         bool rowsTemplateSet = !propRowsTemplate_.value_or("").empty();
81         bool verticalScrollable = (columnsTemplateSet && !rowsTemplateSet);
82         bool horizontalScrollable = (!columnsTemplateSet && rowsTemplateSet);
83         return verticalScrollable || horizontalScrollable;
84     }
85 
IsReverse()86     bool IsReverse() const
87     {
88         bool columnsTemplateSet = !propColumnsTemplate_.value_or("").empty();
89         bool rowsTemplateSet = !propRowsTemplate_.value_or("").empty();
90         auto isRtl = GetNonAutoLayoutDirection() == TextDirection::RTL;
91         return isRtl && !columnsTemplateSet && rowsTemplateSet;
92     }
93 
94     ACE_DEFINE_PROPERTY_ITEM_FUNC_WITHOUT_GROUP(ColumnsTemplate, std::string);
OnColumnsTemplateUpdate(const std::string &)95     void OnColumnsTemplateUpdate(const std::string& /* columnsTemplate */) const
96     {
97         ResetGridLayoutInfoAndMeasure();
98     }
99 
100     ACE_DEFINE_PROPERTY_ITEM_FUNC_WITHOUT_GROUP(RowsTemplate, std::string);
OnRowsTemplateUpdate(const std::string &)101     void OnRowsTemplateUpdate(const std::string& /* rowsTemplate */) const
102     {
103         ResetGridLayoutInfoAndMeasure();
104     }
105 
106     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP_AND_USING_CALLBACK(ColumnsGap, Dimension, PROPERTY_UPDATE_MEASURE);
107     void OnColumnsGapUpdate(const Dimension& /* columnsGap */) const;
108 
109     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP_AND_USING_CALLBACK(RowsGap, Dimension, PROPERTY_UPDATE_MEASURE);
110     void OnRowsGapUpdate(const Dimension& /* rowsGap */) const;
111 
112     ACE_DEFINE_PROPERTY_ITEM_FUNC_WITHOUT_GROUP(CachedCount, int32_t);
OnCachedCountUpdate(int32_t)113     void OnCachedCountUpdate(int32_t /* cachedCount */) const {}
114 
115     ACE_DEFINE_PROPERTY_ITEM_FUNC_WITHOUT_GROUP(GridDirection, FlexDirection);
OnGridDirectionUpdate(FlexDirection)116     void OnGridDirectionUpdate(FlexDirection /* gridDirection */) const
117     {
118         ResetGridLayoutInfoAndMeasure();
119     }
120 
121     ACE_DEFINE_PROPERTY_ITEM_FUNC_WITHOUT_GROUP(MaxCount, int32_t);
OnMaxCountUpdate(int32_t)122     void OnMaxCountUpdate(int32_t /* maxCount */) const
123     {
124         ResetGridLayoutInfoAndMeasure();
125     }
126 
127     ACE_DEFINE_PROPERTY_ITEM_FUNC_WITHOUT_GROUP(MinCount, int32_t);
OnMinCountUpdate(int32_t)128     void OnMinCountUpdate(int32_t /* minCount */) const
129     {
130         ResetGridLayoutInfoAndMeasure();
131     }
132 
133     ACE_DEFINE_PROPERTY_ITEM_FUNC_WITHOUT_GROUP(CellLength, int32_t);
OnCellLengthUpdate(int32_t)134     void OnCellLengthUpdate(int32_t /* cellLength */) const
135     {
136         ResetGridLayoutInfoAndMeasure();
137     }
138 
139     ACE_DEFINE_PROPERTY_ITEM_FUNC_WITHOUT_GROUP(LayoutOptions, GridLayoutOptions);
140     void OnLayoutOptionsUpdate(const GridLayoutOptions& layoutOptions) const;
141 
142     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(Editable, bool, PROPERTY_UPDATE_LAYOUT);
143     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(ScrollEnabled, bool, PROPERTY_UPDATE_MEASURE);
144 
145     ACE_DEFINE_PROPERTY_ITEM_FUNC_WITHOUT_GROUP(AlignItems, GridItemAlignment);
OnAlignItemsUpdate(GridItemAlignment)146     void OnAlignItemsUpdate(GridItemAlignment /* alignItems */) const
147     {
148         ResetGridLayoutInfoAndMeasure();
149     }
150 
GetPercentSensitive()151     std::pair<bool, bool> GetPercentSensitive() override
152     {
153         return {true, true};
154     }
155 
156 private:
157     ACE_DISALLOW_COPY_AND_MOVE(GridLayoutProperty);
158 
159     void ResetGridLayoutInfoAndMeasure() const;
160     void ResetPositionFlags() const;
161     std::string GetBarStateString() const;
162     std::string GetGridDirectionStr() const;
163     Color GetBarColor() const;
164     Dimension GetBarWidth() const;
165 
166     void UpdateIrregularFlag(const GridLayoutOptions& layoutOptions) const;
167 };
168 } // namespace OHOS::Ace::NG
169 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERN_GRID_GRID_LAYOUT_PROPERTY_H
170