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 #include "dialog_model.h"
16 
17 #include "node_model.h"
18 
19 #include "base/error/error_code.h"
20 
21 namespace OHOS::Ace::DialogModel {
Create()22 ArkUI_NativeDialogHandle Create()
23 {
24     auto* impl = OHOS::Ace::NodeModel::GetFullImpl();
25     if (!impl) {
26         return nullptr;
27     }
28     auto dialog = impl->getDialogAPI()->create();
29     return new ArkUI_NativeDialog({ dialog });
30 }
31 
Dispose(ArkUI_NativeDialogHandle handle)32 void Dispose(ArkUI_NativeDialogHandle handle)
33 {
34     auto* impl = OHOS::Ace::NodeModel::GetFullImpl();
35     if (!impl || !handle) {
36         return;
37     }
38     impl->getDialogAPI()->dispose(handle->controller);
39     delete handle;
40     handle = nullptr;
41 }
42 
SetContent(ArkUI_NativeDialogHandle handle, ArkUI_NodeHandle content)43 int32_t SetContent(ArkUI_NativeDialogHandle handle, ArkUI_NodeHandle content)
44 {
45     auto* impl = OHOS::Ace::NodeModel::GetFullImpl();
46     if (!impl || !handle || !content) {
47         return ERROR_CODE_PARAM_INVALID;
48     }
49     return impl->getDialogAPI()->setContent(handle->controller, content->uiNodeHandle);
50 }
51 
RemoveContent(ArkUI_NativeDialogHandle handle)52 int32_t RemoveContent(ArkUI_NativeDialogHandle handle)
53 {
54     auto* impl = OHOS::Ace::NodeModel::GetFullImpl();
55     if (!impl || !handle) {
56         return ERROR_CODE_PARAM_INVALID;
57     }
58     return impl->getDialogAPI()->removeContent(handle->controller);
59 }
60 
SetContentAlignment(ArkUI_NativeDialogHandle handle, int32_t alignment, float offsetX, float offsetY)61 int32_t SetContentAlignment(ArkUI_NativeDialogHandle handle, int32_t alignment, float offsetX, float offsetY)
62 {
63     auto* impl = OHOS::Ace::NodeModel::GetFullImpl();
64     if (!impl || !handle) {
65         return ERROR_CODE_PARAM_INVALID;
66     }
67     return impl->getDialogAPI()->setContentAlignment(handle->controller,
68         alignment, offsetX, offsetY);
69 }
70 
ResetContentAlignment(ArkUI_NativeDialogHandle handle)71 int32_t ResetContentAlignment(ArkUI_NativeDialogHandle handle)
72 {
73     auto* impl = OHOS::Ace::NodeModel::GetFullImpl();
74     if (!impl || !handle) {
75         return ERROR_CODE_PARAM_INVALID;
76     }
77     return impl->getDialogAPI()->resetContentAlignment(handle->controller);
78 }
79 
SetModalMode(ArkUI_NativeDialogHandle handle, bool isModal)80 int32_t SetModalMode(ArkUI_NativeDialogHandle handle, bool isModal)
81 {
82     auto* impl = OHOS::Ace::NodeModel::GetFullImpl();
83     if (!impl || !handle) {
84         return ERROR_CODE_PARAM_INVALID;
85     }
86     return impl->getDialogAPI()->setModalMode(handle->controller, isModal);
87 }
88 
SetAutoCancel(ArkUI_NativeDialogHandle handle, bool autoCancel)89 int32_t SetAutoCancel(ArkUI_NativeDialogHandle handle, bool autoCancel)
90 {
91     auto* impl = OHOS::Ace::NodeModel::GetFullImpl();
92     if (!impl || !handle) {
93         return ERROR_CODE_PARAM_INVALID;
94     }
95     return impl->getDialogAPI()->setAutoCancel(handle->controller, autoCancel);
96 }
97 
SetMask(ArkUI_NativeDialogHandle handle, uint32_t maskColor, const ArkUI_Rect* maskRect)98 int32_t SetMask(ArkUI_NativeDialogHandle handle, uint32_t maskColor, const ArkUI_Rect* maskRect)
99 {
100     auto* impl = OHOS::Ace::NodeModel::GetFullImpl();
101     if (!impl || !handle) {
102         return ERROR_CODE_PARAM_INVALID;
103     }
104     if (maskRect) {
105         ArkUIRect rect = { maskRect->x, maskRect->y, maskRect->width, maskRect->height };
106         return impl->getDialogAPI()->setMask(handle->controller, maskColor, &rect);
107     } else {
108         return impl->getDialogAPI()->setMask(handle->controller, maskColor, nullptr);
109     }
110 }
111 
SetBackgroundColor(ArkUI_NativeDialogHandle handle, uint32_t backgroundColor)112 int32_t SetBackgroundColor(ArkUI_NativeDialogHandle handle, uint32_t backgroundColor)
113 {
114     auto* impl = OHOS::Ace::NodeModel::GetFullImpl();
115     if (!impl || !handle) {
116         return ERROR_CODE_PARAM_INVALID;
117     }
118     return impl->getDialogAPI()->setBackgroundColor(handle->controller, backgroundColor);
119 }
120 
SetCornerRadius(ArkUI_NativeDialogHandle handle, float topLeft, float topRight, float bottomLeft, float bottomRight)121 int32_t SetCornerRadius(ArkUI_NativeDialogHandle handle, float topLeft, float topRight,
122     float bottomLeft, float bottomRight)
123 {
124     auto* impl = OHOS::Ace::NodeModel::GetFullImpl();
125     if (!impl || !handle) {
126         return ERROR_CODE_PARAM_INVALID;
127     }
128     return impl->getDialogAPI()->setCornerRadius(handle->controller,
129         topLeft, topRight, bottomLeft, bottomRight);
130 }
131 
SetGridColumnCount(ArkUI_NativeDialogHandle handle, int32_t gridCount)132 int32_t SetGridColumnCount(ArkUI_NativeDialogHandle handle, int32_t gridCount)
133 {
134     auto* impl = OHOS::Ace::NodeModel::GetFullImpl();
135     if (!impl || !handle) {
136         return ERROR_CODE_PARAM_INVALID;
137     }
138     return impl->getDialogAPI()->setGridColumnCount(handle->controller, gridCount);
139 }
140 
EnableCustomStyle(ArkUI_NativeDialogHandle handle, bool enableCustomStyle)141 int32_t EnableCustomStyle(ArkUI_NativeDialogHandle handle, bool enableCustomStyle)
142 {
143     auto* impl = OHOS::Ace::NodeModel::GetFullImpl();
144     if (!impl || !handle) {
145         return ERROR_CODE_PARAM_INVALID;
146     }
147     return impl->getDialogAPI()->enableCustomStyle(handle->controller, enableCustomStyle);
148 }
149 
EnableCustomAnimation(ArkUI_NativeDialogHandle handle, bool enableCustomAnimation)150 int32_t EnableCustomAnimation(ArkUI_NativeDialogHandle handle, bool enableCustomAnimation)
151 {
152     auto* impl = OHOS::Ace::NodeModel::GetFullImpl();
153     if (!impl || !handle) {
154         return ERROR_CODE_PARAM_INVALID;
155     }
156     return impl->getDialogAPI()->enableCustomAnimation(handle->controller, enableCustomAnimation);
157 }
158 
Show(ArkUI_NativeDialogHandle handle, bool showInSubWindow)159 int32_t Show(ArkUI_NativeDialogHandle handle, bool showInSubWindow)
160 {
161     auto* impl = OHOS::Ace::NodeModel::GetFullImpl();
162     if (!impl || !handle) {
163         return ERROR_CODE_PARAM_INVALID;
164     }
165     return impl->getDialogAPI()->show(handle->controller, showInSubWindow);
166 }
167 
Close(ArkUI_NativeDialogHandle handle)168 int32_t Close(ArkUI_NativeDialogHandle handle)
169 {
170     auto* impl = OHOS::Ace::NodeModel::GetFullImpl();
171     if (!impl || !handle) {
172         return ERROR_CODE_PARAM_INVALID;
173     }
174     return impl->getDialogAPI()->close(handle->controller);
175 }
176 
RegisterOnWillDismiss(ArkUI_NativeDialogHandle handle, ArkUI_OnWillDismissEvent eventHandler)177 int32_t RegisterOnWillDismiss(ArkUI_NativeDialogHandle handle, ArkUI_OnWillDismissEvent eventHandler)
178 {
179     auto* impl = OHOS::Ace::NodeModel::GetFullImpl();
180     if (!impl || !handle) {
181         return ERROR_CODE_PARAM_INVALID;
182     }
183     return impl->getDialogAPI()->registerOnWillDismiss(handle->controller, eventHandler);
184 }
185 
RegisterOnWillDismissWithUserData( ArkUI_NativeDialogHandle handle, void* userData, void (*callback)(ArkUI_DialogDismissEvent* event))186 int32_t RegisterOnWillDismissWithUserData(
187     ArkUI_NativeDialogHandle handle, void* userData, void (*callback)(ArkUI_DialogDismissEvent* event))
188 {
189     auto* impl = OHOS::Ace::NodeModel::GetFullImpl();
190     if (!impl || !handle) {
191         return ERROR_CODE_PARAM_INVALID;
192     }
193     int result = impl->getDialogAPI()->registerOnWillDismissWithUserData(handle->controller, userData, callback);
194     return result;
195 }
196 
197 } // namespace OHOS::Ace::NG::DialogModel
198 
199 #ifdef __cplusplus
200 extern "C" {
201 #endif
202 
OH_ArkUI_DialogDismissEvent_SetShouldBlockDismiss(ArkUI_DialogDismissEvent* event, bool shouldBlockDismiss)203 void OH_ArkUI_DialogDismissEvent_SetShouldBlockDismiss(ArkUI_DialogDismissEvent* event, bool shouldBlockDismiss)
204 {
205     if (!event) {
206         return;
207     }
208     event->BlockDismiss = shouldBlockDismiss;
209 }
210 
OH_ArkUI_DialogDismissEvent_GetUserData(ArkUI_DialogDismissEvent* event)211 void* OH_ArkUI_DialogDismissEvent_GetUserData(ArkUI_DialogDismissEvent* event)
212 {
213     if (!event) {
214         return nullptr;
215     }
216     return event->userData;
217 }
218 
OH_ArkUI_DialogDismissEvent_GetDismissReason(ArkUI_DialogDismissEvent* event)219 int32_t OH_ArkUI_DialogDismissEvent_GetDismissReason(ArkUI_DialogDismissEvent* event)
220 {
221     if (!event) {
222         return -1;
223     }
224     return event->reason;
225 }
226 
227 #ifdef __cplusplus
228 };
229 #endif