1 /*
2  * Copyright (c) 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_WATER_FLOW_WATER_FLOW_COMPONENT_H
17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_V2_WATER_FLOW_WATER_FLOW_COMPONENT_H
18 
19 #include "core/components/common/layout/constants.h"
20 #include "core/components/common/properties/scroll_bar.h"
21 #include "core/components/scroll_bar/scroll_bar_proxy.h"
22 #include "core/components_v2/common/common_def.h"
23 #include "core/components_v2/water_flow/water_flow_position_controller.h"
24 #include "core/pipeline/base/component_group.h"
25 
26 namespace OHOS::Ace::V2 {
27 class ACE_EXPORT WaterFlowComponent : public ComponentGroup {
28     DECLARE_ACE_TYPE(WaterFlowComponent, ComponentGroup);
29 
30 public:
WaterFlowComponent(const std::list<RefPtr<Component>> & children)31     explicit WaterFlowComponent(const std::list<RefPtr<Component>>& children) : ComponentGroup(children) {}
32 
33     ~WaterFlowComponent() override = default;
34 
35     RefPtr<Element> CreateElement() override;
36     RefPtr<RenderNode> CreateRenderNode() override;
37 
38     void SetColumnsGap(const Dimension& columnsGap);
39     void SetRowsGap(const Dimension& rowsGap);
40     void SetLayoutDirection(FlexDirection direction);
41     void SetController(const RefPtr<V2::WaterFlowPositionController>& controller);
42     void SetScrollBarProxy(const RefPtr<ScrollBarProxy>& scrollBarProxy);
43     void SetScrolledEvent(const EventMarker& event);
44     void SetScrollBarDisplayMode(DisplayMode displayMode);
45     void SetScrollBarColor(const std::string& color);
46     void SetScrollBarWidth(const std::string& width);
47     void SetColumnsArgs(const std::string& columnsArgs);
48     void SetRowsArgs(const std::string& rowsArgs);
49     void SetMinWidth(const Dimension& minWidth);
50     void SetMinHeight(const Dimension& minHeight);
51     void SetMaxWidth(const Dimension& maxWidth);
52     void SetMaxHeight(const Dimension& maxHeight);
53     void SetFooterComponent(RefPtr<Component> component);
54 
GetColumnsGap()55     const Dimension& GetColumnsGap() const
56     {
57         return columnsGap_;
58     }
59 
GetRowsGap()60     const Dimension& GetRowsGap() const
61     {
62         return rowsGap_;
63     }
64 
GetDirection()65     FlexDirection GetDirection() const
66     {
67         return direction_;
68     }
69 
GetController()70     const RefPtr<V2::WaterFlowPositionController>& GetController() const
71     {
72         return controller_;
73     }
74 
GetScrollBarProxy()75     const RefPtr<ScrollBarProxy>& GetScrollBarProxy() const
76     {
77         return scrollBarProxy_;
78     }
79 
GetScrolledEvent()80     const EventMarker& GetScrolledEvent() const
81     {
82         return scrolledEvent_;
83     }
84 
GetScrollBarDisplayMode()85     DisplayMode GetScrollBarDisplayMode()
86     {
87         return displayMode_;
88     }
89 
GetColumnsArgs()90     const std::string& GetColumnsArgs() const
91     {
92         return columnsArgs_;
93     }
94 
GetRowsArgs()95     const std::string& GetRowsArgs() const
96     {
97         return rowsArgs_;
98     }
99 
GetMinWidth()100     const Dimension& GetMinWidth() const
101     {
102         return minWidth_;
103     }
104 
GetMinHeight()105     const Dimension& GetMinHeight() const
106     {
107         return minHeight_;
108     }
109 
GetMaxWidth()110     const Dimension& GetMaxWidth() const
111     {
112         return maxWidth_;
113     }
114 
GetMaxHeight()115     const Dimension& GetMaxHeight() const
116     {
117         return maxHeight_;
118     }
119 
GetFooterComponent()120     RefPtr<Component> GetFooterComponent() const
121     {
122         return footerComponent_;
123     }
124 
125     ACE_DEFINE_COMPONENT_EVENT(OnReachStart, void());
126     ACE_DEFINE_COMPONENT_EVENT(OnReachEnd, void());
127 
128 private:
129     Dimension columnsGap_ = 0.0_px;
130     Dimension rowsGap_ = 0.0_px;
131     FlexDirection direction_ = FlexDirection::COLUMN;
132     std::string columnsArgs_;
133     std::string rowsArgs_;
134     Dimension minWidth_ = 0.0_px;
135     Dimension minHeight_ = 0.0_px;
136     Dimension maxWidth_ = 0.0_px;
137     Dimension maxHeight_ = 0.0_px;
138 
139     // scroll bar attribute
140     DisplayMode displayMode_ = DisplayMode::ON;
141     RefPtr<V2::WaterFlowPositionController> controller_;
142     RefPtr<ScrollBarProxy> scrollBarProxy_;
143     EventMarker scrolledEvent_;
144     RefPtr<Component> footerComponent_;
145     ACE_DISALLOW_COPY_AND_MOVE(WaterFlowComponent);
146 };
147 } // namespace OHOS::Ace::V2
148 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_V2_WATER_FLOW_WATER_FLOW_COMPONENT_H
149