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