1 /*
2  * Copyright (c) 2024 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 #include "cj_menu_item_ffi.h"
17 #include "core/components_ng/base/view_stack_model.h"
18 #include "core/components_ng/base/view_stack_processor.h"
19 #include "cj_lambda.h"
20 #include "bridge/common/utils/utils.h"
21 #include "bridge/declarative_frontend/jsview/models/menu_item_model_impl.h"
22 using namespace OHOS::Ace;
23 using namespace OHOS::Ace::Framework;
24 
25 extern "C" {
FfiOHOSAceFrameworkMenuItemCreateByBuilder(void (* builder)())26 void FfiOHOSAceFrameworkMenuItemCreateByBuilder(void(*builder)())
27 {
28     auto builderFunc = CJLambda::Create(builder);
29     RefPtr<NG::UINode> customNode;
30     {
31         ViewStackModel::GetInstance()->NewScope();
32         builderFunc();
33         customNode = AceType::DynamicCast<NG::UINode>(ViewStackModel::GetInstance()->Finish());
34     }
35     MenuItemModel::GetInstance()->Create(customNode);
36 }
37 
FfiOHOSAceFrameworkMenuItemCreateByOption(const char * startIcon,const char * content,const char * endIcon,const char * labelInfo,void (* builder)())38 void FfiOHOSAceFrameworkMenuItemCreateByOption(const char* startIcon,
39     const char* content, const char* endIcon, const char* labelInfo, void(*builder)())
40 {
41     std::string startIconPath = startIcon;
42     std::string contentStr = content;
43     std::string endIconPath = endIcon;
44     std::string labelStr = labelInfo;
45     MenuItemProperties menuItemProps;
46     {
47         ImageSourceInfo imageSourceInfo(startIconPath, "", "");
48         menuItemProps.startIcon = imageSourceInfo;
49     }
50     {
51         ImageSourceInfo imageSourceInfo(endIconPath, "", "");
52         menuItemProps.endIcon = imageSourceInfo;
53     }
54     menuItemProps.content = contentStr;
55     menuItemProps.labelInfo = labelStr;
56     if (builder) {
57         menuItemProps.buildFunc = CJLambda::Create(builder);
58     }
59     MenuItemModel::GetInstance()->Create(menuItemProps);
60 }
61 
FfiOHOSAceFrameworkMenuItemIsSelected(bool value)62 void FfiOHOSAceFrameworkMenuItemIsSelected(bool value)
63 {
64     MenuItemModel::GetInstance()->SetSelected(value);
65 }
66 
FfiOHOSAceFrameworkMenuItemSelectIconByBool(bool value)67 void FfiOHOSAceFrameworkMenuItemSelectIconByBool(bool value)
68 {
69     MenuItemModel::GetInstance()->SetSelectIcon(value);
70 }
71 
FfiOHOSAceFrameworkMenuItemSelectIconByResource(const char * value)72 void FfiOHOSAceFrameworkMenuItemSelectIconByResource(const char* value)
73 {
74     std::string icon = value;
75     MenuItemModel::GetInstance()->SetSelectIcon(true);
76     MenuItemModel::GetInstance()->SetSelectIconSrc(icon);
77 }
78 
FfiOHOSAceFrameworkMenuItemContentFont(double size,int32_t unit,const char * weight,const char * family,int32_t style)79 void FfiOHOSAceFrameworkMenuItemContentFont(
80     double size, int32_t unit, const char* weight, const char* family, int32_t style)
81 {
82     MenuItemModel::GetInstance()->SetFontStyle(static_cast<FontStyle>(style));
83 
84     std::string familyVal = family;
85     auto fontFamilies = ConvertStrToFontFamilies(familyVal);
86     MenuItemModel::GetInstance()->SetFontFamily(fontFamilies);
87 
88     CalcDimension fontSize = CalcDimension(size, DimensionUnit(unit));
89     MenuItemModel::GetInstance()->SetFontSize(fontSize);
90 
91     std::string weightVal = weight;
92     MenuItemModel::GetInstance()->SetFontWeight(ConvertStrToFontWeight(weightVal));
93 }
94 
FfiOHOSAceFrameworkMenuItemContentFontColor(uint32_t value)95 void FfiOHOSAceFrameworkMenuItemContentFontColor(uint32_t value)
96 {
97     std::optional<Color> color = Color(value);
98     MenuItemModel::GetInstance()->SetFontColor(color);
99 }
100 
FfiOHOSAceFrameworkMenuItemLabelFont(double size,int32_t unit,const char * weight,const char * family,int32_t style)101 void FfiOHOSAceFrameworkMenuItemLabelFont(
102     double size, int32_t unit, const char* weight, const char* family, int32_t style)
103 {
104     MenuItemModel::GetInstance()->SetLabelFontStyle(static_cast<FontStyle>(style));
105 
106     std::string familyVal = family;
107     auto fontFamilies = ConvertStrToFontFamilies(familyVal);
108     MenuItemModel::GetInstance()->SetLabelFontFamily(fontFamilies);
109 
110     CalcDimension fontSize = CalcDimension(size, DimensionUnit(unit));
111     MenuItemModel::GetInstance()->SetLabelFontSize(fontSize);
112 
113     std::string weightVal = weight;
114     MenuItemModel::GetInstance()->SetLabelFontWeight(ConvertStrToFontWeight(weightVal));
115 }
116 
FfiOHOSAceFrameworkMenuItemLabelFontColor(uint32_t value)117 void FfiOHOSAceFrameworkMenuItemLabelFontColor(uint32_t value)
118 {
119     std::optional<Color> color = Color(value);
120     MenuItemModel::GetInstance()->SetLabelFontColor(color);
121 }
122 
FfiOHOSAceFrameworkMenuItemOnChange(void (* callback)(bool isChecked))123 void FfiOHOSAceFrameworkMenuItemOnChange(void (*callback)(bool isChecked))
124 {
125     MenuItemModel::GetInstance()->SetOnChange(CJLambda::Create(callback));
126 }
127 }