• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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