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_PATTERN_MENU_MENU_LAYOUT_PROPERTY_H 17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERN_MENU_MENU_LAYOUT_PROPERTY_H 18 19 #include <string> 20 21 #include "base/utils/utils.h" 22 #include "core/components/select/select_theme.h" 23 #include "core/components_ng/base/frame_node.h" 24 #include "core/components_ng/layout/layout_property.h" 25 #include "core/components_ng/pattern/option/option_pattern.h" 26 #include "core/components_ng/pattern/select/select_pattern.h" 27 #include "core/components_ng/property/property.h" 28 #include "core/components_v2/inspector/utils.h" 29 #include "core/pipeline/pipeline_base.h" 30 #include "core/pipeline_ng/pipeline_context.h" 31 namespace OHOS::Ace::NG { 32 struct MenuItemFontStyle { 33 ACE_DEFINE_PROPERTY_GROUP_ITEM(FontSize, Dimension); 34 ACE_DEFINE_PROPERTY_GROUP_ITEM(FontColor, Color); 35 ACE_DEFINE_PROPERTY_GROUP_ITEM(FontWeight, FontWeight); 36 ACE_DEFINE_PROPERTY_GROUP_ITEM(FontFamily, std::vector<std::string>); 37 ACE_DEFINE_PROPERTY_GROUP_ITEM(ItalicFontStyle, Ace::FontStyle); 38 }; 39 40 struct SelectMenuAlignOption { 41 ACE_DEFINE_PROPERTY_GROUP_ITEM(AlignType, MenuAlignType); 42 ACE_DEFINE_PROPERTY_GROUP_ITEM(Offset, DimensionOffset); 43 }; 44 45 class ACE_EXPORT MenuLayoutProperty : public LayoutProperty { 46 DECLARE_ACE_TYPE(MenuLayoutProperty, LayoutProperty); 47 48 public: 49 MenuLayoutProperty() = default; 50 51 ~MenuLayoutProperty() override = default; 52 Clone()53 RefPtr<LayoutProperty> Clone() const override 54 { 55 auto value = MakeRefPtr<MenuLayoutProperty>(); 56 value->LayoutProperty::UpdateLayoutProperty(DynamicCast<LayoutProperty>(this)); 57 value->propMenuOffset_ = CloneMenuOffset(); 58 value->propTargetSize_ = CloneTargetSize(); 59 value->propPositionOffset_ = ClonePositionOffset(); 60 value->propMenuItemFontStyle_ = CloneMenuItemFontStyle(); 61 value->propTitle_ = CloneTitle(); 62 value->propMenuPlacement_ = CloneMenuPlacement(); 63 value->propSelectMenuAlignOption_ = CloneSelectMenuAlignOption(); 64 value->propBorderRadius_ = CloneBorderRadius(); 65 value->propMenuWidth_ = CloneMenuWidth(); 66 return value; 67 } 68 Reset()69 void Reset() override 70 { 71 LayoutProperty::Reset(); 72 ResetMenuOffset(); 73 ResetTargetSize(); 74 ResetPositionOffset(); 75 ResetMenuItemFontStyle(); 76 ResetTitle(); 77 ResetMenuPlacement(); 78 ResetSelectMenuAlignOption(); 79 ResetBorderRadius(); 80 ResetMenuWidth(); 81 } 82 83 // target frameNode that this menu belongs to 84 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(MenuOffset, NG::OffsetF, PROPERTY_UPDATE_MEASURE); 85 // target frameNode size, null for click show menu 86 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(TargetSize, NG::SizeF, PROPERTY_UPDATE_MEASURE); 87 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(BorderRadius, NG::BorderRadiusProperty, PROPERTY_UPDATE_MEASURE); 88 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(MenuWidth, Dimension, PROPERTY_UPDATE_MEASURE); 89 90 // offset to cursor 91 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(PositionOffset, NG::OffsetF, PROPERTY_UPDATE_LAYOUT); 92 93 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(Title, std::string, PROPERTY_UPDATE_LAYOUT); 94 95 // placement to menu 96 ACE_DEFINE_PROPERTY_ITEM_WITHOUT_GROUP(MenuPlacement, Placement, PROPERTY_UPDATE_LAYOUT); 97 98 ACE_DEFINE_PROPERTY_GROUP(MenuItemFontStyle, MenuItemFontStyle); 99 ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(MenuItemFontStyle, FontSize, Dimension, PROPERTY_UPDATE_MEASURE); 100 ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(MenuItemFontStyle, FontColor, Color, PROPERTY_UPDATE_MEASURE); 101 ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(MenuItemFontStyle, FontWeight, FontWeight, PROPERTY_UPDATE_MEASURE); 102 ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(MenuItemFontStyle, FontFamily, 103 std::vector<std::string>, PROPERTY_UPDATE_MEASURE); 104 ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(MenuItemFontStyle, ItalicFontStyle, Ace::FontStyle, PROPERTY_UPDATE_MEASURE); 105 106 ACE_DEFINE_PROPERTY_GROUP(SelectMenuAlignOption, SelectMenuAlignOption); 107 ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(SelectMenuAlignOption, AlignType, MenuAlignType, PROPERTY_UPDATE_MEASURE); 108 ACE_DEFINE_PROPERTY_ITEM_WITH_GROUP(SelectMenuAlignOption, Offset, DimensionOffset, PROPERTY_UPDATE_MEASURE); 109 110 void ToJsonValue(std::unique_ptr<JsonValue>& json) const override; 111 112 ACE_DISALLOW_COPY_AND_MOVE(MenuLayoutProperty); 113 }; 114 } // namespace OHOS::Ace::NG 115 116 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERN_MENU_MENU_LAYOUT_PROPERTY_H 117