diff options
author | Shawn Rutledge <shawn.rutledge@digia.com> | 2013-12-16 15:22:14 +0100 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2014-01-03 17:02:18 +0100 |
commit | ba9ba084124403bd8930e29d8afcea9d64b6c0b6 (patch) | |
tree | e8c3a10eeaef753cf3c65673556bbd7f663933aa /src/dialogs/qquickplatformmessagedialog.cpp | |
parent | c34ce66f7b3dc7cb46d14181d46e438536a4d5f2 (diff) | |
download | qtquickcontrols-ba9ba084124403bd8930e29d8afcea9d64b6c0b6.tar.gz |
move QtQuick.Dialogs from qtdeclarative to qtquickcontrols
This will enable using Controls in the QML dialog implementations.
For now, Controls are used only as drop-in replacements for the
Button, Checkbox, and TextField which were custom implementations
in the qtdeclarative module before.
Change-Id: Ic79e9e8e5715a72ce51f4c724bfdfd33653300f2
Reviewed-by: Liang Qi <liang.qi@digia.com>
Diffstat (limited to 'src/dialogs/qquickplatformmessagedialog.cpp')
-rw-r--r-- | src/dialogs/qquickplatformmessagedialog.cpp | 398 |
1 files changed, 398 insertions, 0 deletions
diff --git a/src/dialogs/qquickplatformmessagedialog.cpp b/src/dialogs/qquickplatformmessagedialog.cpp new file mode 100644 index 00000000..65114100 --- /dev/null +++ b/src/dialogs/qquickplatformmessagedialog.cpp @@ -0,0 +1,398 @@ +/**************************************************************************** +** +** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the QtQuick.Dialogs module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qquickplatformmessagedialog_p.h" +#include "qquickitem.h" + +#include <private/qguiapplication_p.h> +#include <QWindow> +#include <QQuickView> +#include <QQuickWindow> + +QT_BEGIN_NAMESPACE + +/*! + \qmltype MessageDialog + \instantiates QQuickPlatformMessageDialog + \inqmlmodule QtQuick.Dialogs 1 + \ingroup dialogs + \brief Dialog component for displaying popup messages. + \since 5.2 + + The most basic use case for a MessageDialog is a popup alert. It also + allows the user to respond in various ways depending on which buttons are + enabled. The dialog is initially invisible. You need to set the properties + as desired first, then set \l visible to \c true or call \l open(). + + Here is a minimal example to show an alert and exit after the user + responds: + + \qml + import QtQuick 2.2 + import QtQuick.Dialogs 1.1 + + MessageDialog { + id: messageDialog + title: "May I have your attention please" + text: "It's so cool that you are using Qt Quick." + onAccepted: { + console.log("And of course you could only agree.") + Qt.quit() + } + Component.onCompleted: visible = true + } + \endqml + + There are several possible handlers depending on which \l standardButtons + the dialog has and the \l {QMessageBox::ButtonRole} {ButtonRole} of each. + For example, the \l {rejected} {onRejected} handler will be called if the + user presses a \gui Cancel, \gui Close or \gui Abort button. + + A MessageDialog window is automatically transient for its parent window. So + whether you declare the dialog inside an \l Item or inside a \l Window, the + dialog will appear centered over the window containing the item, or over + the Window that you declared. + + The implementation of MessageDialog will be a platform message dialog if + possible. If that isn't possible, then it will try to instantiate a + \l QMessageBox. If that also isn't possible, then it will fall back to a QML + implementation, \c DefaultMessageDialog.qml. In that case you can customize + the appearance by editing this file. \c DefaultMessageDialog.qml contains a + \l Rectangle to hold the dialog's contents, because certain embedded systems + do not support multiple top-level windows. When the dialog becomes visible, + it will automatically be wrapped in a \l Window if possible, or simply + reparented on top of the main window if there can only be one window. +*/ + +/*! + \qmlsignal MessageDialog::accepted() + + This handler is called when the user has pressed any button which has the + \l {QMessageBox::AcceptRole} {AcceptRole}: \gui OK, \gui Open, \gui Save, + \gui {Save All}, \gui Retry or \gui Ignore. +*/ + +/*! + \qmlsignal MessageDialog::rejected() + + This handler is called when the user has dismissed the dialog, by closing + the dialog window, by pressing a \gui Cancel, \gui Close or \gui Abort + button on the dialog, or by pressing the back button or the escape key. +*/ + +/*! + \qmlsignal MessageDialog::discard() + + This handler is called when the user has pressed the \gui Discard button. +*/ + +/*! + \qmlsignal MessageDialog::help() + + This handler is called when the user has pressed the \gui Help button. + Depending on platform, the dialog may not be automatically dismissed + because the help that your application provides may need to be relevant to + the text shown in this dialog in order to assist the user in making a + decision. However on other platforms it's not possible to show a dialog and + a help window at the same time. If you want to be sure that the dialog will + close, you can set \l visible to \c false in your handler. +*/ + +/*! + \qmlsignal MessageDialog::yes() + + This handler is called when the user has pressed any button which has + the \l {QMessageBox::YesRole} {YesRole}: \gui Yes or \gui {Yes to All}. +*/ + +/*! + \qmlsignal MessageDialog::no() + + This handler is called when the user has pressed any button which has + the \l {QMessageBox::NoRole} {NoRole}: \gui No or \gui {No to All}. +*/ + +/*! + \qmlsignal MessageDialog::apply() + + This handler is called when the user has pressed the \gui Apply button. +*/ + +/*! + \qmlsignal MessageDialog::reset() + + This handler is called when the user has pressed any button which has + the \l {QMessageBox::ResetRole} {ResetRole}: \gui Reset or \gui {Restore Defaults}. +*/ + +/*! + \class QQuickPlatformMessageDialog + \inmodule QtQuick.Dialogs + \internal + + \brief The QQuickPlatformMessageDialog class provides a message dialog + + The dialog is implemented via the QPlatformMessageDialogHelper when possible; + otherwise it falls back to a QMessageBox or a QML implementation. + + \since 5.2 +*/ + +/*! + Constructs a file dialog with parent window \a parent. +*/ +QQuickPlatformMessageDialog::QQuickPlatformMessageDialog(QObject *parent) : + QQuickAbstractMessageDialog(parent) +{ +} + +/*! + Destroys the file dialog. +*/ +QQuickPlatformMessageDialog::~QQuickPlatformMessageDialog() +{ + if (m_dlgHelper) + m_dlgHelper->hide(); + delete m_dlgHelper; +} + +QPlatformMessageDialogHelper *QQuickPlatformMessageDialog::helper() +{ + QQuickItem *parentItem = qobject_cast<QQuickItem *>(parent()); + if (parentItem) + m_parentWindow = parentItem->window(); + + if ( !m_dlgHelper && QGuiApplicationPrivate::platformTheme()-> + usePlatformNativeDialog(QPlatformTheme::MessageDialog) ) { + m_dlgHelper = static_cast<QPlatformMessageDialogHelper *>(QGuiApplicationPrivate::platformTheme() + ->createPlatformDialogHelper(QPlatformTheme::MessageDialog)); + if (!m_dlgHelper) + return m_dlgHelper; + // accept() shouldn't be emitted. reject() happens only if the dialog is + // dismissed by closing the window rather than by one of its button widgets. + connect(m_dlgHelper, SIGNAL(accept()), this, SLOT(accept())); + connect(m_dlgHelper, SIGNAL(reject()), this, SLOT(reject())); + connect(m_dlgHelper, SIGNAL(clicked(QMessageDialogOptions::StandardButton, QMessageDialogOptions::ButtonRole)), + this, SLOT(click(QMessageDialogOptions::StandardButton, QMessageDialogOptions::ButtonRole))); + } + + return m_dlgHelper; +} + +/*! + \qmlproperty bool MessageDialog::visible + + This property holds whether the dialog is visible. By default this is + \c false. + + \sa modality +*/ + +/*! + \qmlproperty Qt::WindowModality MessageDialog::modality + + Whether the dialog should be shown modal with respect to the window + containing the dialog's parent Item, modal with respect to the whole + application, or non-modal. + + By default it is \c Qt.WindowModal. + + Modality does not mean that there are any blocking calls to wait for the + dialog to be accepted or rejected; it's only that the user will be + prevented from interacting with the parent window and/or the application + windows until the dialog is dismissed. +*/ + +/*! + \qmlmethod void MessageDialog::open() + + Shows the dialog to the user. It is equivalent to setting \l visible to + \c true. +*/ + +/*! + \qmlmethod void MessageDialog::close() + + Closes the dialog. +*/ + +/*! + \qmlproperty string MessageDialog::title + + The title of the dialog window. +*/ + +/*! + \qmlproperty string MessageDialog::text + + The primary text to be displayed. +*/ + +/*! + \qmlproperty string MessageDialog::informativeText + + The informative text that provides a fuller description for the message. + + Informative text can be used to supplement the \c text to give more + information to the user. Depending on the platform, it may appear in a + smaller font below the text, or simply appended to the text. + + \sa {MessageDialog::text}{text} +*/ + +/*! + \qmlproperty string MessageDialog::detailedText + + The text to be displayed in the details area, which is hidden by default. + The user will then be able to press the \gui {Show Details...} button to + make it visible. + + \sa {MessageDialog::text}{text} +*/ + +/*! + \enum QQuickStandardIcon::Icon + + This enum specifies a standard icon to be used on a dialog. +*/ + +/*! + \qmlproperty QQuickStandardIcon::Icon MessageDialog::icon + + The icon of the message box can be specified with one of these values: + + \table + \row + \li no icon + \li \l StandardIcon.NoIcon + \li For an unadorned text alert. + \row + \li \inlineimage ../images/question.png "Question icon" + \li \l StandardIcon.Question + \li For asking a question during normal operations. + \row + \li \image information.png + \li \l StandardIcon.Information + \li For reporting information about normal operations. + \row + \li \image warning.png + \li \l StandardIcon.Warning + \li For reporting non-critical errors. + \row + \li \image critical.png + \li \l StandardIcon.Critical + \li For reporting critical errors. + \endtable + + The default is \c StandardIcon.NoIcon. + + The enum values are the same as in \l QMessageBox::Icon. +*/ + +// TODO after QTBUG-35019 is fixed: fix links to this module's enums +// rather than linking to those in QMessageBox +/*! + \enum QQuickStandardButton::StandardButton + + This enum specifies a button with a standard label to be used on a dialog. +*/ + +/*! + \qmlproperty StandardButtons MessageDialog::standardButtons + + The MessageDialog has a row of buttons along the bottom, each of which has + a \l {QMessageBox::ButtonRole} {ButtonRole} that determines which signal + will be emitted when the button is pressed. You can also find out which + specific button was pressed after the fact via the \l clickedButton + property. You can control which buttons are available by setting + standardButtons to a bitwise-or combination of the following flags: + + \table + \row \li StandardButton.Ok \li An \gui OK button defined with the \l {QMessageBox::AcceptRole} {AcceptRole}. + \row \li StandardButton.Open \li An \gui Open button defined with the \l {QMessageBox::AcceptRole} {AcceptRole}. + \row \li StandardButton.Save \li A \gui Save button defined with the \l {QMessageBox::AcceptRole} {AcceptRole}. + \row \li StandardButton.Cancel \li A \gui Cancel button defined with the \l {QMessageBox::RejectRole} {RejectRole}. + \row \li StandardButton.Close \li A \gui Close button defined with the \l {QMessageBox::RejectRole} {RejectRole}. + \row \li StandardButton.Discard \li A \gui Discard or \gui {Don't Save} button, depending on the platform, + defined with the \l {QMessageBox::DestructiveRole} {DestructiveRole}. + \row \li StandardButton.Apply \li An \gui Apply button defined with the \l {QMessageBox::ApplyRole} {ApplyRole}. + \row \li StandardButton.Reset \li A \gui Reset button defined with the \l {QMessageBox::ResetRole} {ResetRole}. + \row \li StandardButton.RestoreDefaults \li A \gui {Restore Defaults} button defined with the \l {QMessageBox::ResetRole} {ResetRole}. + \row \li StandardButton.Help \li A \gui Help button defined with the \l {QMessageBox::HelpRole} {HelpRole}. + \row \li StandardButton.SaveAll \li A \gui {Save All} button defined with the \l {QMessageBox::AcceptRole} {AcceptRole}. + \row \li StandardButton.Yes \li A \gui Yes button defined with the \l {QMessageBox::YesRole} {YesRole}. + \row \li StandardButton.YesToAll \li A \gui {Yes to All} button defined with the \l {QMessageBox::YesRole} {YesRole}. + \row \li StandardButton.No \li A \gui No button defined with the \l {QMessageBox::NoRole} {NoRole}. + \row \li StandardButton.NoToAll \li A \gui {No to All} button defined with the \l {QMessageBox::NoRole} {NoRole}. + \row \li StandardButton.Abort \li An \gui Abort button defined with the \l {QMessageBox::RejectRole} {RejectRole}. + \row \li StandardButton.Retry \li A \gui Retry button defined with the \l {QMessageBox::AcceptRole} {AcceptRole}. + \row \li StandardButton.Ignore \li An \gui Ignore button defined with the \l {QMessageBox::AcceptRole} {AcceptRole}. + \endtable + + For example the following dialog will ask a question with 5 possible answers: + + \qml + import QtQuick 2.2 + import QtQuick.Dialogs 1.1 + + MessageDialog { + title: "Overwrite?" + icon: StandardIcon.Question + text: "file.txt already exists. Replace?" + detailedText: "To replace a file means that its existing contents will be lost. " + + "The file that you are copying now will be copied over it instead." + standardButtons: StandardButton.Yes | StandardButton.YesToAll | + StandardButton.No | StandardButton.NoToAll | StandardButton.Abort + Component.onCompleted: visible = true + onYes: console.log("copied") + onNo: console.log("didn't copy") + onRejected: console.log("aborted") + } + \endqml + + \image replacefile.png + + The default is \c StandardButton.Ok. + + The enum values are the same as in \l QMessageBox::StandardButtons. +*/ + +QT_END_NAMESPACE |