• 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_layout_options.h"
21 
22 namespace OHOS::Ace::NG {
23 class ACE_EXPORT GridLayoutProperty : public LayoutProperty {
24     DECLARE_ACE_TYPE(GridLayoutProperty, LayoutProperty);
25 
26 public:
27     GridLayoutProperty() = default;
28     ~GridLayoutProperty() override = default;
29 
Clone()30     RefPtr<LayoutProperty> Clone() const override
31     {
32         auto value = MakeRefPtr<GridLayoutProperty>();
33         value->LayoutProperty::UpdateLayoutProperty(DynamicCast<LayoutProperty>(this));
34         value->propRowsTemplate_ = CloneRowsTemplate();
35         value->propColumnsTemplate_ = CloneColumnsTemplate();
36         value->propRowsGap_ = CloneRowsGap();
37         value->propColumnsGap_ = CloneColumnsGap();
38         value->propCachedCount_ = CloneCachedCount();
39         value->propGridDirection_ = CloneGridDirection();
40         value->propMaxCount_ = CloneMaxCount();
41         value->propMinCount_ = CloneMinCount();
42         value->propCellLength_ = CloneCellLength();
43         value->propEdgeEffect_ = CloneEdgeEffect();
44         value->propScrollEnabled_ = CloneScrollEnabled();
45         value->propLayoutOptions_ = CloneLayoutOptions();
46         return value;
47     }
48 
Reset()49     void Reset() override
50     {
51         LayoutProperty::Reset();
52         ResetColumnsTemplate();
53         ResetRowsTemplate();
54         ResetColumnsGap();
55         ResetRowsGap();
56         ResetCachedCount();
57         ResetGridDirection();
58         ResetMaxCount();
59         ResetMinCount();
60         ResetCellLength();
61         ResetEdgeEffect();
62         ResetScrollEnabled();
63         ResetLayoutOptions();
64     }
65 
66     void ToJsonValue(std::unique_ptr<JsonValue>& json) const override;
67 
IsVertical()68     bool IsVertical() const
69     {
70         bool columnsTemplateValid = propColumnsTemplate_.has_value() && !propColumnsTemplate_.value().empty();
71         bool rowsTemplateValid = propRowsTemplate_.has_value() && !propRowsTemplate_.value().empty();
72         return columnsTemplateValid ||
73                (!columnsTemplateValid && !rowsTemplateValid); // TODO: take layoutDirection into account
74     }
75 
IsConfiguredScrollable()76     bool IsConfiguredScrollable() const
77     {
78         bool columnsTemplateSet = !propColumnsTemplate_.value_or("").empty();
79         bool rowsTemplateSet = !propRowsTemplate_.value_or("").empty();
80         bool verticalScrollable = (columnsTemplateSet && !rowsTemplateSet);
81         bool horizontalScrollable = (!columnsTemplateSet && rowsTemplateSet);
82         return verticalScrollable || horizontalScrollable;
83     }
84 
85     ACE_DEFINE_PROPERTY_ITEM_FUNC_WITHOUT_GROUP(ColumnsTemplate, std::string);
OnColumnsTemplateUpdate(const std::string &)86     void OnColumnsTemplateUpdate(const std::string& /* columnsTemplate */) const
87     {
88         ResetGridLayoutInfoAndMeasure();
89     }
90 
91     ACE_DEFINE_PROPERTY_ITEM_FUNC_WITHOUT_GROUP(RowsTemplate, std::string);
OnRowsTemplateUpdate(const std::string &)92     void OnRowsTemplateUpdate(const std::string& /* rowsTemplate */) const
93     {
94         ResetGridLayoutInfoAndMeasure();
95     }
96 
97     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(ColumnsGap, Dimension, PROPERTY_UPDATE_MEASURE);
98     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(RowsGap, Dimension, PROPERTY_UPDATE_MEASURE);
99 
100     ACE_DEFINE_PROPERTY_ITEM_FUNC_WITHOUT_GROUP(CachedCount, int32_t);
OnCachedCountUpdate(int32_t)101     void OnCachedCountUpdate(int32_t /* cachedCount */) const {}
102 
103     ACE_DEFINE_PROPERTY_ITEM_FUNC_WITHOUT_GROUP(GridDirection, FlexDirection);
OnGridDirectionUpdate(FlexDirection)104     void OnGridDirectionUpdate(FlexDirection /* gridDirection */) const
105     {
106         ResetGridLayoutInfoAndMeasure();
107     }
108 
109     ACE_DEFINE_PROPERTY_ITEM_FUNC_WITHOUT_GROUP(MaxCount, int32_t);
OnMaxCountUpdate(int32_t)110     void OnMaxCountUpdate(int32_t /* maxCount */) const
111     {
112         ResetGridLayoutInfoAndMeasure();
113     }
114 
115     ACE_DEFINE_PROPERTY_ITEM_FUNC_WITHOUT_GROUP(MinCount, int32_t);
OnMinCountUpdate(int32_t)116     void OnMinCountUpdate(int32_t /* minCount */) const
117     {
118         ResetGridLayoutInfoAndMeasure();
119     }
120 
121     ACE_DEFINE_PROPERTY_ITEM_FUNC_WITHOUT_GROUP(CellLength, int32_t);
OnCellLengthUpdate(int32_t)122     void OnCellLengthUpdate(int32_t /* cellLength */) const
123     {
124         ResetGridLayoutInfoAndMeasure();
125     }
126 
127     ACE_DEFINE_PROPERTY_ITEM_FUNC_WITHOUT_GROUP(LayoutOptions, GridLayoutOptions);
OnLayoutOptionsUpdate(GridLayoutOptions)128     void OnLayoutOptionsUpdate(GridLayoutOptions /* layoutOptions */) const
129     {
130         ResetGridLayoutInfoAndMeasure();
131     }
132 
133     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(Editable, bool, PROPERTY_UPDATE_LAYOUT);
134     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(EdgeEffect, EdgeEffect, PROPERTY_UPDATE_MEASURE);
135     ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(ScrollEnabled, bool, PROPERTY_UPDATE_MEASURE);
136 
137 private:
138     ACE_DISALLOW_COPY_AND_MOVE(GridLayoutProperty);
139 
140     void ResetGridLayoutInfoAndMeasure() const;
141     std::string GetBarStateString() const;
142     std::string GetGridDirectionStr() const;
143     Color GetBarColor() const;
144     Dimension GetBarWidth() const;
145 };
146 } // namespace OHOS::Ace::NG
147 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERN_GRID_GRID_LAYOUT_PROPERTY_H
148