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 }