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