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_LIST_LIST_LAYOUT_PROPERTY_H 17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERN_LIST_LIST_LAYOUT_PROPERTY_H 18 19 #include <type_traits> 20 21 #include "base/geometry/axis.h" 22 #include "base/utils/macros.h" 23 #include "core/components/common/layout/constants.h" 24 #include "core/components_ng/layout/layout_property.h" 25 #include "core/components_ng/property/property.h" 26 #include "core/components_v2/list/list_component.h" 27 28 namespace OHOS::Ace::NG { 29 class InspectorFilter; 30 31 class ACE_EXPORT ListLayoutProperty : public LayoutProperty { 32 DECLARE_ACE_TYPE(ListLayoutProperty, LayoutProperty); 33 34 public: 35 ListLayoutProperty() = default; 36 37 ~ListLayoutProperty() override = default; 38 Clone()39 RefPtr<LayoutProperty> Clone() const override 40 { 41 auto value = MakeRefPtr<ListLayoutProperty>(); 42 value->LayoutProperty::UpdateLayoutProperty(DynamicCast<LayoutProperty>(this)); 43 value->propSpace_ = CloneSpace(); 44 value->propInitialIndex_ = CloneInitialIndex(); 45 value->propListDirection_ = CloneListDirection(); 46 value->propDivider_ = CloneDivider(); 47 value->propLanes_ = CloneLanes(); 48 value->propLaneMinLength_ = CloneLaneMinLength(); 49 value->propLaneMaxLength_ = CloneLaneMaxLength(); 50 value->propLaneGutter_ = CloneLaneGutter(); 51 value->propListItemAlign_ = CloneListItemAlign(); 52 value->propCachedCount_ = CloneCachedCount(); 53 value->propStickyStyle_ = CloneStickyStyle(); 54 value->propContentStartOffset_ = CloneContentStartOffset(); 55 value->propContentEndOffset_ = CloneContentEndOffset(); 56 value->propScrollSnapAlign_ = CloneScrollSnapAlign(); 57 value->propEditMode_ = CloneEditMode(); 58 value->propScrollEnabled_ = CloneScrollEnabled(); 59 return value; 60 } 61 Reset()62 void Reset() override 63 { 64 LayoutProperty::Reset(); 65 ResetSpace(); 66 ResetInitialIndex(); 67 ResetListDirection(); 68 ResetDivider(); 69 ResetLanes(); 70 ResetLaneMinLength(); 71 ResetLaneMaxLength(); 72 ResetLaneGutter(); 73 ResetListItemAlign(); 74 ResetCachedCount(); 75 ResetStickyStyle(); 76 ResetContentStartOffset(); 77 ResetContentEndOffset(); 78 ResetScrollSnapAlign(); 79 ResetEditMode(); 80 ResetScrollEnabled(); 81 } 82 SetDefaultCachedCount(const int32_t cachedCount)83 void SetDefaultCachedCount(const int32_t cachedCount) 84 { 85 defCachedCount_ = cachedCount; 86 } 87 GetCachedCountWithDefault()88 int32_t GetCachedCountWithDefault() const 89 { 90 return GetCachedCountValue(defCachedCount_); 91 } 92 93 void ToJsonValue(std::unique_ptr<JsonValue>& json, const InspectorFilter& filter) const override; 94 95 void FromJson(const std::unique_ptr<JsonValue>& json) override; 96 97 void ScrollSnapPropToJsonValue(std::unique_ptr<JsonValue>& json, const InspectorFilter& filter) const; 98 99 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(Space, Dimension, PROPERTY_UPDATE_MEASURE); 100 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(InitialIndex, int32_t, PROPERTY_UPDATE_MEASURE); 101 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(ListDirection, Axis, PROPERTY_UPDATE_MEASURE); 102 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(Divider, V2::ItemDivider, PROPERTY_UPDATE_MEASURE); 103 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(Lanes, int32_t, PROPERTY_UPDATE_MEASURE); 104 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(LaneMinLength, Dimension, PROPERTY_UPDATE_MEASURE); 105 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(LaneMaxLength, Dimension, PROPERTY_UPDATE_MEASURE); 106 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(LaneGutter, Dimension, PROPERTY_UPDATE_MEASURE); 107 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(ListItemAlign, V2::ListItemAlign, PROPERTY_UPDATE_MEASURE); 108 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(CachedCount, int32_t, PROPERTY_UPDATE_MEASURE); 109 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(StickyStyle, V2::StickyStyle, PROPERTY_UPDATE_MEASURE); 110 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(ScrollSnapAlign, V2::ScrollSnapAlign, PROPERTY_UPDATE_MEASURE); 111 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(ChainAnimation, bool, PROPERTY_UPDATE_MEASURE); 112 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(ContentStartOffset, float, PROPERTY_UPDATE_MEASURE); 113 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(ContentEndOffset, float, PROPERTY_UPDATE_MEASURE); 114 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(EditMode, bool, PROPERTY_UPDATE_MEASURE); 115 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(ScrollEnabled, bool, PROPERTY_UPDATE_MEASURE); 116 117 int defCachedCount_ = 1; 118 }; 119 } // namespace OHOS::Ace::NG 120 121 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERN_LIST_LIST_LAYOUT_PROPERTY_H 122