1 /*
2 * Copyright (c) 2023 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/declarative_frontend/engine/jsi/nativeModule/arkts_native_form_component_bridge.h"
17 #include "bridge/declarative_frontend/engine/jsi/nativeModule/arkts_native_common_bridge.h"
18 #include "bridge/declarative_frontend/engine/jsi/nativeModule/arkts_utils.h"
19
20 namespace OHOS::Ace::NG {
SetVisibility(ArkUIRuntimeCallInfo * runtimeCallInfo)21 ArkUINativeModuleValue FormComponentBridge::SetVisibility(ArkUIRuntimeCallInfo* runtimeCallInfo)
22 {
23 EcmaVM* vm = runtimeCallInfo->GetVM();
24 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
25 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
26 Local<JSValueRef> visibilityArg = runtimeCallInfo->GetCallArgRef(1);
27 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
28 int32_t visibility = visibilityArg->Int32Value(vm);
29 GetArkUINodeModifiers()->getFormComponentModifier()->setFormVisibility(nativeNode, visibility);
30 return panda::JSValueRef::Undefined(vm);
31 }
32
ResetVisibility(ArkUIRuntimeCallInfo * runtimeCallInfo)33 ArkUINativeModuleValue FormComponentBridge::ResetVisibility(ArkUIRuntimeCallInfo* runtimeCallInfo)
34 {
35 EcmaVM* vm = runtimeCallInfo->GetVM();
36 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
37 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
38 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
39 GetArkUINodeModifiers()->getFormComponentModifier()->resetFormVisibility(nativeNode);
40 return panda::JSValueRef::Undefined(vm);
41 }
42
AllowUpdate(ArkUIRuntimeCallInfo * runtimeCallInfo)43 ArkUINativeModuleValue FormComponentBridge::AllowUpdate(ArkUIRuntimeCallInfo* runtimeCallInfo)
44 {
45 EcmaVM* vm = runtimeCallInfo->GetVM();
46 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
47 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
48 Local<JSValueRef> allowUpdateArg = runtimeCallInfo->GetCallArgRef(1);
49 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
50 bool allowUpdate = allowUpdateArg->ToBoolean(vm)->Value();
51 GetArkUINodeModifiers()->getFormComponentModifier()->allowUpdate(nativeNode, allowUpdate);
52 return panda::JSValueRef::Undefined(vm);
53 }
54
DisallowUpdate(ArkUIRuntimeCallInfo * runtimeCallInfo)55 ArkUINativeModuleValue FormComponentBridge::DisallowUpdate(ArkUIRuntimeCallInfo* runtimeCallInfo)
56 {
57 EcmaVM* vm = runtimeCallInfo->GetVM();
58 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
59 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
60 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
61 GetArkUINodeModifiers()->getFormComponentModifier()->disallowUpdate(nativeNode);
62 return panda::JSValueRef::Undefined(vm);
63 }
64
SetDimension(ArkUIRuntimeCallInfo * runtimeCallInfo)65 ArkUINativeModuleValue FormComponentBridge::SetDimension(ArkUIRuntimeCallInfo* runtimeCallInfo)
66 {
67 EcmaVM* vm = runtimeCallInfo->GetVM();
68 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
69 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
70 Local<JSValueRef> dimensionArg = runtimeCallInfo->GetCallArgRef(1);
71 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
72 if (dimensionArg->IsNull() || dimensionArg->IsUndefined()) {
73 GetArkUINodeModifiers()->getFormComponentModifier()->resetDimension(nativeNode);
74 } else {
75 int32_t dimension = dimensionArg->Int32Value(vm);
76 GetArkUINodeModifiers()->getFormComponentModifier()->setDimension(nativeNode, dimension);
77 }
78 return panda::JSValueRef::Undefined(vm);
79 }
80
ResetDimension(ArkUIRuntimeCallInfo * runtimeCallInfo)81 ArkUINativeModuleValue FormComponentBridge::ResetDimension(ArkUIRuntimeCallInfo* runtimeCallInfo)
82 {
83 EcmaVM* vm = runtimeCallInfo->GetVM();
84 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
85 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
86 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
87 GetArkUINodeModifiers()->getFormComponentModifier()->resetDimension(nativeNode);
88 return panda::JSValueRef::Undefined(vm);
89 }
90
SetModuleName(ArkUIRuntimeCallInfo * runtimeCallInfo)91 ArkUINativeModuleValue FormComponentBridge::SetModuleName(ArkUIRuntimeCallInfo* runtimeCallInfo)
92 {
93 EcmaVM* vm = runtimeCallInfo->GetVM();
94 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
95 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
96 Local<JSValueRef> moduleNameArg = runtimeCallInfo->GetCallArgRef(1);
97 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
98 if (moduleNameArg->IsNull() || moduleNameArg->IsUndefined()) {
99 GetArkUINodeModifiers()->getFormComponentModifier()->resetModuleName(nativeNode);
100 } else {
101 std::string moduleName = moduleNameArg->ToString(vm)->ToString(vm);
102 GetArkUINodeModifiers()->getFormComponentModifier()->setModuleName(nativeNode, moduleName.c_str());
103 }
104 return panda::JSValueRef::Undefined(vm);
105 }
106
ResetModuleName(ArkUIRuntimeCallInfo * runtimeCallInfo)107 ArkUINativeModuleValue FormComponentBridge::ResetModuleName(ArkUIRuntimeCallInfo* runtimeCallInfo)
108 {
109 EcmaVM* vm = runtimeCallInfo->GetVM();
110 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
111 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
112 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
113 GetArkUINodeModifiers()->getFormComponentModifier()->resetModuleName(nativeNode);
114 return panda::JSValueRef::Undefined(vm);
115 }
116
SetSize(ArkUIRuntimeCallInfo * runtimeCallInfo)117 ArkUINativeModuleValue FormComponentBridge::SetSize(ArkUIRuntimeCallInfo* runtimeCallInfo)
118 {
119 EcmaVM* vm = runtimeCallInfo->GetVM();
120 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
121 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
122 Local<JSValueRef> widthValue = runtimeCallInfo->GetCallArgRef(1);
123 Local<JSValueRef> heightValue = runtimeCallInfo->GetCallArgRef(2);
124 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
125 CommonBridge::SetSize(runtimeCallInfo);
126 CalcDimension width = 0.0_vp;
127 CalcDimension height = 0.0_vp;
128 bool hasWidth = (!widthValue->IsNull() && !widthValue->IsUndefined() &&
129 ArkTSUtils::ParseJsDimensionVp(vm, widthValue, width));
130 bool hasHeight = (!heightValue->IsNull() && !heightValue->IsUndefined() &&
131 ArkTSUtils::ParseJsDimensionVp(vm, heightValue, height));
132 if (!hasWidth && !hasHeight) {
133 GetArkUINodeModifiers()->getFormComponentModifier()->resetFormSize(nativeNode);
134 } else {
135 GetArkUINodeModifiers()->getFormComponentModifier()->setFormSize(nativeNode,
136 width.Value(), static_cast<int>(width.Unit()), height.Value(), static_cast<int>(height.Unit()));
137 }
138 return panda::JSValueRef::Undefined(vm);
139 }
140
ResetSize(ArkUIRuntimeCallInfo * runtimeCallInfo)141 ArkUINativeModuleValue FormComponentBridge::ResetSize(ArkUIRuntimeCallInfo* runtimeCallInfo)
142 {
143 EcmaVM* vm = runtimeCallInfo->GetVM();
144 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
145 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
146 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
147 CommonBridge::ResetSize(runtimeCallInfo);
148 GetArkUINodeModifiers()->getFormComponentModifier()->resetFormSize(nativeNode);
149 return panda::JSValueRef::Undefined(vm);
150 }
151 }