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_NG_PATTERN_TABS_TAB_BAR_LAYOUT_PROPERTY_H 17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERN_TABS_TAB_BAR_LAYOUT_PROPERTY_H 18 19 #include "base/geometry/axis.h" 20 #include "base/geometry/dimension.h" 21 #include "base/utils/macros.h" 22 #include "core/components/common/layout/constants.h" 23 #include "core/components_ng/base/inspector_filter.h" 24 #include "core/components_ng/layout/layout_property.h" 25 #include "core/components_ng/pattern/tabs/tabs_model.h" 26 #include "core/components_ng/property/property.h" 27 28 namespace OHOS::Ace::NG { 29 30 struct TabBarProperty { 31 ACE_DEFINE_PROPERTY_GROUP_ITEM(TabBarMode, TabBarMode); 32 ACE_DEFINE_PROPERTY_GROUP_ITEM(TabBarWidth, Dimension); 33 ACE_DEFINE_PROPERTY_GROUP_ITEM(TabBarHeight, Dimension); 34 }; 35 36 class ACE_EXPORT TabBarLayoutProperty : public LayoutProperty { 37 DECLARE_ACE_TYPE(TabBarLayoutProperty, LayoutProperty); 38 39 public: 40 TabBarLayoutProperty() = default; 41 ~TabBarLayoutProperty() override = default; 42 Clone()43 RefPtr<LayoutProperty> Clone() const override 44 { 45 auto value = MakeRefPtr<TabBarLayoutProperty>(); 46 value->LayoutProperty::UpdateLayoutProperty(AceType::DynamicCast<LayoutProperty>(this)); 47 value->propTabBarProperty_ = CloneTabBarProperty(); 48 value->propAxis_ = CloneAxis(); 49 value->propIndicator_ = CloneIndicator(); 50 value->propSelectedMask_ = CloneSelectedMask(); 51 value->propUnselectedMask_ = CloneUnselectedMask(); 52 value->propScrollableBarModeOptions_ = CloneScrollableBarModeOptions(); 53 value->propBarGridAlign_ = CloneBarGridAlign(); 54 value->propBarAdaptiveHeight_ = CloneBarAdaptiveHeight(); 55 return value; 56 } 57 Reset()58 void Reset() override 59 { 60 LayoutProperty::Reset(); 61 ResetTabBarProperty(); 62 ResetAxis(); 63 ResetIndicator(); 64 ResetSelectedMask(); 65 ResetUnselectedMask(); 66 ResetScrollableBarModeOptions(); 67 ResetBarGridAlign(); 68 ResetBarAdaptiveHeight(); 69 } 70 71 RectF GetIndicatorRect(int32_t index); 72 ToJsonValue(std::unique_ptr<JsonValue> & json,const InspectorFilter & filter)73 void ToJsonValue(std::unique_ptr<JsonValue>& json, const InspectorFilter& filter) const override 74 { 75 LayoutProperty::ToJsonValue(json, filter); 76 /* no fixed attr below, just return */ 77 if (filter.IsFastFilter()) { 78 return; 79 } 80 json->PutExtAttr("barHeight", GetTabBarHeight().value_or(0.0_vp).ToString().c_str(), filter); 81 json->PutExtAttr("currentIndex", propIndicator_.value_or(0), filter); 82 } 83 FromJson(const std::unique_ptr<JsonValue> & json)84 void FromJson(const std::unique_ptr<JsonValue>& json) override 85 { 86 UpdateTabBarHeight(Dimension::FromString(json->GetString("barHeight"))); 87 UpdateIndicator(json->GetInt("currentIndex")); 88 LayoutProperty::FromJson(json); 89 } 90 91 ACE_DEFINE_PROPERTY_GROUP(TabBarProperty, TabBarProperty); 92 ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(TabBarProperty, TabBarMode, TabBarMode, PROPERTY_UPDATE_MEASURE); 93 ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(TabBarProperty, TabBarWidth, Dimension, PROPERTY_UPDATE_MEASURE); 94 ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(TabBarProperty, TabBarHeight, Dimension, PROPERTY_UPDATE_MEASURE); 95 96 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(Axis, Axis, PROPERTY_UPDATE_MEASURE); 97 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(Indicator, int32_t, PROPERTY_UPDATE_NORMAL); 98 99 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(SelectedMask, int32_t, PROPERTY_UPDATE_MEASURE); 100 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(UnselectedMask, int32_t, PROPERTY_UPDATE_MEASURE); 101 102 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(ScrollableBarModeOptions, ScrollableBarModeOptions, PROPERTY_UPDATE_MEASURE); 103 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(BarGridAlign, BarGridColumnOptions, PROPERTY_UPDATE_MEASURE); 104 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(BarAdaptiveHeight, bool, PROPERTY_UPDATE_MEASURE); 105 }; 106 107 } // namespace OHOS::Ace::NG 108 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERN_TABS_TAB_BAR_LAYOUT_PROPERTY_H 109