1/****************************************************************************
2**
3** Copyright (C) 2017 The Qt Company Ltd.
4** Contact: http://www.qt.io/licensing/
5**
6** This file is part of the Qt Labs Platform module of the Qt Toolkit.
7**
8** $QT_BEGIN_LICENSE:LGPL3$
9** Commercial License Usage
10** Licensees holding valid commercial Qt licenses may use this file in
11** accordance with the commercial license agreement provided with the
12** Software or, alternatively, in accordance with the terms contained in
13** a written agreement between you and The Qt Company. For licensing terms
14** and conditions see http://www.qt.io/terms-conditions. For further
15** information use the contact form at http://www.qt.io/contact-us.
16**
17** GNU Lesser General Public License Usage
18** Alternatively, this file may be used under the terms of the GNU Lesser
19** General Public License version 3 as published by the Free Software
20** Foundation and appearing in the file LICENSE.LGPLv3 included in the
21** packaging of this file. Please review the following information to
22** ensure the GNU Lesser General Public License version 3 requirements
23** will be met: https://www.gnu.org/licenses/lgpl.html.
24**
25** GNU General Public License Usage
26** Alternatively, this file may be used under the terms of the GNU
27** General Public License version 2.0 or later as published by the Free
28** Software Foundation and appearing in the file LICENSE.GPL included in
29** the packaging of this file. Please review the following information to
30** ensure the GNU General Public License version 2.0 requirements will be
31** met: http://www.gnu.org/licenses/gpl-2.0.html.
32**
33** $QT_END_LICENSE$
34**
35****************************************************************************/
36
37#include "qquickplatformmessagedialog_p.h"
38
39#include <QtQml/qqmlinfo.h>
40
41QT_BEGIN_NAMESPACE
42
43/*!
44 \qmltype MessageDialog
45 \inherits Dialog
46//! \instantiates QQuickPlatformMessageDialog
47 \inqmlmodule Qt.labs.platform
48 \since 5.8
49 \brief A native message dialog.
50
51 The MessageDialog type provides a QML API for native platform message dialogs.
52
53 \image qtlabsplatform-messagedialog-android.png
54
55 A message dialog is used to inform the user, or ask the user a question.
56 A message dialog displays a primary \l text to alert the user to a situation,
57 an \l {informativeText}{informative text} to further explain the alert or to
58 ask the user a question, and an optional \l {detailedText}{detailed text} to
59 provide even more data if the user requests it. A message box can also display
60 a configurable set of \l buttons for accepting a user response.
61
62 To show a message dialog, construct an instance of MessageDialog, set the
63 desired properties, and call \l {Dialog::}{open()}.
64
65 \code
66 MessageDialog {
67 buttons: MessageDialog.Ok
68 text: "The document has been modified."
69 }
70 \endcode
71
72 The user must click the \uicontrol OK button to dismiss the message dialog.
73 A modal message dialog blocks the rest of the GUI until the message is
74 dismissed.
75
76 A more elaborate approach than just alerting the user to an event is to
77 also ask the user what to do about it. Store the question in the
78 \l {informativeText}{informative text} property, and specify the \l buttons
79 property to the set of buttons you want as the set of user responses. The
80 buttons are specified by combining values using the bitwise OR operator. The
81 display order for the buttons is platform dependent.
82
83 \code
84 MessageDialog {
85 text: "The document has been modified."
86 informativeText: "Do you want to save your changes?"
87 buttons: MessageDialog.Ok | MessageDialog.Cancel
88
89 onAccepted: document.save()
90 }
91 \endcode
92
93 \image qtlabsplatform-messagedialog-informative-android.png
94
95 The \l clicked() signal passes the information of which button was clicked.
96
97 A native platform message dialog is currently available on the following platforms:
98
99 \list
100 \li iOS
101 \li Android
102 \li WinRT
103 \endlist
104
105 \input includes/widgets.qdocinc 1
106
107 \labs
108*/
109
110/*!
111 \qmlsignal Qt.labs.platform::MessageDialog::clicked(button)
112
113 This signal is emitted when a dialog \a button is clicked.
114
115 \sa buttons
116*/
117
118/*!
119 \qmlsignal Qt.labs.platform::MessageDialog::okClicked()
120
121 This signal is emitted when \uicontrol Ok is clicked.
122*/
123
124/*!
125 \qmlsignal Qt.labs.platform::MessageDialog::saveClicked()
126
127 This signal is emitted when \uicontrol Save is clicked.
128*/
129
130/*!
131 \qmlsignal Qt.labs.platform::MessageDialog::saveAllClicked()
132
133 This signal is emitted when \uicontrol {Save All} is clicked.
134*/
135
136/*!
137 \qmlsignal Qt.labs.platform::MessageDialog::openClicked()
138
139 This signal is emitted when \uicontrol Open is clicked.
140*/
141
142/*!
143 \qmlsignal Qt.labs.platform::MessageDialog::yesClicked()
144
145 This signal is emitted when \uicontrol Yes is clicked.
146*/
147
148/*!
149 \qmlsignal Qt.labs.platform::MessageDialog::yesToAllClicked()
150
151 This signal is emitted when \uicontrol {Yes To All} is clicked.
152*/
153
154/*!
155 \qmlsignal Qt.labs.platform::MessageDialog::noClicked()
156
157 This signal is emitted when \uicontrol No is clicked.
158*/
159
160/*!
161 \qmlsignal Qt.labs.platform::MessageDialog::noToAllClicked()
162
163 This signal is emitted when \uicontrol {No To All} is clicked.
164*/
165
166/*!
167 \qmlsignal Qt.labs.platform::MessageDialog::abortClicked()
168
169 This signal is emitted when \uicontrol Abort is clicked.
170*/
171
172/*!
173 \qmlsignal Qt.labs.platform::MessageDialog::retryClicked()
174
175 This signal is emitted when \uicontrol Retry is clicked.
176*/
177
178/*!
179 \qmlsignal Qt.labs.platform::MessageDialog::ignoreClicked()
180
181 This signal is emitted when \uicontrol Ignore is clicked.
182*/
183
184/*!
185 \qmlsignal Qt.labs.platform::MessageDialog::closeClicked()
186
187 This signal is emitted when \uicontrol Close is clicked.
188*/
189
190/*!
191 \qmlsignal Qt.labs.platform::MessageDialog::cancelClicked()
192
193 This signal is emitted when \uicontrol Cancel is clicked.
194*/
195
196/*!
197 \qmlsignal Qt.labs.platform::MessageDialog::discardClicked()
198
199 This signal is emitted when \uicontrol Discard is clicked.
200*/
201
202/*!
203 \qmlsignal Qt.labs.platform::MessageDialog::helpClicked()
204
205 This signal is emitted when \uicontrol Help is clicked.
206*/
207
208/*!
209 \qmlsignal Qt.labs.platform::MessageDialog::applyClicked()
210
211 This signal is emitted when \uicontrol Apply is clicked.
212*/
213
214/*!
215 \qmlsignal Qt.labs.platform::MessageDialog::resetClicked()
216
217 This signal is emitted when \uicontrol Reset is clicked.
218*/
219
220/*!
221 \qmlsignal Qt.labs.platform::MessageDialog::restoreDefaultsClicked()
222
223 This signal is emitted when \uicontrol {Restore Defaults} is clicked.
224*/
225
226QQuickPlatformMessageDialog::QQuickPlatformMessageDialog(QObject *parent)
227 : QQuickPlatformDialog(QPlatformTheme::MessageDialog, parent),
228 m_options(QMessageDialogOptions::create())
229{
230}
231
232/*!
233 \qmlproperty string Qt.labs.platform::MessageDialog::text
234
235 This property holds the text to be displayed on the message dialog.
236
237 \sa informativeText, detailedText
238*/
239QString QQuickPlatformMessageDialog::text() const
240{
241 return m_options->text();
242}
243
244void QQuickPlatformMessageDialog::setText(const QString &text)
245{
246 if (m_options->text() == text)
247 return;
248
249 m_options->setText(text);
250 emit textChanged();
251}
252
253/*!
254 \qmlproperty string Qt.labs.platform::MessageDialog::informativeText
255
256 This property holds the informative text that provides a fuller description for the message.
257
258 Informative text can be used to expand upon the \l text to give more information to the user.
259
260 \sa text, detailedText
261*/
262QString QQuickPlatformMessageDialog::informativeText() const
263{
264 return m_options->informativeText();
265}
266
267void QQuickPlatformMessageDialog::setInformativeText(const QString &text)
268{
269 if (m_options->informativeText() == text)
270 return;
271
272 m_options->setInformativeText(text);
273 emit informativeTextChanged();
274}
275
276/*!
277 \qmlproperty string Qt.labs.platform::MessageDialog::detailedText
278
279 This property holds the text to be displayed in the details area.
280
281 \sa text, informativeText
282*/
283QString QQuickPlatformMessageDialog::detailedText() const
284{
285 return m_options->detailedText();
286}
287
288void QQuickPlatformMessageDialog::setDetailedText(const QString &text)
289{
290 if (m_options->detailedText() == text)
291 return;
292
293 m_options->setDetailedText(text);
294 emit detailedTextChanged();
295}
296
297/*!
298 \qmlproperty flags Qt.labs.platform::MessageDialog::buttons
299
300 This property holds a combination of buttons that are used by the message dialog.
301 The default value is \c MessageDialog.NoButton.
302
303 Possible flags:
304 \value MessageDialog.Ok An "OK" button defined with the \c AcceptRole.
305 \value MessageDialog.Open An "Open" button defined with the \c AcceptRole.
306 \value MessageDialog.Save A "Save" button defined with the \c AcceptRole.
307 \value MessageDialog.Cancel A "Cancel" button defined with the \c RejectRole.
308 \value MessageDialog.Close A "Close" button defined with the \c RejectRole.
309 \value MessageDialog.Discard A "Discard" or "Don't Save" button, depending on the platform, defined with the \c DestructiveRole.
310 \value MessageDialog.Apply An "Apply" button defined with the \c ApplyRole.
311 \value MessageDialog.Reset A "Reset" button defined with the \c ResetRole.
312 \value MessageDialog.RestoreDefaults A "Restore Defaults" button defined with the \c ResetRole.
313 \value MessageDialog.Help A "Help" button defined with the \c HelpRole.
314 \value MessageDialog.SaveAll A "Save All" button defined with the \c AcceptRole.
315 \value MessageDialog.Yes A "Yes" button defined with the \c YesRole.
316 \value MessageDialog.YesToAll A "Yes to All" button defined with the \c YesRole.
317 \value MessageDialog.No A "No" button defined with the \c NoRole.
318 \value MessageDialog.NoToAll A "No to All" button defined with the \c NoRole.
319 \value MessageDialog.Abort An "Abort" button defined with the \c RejectRole.
320 \value MessageDialog.Retry A "Retry" button defined with the \c AcceptRole.
321 \value MessageDialog.Ignore An "Ignore" button defined with the \c AcceptRole.
322 \value MessageDialog.NoButton The dialog has no buttons.
323
324 \sa clicked()
325*/
326QPlatformDialogHelper::StandardButtons QQuickPlatformMessageDialog::buttons() const
327{
328 return m_options->standardButtons();
329}
330
331void QQuickPlatformMessageDialog::setButtons(QPlatformDialogHelper::StandardButtons buttons)
332{
333 if (m_options->standardButtons() == buttons)
334 return;
335
336 m_options->setStandardButtons(buttons);
337 emit buttonsChanged();
338}
339
340void QQuickPlatformMessageDialog::onCreate(QPlatformDialogHelper *dialog)
341{
342 if (QPlatformMessageDialogHelper *messageDialog = qobject_cast<QPlatformMessageDialogHelper *>(object: dialog)) {
343 connect(sender: messageDialog, signal: &QPlatformMessageDialogHelper::clicked, receiver: this, slot: &QQuickPlatformMessageDialog::handleClick);
344 messageDialog->setOptions(m_options);
345 }
346}
347
348void QQuickPlatformMessageDialog::onShow(QPlatformDialogHelper *dialog)
349{
350 m_options->setWindowTitle(title());
351 if (QPlatformMessageDialogHelper *messageDialog = qobject_cast<QPlatformMessageDialogHelper *>(object: dialog))
352 messageDialog->setOptions(m_options);
353}
354
355void QQuickPlatformMessageDialog::handleClick(QPlatformDialogHelper::StandardButton button)
356{
357 done(result: button);
358 emit clicked(button);
359
360 switch (button) {
361 case QPlatformDialogHelper::Ok: emit okClicked(); break;
362 case QPlatformDialogHelper::Save: emit saveClicked(); break;
363 case QPlatformDialogHelper::SaveAll: emit saveAllClicked(); break;
364 case QPlatformDialogHelper::Open: emit openClicked(); break;
365 case QPlatformDialogHelper::Yes: emit yesClicked(); break;
366 case QPlatformDialogHelper::YesToAll: emit yesToAllClicked(); break;
367 case QPlatformDialogHelper::No: emit noClicked(); break;
368 case QPlatformDialogHelper::NoToAll: emit noToAllClicked(); break;
369 case QPlatformDialogHelper::Abort: emit abortClicked(); break;
370 case QPlatformDialogHelper::Retry: emit retryClicked(); break;
371 case QPlatformDialogHelper::Ignore: emit ignoreClicked(); break;
372 case QPlatformDialogHelper::Close: emit closeClicked(); break;
373 case QPlatformDialogHelper::Cancel: emit cancelClicked(); break;
374 case QPlatformDialogHelper::Discard: emit discardClicked(); break;
375 case QPlatformDialogHelper::Help: emit helpClicked(); break;
376 case QPlatformDialogHelper::Apply: emit applyClicked(); break;
377 case QPlatformDialogHelper::Reset: emit resetClicked(); break;
378 case QPlatformDialogHelper::RestoreDefaults: emit restoreDefaultsClicked(); break;
379 default: qmlWarning(me: this) << "unknown button" << int(button); break;
380 }
381}
382
383QT_END_NAMESPACE
384

source code of qtquickcontrols2/src/imports/platform/qquickplatformmessagedialog.cpp