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_toggle_ffi.h"
17
18 #include "cj_lambda.h"
19 #include "bridge/cj_frontend/interfaces/cj_ffi/cj_view_abstract_ffi.h"
20 #include "bridge/cj_frontend/interfaces/cj_ffi/utils.h"
21 #include "core/components_ng/base/view_abstract_model_ng.h"
22 #include "core/components_ng/pattern/button/toggle_button_model_ng.h"
23 #include "core/components_ng/pattern/toggle/toggle_model_ng.h"
24
25 using namespace OHOS::Ace;
26 using namespace OHOS::Ace::NG;
27 using namespace OHOS::Ace::Framework;
28
29 namespace {
30 const std::vector<ToggleType> TOGGOLE_TYPES = { ToggleType::CHECKBOX, ToggleType::SWITCH, ToggleType::BUTTON };
31 } // namespace
32
33 extern "C" {
FfiOHOSAceFrameworkToggleCreate(int type,bool isOn)34 void FfiOHOSAceFrameworkToggleCreate(int type, bool isOn)
35 {
36 if (!Utils::CheckParamsValid(type, TOGGOLE_TYPES.size())) {
37 LOGE("invalid value for toggle type");
38 return;
39 }
40 ToggleModel::GetInstance()->Create(NG::ToggleType(type), isOn);
41 }
42
FfiOHOSAceFrameworkToggleWidth(double width,int32_t unit)43 void FfiOHOSAceFrameworkToggleWidth(double width, int32_t unit)
44 {
45 Dimension value(width, static_cast<DimensionUnit>(unit));
46 ViewAbstractModel::GetInstance()->SetWidth(value);
47 }
48
FfiOHOSAceFrameworkToggleHeight(double height,int32_t unit)49 void FfiOHOSAceFrameworkToggleHeight(double height, int32_t unit)
50 {
51 Dimension value(height, static_cast<DimensionUnit>(unit));
52 ViewAbstractModel::GetInstance()->SetHeight(value);
53 }
54
FfiOHOSAceFrameworkToggleSize(double width,int32_t widthUnit,double height,int32_t heightUnit)55 void FfiOHOSAceFrameworkToggleSize(double width, int32_t widthUnit, double height, int32_t heightUnit)
56 {
57 Dimension widthDime(width, static_cast<DimensionUnit>(widthUnit));
58 Dimension heightDime(height, static_cast<DimensionUnit>(heightUnit));
59 ViewAbstractModel::GetInstance()->SetWidth(widthDime);
60 ViewAbstractModel::GetInstance()->SetHeight(heightDime);
61 }
62
FfiOHOSAceFrameworkTogglePadding(double left,int32_t leftUnit,double top,int32_t topUnit,double right,int32_t rightUnit,double bottom,int32_t bottomUnit)63 void FfiOHOSAceFrameworkTogglePadding(double left, int32_t leftUnit, double top, int32_t topUnit, double right,
64 int32_t rightUnit, double bottom, int32_t bottomUnit)
65 {
66 FfiOHOSAceFrameworkViewAbstractSetPaddings(CJEdge{
67 .top = top,
68 .topUnit = topUnit,
69 .right = right,
70 .rightUnit = rightUnit,
71 .bottom = bottom,
72 .bottomUnit = bottomUnit,
73 .left = left,
74 .leftUnit = leftUnit
75 });
76 }
77
FfiOHOSAceFrameworkToggleSelectedColor(uint32_t color)78 void FfiOHOSAceFrameworkToggleSelectedColor(uint32_t color)
79 {
80 ToggleModel::GetInstance()->SetSelectedColor(Color(color));
81 }
82
FfiOHOSAceFrameworkToggleSwitchPointColor(uint32_t color)83 void FfiOHOSAceFrameworkToggleSwitchPointColor(uint32_t color)
84 {
85 ToggleModel::GetInstance()->SetSwitchPointColor(Color(color));
86 }
87
FfiOHOSAceFrameworkToggleOnChange(void (* callback)(bool isOn))88 void FfiOHOSAceFrameworkToggleOnChange(void (*callback)(bool isOn))
89 {
90 auto lambda = CJLambda::Create(callback);
91 auto onChange = [lambda](bool isOn) {
92 lambda(isOn);
93 };
94 ToggleModel::GetInstance()->OnChange(std::move(onChange));
95 }
96
FfiOHOSAceFrameworkTogglePop()97 void FfiOHOSAceFrameworkTogglePop()
98 {
99 ToggleModel::GetInstance()->Pop();
100 }
101
FfiToggleSetResponseRegion(CJResponseRegion value)102 void FfiToggleSetResponseRegion(CJResponseRegion value)
103 {
104 std::vector<DimensionRect> result;
105 ParseCJResponseRegion(value, result);
106 ToggleModel::GetInstance()->SetResponseRegion(result);
107 }
108
FfiToggleSetResponseRegionArray(VectorStringPtr vecContent)109 void FfiToggleSetResponseRegionArray(VectorStringPtr vecContent)
110 {
111 std::vector<DimensionRect> result;
112 ParseVectorStringPtr(vecContent, result);
113 ToggleModel::GetInstance()->SetResponseRegion(result);
114 }
115 }
116