• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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_PATTERNS_TABS_TAB_CONTENT_PATTERN_H
17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERNS_TABS_TAB_CONTENT_PATTERN_H
18 
19 #include "base/memory/referenced.h"
20 #include "base/utils/noncopyable.h"
21 #include "core/components_ng/pattern/pattern.h"
22 #include "core/components_ng/pattern/tabs/tab_bar_pattern.h"
23 #include "core/components_ng/pattern/tabs/tab_content_layout_property.h"
24 #include "core/components_ng/syntax/shallow_builder.h"
25 
26 namespace OHOS::Ace::NG {
27 
28 class ACE_EXPORT TabContentPattern : public Pattern {
29     DECLARE_ACE_TYPE(TabContentPattern, Pattern);
30 
31 public:
TabContentPattern(const RefPtr<ShallowBuilder> & shallowBuilder)32     explicit TabContentPattern(const RefPtr<ShallowBuilder>& shallowBuilder)
33         : shallowBuilder_(shallowBuilder), tabBarParam_(std::string(""), std::string(""), nullptr)
34     {}
35     ~TabContentPattern() override = default;
36 
IsAtomicNode()37     bool IsAtomicNode() const override
38     {
39         return false;
40     }
41 
IsMeasureBoundary()42     bool IsMeasureBoundary() const override
43     {
44         return false;
45     }
46 
UsResRegion()47     bool UsResRegion() override
48     {
49         return false;
50     }
51 
OnAttachToFrameNode()52     void OnAttachToFrameNode() override
53     {
54         auto host = GetHost();
55         CHECK_NULL_VOID(host);
56         host->GetRenderContext()->UpdateClipEdge(true);
57     }
58 
BeforeCreateLayoutWrapper()59     void BeforeCreateLayoutWrapper() override
60     {
61         if (shallowBuilder_ && !shallowBuilder_->IsExecuteDeepRenderDone()) {
62             shallowBuilder_->ExecuteDeepRender();
63             shallowBuilder_.Reset();
64         }
65     }
66 
CreateLayoutProperty()67     RefPtr<LayoutProperty> CreateLayoutProperty() override
68     {
69         return MakeRefPtr<TabContentLayoutProperty>();
70     }
71 
SetTabBar(const std::string & text,const std::string & icon,TabBarBuilderFunc && builder)72     void SetTabBar(const std::string& text, const std::string& icon, TabBarBuilderFunc&& builder)
73     {
74         tabBarParam_.SetText(text);
75         tabBarParam_.SetIcon(icon);
76         tabBarParam_.SetBuilder(move(builder));
77     }
78 
GetTabBarParam()79     const TabBarParam& GetTabBarParam() const
80     {
81         return tabBarParam_;
82     }
83 
SetTabBarStyle(TabBarStyle tabBarStyle)84     void SetTabBarStyle(TabBarStyle tabBarStyle)
85     {
86         tabBarParam_.SetTabBarStyle(tabBarStyle);
87     }
88 
GetTabBarStyle()89     TabBarStyle GetTabBarStyle() const
90     {
91         return tabBarParam_.GetTabBarStyle();
92     }
93 
SetIndicatorStyle(const IndicatorStyle & indicatorStyle)94     void SetIndicatorStyle(const IndicatorStyle& indicatorStyle)
95     {
96         indicatorStyle_ = indicatorStyle;
97     }
98 
GetIndicatorStyle()99     const IndicatorStyle& GetIndicatorStyle() const
100     {
101         return indicatorStyle_;
102     }
103 
SetSelectedMode(SelectedMode selectedMode)104     void SetSelectedMode(SelectedMode selectedMode)
105     {
106         selectedMode_ = selectedMode;
107     }
108 
GetSelectedMode()109     SelectedMode GetSelectedMode() const
110     {
111         return selectedMode_;
112     }
113 
SetBoardStyle(const BoardStyle & boardStyle)114     void SetBoardStyle(const BoardStyle& boardStyle)
115     {
116         boardStyle_ = boardStyle;
117     }
118 
GetBoardStyle()119     const BoardStyle& GetBoardStyle() const
120     {
121         return boardStyle_;
122     }
123 
SetLabelStyle(const LabelStyle & labelStyle)124     void SetLabelStyle(const LabelStyle& labelStyle)
125     {
126         labelStyle_ = labelStyle;
127     }
128 
GetLabelStyle()129     const LabelStyle& GetLabelStyle() const
130     {
131         return labelStyle_;
132     }
133 
SetPadding(const PaddingProperty & padding)134     void SetPadding(const PaddingProperty& padding)
135     {
136         padding_ = padding;
137     }
138 
GetPadding()139     const PaddingProperty& GetPadding() const
140     {
141         return padding_;
142     }
143 
SetSymmetricExtensible(bool isExtensible)144     void SetSymmetricExtensible(bool isExtensible)
145     {
146         bottomTabBarStyle_.symmetricExtensible = isExtensible;
147     }
148 
SetLayoutMode(LayoutMode layoutMode)149     void SetLayoutMode(LayoutMode layoutMode)
150     {
151         bottomTabBarStyle_.layoutMode = layoutMode;
152     }
153 
SetVerticalAlign(FlexAlign verticalAlign)154     void SetVerticalAlign(FlexAlign verticalAlign)
155     {
156         bottomTabBarStyle_.verticalAlign = verticalAlign;
157     }
158 
GetBottomTabBarStyle()159     const BottomTabBarStyle& GetBottomTabBarStyle() const
160     {
161         return bottomTabBarStyle_;
162     }
163 
164 private:
165     RefPtr<ShallowBuilder> shallowBuilder_;
166     TabBarParam tabBarParam_;
167     IndicatorStyle indicatorStyle_;
168     SelectedMode selectedMode_ = SelectedMode::INDICATOR;
169     BoardStyle boardStyle_;
170     LabelStyle labelStyle_;
171     PaddingProperty padding_;
172     BottomTabBarStyle bottomTabBarStyle_;
173 
174     ACE_DISALLOW_COPY_AND_MOVE(TabContentPattern);
175 };
176 
177 } // namespace OHOS::Ace::NG
178 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERNS_TABS_TAB_CONTENT_PATTERN_H
179