1 /*
2  * Copyright (c) 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 
16 #include "list_option.h"
17 
18 #include <cstdint>
19 #include <vector>
20 
21 #include "native_node.h"
22 #include "native_type.h"
23 #include "node_model.h"
24 
25 #include "base/error/error_code.h"
26 #include "base/utils/utils.h"
27 #include "core/interfaces/arkoala/arkoala_api.h"
28 
29 #ifdef __cplusplus
30 extern "C" {
31 #endif
32 
OH_ArkUI_ListItemSwipeActionItem_Create()33 ArkUI_ListItemSwipeActionItem* OH_ArkUI_ListItemSwipeActionItem_Create()
34 {
35     ArkUI_ListItemSwipeActionItem* item =
36         new ArkUI_ListItemSwipeActionItem { nullptr, 0.0f, nullptr, nullptr, nullptr, nullptr };
37     return item;
38 }
39 
OH_ArkUI_ListItemSwipeActionItem_Dispose(ArkUI_ListItemSwipeActionItem * item)40 void OH_ArkUI_ListItemSwipeActionItem_Dispose(ArkUI_ListItemSwipeActionItem* item)
41 {
42     delete item;
43 }
44 
OH_ArkUI_ListItemSwipeActionItem_SetContent(ArkUI_ListItemSwipeActionItem * item,ArkUI_NodeHandle node)45 void OH_ArkUI_ListItemSwipeActionItem_SetContent(ArkUI_ListItemSwipeActionItem* item, ArkUI_NodeHandle node)
46 {
47     CHECK_NULL_VOID(item);
48     item->node = node->uiNodeHandle;
49 }
50 
OH_ArkUI_ListItemSwipeActionItem_SetActionAreaDistance(ArkUI_ListItemSwipeActionItem * item,float distance)51 void OH_ArkUI_ListItemSwipeActionItem_SetActionAreaDistance(ArkUI_ListItemSwipeActionItem* item, float distance)
52 {
53     CHECK_NULL_VOID(item);
54     item->actionAreaDistance = distance;
55 }
56 
OH_ArkUI_ListItemSwipeActionItem_GetActionAreaDistance(ArkUI_ListItemSwipeActionItem * item)57 float OH_ArkUI_ListItemSwipeActionItem_GetActionAreaDistance(ArkUI_ListItemSwipeActionItem* item)
58 {
59     CHECK_NULL_RETURN(item, 0.0f);
60     return item->actionAreaDistance;
61 }
62 
OH_ArkUI_ListItemSwipeActionItem_SetOnEnterActionArea(ArkUI_ListItemSwipeActionItem * item,void (* callback)())63 void OH_ArkUI_ListItemSwipeActionItem_SetOnEnterActionArea(ArkUI_ListItemSwipeActionItem* item, void (*callback)())
64 {
65     CHECK_NULL_VOID(item);
66     item->onEnterActionArea = reinterpret_cast<void*>(callback);
67 }
68 
OH_ArkUI_ListItemSwipeActionItem_SetOnEnterActionAreaWithUserData(ArkUI_ListItemSwipeActionItem * item,void * userData,void (* callback)(void * userData))69 void OH_ArkUI_ListItemSwipeActionItem_SetOnEnterActionAreaWithUserData(ArkUI_ListItemSwipeActionItem* item,
70     void* userData, void (*callback)(void* userData))
71 {
72     CHECK_NULL_VOID(item);
73     item->onEnterActionArea = reinterpret_cast<void*>(callback);
74     item->onEnterActionAreaUserData = userData;
75 }
76 
OH_ArkUI_ListItemSwipeActionItem_SetOnAction(ArkUI_ListItemSwipeActionItem * item,void (* callback)())77 void OH_ArkUI_ListItemSwipeActionItem_SetOnAction(ArkUI_ListItemSwipeActionItem* item, void (*callback)())
78 {
79     CHECK_NULL_VOID(item);
80     item->onAction = reinterpret_cast<void*>(callback);
81 }
82 
OH_ArkUI_ListItemSwipeActionItem_SetOnActionWithUserData(ArkUI_ListItemSwipeActionItem * item,void * userData,void (* callback)(void * userData))83 void OH_ArkUI_ListItemSwipeActionItem_SetOnActionWithUserData(ArkUI_ListItemSwipeActionItem* item,
84     void* userData, void (*callback)(void* userData))
85 {
86     CHECK_NULL_VOID(item);
87     item->onAction = reinterpret_cast<void*>(callback);
88     item->onActionUserData = userData;
89 }
90 
OH_ArkUI_ListItemSwipeActionItem_SetOnExitActionArea(ArkUI_ListItemSwipeActionItem * item,void (* callback)())91 void OH_ArkUI_ListItemSwipeActionItem_SetOnExitActionArea(ArkUI_ListItemSwipeActionItem* item, void (*callback)())
92 {
93     CHECK_NULL_VOID(item);
94     item->onExitActionArea = reinterpret_cast<void*>(callback);
95 }
96 
OH_ArkUI_ListItemSwipeActionItem_SetOnExitActionAreaWithUserData(ArkUI_ListItemSwipeActionItem * item,void * userData,void (* callback)(void * userData))97 void OH_ArkUI_ListItemSwipeActionItem_SetOnExitActionAreaWithUserData(ArkUI_ListItemSwipeActionItem* item,
98     void* userData, void (*callback)(void* userData))
99 {
100     CHECK_NULL_VOID(item);
101     item->onExitActionArea = reinterpret_cast<void*>(callback);
102     item->onExitActionAreaUserData = userData;
103 }
104 
OH_ArkUI_ListItemSwipeActionItem_SetOnStateChange(ArkUI_ListItemSwipeActionItem * item,void (* callback)(ArkUI_ListItemSwipeActionState swipeActionState))105 void OH_ArkUI_ListItemSwipeActionItem_SetOnStateChange(
106     ArkUI_ListItemSwipeActionItem* item, void (*callback)(ArkUI_ListItemSwipeActionState swipeActionState))
107 {
108     CHECK_NULL_VOID(item);
109     item->onStateChange = reinterpret_cast<void*>(callback);
110 }
111 
OH_ArkUI_ListItemSwipeActionItem_SetOnStateChangeWithUserData(ArkUI_ListItemSwipeActionItem * item,void * userData,void (* callback)(ArkUI_ListItemSwipeActionState swipeActionState,void * userData))112 void OH_ArkUI_ListItemSwipeActionItem_SetOnStateChangeWithUserData(ArkUI_ListItemSwipeActionItem* item,
113     void* userData, void (*callback)(ArkUI_ListItemSwipeActionState swipeActionState, void* userData))
114 {
115     CHECK_NULL_VOID(item);
116     item->onStateChange = reinterpret_cast<void*>(callback);
117     item->onStateChangeUserData = userData;
118 }
119 
OH_ArkUI_ListItemSwipeActionOption_Create()120 ArkUI_ListItemSwipeActionOption* OH_ArkUI_ListItemSwipeActionOption_Create()
121 {
122     ArkUI_ListItemSwipeActionOption* option = new ArkUI_ListItemSwipeActionOption { nullptr, nullptr, 0, nullptr };
123     return option;
124 }
125 
OH_ArkUI_ListItemSwipeActionOption_Dispose(ArkUI_ListItemSwipeActionOption * option)126 void OH_ArkUI_ListItemSwipeActionOption_Dispose(ArkUI_ListItemSwipeActionOption* option)
127 {
128     delete option;
129 }
130 
OH_ArkUI_ListItemSwipeActionOption_SetStart(ArkUI_ListItemSwipeActionOption * option,ArkUI_ListItemSwipeActionItem * item)131 void OH_ArkUI_ListItemSwipeActionOption_SetStart(
132     ArkUI_ListItemSwipeActionOption* option, ArkUI_ListItemSwipeActionItem* item)
133 {
134     CHECK_NULL_VOID(option);
135     option->start = item;
136 }
137 
OH_ArkUI_ListItemSwipeActionOption_SetEnd(ArkUI_ListItemSwipeActionOption * option,ArkUI_ListItemSwipeActionItem * item)138 void OH_ArkUI_ListItemSwipeActionOption_SetEnd(
139     ArkUI_ListItemSwipeActionOption* option, ArkUI_ListItemSwipeActionItem* item)
140 {
141     CHECK_NULL_VOID(option);
142     option->end = item;
143 }
144 
OH_ArkUI_ListItemSwipeActionOption_SetEdgeEffect(ArkUI_ListItemSwipeActionOption * option,ArkUI_ListItemSwipeEdgeEffect edgeEffect)145 void OH_ArkUI_ListItemSwipeActionOption_SetEdgeEffect(
146     ArkUI_ListItemSwipeActionOption* option, ArkUI_ListItemSwipeEdgeEffect edgeEffect)
147 {
148     CHECK_NULL_VOID(option);
149     option->edgeEffect = edgeEffect;
150 }
151 
OH_ArkUI_ListItemSwipeActionOption_GetEdgeEffect(ArkUI_ListItemSwipeActionOption * option)152 int32_t OH_ArkUI_ListItemSwipeActionOption_GetEdgeEffect(ArkUI_ListItemSwipeActionOption* option)
153 {
154     CHECK_NULL_RETURN(option, 0);
155     return option->edgeEffect;
156 }
157 
OH_ArkUI_ListItemSwipeActionOption_SetOnOffsetChange(ArkUI_ListItemSwipeActionOption * option,void (* callback)(float offset))158 void OH_ArkUI_ListItemSwipeActionOption_SetOnOffsetChange(
159     ArkUI_ListItemSwipeActionOption* option, void (*callback)(float offset))
160 {
161     CHECK_NULL_VOID(option);
162     option->onOffsetChange = reinterpret_cast<void*>(callback);
163 }
164 
OH_ArkUI_ListItemSwipeActionOption_SetOnOffsetChangeWithUserData(ArkUI_ListItemSwipeActionOption * option,void * userData,void (* callback)(float offset,void * userData))165 void OH_ArkUI_ListItemSwipeActionOption_SetOnOffsetChangeWithUserData(ArkUI_ListItemSwipeActionOption* option,
166     void* userData, void (*callback)(float offset, void* userData))
167 {
168     CHECK_NULL_VOID(option);
169     option->onOffsetChange = reinterpret_cast<void*>(callback);
170     option->userData = userData;
171 }
172 
OH_ArkUI_List_CloseAllSwipeActions(ArkUI_NodeHandle node,void * userData,void (* onFinish)(void * userData))173 int32_t OH_ArkUI_List_CloseAllSwipeActions(ArkUI_NodeHandle node, void* userData, void (*onFinish)(void* userData))
174 {
175     CHECK_NULL_RETURN(node, OHOS::Ace::ERROR_CODE_PARAM_INVALID);
176     if (node->type != ARKUI_NODE_LIST) {
177         return OHOS::Ace::ERROR_CODE_NATIVE_IMPL_TYPE_NOT_SUPPORTED;
178     }
179     auto* fullImpl = OHOS::Ace::NodeModel::GetFullImpl();
180     CHECK_NULL_RETURN(fullImpl, OHOS::Ace::ERROR_CODE_NATIVE_IMPL_LIBRARY_NOT_FOUND);
181 
182     fullImpl->getNodeModifiers()->getListModifier()->setListCloseAllSwipeActions(
183         node->uiNodeHandle, userData, onFinish);
184     return OHOS::Ace::ERROR_CODE_NO_ERROR;
185 }
186 
OH_ArkUI_ListChildrenMainSizeOption_Create()187 ArkUI_ListChildrenMainSize* OH_ArkUI_ListChildrenMainSizeOption_Create()
188 {
189     ArkUI_ListChildrenMainSize* option = new ArkUI_ListChildrenMainSize { 0, { -1.0f } };
190     return option;
191 }
192 
OH_ArkUI_ListChildrenMainSizeOption_Dispose(ArkUI_ListChildrenMainSize * option)193 void OH_ArkUI_ListChildrenMainSizeOption_Dispose(ArkUI_ListChildrenMainSize* option)
194 {
195     delete option;
196 }
197 
OH_ArkUI_ListChildrenMainSizeOption_SetDefaultMainSize(ArkUI_ListChildrenMainSize * option,float defaultMainSize)198 int32_t OH_ArkUI_ListChildrenMainSizeOption_SetDefaultMainSize(
199     ArkUI_ListChildrenMainSize* option, float defaultMainSize)
200 {
201     CHECK_NULL_RETURN(option, OHOS::Ace::ERROR_CODE_PARAM_INVALID;);
202     if (defaultMainSize < 0) {
203         return OHOS::Ace::ERROR_CODE_PARAM_INVALID;
204     }
205     option->defaultMainSize = defaultMainSize;
206     return OHOS::Ace::ERROR_CODE_NO_ERROR;
207 }
208 
OH_ArkUI_ListChildrenMainSizeOption_GetDefaultMainSize(ArkUI_ListChildrenMainSize * option)209 float OH_ArkUI_ListChildrenMainSizeOption_GetDefaultMainSize(ArkUI_ListChildrenMainSize* option)
210 {
211     CHECK_NULL_RETURN(option, -1);
212     return option->defaultMainSize;
213 }
214 
OH_ArkUI_ListChildrenMainSizeOption_Resize(ArkUI_ListChildrenMainSize * option,int32_t totalSize)215 void OH_ArkUI_ListChildrenMainSizeOption_Resize(ArkUI_ListChildrenMainSize* option, int32_t totalSize)
216 {
217     CHECK_NULL_VOID(option);
218     if (totalSize <= 0) {
219         return;
220     }
221     option->mainSize.resize(std::max(totalSize, 0), -1.0f);
222 }
223 
OH_ArkUI_ListChildrenMainSizeOption_Splice(ArkUI_ListChildrenMainSize * option,int32_t index,int32_t deleteCount,int32_t addCount)224 int32_t OH_ArkUI_ListChildrenMainSizeOption_Splice(
225     ArkUI_ListChildrenMainSize* option, int32_t index, int32_t deleteCount, int32_t addCount)
226 {
227     CHECK_NULL_RETURN(option, OHOS::Ace::ERROR_CODE_PARAM_INVALID);
228     if (index < 0 || deleteCount < 0 || addCount < 0 || static_cast<int32_t>(option->mainSize.size()) - 1 < index) {
229         return OHOS::Ace::ERROR_CODE_PARAM_INVALID;
230     }
231     while (deleteCount > 0) {
232         if (static_cast<size_t>(index) < option->mainSize.size()) {
233             option->mainSize.erase(option->mainSize.begin() + index);
234         }
235         deleteCount--;
236     }
237     while (addCount > 0) {
238         option->mainSize.insert(option->mainSize.begin() + index, -1.0f);
239         addCount--;
240     }
241     return 0;
242 }
243 
OH_ArkUI_ListChildrenMainSizeOption_UpdateSize(ArkUI_ListChildrenMainSize * option,int32_t index,float mainSize)244 int32_t OH_ArkUI_ListChildrenMainSizeOption_UpdateSize(
245     ArkUI_ListChildrenMainSize* option, int32_t index, float mainSize)
246 {
247     CHECK_NULL_RETURN(option, OHOS::Ace::ERROR_CODE_PARAM_INVALID);
248     if (index < 0 || mainSize < 0 || static_cast<int32_t>(option->mainSize.size()) - 1 < index) {
249         return OHOS::Ace::ERROR_CODE_PARAM_INVALID;
250     }
251     option->mainSize[index] = mainSize;
252     return OHOS::Ace::ERROR_CODE_NO_ERROR;
253 }
254 
OH_ArkUI_ListChildrenMainSizeOption_GetMainSize(ArkUI_ListChildrenMainSize * option,int32_t index)255 float OH_ArkUI_ListChildrenMainSizeOption_GetMainSize(ArkUI_ListChildrenMainSize* option, int32_t index)
256 {
257     CHECK_NULL_RETURN(option, -1);
258     if (index < 0 || static_cast<int32_t>(option->mainSize.size()) - 1 < index) {
259         return -1;
260     }
261     return option->mainSize[index];
262 }
263 
264 #ifdef __cplusplus
265 };
266 #endif
267