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