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->propEnableModeChangeAnimation_ = CloneEnableModeChangeAnimation(); 52 copy->propHideNavBar_ = CloneHideNavBar(); 53 copy->propNoPixMap_ = CloneNoPixMap(); 54 copy->propImageSource_ = CloneImageSource(); 55 copy->propPixelMap_ = ClonePixelMap(); 56 return copy; 57 } 58 Reset()59 void Reset() override 60 { 61 LayoutProperty::Reset(); 62 ResetNavigationMode(); 63 ResetUsrNavigationMode(); 64 ResetNavBarWidth(); 65 ResetMinNavBarWidth(); 66 ResetMaxNavBarWidth(); 67 ResetMinContentWidth(); 68 ResetNavBarPosition(); 69 ResetEnableModeChangeAnimation(); 70 ResetHideNavBar(); 71 ResetNoPixMap(); 72 ResetImageSource(); 73 ResetPixelMap(); 74 } 75 ToJsonValue(std::unique_ptr<JsonValue> & json,const InspectorFilter & filter)76 void ToJsonValue(std::unique_ptr<JsonValue>& json, const InspectorFilter& filter) const override 77 { 78 LayoutProperty::ToJsonValue(json, filter); 79 /* no fixed attr below, just return */ 80 if (filter.IsFastFilter()) { 81 return; 82 } 83 std::string navBarWidthRange = GetMinNavBarWidthValue(DEFAULT_MIN_NAV_BAR_WIDTH).ToString() + ", " + 84 GetMaxNavBarWidthValue(DEFAULT_MAX_NAV_BAR_WIDTH).ToString(); 85 json->PutExtAttr("navBarWidth", GetNavBarWidthValue(DEFAULT_NAV_BAR_WIDTH).ToString().c_str(), filter); 86 json->PutExtAttr("navBarWidthRange", navBarWidthRange.c_str(), filter); 87 json->PutExtAttr("minContentWidth", 88 GetMinContentWidthValue(DEFAULT_MIN_CONTENT_WIDTH).ToString().c_str(), filter); 89 json->PutExtAttr("navBarPosition", GetNavBarPosition().value_or(NavBarPosition::START) == NavBarPosition::START 90 ? "NavBarPosition.Start" 91 : "NavBarPosition.End", filter); 92 static const std::array<std::string, 3> NAVIGATION_MODE_TO_STRING = { 93 "NavigationMode.STACK", 94 "NavigationMode.SPLIT", 95 "NavigationMode.AUTO", 96 }; 97 json->PutExtAttr("mode", 98 NAVIGATION_MODE_TO_STRING.at(static_cast<int32_t>(GetUsrNavigationMode().value_or(NavigationMode::AUTO))) 99 .c_str(), filter); 100 json->PutExtAttr("hideNavBar", GetHideNavBarValue(false), filter); 101 if (HasImageSource()) { 102 json->PutExtAttr("backButtonIcon", GetImageSourceValue().GetSrc().c_str(), filter); 103 } 104 json->PutExtAttr("enableModeChangeAnimation", GetEnableModeChangeAnimation().value_or(true), filter); 105 } 106 107 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(NavigationMode, NavigationMode, PROPERTY_UPDATE_MEASURE); 108 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(UsrNavigationMode, NavigationMode, PROPERTY_UPDATE_MEASURE); 109 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(NavBarWidth, Dimension, PROPERTY_UPDATE_MEASURE); 110 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(MinNavBarWidth, Dimension, PROPERTY_UPDATE_MEASURE); 111 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(MaxNavBarWidth, Dimension, PROPERTY_UPDATE_MEASURE); 112 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(MinContentWidth, Dimension, PROPERTY_UPDATE_MEASURE); 113 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(NavBarPosition, NavBarPosition, PROPERTY_UPDATE_MEASURE); 114 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(EnableModeChangeAnimation, bool, PROPERTY_UPDATE_MEASURE); 115 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(HideNavBar, bool, PROPERTY_UPDATE_MEASURE); 116 // back button icon 117 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(NoPixMap, bool, PROPERTY_UPDATE_MEASURE); 118 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(ImageSource, ImageSourceInfo, PROPERTY_UPDATE_MEASURE); 119 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(PixelMap, RefPtr<PixelMap>, PROPERTY_UPDATE_MEASURE); 120 }; 121 122 } // namespace OHOS::Ace::NG 123 124 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERN_NAVIGATION_NAVIGATION_LAYOUT_PROPERTY_H 125