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