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