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