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_NAVIGATION_NAVIGATION_LAYOUT_PROPERTY_H 17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERN_NAVIGATION_NAVIGATION_LAYOUT_PROPERTY_H 18 19 #include "base/geometry/dimension.h" 20 #include "base/utils/macros.h" 21 #include "core/components/common/layout/constants.h" 22 #include "core/components_ng/base/inspector_filter.h" 23 #include "core/components_ng/layout/layout_property.h" 24 #include "core/components_ng/pattern/navigation/navigation_declaration.h" 25 #include "core/components_ng/property/property.h" 26 #include "core/image/image_source_info.h" 27 28 namespace OHOS::Ace::NG { 29 30 constexpr Dimension DEFAULT_NAV_BAR_WIDTH = 240.0_vp; 31 32 class ACE_EXPORT NavigationLayoutProperty : public LayoutProperty { 33 DECLARE_ACE_TYPE(NavigationLayoutProperty, LayoutProperty); 34 35 public: 36 NavigationLayoutProperty() = default; 37 38 ~NavigationLayoutProperty() override = default; 39 Clone()40 RefPtr<LayoutProperty> Clone() const override 41 { 42 auto copy = MakeRefPtr<NavigationLayoutProperty>(); 43 copy->LayoutProperty::UpdateLayoutProperty(DynamicCast<LayoutProperty>(this)); 44 copy->propNavigationMode_ = CloneNavigationMode(); 45 copy->propUsrNavigationMode_ = CloneUsrNavigationMode(); 46 copy->propNavBarWidth_ = CloneNavBarWidth(); 47 copy->propMinNavBarWidth_ = CloneMinNavBarWidth(); 48 copy->propMaxNavBarWidth_ = CloneMaxNavBarWidth(); 49 copy->propMinContentWidth_ = CloneMinContentWidth(); 50 copy->propNavBarPosition_ = CloneNavBarPosition(); 51 copy->propHideNavBar_ = CloneHideNavBar(); 52 copy->propNoPixMap_ = CloneNoPixMap(); 53 copy->propImageSource_ = CloneImageSource(); 54 copy->propPixelMap_ = ClonePixelMap(); 55 return copy; 56 } 57 Reset()58 void Reset() override 59 { 60 LayoutProperty::Reset(); 61 ResetNavigationMode(); 62 ResetUsrNavigationMode(); 63 ResetNavBarWidth(); 64 ResetMinNavBarWidth(); 65 ResetMaxNavBarWidth(); 66 ResetMinContentWidth(); 67 ResetNavBarPosition(); 68 ResetHideNavBar(); 69 ResetNoPixMap(); 70 ResetImageSource(); 71 ResetPixelMap(); 72 } 73 ToJsonValue(std::unique_ptr<JsonValue> & json,const InspectorFilter & filter)74 void ToJsonValue(std::unique_ptr<JsonValue>& json, const InspectorFilter& filter) const override 75 { 76 LayoutProperty::ToJsonValue(json, filter); 77 /* no fixed attr below, just return */ 78 if (filter.IsFastFilter()) { 79 return; 80 } 81 std::string navBarWidthRange = GetMinNavBarWidthValue(DEFAULT_MIN_NAV_BAR_WIDTH).ToString() + ", " + 82 GetMaxNavBarWidthValue(DEFAULT_MAX_NAV_BAR_WIDTH).ToString(); 83 json->PutExtAttr("navBarWidth", GetNavBarWidthValue(DEFAULT_NAV_BAR_WIDTH).ToString().c_str(), filter); 84 json->PutExtAttr("navBarWidthRange", navBarWidthRange.c_str(), filter); 85 json->PutExtAttr("minContentWidth", 86 GetMinContentWidthValue(DEFAULT_MIN_CONTENT_WIDTH).ToString().c_str(), filter); 87 json->PutExtAttr("navBarPosition", GetNavBarPosition().value_or(NavBarPosition::START) == NavBarPosition::START 88 ? "NavBarPosition.Start" 89 : "NavBarPosition.End", filter); 90 static const std::array<std::string, 3> NAVIGATION_MODE_TO_STRING = { 91 "NavigationMode.STACK", 92 "NavigationMode.SPLIT", 93 "NavigationMode.AUTO", 94 }; 95 json->PutExtAttr("mode", 96 NAVIGATION_MODE_TO_STRING.at(static_cast<int32_t>(GetUsrNavigationMode().value_or(NavigationMode::AUTO))) 97 .c_str(), filter); 98 json->PutExtAttr("hideNavBar", GetHideNavBarValue(false), filter); 99 if (HasImageSource()) { 100 json->PutExtAttr("backButtonIcon", GetImageSourceValue().GetSrc().c_str(), filter); 101 } 102 } 103 104 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(NavigationMode, NavigationMode, PROPERTY_UPDATE_MEASURE); 105 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(UsrNavigationMode, NavigationMode, PROPERTY_UPDATE_MEASURE); 106 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(NavBarWidth, Dimension, PROPERTY_UPDATE_MEASURE); 107 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(MinNavBarWidth, Dimension, PROPERTY_UPDATE_MEASURE); 108 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(MaxNavBarWidth, Dimension, PROPERTY_UPDATE_MEASURE); 109 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(MinContentWidth, Dimension, PROPERTY_UPDATE_MEASURE); 110 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(NavBarPosition, NavBarPosition, PROPERTY_UPDATE_MEASURE); 111 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(HideNavBar, bool, PROPERTY_UPDATE_MEASURE); 112 // back button icon 113 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(NoPixMap, bool, PROPERTY_UPDATE_MEASURE); 114 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(ImageSource, ImageSourceInfo, PROPERTY_UPDATE_MEASURE); 115 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(PixelMap, RefPtr<PixelMap>, PROPERTY_UPDATE_MEASURE); 116 }; 117 118 } // namespace OHOS::Ace::NG 119 120 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERN_NAVIGATION_NAVIGATION_LAYOUT_PROPERTY_H 121