1 /* 2 * Copyright (c) 2021-2022 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_V2_LIST_LIST_COMPONENT_H 17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_V2_LIST_LIST_COMPONENT_H 18 19 #include <list> 20 21 #include "base/geometry/axis.h" 22 #include "base/geometry/dimension.h" 23 #include "base/utils/macros.h" 24 #include "base/utils/noncopyable.h" 25 #include "core/components/common/properties/scroll_bar.h" 26 #include "core/components/scroll_bar/scroll_bar_proxy.h" 27 #include "core/components_v2/common/common_def.h" 28 #include "core/components_v2/list/list_item_group_component.h" 29 #include "core/components_v2/list/list_position_controller.h" 30 #include "core/components_v2/list/list_properties.h" 31 #include "core/pipeline/base/component_group.h" 32 33 namespace OHOS::Ace::V2 { 34 35 class ACE_EXPORT ListComponent : public ComponentGroup { 36 DECLARE_ACE_TYPE(V2::ListComponent, ComponentGroup) 37 38 public: 39 ListComponent() = default; 40 ~ListComponent() override = default; 41 42 RefPtr<RenderNode> CreateRenderNode() override; 43 RefPtr<Element> CreateElement() override; 44 GetItemDivider()45 const std::unique_ptr<ItemDivider>& GetItemDivider() const 46 { 47 return itemDivider_; 48 } SetItemDivider(std::unique_ptr<ItemDivider> && divider)49 void SetItemDivider(std::unique_ptr<ItemDivider>&& divider) 50 { 51 itemDivider_ = std::move(divider); 52 } 53 54 ACE_DEFINE_COMPONENT_PROP(Space, Dimension, 0.0_vp); 55 ACE_DEFINE_COMPONENT_PROP(Direction, Axis, Axis::VERTICAL); 56 ACE_DEFINE_COMPONENT_PROP(EdgeEffect, EdgeEffect, EdgeEffect::SPRING); 57 ACE_DEFINE_COMPONENT_PROP(ScrollBar, DisplayMode, DisplayMode::OFF); 58 ACE_DEFINE_COMPONENT_PROP(InitialIndex, int32_t, 0); 59 ACE_DEFINE_COMPONENT_PROP(CachedCount, int32_t, 3); 60 ACE_DEFINE_COMPONENT_PROP(EditMode, bool, false); 61 ACE_DEFINE_COMPONENT_PROP(ScrollController, RefPtr<ListPositionController>); 62 ACE_DEFINE_COMPONENT_PROP(ScrollBarProxy, RefPtr<ScrollBarProxy>); 63 ACE_DEFINE_COMPONENT_PROP(ChainAnimation, bool, false); 64 ACE_DEFINE_COMPONENT_PROP(MultiSelectable, bool, false); 65 ACE_DEFINE_COMPONENT_PROP(HasHeight, bool, false); 66 ACE_DEFINE_COMPONENT_PROP(HasWidth, bool, false); 67 ACE_DEFINE_COMPONENT_PROP(Sticky, StickyStyle, StickyStyle::NONE); 68 ACE_DEFINE_COMPONENT_PROP(ContentStartOffset, float, 0.0f); 69 ACE_DEFINE_COMPONENT_PROP(ContentEndOffset, float, 0.0f); 70 71 ACE_DEFINE_COMPONENT_EVENT(OnScroll, void(Dimension, ScrollState)); 72 ACE_DEFINE_COMPONENT_EVENT(OnScrollIndex, void(int32_t, int32_t, int32_t)); 73 ACE_DEFINE_COMPONENT_EVENT(OnReachStart, void()); 74 ACE_DEFINE_COMPONENT_EVENT(OnReachEnd, void()); 75 ACE_DEFINE_COMPONENT_EVENT(OnScrollStop, void()); 76 ACE_DEFINE_COMPONENT_EVENT(OnItemDelete, bool(int32_t)); 77 ACE_DEFINE_COMPONENT_EVENT(OnItemMove, bool(int32_t, int32_t)); 78 79 uint32_t Compare(const RefPtr<Component>& component) const override; 80 GetOnItemDragStartId()81 OnItemDragStartFunc GetOnItemDragStartId() const 82 { 83 return onItemDragStartId_; 84 } 85 SetOnItemDragStartId(const OnItemDragStartFunc & onItemDragStartId)86 void SetOnItemDragStartId(const OnItemDragStartFunc& onItemDragStartId) 87 { 88 onItemDragStartId_ = onItemDragStartId; 89 } 90 GetOnItemDragEnterId()91 OnItemDragEnterFunc GetOnItemDragEnterId() const 92 { 93 return onItemDragEnterId_; 94 } 95 SetOnItemDragEnterId(const OnItemDragEnterFunc & onItemDragEnterId)96 void SetOnItemDragEnterId(const OnItemDragEnterFunc& onItemDragEnterId) 97 { 98 onItemDragEnterId_ = onItemDragEnterId; 99 } 100 GetOnItemDragMoveId()101 OnItemDragMoveFunc GetOnItemDragMoveId() const 102 { 103 return onItemDragMoveId_; 104 } 105 SetOnItemDragMoveId(const OnItemDragMoveFunc & onItemDragMoveId)106 void SetOnItemDragMoveId(const OnItemDragMoveFunc& onItemDragMoveId) 107 { 108 onItemDragMoveId_ = onItemDragMoveId; 109 } 110 GetOnItemDragLeaveId()111 OnItemDragLeaveFunc GetOnItemDragLeaveId() const 112 { 113 return onItemDragLeaveId_; 114 } 115 SetOnItemDragLeaveId(const OnItemDragLeaveFunc & onItemDragLeaveId)116 void SetOnItemDragLeaveId(const OnItemDragLeaveFunc& onItemDragLeaveId) 117 { 118 onItemDragLeaveId_ = onItemDragLeaveId; 119 } 120 GetOnItemDropId()121 OnItemDropFunc GetOnItemDropId() const 122 { 123 return onItemDropId_; 124 } 125 SetOnItemDropId(const OnItemDropFunc & onItemDropId)126 void SetOnItemDropId(const OnItemDropFunc& onItemDropId) 127 { 128 onItemDropId_ = onItemDropId; 129 } 130 ResetLaneContrain()131 void ResetLaneContrain() 132 { 133 laneContrain_ = std::nullopt; 134 } 135 SetLaneConstrain(const Dimension & minLength,const Dimension & maxLength)136 void SetLaneConstrain(const Dimension& minLength, const Dimension& maxLength) 137 { 138 laneContrain_.emplace(minLength, maxLength); 139 } 140 GetLaneConstrain()141 const std::optional<std::pair<Dimension, Dimension>>& GetLaneConstrain() const 142 { 143 return laneContrain_; 144 } 145 SetLanes(int32_t lanes)146 void SetLanes(int32_t lanes) 147 { 148 ResetLaneContrain(); 149 if (lanes <= 0) { 150 lanes_ = 1; 151 return; 152 } 153 lanes_ = lanes; 154 } 155 GetLanes()156 int32_t GetLanes() const 157 { 158 return lanes_; 159 } 160 SetListItemAlign(ListItemAlign listItemAlign)161 void SetListItemAlign(ListItemAlign listItemAlign) 162 { 163 listItemAlign_ = listItemAlign; 164 } 165 GetAlignListItemAlign()166 ListItemAlign GetAlignListItemAlign() const 167 { 168 return listItemAlign_; 169 } 170 SetOnScrollBegin(const ScrollBeginCallback & onScrollBegin)171 void SetOnScrollBegin(const ScrollBeginCallback& onScrollBegin) 172 { 173 onScrollBegin_ = onScrollBegin; 174 } 175 GetOnScrollBegin()176 const ScrollBeginCallback& GetOnScrollBegin() const 177 { 178 return onScrollBegin_; 179 } 180 181 private: 182 std::unique_ptr<ItemDivider> itemDivider_; 183 184 ScrollBeginCallback onScrollBegin_; 185 OnItemDragStartFunc onItemDragStartId_; 186 OnItemDragEnterFunc onItemDragEnterId_; 187 OnItemDragMoveFunc onItemDragMoveId_; 188 OnItemDragLeaveFunc onItemDragLeaveId_; 189 OnItemDropFunc onItemDropId_; 190 ListItemAlign listItemAlign_ { ListItemAlign::START }; 191 std::optional<std::pair<Dimension, Dimension>> laneContrain_; 192 int32_t lanes_ { -1 }; 193 194 ACE_DISALLOW_COPY_AND_MOVE(ListComponent); 195 }; 196 197 } // namespace OHOS::Ace::V2 198 199 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_V2_LIST_LIST_COMPONENT_H 200