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