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