• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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