diff options
author | Mitch Curtis <mitch.curtis@qt.io> | 2020-11-16 16:34:56 +0100 |
---|---|---|
committer | Mitch Curtis <mitch.curtis@qt.io> | 2021-05-27 17:34:11 +0200 |
commit | f9421abbdf4d2e2be06febf9f75a2b62e6875835 (patch) | |
tree | 9cdd7d567f949fa21c1bb079cfaa6c6071e161e8 /src/quicktemplates2 | |
parent | 85a74d5cb68b11a1152b00d3e4a0e8dc9998b31c (diff) |
Add QtQuick.Dialogs
[ChangeLog][QtQuickDialogs] Added FileDialog. This is a native
FileDialog on platforms that support it, and a non-native
Qt Quick FileDialog on platforms that don't.
Fixes: QTBUG-87797
Change-Id: Ia3a98b616479b818c96c232a0329750023079642
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Diffstat (limited to 'src/quicktemplates2')
-rw-r--r-- | src/quicktemplates2/qquickdeferredexecute_p_p.h | 7 | ||||
-rw-r--r-- | src/quicktemplates2/qquickdialog.cpp | 49 | ||||
-rw-r--r-- | src/quicktemplates2/qquickdialog_p.h | 2 | ||||
-rw-r--r-- | src/quicktemplates2/qquickdialog_p_p.h | 6 | ||||
-rw-r--r-- | src/quicktemplates2/qquickdialogbuttonbox.cpp | 10 | ||||
-rw-r--r-- | src/quicktemplates2/qquickdialogbuttonbox_p_p.h | 4 | ||||
-rw-r--r-- | src/quicktemplates2/qquickitemdelegate_p_p.h | 2 | ||||
-rw-r--r-- | src/quicktemplates2/qquickpopup.cpp | 3 | ||||
-rw-r--r-- | src/quicktemplates2/qquickpopup_p_p.h | 4 | ||||
-rw-r--r-- | src/quicktemplates2/qquickpopupitem_p.h | 2 | ||||
-rw-r--r-- | src/quicktemplates2/qquickpopupitem_p_p.h | 2 |
11 files changed, 61 insertions, 30 deletions
diff --git a/src/quicktemplates2/qquickdeferredexecute_p_p.h b/src/quicktemplates2/qquickdeferredexecute_p_p.h index 29d95ee9..55750a6a 100644 --- a/src/quicktemplates2/qquickdeferredexecute_p_p.h +++ b/src/quicktemplates2/qquickdeferredexecute_p_p.h @@ -50,6 +50,7 @@ #include <QtCore/qglobal.h> #include <QtQuickTemplates2/private/qquickdeferredpointer_p_p.h> +#include <QtQuickTemplates2/private/qtquicktemplates2global_p.h> #include <QtQml/private/qqmlvme_p.h> @@ -59,9 +60,9 @@ class QString; class QObject; namespace QtQuickPrivate { - void beginDeferred(QObject *object, const QString &property); - void cancelDeferred(QObject *object, const QString &property); - void completeDeferred(QObject *object, const QString &property); + Q_QUICKTEMPLATES2_PRIVATE_EXPORT void beginDeferred(QObject *object, const QString &property); + Q_QUICKTEMPLATES2_PRIVATE_EXPORT void cancelDeferred(QObject *object, const QString &property); + Q_QUICKTEMPLATES2_PRIVATE_EXPORT void completeDeferred(QObject *object, const QString &property); } template<typename T> diff --git a/src/quicktemplates2/qquickdialog.cpp b/src/quicktemplates2/qquickdialog.cpp index 6d8bd2ad..a6cb0274 100644 --- a/src/quicktemplates2/qquickdialog.cpp +++ b/src/quicktemplates2/qquickdialog.cpp @@ -158,6 +158,18 @@ QPlatformDialogHelper::ButtonRole QQuickDialogPrivate::buttonRole(QQuickAbstract return attached ? attached->buttonRole() : QPlatformDialogHelper::InvalidRole; } +void QQuickDialogPrivate::handleAccept() +{ + Q_Q(QQuickDialog); + q->accept(); +} + +void QQuickDialogPrivate::handleReject() +{ + Q_Q(QQuickDialog); + q->reject(); +} + void QQuickDialogPrivate::handleClick(QQuickAbstractButton *button) { Q_Q(QQuickDialog); @@ -180,16 +192,21 @@ void QQuickDialogPrivate::handleClick(QQuickAbstractButton *button) } QQuickDialog::QQuickDialog(QObject *parent) - : QQuickPopup(*(new QQuickDialogPrivate), parent) + : QQuickDialog(*(new QQuickDialogPrivate), parent) +{ +} + +QQuickDialog::QQuickDialog(QQuickDialogPrivate &dd, QObject *parent) + : QQuickPopup(dd, parent) { Q_D(QQuickDialog); - connect(d->popupItem, &QQuickPopupItem::titleChanged, this, &QQuickDialog::titleChanged); - connect(d->popupItem, &QQuickPopupItem::headerChanged, this, &QQuickDialog::headerChanged); - connect(d->popupItem, &QQuickPopupItem::footerChanged, this, &QQuickDialog::footerChanged); - connect(d->popupItem, &QQuickPopupItem::implicitHeaderWidthChanged, this, &QQuickDialog::implicitHeaderWidthChanged); - connect(d->popupItem, &QQuickPopupItem::implicitHeaderHeightChanged, this, &QQuickDialog::implicitHeaderHeightChanged); - connect(d->popupItem, &QQuickPopupItem::implicitFooterWidthChanged, this, &QQuickDialog::implicitFooterWidthChanged); - connect(d->popupItem, &QQuickPopupItem::implicitFooterHeightChanged, this, &QQuickDialog::implicitFooterHeightChanged); + QObject::connect(d->popupItem, &QQuickPopupItem::titleChanged, this, &QQuickDialog::titleChanged); + QObject::connect(d->popupItem, &QQuickPopupItem::headerChanged, this, &QQuickDialog::headerChanged); + QObject::connect(d->popupItem, &QQuickPopupItem::footerChanged, this, &QQuickDialog::footerChanged); + QObject::connect(d->popupItem, &QQuickPopupItem::implicitHeaderWidthChanged, this, &QQuickDialog::implicitHeaderWidthChanged); + QObject::connect(d->popupItem, &QQuickPopupItem::implicitHeaderHeightChanged, this, &QQuickDialog::implicitHeaderHeightChanged); + QObject::connect(d->popupItem, &QQuickPopupItem::implicitFooterWidthChanged, this, &QQuickDialog::implicitFooterWidthChanged); + QObject::connect(d->popupItem, &QQuickPopupItem::implicitFooterHeightChanged, this, &QQuickDialog::implicitFooterHeightChanged); } /*! @@ -251,16 +268,16 @@ void QQuickDialog::setHeader(QQuickItem *header) return; if (QQuickDialogButtonBox *buttonBox = qobject_cast<QQuickDialogButtonBox *>(oldHeader)) { - disconnect(buttonBox, &QQuickDialogButtonBox::accepted, this, &QQuickDialog::accept); - disconnect(buttonBox, &QQuickDialogButtonBox::rejected, this, &QQuickDialog::reject); + QObjectPrivate::disconnect(buttonBox, &QQuickDialogButtonBox::accepted, d, &QQuickDialogPrivate::handleAccept); + QObjectPrivate::disconnect(buttonBox, &QQuickDialogButtonBox::rejected, d, &QQuickDialogPrivate::handleReject); QObjectPrivate::disconnect(buttonBox, &QQuickDialogButtonBox::clicked, d, &QQuickDialogPrivate::handleClick); if (d->buttonBox == buttonBox) d->buttonBox = nullptr; } if (QQuickDialogButtonBox *buttonBox = qobject_cast<QQuickDialogButtonBox *>(header)) { - connect(buttonBox, &QQuickDialogButtonBox::accepted, this, &QQuickDialog::accept); - connect(buttonBox, &QQuickDialogButtonBox::rejected, this, &QQuickDialog::reject); + QObjectPrivate::connect(buttonBox, &QQuickDialogButtonBox::accepted, d, &QQuickDialogPrivate::handleAccept); + QObjectPrivate::connect(buttonBox, &QQuickDialogButtonBox::rejected, d, &QQuickDialogPrivate::handleReject); QObjectPrivate::connect(buttonBox, &QQuickDialogButtonBox::clicked, d, &QQuickDialogPrivate::handleClick); d->buttonBox = buttonBox; buttonBox->setStandardButtons(d->standardButtons); @@ -299,15 +316,15 @@ void QQuickDialog::setFooter(QQuickItem *footer) return; if (QQuickDialogButtonBox *buttonBox = qobject_cast<QQuickDialogButtonBox *>(oldFooter)) { - disconnect(buttonBox, &QQuickDialogButtonBox::accepted, this, &QQuickDialog::accept); - disconnect(buttonBox, &QQuickDialogButtonBox::rejected, this, &QQuickDialog::reject); + QObjectPrivate::disconnect(buttonBox, &QQuickDialogButtonBox::accepted, d, &QQuickDialogPrivate::handleAccept); + QObjectPrivate::disconnect(buttonBox, &QQuickDialogButtonBox::rejected, d, &QQuickDialogPrivate::handleReject); QObjectPrivate::disconnect(buttonBox, &QQuickDialogButtonBox::clicked, d, &QQuickDialogPrivate::handleClick); if (d->buttonBox == buttonBox) d->buttonBox = nullptr; } if (QQuickDialogButtonBox *buttonBox = qobject_cast<QQuickDialogButtonBox *>(footer)) { - connect(buttonBox, &QQuickDialogButtonBox::accepted, this, &QQuickDialog::accept); - connect(buttonBox, &QQuickDialogButtonBox::rejected, this, &QQuickDialog::reject); + QObjectPrivate::connect(buttonBox, &QQuickDialogButtonBox::accepted, d, &QQuickDialogPrivate::handleAccept); + QObjectPrivate::connect(buttonBox, &QQuickDialogButtonBox::rejected, d, &QQuickDialogPrivate::handleReject); QObjectPrivate::connect(buttonBox, &QQuickDialogButtonBox::clicked, d, &QQuickDialogPrivate::handleClick); d->buttonBox = buttonBox; buttonBox->setStandardButtons(d->standardButtons); diff --git a/src/quicktemplates2/qquickdialog_p.h b/src/quicktemplates2/qquickdialog_p.h index 660da081..b09375ce 100644 --- a/src/quicktemplates2/qquickdialog_p.h +++ b/src/quicktemplates2/qquickdialog_p.h @@ -129,6 +129,8 @@ Q_SIGNALS: void implicitFooterHeightChanged(); protected: + QQuickDialog(QQuickDialogPrivate &dd, QObject *parent); + #if QT_CONFIG(accessibility) QAccessible::Role accessibleRole() const override; void accessibilityActiveChanged(bool active) override; diff --git a/src/quicktemplates2/qquickdialog_p_p.h b/src/quicktemplates2/qquickdialog_p_p.h index 20dce56c..eb40c918 100644 --- a/src/quicktemplates2/qquickdialog_p_p.h +++ b/src/quicktemplates2/qquickdialog_p_p.h @@ -57,7 +57,7 @@ QT_BEGIN_NAMESPACE class QQuickAbstractButton; class QQuickDialogButtonBox; -class QQuickDialogPrivate : public QQuickPopupPrivate +class Q_QUICKTEMPLATES2_PRIVATE_EXPORT QQuickDialogPrivate : public QQuickPopupPrivate { Q_DECLARE_PUBLIC(QQuickDialog) @@ -69,7 +69,9 @@ public: static QPlatformDialogHelper::ButtonRole buttonRole(QQuickAbstractButton *button); - void handleClick(QQuickAbstractButton *button); + virtual void handleAccept(); + virtual void handleReject(); + virtual void handleClick(QQuickAbstractButton *button); int result = 0; QString title; diff --git a/src/quicktemplates2/qquickdialogbuttonbox.cpp b/src/quicktemplates2/qquickdialogbuttonbox.cpp index d6ed366f..447d3a2d 100644 --- a/src/quicktemplates2/qquickdialogbuttonbox.cpp +++ b/src/quicktemplates2/qquickdialogbuttonbox.cpp @@ -396,6 +396,11 @@ void QQuickDialogButtonBoxPrivate::handleClick() } } +QString QQuickDialogButtonBoxPrivate::buttonText(QPlatformDialogHelper::StandardButton standardButton) +{ + return QPlatformTheme::removeMnemonics(QGuiApplicationPrivate::platformTheme()->standardButtonText(standardButton)); +} + QQuickAbstractButton *QQuickDialogButtonBoxPrivate::createStandardButton(QPlatformDialogHelper::StandardButton standardButton) { Q_Q(QQuickDialogButtonBox); @@ -414,7 +419,7 @@ QQuickAbstractButton *QQuickDialogButtonBoxPrivate::createStandardButton(QPlatfo QQuickDialogButtonBoxAttached *attached = qobject_cast<QQuickDialogButtonBoxAttached *>(qmlAttachedPropertiesObject<QQuickDialogButtonBox>(button, true)); QQuickDialogButtonBoxAttachedPrivate::get(attached)->standardButton = standardButton; attached->setButtonRole(QPlatformDialogHelper::buttonRole(standardButton)); - button->setText(QPlatformTheme::removeMnemonics(QGuiApplicationPrivate::platformTheme()->standardButtonText(standardButton))); + button->setText(buttonText(standardButton)); delegate->completeCreate(); return button; } @@ -457,8 +462,7 @@ void QQuickDialogButtonBoxPrivate::updateLanguage() const QPlatformDialogHelper::StandardButton standardButton = boxAttachedPrivate->standardButton; // The button might be a custom one with explicitly specified text, so we shouldn't change it in that case. if (standardButton != QPlatformDialogHelper::NoButton) { - const QString buttonText = QGuiApplicationPrivate::platformTheme()->standardButtonText(standardButton); - button->setText(QPlatformTheme::removeMnemonics(buttonText)); + button->setText(buttonText(standardButton)); } } --i; diff --git a/src/quicktemplates2/qquickdialogbuttonbox_p_p.h b/src/quicktemplates2/qquickdialogbuttonbox_p_p.h index 22da9e6d..5e08b2ad 100644 --- a/src/quicktemplates2/qquickdialogbuttonbox_p_p.h +++ b/src/quicktemplates2/qquickdialogbuttonbox_p_p.h @@ -53,7 +53,7 @@ QT_BEGIN_NAMESPACE -class QQuickDialogButtonBoxPrivate : public QQuickContainerPrivate +class Q_QUICKTEMPLATES2_PRIVATE_EXPORT QQuickDialogButtonBoxPrivate : public QQuickContainerPrivate { Q_DECLARE_PUBLIC(QQuickDialogButtonBox) @@ -75,6 +75,8 @@ public: void handleClick(); + static QString buttonText(QPlatformDialogHelper::StandardButton standardButton); + QQuickAbstractButton *createStandardButton(QPlatformDialogHelper::StandardButton button); void removeStandardButtons(); diff --git a/src/quicktemplates2/qquickitemdelegate_p_p.h b/src/quicktemplates2/qquickitemdelegate_p_p.h index f712a212..d7604fbe 100644 --- a/src/quicktemplates2/qquickitemdelegate_p_p.h +++ b/src/quicktemplates2/qquickitemdelegate_p_p.h @@ -52,7 +52,7 @@ QT_BEGIN_NAMESPACE -class QQuickItemDelegatePrivate : public QQuickAbstractButtonPrivate +class Q_QUICKTEMPLATES2_PRIVATE_EXPORT QQuickItemDelegatePrivate : public QQuickAbstractButtonPrivate { Q_DECLARE_PUBLIC(QQuickItemDelegate) diff --git a/src/quicktemplates2/qquickpopup.cpp b/src/quicktemplates2/qquickpopup.cpp index 292d52a3..44d0d8f4 100644 --- a/src/quicktemplates2/qquickpopup.cpp +++ b/src/quicktemplates2/qquickpopup.cpp @@ -44,6 +44,7 @@ #include "qquickcontrol_p_p.h" #include "qquickdialog_p.h" +#include <QtCore/qloggingcategory.h> #include <QtQml/qqmlinfo.h> #include <QtQuick/qquickitem.h> #include <QtQuick/private/qquicktransition_p.h> @@ -52,6 +53,7 @@ QT_BEGIN_NAMESPACE Q_LOGGING_CATEGORY(lcDimmer, "qt.quick.controls.popup.dimmer") +Q_LOGGING_CATEGORY(lcPopup, "qt.quick.controls.popup") /*! \qmltype Popup @@ -2450,6 +2452,7 @@ void QQuickPopup::classBegin() void QQuickPopup::componentComplete() { Q_D(QQuickPopup); + qCDebug(lcPopup) << "componentComplete"; if (!parentItem()) resetParentItem(); diff --git a/src/quicktemplates2/qquickpopup_p_p.h b/src/quicktemplates2/qquickpopup_p_p.h index 57183011..5ce1d291 100644 --- a/src/quicktemplates2/qquickpopup_p_p.h +++ b/src/quicktemplates2/qquickpopup_p_p.h @@ -68,7 +68,7 @@ class QQuickPopupItem; class QQuickPopupPrivate; class QQuickPopupPositioner; -class QQuickPopupTransitionManager : public QQuickTransitionManager +class Q_QUICKTEMPLATES2_PRIVATE_EXPORT QQuickPopupTransitionManager : public QQuickTransitionManager { public: QQuickPopupTransitionManager(QQuickPopupPrivate *popup); @@ -83,7 +83,7 @@ private: QQuickPopupPrivate *popup = nullptr; }; -class Q_AUTOTEST_EXPORT QQuickPopupPrivate +class Q_QUICKTEMPLATES2_PRIVATE_EXPORT QQuickPopupPrivate : public QObjectPrivate , public QQuickItemChangeListener , public QQuickPaletteProviderPrivateBase<QQuickPopup, QQuickPopupPrivate> diff --git a/src/quicktemplates2/qquickpopupitem_p.h b/src/quicktemplates2/qquickpopupitem_p.h index db444ddc..2947a6e3 100644 --- a/src/quicktemplates2/qquickpopupitem_p.h +++ b/src/quicktemplates2/qquickpopupitem_p.h @@ -56,7 +56,7 @@ QT_BEGIN_NAMESPACE class QQuickPopup; class QQuickPopupItemPrivate; -class QQuickPopupItem : public QQuickPage +class Q_QUICKTEMPLATES2_PRIVATE_EXPORT QQuickPopupItem : public QQuickPage { Q_OBJECT diff --git a/src/quicktemplates2/qquickpopupitem_p_p.h b/src/quicktemplates2/qquickpopupitem_p_p.h index b3224be7..48b35aa2 100644 --- a/src/quicktemplates2/qquickpopupitem_p_p.h +++ b/src/quicktemplates2/qquickpopupitem_p_p.h @@ -54,7 +54,7 @@ QT_BEGIN_NAMESPACE class QQuickPopup; -class QQuickPopupItemPrivate : public QQuickPagePrivate +class Q_QUICKTEMPLATES2_PRIVATE_EXPORT QQuickPopupItemPrivate : public QQuickPagePrivate { Q_DECLARE_PUBLIC(QQuickPopupItem) |