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