1 /*
2  * Copyright (c) 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_WATERFLOW_WATER_FLOW_MODEL_NG_H
17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERN_WATERFLOW_WATER_FLOW_MODEL_NG_H
18 
19 #include "base/utils/macros.h"
20 #include "core/components_ng/pattern/waterflow/water_flow_event_hub.h"
21 #include "core/components_ng/pattern/waterflow/water_flow_model.h"
22 
23 namespace OHOS::Ace::NG {
24 class ACE_EXPORT WaterFlowModelNG : public WaterFlowModel {
25 public:
26     void Create() override;
27     void SetFooter(std::function<void()>&& footer) override;
28     RefPtr<ScrollControllerBase> CreateScrollController() override;
29     RefPtr<ScrollProxy> CreateScrollBarProxy() override;
30     void SetScroller(RefPtr<ScrollControllerBase> scroller, RefPtr<ScrollProxy> proxy) override;
31     void SetLayoutMode(WaterFlowLayoutMode mode) override;
32 
33     void SetColumnsTemplate(const std::string& value) override;
34     void SetRowsTemplate(const std::string& value) override;
35 
36     void SetItemMinWidth(const Dimension& minWidth) override;
37     void SetItemMinHeight(const Dimension& minHeight) override;
38     void SetItemMaxWidth(const Dimension& maxWidth) override;
39     void SetItemMaxHeight(const Dimension& maxHeight) override;
40 
41     void SetColumnsGap(const Dimension& value) override;
42     void SetRowsGap(const Dimension& value) override;
43 
44     void SetLayoutDirection(FlexDirection value) override;
45     void SetNestedScroll(const NestedScrollOptions& nestedOpt) override;
46     void SetScrollEnabled(bool scrollEnabled) override;
47 
48     void SetOnReachStart(OnReachEvent&& onReachStart) override;
49     void SetOnReachEnd(OnReachEvent&& onReachEnd) override;
50     void SetOnScrollFrameBegin(OnScrollFrameBeginEvent&& ScrollFrameBegin) override;
51     void SetOnScroll(std::function<void(Dimension, ScrollState)>&& onScroll) override;
52     void SetOnScrollStart(OnScrollStartEvent&& onScrollStart) override;
53     void SetOnScrollStop(OnScrollStopEvent&& onScrollStop) override;
54     void SetOnScrollIndex(ScrollIndexFunc&& onScrollIndex) override;
55 
56     void SetFriction(double friction) override;
57     void SetCachedCount(int32_t value, bool show = false) override;
58     void SetEdgeEffect(EdgeEffect edgeEffect, bool alwaysEnabled) override;
59 
60     void SetScrollBarMode(DisplayMode value) override;
61     void SetScrollBarColor(const std::string& value) override;
62     void SetScrollBarWidth(const std::string& value) override;
63 
64     RefPtr<WaterFlowSections> GetOrCreateWaterFlowSections() override;
65     void ResetSections() override;
66     static RefPtr<FrameNode> CreateFrameNode(int32_t nodeId);
67     static RefPtr<ScrollControllerBase> GetOrCreateController(FrameNode* frameNode);
68     static void SetColumnsTemplate(FrameNode* frameNode, const std::string& value);
69     static void SetRowsTemplate(FrameNode* frameNode, const std::string& value);
70     static void SetScrollEnabled(FrameNode* frameNode, bool scrollEnabled);
71     static void SetColumnsGap(FrameNode* frameNode, const Dimension& value);
72     static void SetRowsGap(FrameNode* frameNode, const Dimension& value);
73     static void SetItemMinWidth(FrameNode* frameNode, const Dimension& minWidth);
74     static void SetItemMaxWidth(FrameNode* frameNode, const Dimension& maxWidth);
75     static void SetItemMinHeight(FrameNode* frameNode, const Dimension& minHeight);
76     static void SetItemMaxHeight(FrameNode* frameNode, const Dimension& maxHeight);
77     static void SetLayoutDirection(FrameNode* frameNode, FlexDirection value);
78     static void SetNestedScroll(FrameNode* frameNode, const NestedScrollOptions& nestedOpt);
79     static void SetFriction(FrameNode* frameNode, double friction);
80     static FlexDirection GetLayoutDirection(FrameNode* frameNode);
81     static std::string GetColumnsTemplate(FrameNode* frameNode);
82     static std::string GetRowsTemplate(FrameNode* frameNode);
83     static float GetColumnsGap(FrameNode* frameNode);
84     static float GetRowsGap(FrameNode* frameNode);
85     static NestedScrollOptions GetNestedScroll(FrameNode* frameNode);
86     static void SetCachedCount(FrameNode* frameNode, int32_t value);
87     static int32_t GetCachedCount(FrameNode* frameNode);
88     static void SetShowCached(FrameNode* frameNode, bool show);
89     static int32_t GetShowCached(FrameNode* frameNode);
90     static void SetEdgeEffect(FrameNode* frameNode, EdgeEffect edgeEffect, bool alwaysEnabled);
91     static float GetFriction(FrameNode* frameNode);
92     static void SetScrollBarMode(FrameNode* frameNode, DisplayMode value);
93     static int32_t GetScrollBarMode(FrameNode* frameNode);
94     static void SetScrollBarColor(FrameNode* frameNode, const std::string& value);
95     static uint32_t GetScrollBarColor(FrameNode* frameNode);
96     static void SetScrollBarWidth(FrameNode* frameNode, const std::string& value);
97     static float GetScrollBarWidth(FrameNode* frameNode);
98     static int32_t GetEdgeEffect(FrameNode* frameNode);
99     static int32_t GetEdgeEffectAlways(FrameNode* frameNode);
100     static Dimension GetItemMinWidth(FrameNode* frameNode);
101     static Dimension GetItemMaxWidth(FrameNode* frameNode);
102     static Dimension GetItemMinHeight(FrameNode* frameNode);
103     static Dimension GetItemMaxHeight(FrameNode* frameNode);
104     static RefPtr<WaterFlowSections> GetOrCreateWaterFlowSections(FrameNode* frameNode);
105     static void ResetSections(FrameNode* frameNode);
106     static bool GetScrollEnabled(FrameNode* frameNode);
107     static void SetOnScroll(FrameNode* frameNode, std::function<void(Dimension, ScrollState)>&& onScroll);
108     static void SetOnScrollStart(FrameNode* frameNode, OnScrollStartEvent&& onScrollStart);
109     static void SetOnScrollStop(FrameNode* frameNode, OnScrollStopEvent&& onScrollStop);
110     static void SetOnScrollFrameBegin(FrameNode* frameNode, OnScrollFrameBeginEvent&& ScrollFrameBegin);
111     static void SetOnScrollIndex(FrameNode* frameNode, ScrollIndexFunc&& onScrollIndex);
112     static void SetScrollToIndex(FrameNode* frameNode, int32_t index, int32_t animation, int32_t alignment);
113     static void SetOnReachStart(FrameNode* frameNode, OnReachEvent&& onReachStart);
114     static void SetOnReachEnd(FrameNode* frameNode, OnReachEvent&& onReachEnd);
115     static void SetWaterflowFooter(FrameNode* frameNode, FrameNode* footerNode);
116     static bool hasFooter(FrameNode* frameNode);
117     static void SetFlingSpeedLimit(FrameNode* frameNode, double maxSpeed);
118     static void SetScroller(FrameNode* frameNode, RefPtr<ScrollControllerBase> scroller, RefPtr<ScrollProxy> proxy);
119     static void SetLayoutMode(FrameNode* frameNode, WaterFlowLayoutMode mode);
120 };
121 } // namespace OHOS::Ace::NG
122 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERN_WATERFLOW_WATER_FLOW_MODEL_NG_H