1 /*
2 * Copyright (c) 2023-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 #include "bridge/declarative_frontend/engine/jsi/nativeModule/arkts_native_grid_item_bridge.h"
16
17 #include "core/components_ng/pattern/grid/grid_item_theme.h"
18 namespace OHOS::Ace::NG {
19 constexpr int32_t NUM_0 = 0;
20 constexpr int32_t NUM_1 = 1;
21 constexpr int32_t DEFAULT_GRIDITEM_STYLE = static_cast<int32_t>(GridItemStyle::NONE);
22
SetGridItemSelectable(ArkUIRuntimeCallInfo * runtimeCallInfo)23 ArkUINativeModuleValue GridItemBridge::SetGridItemSelectable(ArkUIRuntimeCallInfo *runtimeCallInfo)
24 {
25 EcmaVM* vm = runtimeCallInfo->GetVM();
26 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
27 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
28 Local<JSValueRef> selectableArg = runtimeCallInfo->GetCallArgRef(NUM_1); // selectable value
29 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
30 if (selectableArg->IsBoolean()) {
31 bool selectable = selectableArg->ToBoolean(vm)->Value();
32 GetArkUINodeModifiers()->getGridItemModifier()->setGridItemSelectable(nativeNode, selectable);
33 } else {
34 GetArkUINodeModifiers()->getGridItemModifier()->resetGridItemSelectable(nativeNode);
35 }
36 return panda::JSValueRef::Undefined(vm);
37 }
38
ResetGridItemSelectable(ArkUIRuntimeCallInfo * runtimeCallInfo)39 ArkUINativeModuleValue GridItemBridge::ResetGridItemSelectable(ArkUIRuntimeCallInfo *runtimeCallInfo)
40 {
41 EcmaVM *vm = runtimeCallInfo->GetVM();
42 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
43 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
44 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
45 GetArkUINodeModifiers()->getGridItemModifier()->resetGridItemSelectable(nativeNode);
46 return panda::JSValueRef::Undefined(vm);
47 }
48
SetGridItemSelected(ArkUIRuntimeCallInfo * runtimeCallInfo)49 ArkUINativeModuleValue GridItemBridge::SetGridItemSelected(ArkUIRuntimeCallInfo* runtimeCallInfo)
50 {
51 EcmaVM* vm = runtimeCallInfo->GetVM();
52 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
53 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
54 Local<JSValueRef> selectedArg = runtimeCallInfo->GetCallArgRef(NUM_1); // selected value
55 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
56 if (selectedArg->IsBoolean()) {
57 bool selected = selectedArg->ToBoolean(vm)->Value();
58 GetArkUINodeModifiers()->getGridItemModifier()->setGridItemSelected(nativeNode, selected);
59 } else {
60 GetArkUINodeModifiers()->getGridItemModifier()->resetGridItemSelected(nativeNode);
61 }
62
63 return panda::JSValueRef::Undefined(vm);
64 }
ResetGridItemSelected(ArkUIRuntimeCallInfo * runtimeCallInfo)65 ArkUINativeModuleValue GridItemBridge::ResetGridItemSelected(ArkUIRuntimeCallInfo* runtimeCallInfo)
66 {
67 EcmaVM *vm = runtimeCallInfo->GetVM();
68 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
69 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
70 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
71 GetArkUINodeModifiers()->getGridItemModifier()->resetGridItemSelected(nativeNode);
72 return panda::JSValueRef::Undefined(vm);
73 }
74
SetGridItemRowStart(ArkUIRuntimeCallInfo * runtimeCallInfo)75 ArkUINativeModuleValue GridItemBridge::SetGridItemRowStart(ArkUIRuntimeCallInfo* runtimeCallInfo)
76 {
77 EcmaVM* vm = runtimeCallInfo->GetVM();
78 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
79 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
80 Local<JSValueRef> rowStartArg = runtimeCallInfo->GetCallArgRef(NUM_1); // rowStart value
81 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
82 if (rowStartArg->IsNumber()) {
83 int32_t stars = rowStartArg->Int32Value(vm);
84 GetArkUINodeModifiers()->getGridItemModifier()->setGridItemRowStart(nativeNode, stars);
85 } else {
86 GetArkUINodeModifiers()->getGridItemModifier()->resetGridItemRowStart(nativeNode);
87 }
88 return panda::JSValueRef::Undefined(vm);
89 }
90
ResetGridItemRowStart(ArkUIRuntimeCallInfo * runtimeCallInfo)91 ArkUINativeModuleValue GridItemBridge::ResetGridItemRowStart(ArkUIRuntimeCallInfo* runtimeCallInfo)
92 {
93 EcmaVM* vm = runtimeCallInfo->GetVM();
94 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
95 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
96 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
97 GetArkUINodeModifiers()->getGridItemModifier()->resetGridItemRowStart(nativeNode);
98 return panda::JSValueRef::Undefined(vm);
99 }
100
SetGridItemRowEnd(ArkUIRuntimeCallInfo * runtimeCallInfo)101 ArkUINativeModuleValue GridItemBridge::SetGridItemRowEnd(ArkUIRuntimeCallInfo* runtimeCallInfo)
102 {
103 EcmaVM* vm = runtimeCallInfo->GetVM();
104 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
105 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
106 Local<JSValueRef> rowEndArg = runtimeCallInfo->GetCallArgRef(NUM_1); // rowEnd value
107 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
108 if (rowEndArg->IsNumber()) {
109 int32_t end = rowEndArg->Int32Value(vm);
110 GetArkUINodeModifiers()->getGridItemModifier()->setGridItemRowEnd(nativeNode, end);
111 } else {
112 GetArkUINodeModifiers()->getGridItemModifier()->resetGridItemRowEnd(nativeNode);
113 }
114 return panda::JSValueRef::Undefined(vm);
115 }
116
ResetGridItemRowEnd(ArkUIRuntimeCallInfo * runtimeCallInfo)117 ArkUINativeModuleValue GridItemBridge::ResetGridItemRowEnd(ArkUIRuntimeCallInfo* runtimeCallInfo)
118 {
119 EcmaVM* vm = runtimeCallInfo->GetVM();
120 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
121 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
122 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
123 GetArkUINodeModifiers()->getGridItemModifier()->resetGridItemRowEnd(nativeNode);
124 return panda::JSValueRef::Undefined(vm);
125 }
126
SetGridItemColumnStart(ArkUIRuntimeCallInfo * runtimeCallInfo)127 ArkUINativeModuleValue GridItemBridge::SetGridItemColumnStart(ArkUIRuntimeCallInfo* runtimeCallInfo)
128 {
129 EcmaVM* vm = runtimeCallInfo->GetVM();
130 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
131 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
132 Local<JSValueRef> columnStartArg = runtimeCallInfo->GetCallArgRef(NUM_1); // columnStart value
133 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
134 if (columnStartArg->IsNumber()) {
135 int32_t stars = columnStartArg->Int32Value(vm);
136 GetArkUINodeModifiers()->getGridItemModifier()->setGridItemColumnStart(nativeNode, stars);
137 } else {
138 GetArkUINodeModifiers()->getGridItemModifier()->resetGridItemColumnStart(nativeNode);
139 }
140 return panda::JSValueRef::Undefined(vm);
141 }
142
ResetGridItemColumnStart(ArkUIRuntimeCallInfo * runtimeCallInfo)143 ArkUINativeModuleValue GridItemBridge::ResetGridItemColumnStart(ArkUIRuntimeCallInfo* runtimeCallInfo)
144 {
145 EcmaVM* vm = runtimeCallInfo->GetVM();
146 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
147 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
148 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
149 GetArkUINodeModifiers()->getGridItemModifier()->resetGridItemColumnStart(nativeNode);
150 return panda::JSValueRef::Undefined(vm);
151 }
152
SetGridItemColumnEnd(ArkUIRuntimeCallInfo * runtimeCallInfo)153 ArkUINativeModuleValue GridItemBridge::SetGridItemColumnEnd(ArkUIRuntimeCallInfo* runtimeCallInfo)
154 {
155 EcmaVM* vm = runtimeCallInfo->GetVM();
156 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
157 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
158 Local<JSValueRef> columnEndArg = runtimeCallInfo->GetCallArgRef(NUM_1); // columnEnd value
159 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
160 if (columnEndArg->IsNumber()) {
161 int32_t columnEnd = columnEndArg->Int32Value(vm);
162 GetArkUINodeModifiers()->getGridItemModifier()->setGridItemColumnEnd(nativeNode, columnEnd);
163 } else {
164 GetArkUINodeModifiers()->getGridItemModifier()->resetGridItemColumnEnd(nativeNode);
165 }
166 return panda::JSValueRef::Undefined(vm);
167 }
168
ResetGridItemColumnEnd(ArkUIRuntimeCallInfo * runtimeCallInfo)169 ArkUINativeModuleValue GridItemBridge::ResetGridItemColumnEnd(ArkUIRuntimeCallInfo* runtimeCallInfo)
170 {
171 EcmaVM* vm = runtimeCallInfo->GetVM();
172 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
173 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
174 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
175 GetArkUINodeModifiers()->getGridItemModifier()->resetGridItemColumnEnd(nativeNode);
176 return panda::JSValueRef::Undefined(vm);
177 }
178
SetGridItemOptions(ArkUIRuntimeCallInfo * runtimeCallInfo)179 ArkUINativeModuleValue GridItemBridge::SetGridItemOptions(ArkUIRuntimeCallInfo* runtimeCallInfo)
180 {
181 EcmaVM* vm = runtimeCallInfo->GetVM();
182 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
183 Local<JSValueRef> nodeVal = runtimeCallInfo->GetCallArgRef(NUM_0);
184 Local<JSValueRef> styleVal = runtimeCallInfo->GetCallArgRef(NUM_1);
185 auto nativeNode = nodePtr(nodeVal->ToNativePointer(vm)->Value());
186
187 int32_t gridItemStyle = DEFAULT_GRIDITEM_STYLE;
188 if (styleVal->IsNumber() && styleVal->Int32Value(vm) >= static_cast<int32_t>(GridItemStyle::NONE) &&
189 styleVal->Int32Value(vm) <= static_cast<int32_t>(GridItemStyle::PLAIN)) {
190 gridItemStyle = styleVal->Int32Value(vm);
191 }
192 GetArkUINodeModifiers()->getGridItemModifier()->setGridItemOptions(nativeNode, gridItemStyle);
193 return panda::JSValueRef::Undefined(vm);
194 }
195 } // namespace OHOS::Ace::NG