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_MODEL_H 17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERN_LIST_LIST_MODEL_H 18 19 #include <memory> 20 #include <mutex> 21 22 #include "base/geometry/axis.h" 23 #include "base/geometry/dimension.h" 24 #include "core/components/common/layout/constants.h" 25 #include "core/components_ng/pattern/list/list_children_main_size.h" 26 #include "core/components_ng/pattern/list/list_event_hub.h" 27 #include "core/components_v2/list/list_properties.h" 28 29 namespace OHOS::Ace { 30 31 class ACE_FORCE_EXPORT ListModel { 32 public: 33 static ListModel* GetInstance(); 34 virtual ~ListModel() = default; 35 36 virtual void Create() = 0; 37 virtual void SetSpace(const Dimension& space) = 0; 38 virtual void SetInitialIndex(int32_t initialIndex) = 0; 39 virtual RefPtr<ScrollControllerBase> CreateScrollController() = 0; 40 virtual void SetScroller(RefPtr<ScrollControllerBase> scroller, RefPtr<ScrollProxy> proxy) = 0; 41 virtual void SetListDirection(Axis axis) = 0; 42 virtual void SetScrollBar(DisplayMode scrollBar) = 0; 43 virtual void SetScrollBarColor(const std::string& value) = 0; 44 virtual void SetScrollBarWidth(const std::string& value) = 0; 45 virtual void SetEdgeEffect(EdgeEffect edgeEffect, bool alwaysEnabled) = 0; 46 virtual void SetEditMode(bool editMode) = 0; 47 virtual void SetDivider(const V2::ItemDivider& divider) = 0; 48 virtual void SetChainAnimation(bool enableChainAnimation) = 0; 49 virtual void SetChainAnimationOptions(const ChainAnimationOptions& options) = 0; 50 virtual void SetLanes(int32_t lanes) = 0; 51 virtual void SetLaneConstrain(const Dimension& laneMinLength, const Dimension& laneMaxLength) = 0; 52 virtual void SetLaneMinLength(const Dimension& laneMinLength) = 0; 53 virtual void SetLaneMaxLength(const Dimension& laneMaxLength) = 0; 54 virtual void SetLaneGutter(const Dimension& laneGutter) = 0; 55 virtual void SetListItemAlign(V2::ListItemAlign listItemAlign) = 0; 56 virtual void SetMultiSelectable(bool selectable) = 0; 57 virtual void SetCachedCount(int32_t cachedCount, bool show = false) = 0; 58 virtual void SetHasWidth(bool hasWidth) = 0; 59 virtual void SetHasHeight(bool hasHeight) = 0; 60 virtual void SetSticky(V2::StickyStyle stickyStyle) = 0; 61 virtual void SetContentStartOffset(float startOffset) = 0; 62 virtual void SetContentEndOffset(float endOffset) = 0; 63 virtual void SetNestedScroll(const NestedScrollOptions& nestedOpt) = 0; 64 virtual void SetScrollEnabled(bool scrollEnabled) = 0; 65 virtual void SetFriction(double friction) = 0; 66 virtual void SetMaintainVisibleContentPosition(bool enabled) = 0; 67 virtual void SetOnScroll(OnScrollEvent&& onScroll) = 0; 68 virtual void SetOnScrollBegin(OnScrollBeginEvent&& onScrollBegin) = 0; 69 virtual void SetOnScrollFrameBegin(OnScrollFrameBeginEvent&& onScrollFrameBegin) = 0; 70 virtual void SetOnScrollStart(OnScrollStartEvent&& onScrollStart) = 0; 71 virtual void SetOnScrollStop(OnScrollStopEvent&& onScrollStop) = 0; 72 virtual void SetOnScrollIndex(OnScrollIndexEvent&& onScrollIndex) = 0; 73 virtual void SetOnScrollVisibleContentChange(OnScrollVisibleContentChangeEvent&& onScrollVisibleContentChange) = 0; 74 virtual void SetOnReachStart(OnReachEvent&& onReachStart) = 0; 75 virtual void SetOnReachEnd(OnReachEvent&& onReachEnd) = 0; 76 virtual void SetOnItemDelete(OnItemDeleteEvent&& onItemDelete) = 0; 77 virtual void SetOnItemMove(OnItemMoveEvent&& onItemMove) = 0; 78 virtual void SetOnItemDragStart(OnItemDragStartFunc&& onItemDragStart) = 0; 79 virtual void SetOnItemDragEnter(OnItemDragEnterFunc&& onItemDragEnter) = 0; 80 virtual void SetOnItemDragLeave(OnItemDragLeaveFunc&& onItemDragLeave) = 0; 81 virtual void SetOnItemDragMove(OnItemDragMoveFunc&& onItemDragMove) = 0; 82 virtual void SetOnItemDrop(OnItemDropFunc&& onItemDrop) = 0; SetScrollSnapAlign(V2::ScrollSnapAlign scrollSnapAlign)83 virtual void SetScrollSnapAlign(V2::ScrollSnapAlign scrollSnapAlign) {}; GetOrCreateListChildrenMainSize()84 virtual RefPtr<NG::ListChildrenMainSize> GetOrCreateListChildrenMainSize() 85 { 86 return nullptr; 87 } 88 89 virtual DisplayMode GetDisplayMode() const = 0; 90 91 private: 92 static std::unique_ptr<ListModel> instance_; 93 static std::mutex mutex_; 94 }; 95 96 } // namespace OHOS::Ace 97 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERN_LIST_LIST_MODEL_H 98