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