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 "bridge/cj_frontend/interfaces/cj_ffi/cj_select_ffi.h"
17
18 #include <vector>
19
20 #include "cj_lambda.h"
21 #include "bridge/cj_frontend/interfaces/cj_ffi/utils.h"
22 #include "bridge/common/utils/utils.h"
23 #include "bridge/declarative_frontend/view_stack_processor.h"
24 #include "core/components/chart/chart_component.h"
25 #include "core/components_ng/pattern/select/select_model_ng.h"
26
27 using namespace OHOS::Ace;
28 using namespace OHOS::Ace::Framework;
29
30 extern "C" {
FFICJCreateVectorNativeSelectOption(int64_t size)31 VectorNativeSelectOptionHandle FFICJCreateVectorNativeSelectOption(int64_t size)
32 {
33 LOGI("Create NativeSelectOption Vector");
34 return new std::vector<NativeSelectOption>(size);
35 }
36
FFICJVectorNativeSelectOptionSetElement(VectorNativeSelectOptionHandle vec,int64_t index,NativeSelectOption selectOption)37 void FFICJVectorNativeSelectOptionSetElement(
38 VectorNativeSelectOptionHandle vec, int64_t index, NativeSelectOption selectOption)
39 {
40 LOGI("NativeSelectOption Vector Set Element");
41 auto actualVec = reinterpret_cast<std::vector<NativeSelectOption>*>(vec);
42 (*actualVec)[index] = selectOption;
43 LOGI("NativeSelectOption Vector Set Element Success");
44 }
45
FFICJVectorNativeSelectOptionDelete(VectorNativeSelectOptionHandle vec)46 void FFICJVectorNativeSelectOptionDelete(VectorNativeSelectOptionHandle vec)
47 {
48 auto actualVec = reinterpret_cast<std::vector<NativeSelectOption>*>(vec);
49 delete actualVec;
50 }
51
FfiOHOSAceFrameworkSelectCreate(VectorStringPtr vecContent)52 void FfiOHOSAceFrameworkSelectCreate(VectorStringPtr vecContent)
53 {
54 auto nativeSelectOptionVec = *reinterpret_cast<std::vector<NativeSelectOption>*>(vecContent);
55 std::vector<SelectParam> params(nativeSelectOptionVec.size());
56 for (size_t i = 0; i < nativeSelectOptionVec.size(); i++) {
57 params[i] = { nativeSelectOptionVec[i].value, nativeSelectOptionVec[i].icon };
58 }
59 SelectModel::GetInstance()->Create(params);
60 }
61
FfiOHOSAceFrameworkSelectSetSelected(int32_t value)62 void FfiOHOSAceFrameworkSelectSetSelected(int32_t value)
63 {
64 SelectModel::GetInstance()->SetSelected(value);
65 }
66
FfiOHOSAceFrameworkSelectSetValue(const char * value)67 void FfiOHOSAceFrameworkSelectSetValue(const char* value)
68 {
69 SelectModel::GetInstance()->SetValue(value);
70 }
71
FfiOHOSAceFrameworkSelectSetFont(int32_t style,const char * weight,double size,int32_t sizeUnit,const char * family)72 void FfiOHOSAceFrameworkSelectSetFont(
73 int32_t style, const char* weight, double size, int32_t sizeUnit, const char* family)
74 {
75 SelectModel::GetInstance()->SetFontSize(Dimension(size, static_cast<DimensionUnit>(sizeUnit)));
76 SelectModel::GetInstance()->SetFontWeight(ConvertStrToFontWeight(weight));
77 SelectModel::GetInstance()->SetFontFamily(ConvertStrToFontFamilies(family));
78 SelectModel::GetInstance()->SetItalicFontStyle(static_cast<FontStyle>(style));
79 }
80
FfiOHOSAceFrameworkSelectSetFontColor(uint32_t color)81 void FfiOHOSAceFrameworkSelectSetFontColor(uint32_t color)
82 {
83 SelectModel::GetInstance()->SetFontColor(Color(color));
84 }
85
FfiOHOSAceFrameworkSelectSetSelectedOptionBgColor(uint32_t color)86 void FfiOHOSAceFrameworkSelectSetSelectedOptionBgColor(uint32_t color)
87 {
88 SelectModel::GetInstance()->SetSelectedOptionBgColor(Color(color));
89 }
90
FfiOHOSAceFrameworkSelectSetSelectedOptionFont(int32_t style,const char * weight,double size,int32_t sizeUnit,const char * family)91 void FfiOHOSAceFrameworkSelectSetSelectedOptionFont(
92 int32_t style, const char* weight, double size, int32_t sizeUnit, const char* family)
93 {
94 SelectModel::GetInstance()->SetSelectedOptionFontSize(Dimension(size, static_cast<DimensionUnit>(sizeUnit)));
95 SelectModel::GetInstance()->SetSelectedOptionFontWeight(ConvertStrToFontWeight(weight));
96 SelectModel::GetInstance()->SetSelectedOptionFontFamily(ConvertStrToFontFamilies(family));
97 SelectModel::GetInstance()->SetSelectedOptionItalicFontStyle(static_cast<FontStyle>(style));
98 }
99
FfiOHOSAceFrameworkSelectSetSelectedOptionFontColor(uint32_t color)100 void FfiOHOSAceFrameworkSelectSetSelectedOptionFontColor(uint32_t color)
101 {
102 SelectModel::GetInstance()->SetSelectedOptionFontColor(Color(color));
103 }
104
FfiOHOSAceFrameworkSelectSetOptionBgColor(uint32_t color)105 void FfiOHOSAceFrameworkSelectSetOptionBgColor(uint32_t color)
106 {
107 SelectModel::GetInstance()->SetOptionBgColor(Color(color));
108 }
109
FfiOHOSAceFrameworkSelectSetOptionFont(int32_t style,const char * weight,double size,int32_t sizeUnit,const char * family)110 void FfiOHOSAceFrameworkSelectSetOptionFont(
111 int32_t style, const char* weight, double size, int32_t sizeUnit, const char* family)
112 {
113 SelectModel::GetInstance()->SetOptionFontSize(Dimension(size, static_cast<DimensionUnit>(sizeUnit)));
114 SelectModel::GetInstance()->SetOptionFontWeight(ConvertStrToFontWeight(weight));
115 SelectModel::GetInstance()->SetOptionFontFamily(ConvertStrToFontFamilies(family));
116 SelectModel::GetInstance()->SetOptionItalicFontStyle(static_cast<FontStyle>(style));
117 }
118
FfiOHOSAceFrameworkSelectSetOptionFontColor(uint32_t color)119 void FfiOHOSAceFrameworkSelectSetOptionFontColor(uint32_t color)
120 {
121 SelectModel::GetInstance()->SetOptionFontColor(Color(color));
122 }
123
FfiOHOSAceFrameworkSelectSetSpace(double width,int32_t widthUnit)124 void FfiOHOSAceFrameworkSelectSetSpace(double width, int32_t widthUnit)
125 {
126 Dimension dimStrokeWidth(width, static_cast<DimensionUnit>(widthUnit));
127 SelectModel::GetInstance()->SetSpace(dimStrokeWidth);
128 }
129
FfiOHOSAceFrameworkSelectSetArrowPosition(int32_t value)130 void FfiOHOSAceFrameworkSelectSetArrowPosition(int32_t value)
131 {
132 if (static_cast<ArrowPosition>(value) != ArrowPosition::START &&
133 static_cast<ArrowPosition>(value) != ArrowPosition::END) {
134 value = 0;
135 }
136 SelectModel::GetInstance()->SetArrowPosition(static_cast<ArrowPosition>(value));
137 }
138
FfiOHOSAceFrameworkSelectSetMenuAlign(int32_t value,double dx,int32_t dxUnit,double dy,int32_t dyUnit)139 void FfiOHOSAceFrameworkSelectSetMenuAlign(
140 int32_t value, double dx, int32_t dxUnit, double dy, int32_t dyUnit)
141 {
142 Dimension dimensionX(dx, static_cast<DimensionUnit>(dxUnit));
143 Dimension dimensionY(dy, static_cast<DimensionUnit>(dyUnit));
144
145 MenuAlign menuAlignObj;
146 menuAlignObj.alignType = static_cast<MenuAlignType>(value);
147 menuAlignObj.offset = DimensionOffset(dimensionX, dimensionY);
148 SelectModel::GetInstance()->SetMenuAlign(menuAlignObj);
149 }
150
FfiOHOSAceFrameworkSelectSetOptionWidth(double width,int32_t widthUnit)151 void FfiOHOSAceFrameworkSelectSetOptionWidth(double width, int32_t widthUnit)
152 {
153 SelectModel::GetInstance()->SetHasOptionWidth(true);
154 Dimension dimStrokeWidth(width, static_cast<DimensionUnit>(widthUnit));
155 SelectModel::GetInstance()->SetOptionWidth(dimStrokeWidth);
156 }
157
FfiOHOSAceFrameworkSelectSetOptionWidthWithMode(const char * value)158 void FfiOHOSAceFrameworkSelectSetOptionWidthWithMode(const char* value)
159 {
160 SelectModel::GetInstance()->SetHasOptionWidth(true);
161 std::string modeFlag(value);
162 if (modeFlag.compare("fit_content") == 0) {
163 SelectModel::GetInstance()->SetOptionWidthFitTrigger(false);
164 } else if (modeFlag.compare("fit_trigger") == 0) {
165 SelectModel::GetInstance()->SetOptionWidthFitTrigger(true);
166 } else {
167 LOGE("OptionWidth is null or undefined");
168 SelectModel::GetInstance()->SetHasOptionWidth(false);
169 CalcDimension dimension;
170 SelectModel::GetInstance()->SetOptionWidth(dimension);
171 }
172 }
173
FfiOHOSAceFrameworkSelectSetOptionHeight(double height,int32_t heightUnit)174 void FfiOHOSAceFrameworkSelectSetOptionHeight(double height, int32_t heightUnit)
175 {
176 Dimension dimStrokeWidth(height, static_cast<DimensionUnit>(heightUnit));
177 SelectModel::GetInstance()->SetOptionHeight(dimStrokeWidth);
178 }
179
FfiOHOSAceFrameworkSelectSetMenuBackgroundColor(uint32_t color)180 void FfiOHOSAceFrameworkSelectSetMenuBackgroundColor(uint32_t color)
181 {
182 SelectModel::GetInstance()->SetMenuBackgroundColor(Color(color));
183 }
184
FfiOHOSAceFrameworkSelectSetMenuBackgroundBlurStyle(int32_t value)185 void FfiOHOSAceFrameworkSelectSetMenuBackgroundBlurStyle(int32_t value)
186 {
187 BlurStyleOption styleOption;
188 if (value >= static_cast<int>(BlurStyle::NO_MATERIAL) &&
189 value <= static_cast<int>(BlurStyle::COMPONENT_ULTRA_THICK)) {
190 styleOption.blurStyle = static_cast<BlurStyle>(value);
191 SelectModel::GetInstance()->SetMenuBackgroundBlurStyle(styleOption);
192 }
193 }
194
FfiOHOSAceFrameworkSelectOnSelect(void (* callback)(int32_t index,const char * value))195 void FfiOHOSAceFrameworkSelectOnSelect(void (*callback)(int32_t index, const char* value))
196 {
197 auto onSelect = [lambda = CJLambda::Create(callback)](int32_t index,
198 const std::string& value) -> void { lambda(index, value.c_str()); };
199 SelectModel::GetInstance()->SetOnSelect(std::move(onSelect));
200 }
201 }
202