1 /* 2 * Copyright (c) 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_MENU_MENU_MODEL_H 17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERNS_MENU_MENU_MODEL_H 18 19 #include "core/components_ng/pattern/menu/menu_pattern.h" 20 #include "core/components_v2/list/list_properties.h" 21 22 namespace OHOS::Ace { 23 enum class MenuColorType { 24 FONT_COLOR, 25 GROUP_DIVIDER_COLOR, 26 DIVIDER_COLOR 27 }; 28 enum class MenuDimensionType { 29 WIDTH, 30 FONT_SIZE, 31 BORDER_RADIUS, 32 RADIUS_TOP_LEFT, 33 RADIUS_TOP_RIGHT, 34 RADIUS_BOTTOM_LEFT, 35 RADIUS_BOTTOM_RIGHT 36 }; 37 enum class MenuFamilyType { 38 FONT_FAMILY 39 }; 40 class ACE_FORCE_EXPORT MenuModel { 41 public: 42 static MenuModel* GetInstance(); 43 virtual ~MenuModel() = default; 44 45 virtual void Create(); 46 virtual void SetFontSize(const Dimension& fontSize); 47 virtual void SetFontWeight(FontWeight weight); 48 virtual void SetFontStyle(Ace::FontStyle style); 49 virtual void SetFontColor(const std::optional<Color>& color); 50 virtual void SetFontFamily(const std::vector<std::string> &families); ResetFontFamily()51 virtual void ResetFontFamily() {}; 52 virtual void SetWidth(const Dimension& width); 53 virtual void SetBorderRadius(const Dimension& radius); ResetBorderRadius()54 virtual void ResetBorderRadius() {}; 55 virtual void SetBorderRadius(const std::optional<Dimension>& radiusTopLeft, 56 const std::optional<Dimension>& radiusTopRight, const std::optional<Dimension>& radiusBottomLeft, 57 const std::optional<Dimension>& radiusBottomRight); SetBorderRadius(const NG::BorderRadiusProperty & borderRadius)58 virtual void SetBorderRadius(const NG::BorderRadiusProperty& borderRadius) {}; SetExpandingMode(const NG::SubMenuExpandingMode & expandingMode)59 virtual void SetExpandingMode(const NG::SubMenuExpandingMode& expandingMode) {}; SetExpandSymbol(const std::function<void (WeakPtr<NG::FrameNode>)> & subMenuExpandSymbol)60 virtual void SetExpandSymbol(const std::function<void(WeakPtr<NG::FrameNode>)>& subMenuExpandSymbol) {}; 61 virtual void SetItemDivider(const V2::ItemDivider& divider, const DividerMode& mode) = 0; 62 virtual void SetItemGroupDivider(const V2::ItemDivider& divider, const DividerMode& mode) = 0; 63 virtual void CreateWithColorResourceObj( 64 const RefPtr<ResourceObject>& resObj, const MenuColorType menuColorType) = 0; 65 virtual void CreateWithDimensionResourceObj( 66 const RefPtr<ResourceObject>& resObj, const MenuDimensionType menuDimensionType) = 0; 67 virtual void CreateWithFontFamilyResourceObj(const RefPtr<ResourceObject>& resObj, MenuFamilyType type) = 0; 68 private: 69 static std::unique_ptr<MenuModel> instance_; 70 static std::mutex mutex_; 71 }; 72 } // namespace OHOS::Ace 73 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERNS_MENU_MENU_MODEL_H 74