diff options
author | J-P Nurmi <jpnurmi@qt.io> | 2016-08-15 14:36:02 +0200 |
---|---|---|
committer | J-P Nurmi <jpnurmi@qt.io> | 2016-08-15 12:47:36 +0000 |
commit | 8793cba8aab832a03ed0f608114d83765a02a8ec (patch) | |
tree | 639058d38fa38132a498ddadae5218ce30058e7e /src | |
parent | 748a9418544e25c2abc6e3eb8862517bea091e7d (diff) |
Platform dialogs: cleanup creation
Now that we know the type and whether it should be native, it can
be all done in the base class to reduce a lot of code duplication.
Change-Id: I7d7d7057fa499df75b72914d2b505bfa0288048d
Reviewed-by: J-P Nurmi <jpnurmi@qt.io>
Diffstat (limited to 'src')
-rw-r--r-- | src/imports/platform/qquickplatformcolordialog.cpp | 22 | ||||
-rw-r--r-- | src/imports/platform/qquickplatformcolordialog_p.h | 2 | ||||
-rw-r--r-- | src/imports/platform/qquickplatformdialog.cpp | 48 | ||||
-rw-r--r-- | src/imports/platform/qquickplatformdialog_p.h | 2 | ||||
-rw-r--r-- | src/imports/platform/qquickplatformfiledialog.cpp | 22 | ||||
-rw-r--r-- | src/imports/platform/qquickplatformfiledialog_p.h | 2 | ||||
-rw-r--r-- | src/imports/platform/qquickplatformfolderdialog.cpp | 22 | ||||
-rw-r--r-- | src/imports/platform/qquickplatformfolderdialog_p.h | 2 | ||||
-rw-r--r-- | src/imports/platform/qquickplatformfontdialog.cpp | 22 | ||||
-rw-r--r-- | src/imports/platform/qquickplatformfontdialog_p.h | 2 | ||||
-rw-r--r-- | src/imports/platform/qquickplatformmessagedialog.cpp | 21 | ||||
-rw-r--r-- | src/imports/platform/qquickplatformmessagedialog_p.h | 2 |
12 files changed, 58 insertions, 111 deletions
diff --git a/src/imports/platform/qquickplatformcolordialog.cpp b/src/imports/platform/qquickplatformcolordialog.cpp index 792debb7..fd503796 100644 --- a/src/imports/platform/qquickplatformcolordialog.cpp +++ b/src/imports/platform/qquickplatformcolordialog.cpp @@ -36,14 +36,6 @@ #include "qquickplatformcolordialog_p.h" -#include <QtCore/qloggingcategory.h> -#include <QtGui/qpa/qplatformtheme.h> -#include <QtGui/private/qguiapplication_p.h> - -#ifdef QT_WIDGETS_LIB -#include "widgets/qwidgetplatformcolordialog_p.h" -#endif - QT_BEGIN_NAMESPACE /*! @@ -95,8 +87,6 @@ QT_BEGIN_NAMESPACE \labs */ -Q_DECLARE_LOGGING_CATEGORY(qtLabsPlatformDialogs) - QQuickPlatformColorDialog::QQuickPlatformColorDialog(QObject *parent) : QQuickPlatformDialog(QPlatformTheme::ColorDialog, parent), m_options(QColorDialogOptions::create()) @@ -190,22 +180,12 @@ bool QQuickPlatformColorDialog::useNativeDialog() const return !m_options->testOption(QColorDialogOptions::DontUseNativeDialog); } -QPlatformDialogHelper *QQuickPlatformColorDialog::onCreate() +void QQuickPlatformColorDialog::onCreate(QPlatformDialogHelper *dialog) { - QPlatformDialogHelper *dialog = nullptr; - if (useNativeDialog()) - dialog = QGuiApplicationPrivate::platformTheme()->createPlatformDialogHelper(QPlatformTheme::ColorDialog); -#ifdef QT_WIDGETS_LIB - if (!dialog) - dialog = new QWidgetPlatformColorDialog(this); -#endif - qCDebug(qtLabsPlatformDialogs) << "ColorDialog:" << dialog; - if (QPlatformColorDialogHelper *colorDialog = qobject_cast<QPlatformColorDialogHelper *>(dialog)) { connect(colorDialog, &QPlatformColorDialogHelper::currentColorChanged, this, &QQuickPlatformColorDialog::currentColorChanged); colorDialog->setOptions(m_options); } - return dialog; } void QQuickPlatformColorDialog::onShow(QPlatformDialogHelper *dialog) diff --git a/src/imports/platform/qquickplatformcolordialog_p.h b/src/imports/platform/qquickplatformcolordialog_p.h index 3ab8e79f..33d6f0e8 100644 --- a/src/imports/platform/qquickplatformcolordialog_p.h +++ b/src/imports/platform/qquickplatformcolordialog_p.h @@ -81,7 +81,7 @@ Q_SIGNALS: protected: bool useNativeDialog() const override; - QPlatformDialogHelper *onCreate() override; + void onCreate(QPlatformDialogHelper *dialog) override; void onShow(QPlatformDialogHelper *dialog) override; void accept() override; diff --git a/src/imports/platform/qquickplatformdialog.cpp b/src/imports/platform/qquickplatformdialog.cpp index 70d571e0..00066d0a 100644 --- a/src/imports/platform/qquickplatformdialog.cpp +++ b/src/imports/platform/qquickplatformdialog.cpp @@ -36,9 +36,18 @@ #include "qquickplatformdialog_p.h" +#include <QtCore/qloggingcategory.h> +#include <QtGui/private/qguiapplication_p.h> #include <QtQuick/qquickitem.h> #include <QtQuick/qquickwindow.h> +#ifdef QT_WIDGETS_LIB +#include "widgets/qwidgetplatformcolordialog_p.h" +#include "widgets/qwidgetplatformfiledialog_p.h" +#include "widgets/qwidgetplatformfontdialog_p.h" +#include "widgets/qwidgetplatformmessagedialog_p.h" +#endif + QT_BEGIN_NAMESPACE /*! @@ -81,6 +90,8 @@ QT_BEGIN_NAMESPACE \sa accepted() */ +Q_DECLARE_LOGGING_CATEGORY(qtLabsPlatformDialogs) + QQuickPlatformDialog::QQuickPlatformDialog(QPlatformTheme::DialogType type, QObject *parent) : QObject(parent), m_visible(false), @@ -335,11 +346,41 @@ void QQuickPlatformDialog::componentComplete() setParentWindow(findParentWindow()); } +static QPlatformDialogHelper *createWidgetDialog(QPlatformTheme::DialogType type, QObject *parent) +{ + QPlatformDialogHelper *dialog = nullptr; +#ifdef QT_WIDGETS_LIB + switch (type) { + case QPlatformTheme::ColorDialog: + dialog = new QWidgetPlatformColorDialog(parent); + break; + case QPlatformTheme::FileDialog: + dialog = new QWidgetPlatformFileDialog(parent); + break; + case QPlatformTheme::FontDialog: + dialog = new QWidgetPlatformFontDialog(parent); + break; + case QPlatformTheme::MessageDialog: + dialog = new QWidgetPlatformMessageDialog(parent); + break; + default: + Q_UNREACHABLE(); + break; + } +#endif + return dialog; +} + bool QQuickPlatformDialog::create() { if (!m_handle) { - m_handle = onCreate(); + if (useNativeDialog()) + m_handle = QGuiApplicationPrivate::platformTheme()->createPlatformDialogHelper(m_type); + if (!m_handle) + m_handle = createWidgetDialog(m_type, this); + qCDebug(qtLabsPlatformDialogs) << this << "created" << m_handle; if (m_handle) { + onCreate(m_handle); connect(m_handle, &QPlatformDialogHelper::accept, this, &QQuickPlatformDialog::accept); connect(m_handle, &QPlatformDialogHelper::reject, this, &QQuickPlatformDialog::reject); } @@ -358,6 +399,11 @@ bool QQuickPlatformDialog::useNativeDialog() const return true; } +void QQuickPlatformDialog::onCreate(QPlatformDialogHelper *dialog) +{ + Q_UNUSED(dialog); +} + void QQuickPlatformDialog::onShow(QPlatformDialogHelper *dialog) { Q_UNUSED(dialog); diff --git a/src/imports/platform/qquickplatformdialog_p.h b/src/imports/platform/qquickplatformdialog_p.h index cdae186e..2a5caee7 100644 --- a/src/imports/platform/qquickplatformdialog_p.h +++ b/src/imports/platform/qquickplatformdialog_p.h @@ -127,7 +127,7 @@ protected: void destroy(); virtual bool useNativeDialog() const; - virtual QPlatformDialogHelper *onCreate() = 0; + virtual void onCreate(QPlatformDialogHelper *dialog); virtual void onShow(QPlatformDialogHelper *dialog); QWindow *findParentWindow() const; diff --git a/src/imports/platform/qquickplatformfiledialog.cpp b/src/imports/platform/qquickplatformfiledialog.cpp index 4718442a..f0b71bf2 100644 --- a/src/imports/platform/qquickplatformfiledialog.cpp +++ b/src/imports/platform/qquickplatformfiledialog.cpp @@ -36,14 +36,6 @@ #include "qquickplatformfiledialog_p.h" -#include <QtCore/qloggingcategory.h> -#include <QtGui/qpa/qplatformtheme.h> -#include <QtGui/private/qguiapplication_p.h> - -#ifdef QT_WIDGETS_LIB -#include "widgets/qwidgetplatformfiledialog_p.h" -#endif - QT_BEGIN_NAMESPACE /*! @@ -101,8 +93,6 @@ QT_BEGIN_NAMESPACE \sa FolderDialog */ -Q_DECLARE_LOGGING_CATEGORY(qtLabsPlatformDialogs) - QQuickPlatformFileDialog::QQuickPlatformFileDialog(QObject *parent) : QQuickPlatformDialog(QPlatformTheme::FileDialog, parent), m_fileMode(OpenFile), @@ -463,17 +453,8 @@ bool QQuickPlatformFileDialog::useNativeDialog() const return !m_options->testOption(QFileDialogOptions::DontUseNativeDialog); } -QPlatformDialogHelper *QQuickPlatformFileDialog::onCreate() +void QQuickPlatformFileDialog::onCreate(QPlatformDialogHelper *dialog) { - QPlatformDialogHelper *dialog = nullptr; - if (useNativeDialog()) - dialog = QGuiApplicationPrivate::platformTheme()->createPlatformDialogHelper(QPlatformTheme::FileDialog); -#ifdef QT_WIDGETS_LIB - if (!dialog) - dialog = new QWidgetPlatformFileDialog(this); -#endif - qCDebug(qtLabsPlatformDialogs) << "FileDialog:" << dialog; - if (QPlatformFileDialogHelper *fileDialog = qobject_cast<QPlatformFileDialogHelper *>(dialog)) { // TODO: emit currentFileChanged only when the first entry in currentFiles changes connect(fileDialog, &QPlatformFileDialogHelper::currentChanged, this, &QQuickPlatformFileDialog::currentFileChanged); @@ -482,7 +463,6 @@ QPlatformDialogHelper *QQuickPlatformFileDialog::onCreate() connect(fileDialog, &QPlatformFileDialogHelper::filterSelected, this, &QQuickPlatformFileDialog::selectedNameFilterChanged); fileDialog->setOptions(m_options); } - return dialog; } void QQuickPlatformFileDialog::onShow(QPlatformDialogHelper *dialog) diff --git a/src/imports/platform/qquickplatformfiledialog_p.h b/src/imports/platform/qquickplatformfiledialog_p.h index bd849a3f..a4c61c54 100644 --- a/src/imports/platform/qquickplatformfiledialog_p.h +++ b/src/imports/platform/qquickplatformfiledialog_p.h @@ -138,7 +138,7 @@ Q_SIGNALS: protected: bool useNativeDialog() const override; - QPlatformDialogHelper *onCreate() override; + void onCreate(QPlatformDialogHelper *dialog) override; void onShow(QPlatformDialogHelper *dialog) override; void accept() override; diff --git a/src/imports/platform/qquickplatformfolderdialog.cpp b/src/imports/platform/qquickplatformfolderdialog.cpp index 84847097..f100fbca 100644 --- a/src/imports/platform/qquickplatformfolderdialog.cpp +++ b/src/imports/platform/qquickplatformfolderdialog.cpp @@ -36,14 +36,6 @@ #include "qquickplatformfolderdialog_p.h" -#include <QtCore/qloggingcategory.h> -#include <QtGui/qpa/qplatformtheme.h> -#include <QtGui/private/qguiapplication_p.h> - -#ifdef QT_WIDGETS_LIB -#include "widgets/qwidgetplatformfiledialog_p.h" -#endif - QT_BEGIN_NAMESPACE /*! @@ -100,8 +92,6 @@ QT_BEGIN_NAMESPACE \sa FileDialog */ -Q_DECLARE_LOGGING_CATEGORY(qtLabsPlatformDialogs) - QQuickPlatformFolderDialog::QQuickPlatformFolderDialog(QObject *parent) : QQuickPlatformDialog(QPlatformTheme::FileDialog, parent), m_options(QFileDialogOptions::create()) @@ -265,22 +255,12 @@ bool QQuickPlatformFolderDialog::useNativeDialog() const return !m_options->testOption(QFileDialogOptions::DontUseNativeDialog); } -QPlatformDialogHelper *QQuickPlatformFolderDialog::onCreate() +void QQuickPlatformFolderDialog::onCreate(QPlatformDialogHelper *dialog) { - QPlatformDialogHelper *dialog = nullptr; - if (useNativeDialog()) - dialog = QGuiApplicationPrivate::platformTheme()->createPlatformDialogHelper(QPlatformTheme::FileDialog); -#ifdef QT_WIDGETS_LIB - if (!dialog) - dialog = new QWidgetPlatformFileDialog(this); -#endif - qCDebug(qtLabsPlatformDialogs) << "FolderDialog:" << dialog; - if (QPlatformFileDialogHelper *fileDialog = qobject_cast<QPlatformFileDialogHelper *>(dialog)) { connect(fileDialog, &QPlatformFileDialogHelper::directoryEntered, this, &QQuickPlatformFolderDialog::currentFolderChanged); fileDialog->setOptions(m_options); } - return dialog; } void QQuickPlatformFolderDialog::onShow(QPlatformDialogHelper *dialog) diff --git a/src/imports/platform/qquickplatformfolderdialog_p.h b/src/imports/platform/qquickplatformfolderdialog_p.h index 5d0b4404..d9ecd1fb 100644 --- a/src/imports/platform/qquickplatformfolderdialog_p.h +++ b/src/imports/platform/qquickplatformfolderdialog_p.h @@ -94,7 +94,7 @@ Q_SIGNALS: protected: bool useNativeDialog() const override; - QPlatformDialogHelper *onCreate() override; + void onCreate(QPlatformDialogHelper *dialog) override; void onShow(QPlatformDialogHelper *dialog) override; void accept() override; diff --git a/src/imports/platform/qquickplatformfontdialog.cpp b/src/imports/platform/qquickplatformfontdialog.cpp index ab6e05ec..ae1baa07 100644 --- a/src/imports/platform/qquickplatformfontdialog.cpp +++ b/src/imports/platform/qquickplatformfontdialog.cpp @@ -36,14 +36,6 @@ #include "qquickplatformfontdialog_p.h" -#include <QtCore/qloggingcategory.h> -#include <QtGui/qpa/qplatformtheme.h> -#include <QtGui/private/qguiapplication_p.h> - -#ifdef QT_WIDGETS_LIB -#include "widgets/qwidgetplatformfontdialog_p.h" -#endif - QT_BEGIN_NAMESPACE /*! @@ -95,8 +87,6 @@ QT_BEGIN_NAMESPACE \labs */ -Q_DECLARE_LOGGING_CATEGORY(qtLabsPlatformDialogs) - QQuickPlatformFontDialog::QQuickPlatformFontDialog(QObject *parent) : QQuickPlatformDialog(QPlatformTheme::FontDialog, parent), m_options(QFontDialogOptions::create()) @@ -193,22 +183,12 @@ bool QQuickPlatformFontDialog::useNativeDialog() const return !m_options->testOption(QFontDialogOptions::DontUseNativeDialog); } -QPlatformDialogHelper *QQuickPlatformFontDialog::onCreate() +void QQuickPlatformFontDialog::onCreate(QPlatformDialogHelper *dialog) { - QPlatformDialogHelper *dialog = nullptr; - if (useNativeDialog()) - dialog = QGuiApplicationPrivate::platformTheme()->createPlatformDialogHelper(QPlatformTheme::FontDialog); -#ifdef QT_WIDGETS_LIB - if (!dialog) - dialog = new QWidgetPlatformFontDialog(this); -#endif - qCDebug(qtLabsPlatformDialogs) << "FontDialog:" << dialog; - if (QPlatformFontDialogHelper *fontDialog = qobject_cast<QPlatformFontDialogHelper *>(dialog)) { connect(fontDialog, &QPlatformFontDialogHelper::currentFontChanged, this, &QQuickPlatformFontDialog::currentFontChanged); fontDialog->setOptions(m_options); } - return dialog; } void QQuickPlatformFontDialog::onShow(QPlatformDialogHelper *dialog) diff --git a/src/imports/platform/qquickplatformfontdialog_p.h b/src/imports/platform/qquickplatformfontdialog_p.h index 3cfa391e..c0704610 100644 --- a/src/imports/platform/qquickplatformfontdialog_p.h +++ b/src/imports/platform/qquickplatformfontdialog_p.h @@ -81,7 +81,7 @@ Q_SIGNALS: protected: bool useNativeDialog() const override; - QPlatformDialogHelper *onCreate() override; + void onCreate(QPlatformDialogHelper *dialog) override; void onShow(QPlatformDialogHelper *dialog) override; void accept() override; diff --git a/src/imports/platform/qquickplatformmessagedialog.cpp b/src/imports/platform/qquickplatformmessagedialog.cpp index 842648f1..20216e9b 100644 --- a/src/imports/platform/qquickplatformmessagedialog.cpp +++ b/src/imports/platform/qquickplatformmessagedialog.cpp @@ -36,15 +36,8 @@ #include "qquickplatformmessagedialog_p.h" -#include <QtCore/qloggingcategory.h> -#include <QtGui/qpa/qplatformtheme.h> -#include <QtGui/private/qguiapplication_p.h> #include <QtQml/qqmlinfo.h> -#ifdef QT_WIDGETS_LIB -#include "widgets/qwidgetplatformmessagedialog_p.h" -#endif - QT_BEGIN_NAMESPACE /*! @@ -230,8 +223,6 @@ QT_BEGIN_NAMESPACE This signal is emitted when \uicontrol {Restore Defaults} is clicked. */ -Q_DECLARE_LOGGING_CATEGORY(qtLabsPlatformDialogs) - QQuickPlatformMessageDialog::QQuickPlatformMessageDialog(QObject *parent) : QQuickPlatformDialog(QPlatformTheme::MessageDialog, parent), m_options(QMessageDialogOptions::create()) @@ -346,22 +337,12 @@ void QQuickPlatformMessageDialog::setButtons(QPlatformDialogHelper::StandardButt emit buttonsChanged(); } -QPlatformDialogHelper *QQuickPlatformMessageDialog::onCreate() +void QQuickPlatformMessageDialog::onCreate(QPlatformDialogHelper *dialog) { - QPlatformDialogHelper *dialog = nullptr; - if (useNativeDialog()) - dialog = QGuiApplicationPrivate::platformTheme()->createPlatformDialogHelper(QPlatformTheme::MessageDialog); -#ifdef QT_WIDGETS_LIB - if (!dialog) - dialog = new QWidgetPlatformMessageDialog(this); -#endif - qCDebug(qtLabsPlatformDialogs) << "MessageDialog:" << dialog; - if (QPlatformMessageDialogHelper *messageDialog = qobject_cast<QPlatformMessageDialogHelper *>(dialog)) { connect(messageDialog, &QPlatformMessageDialogHelper::clicked, this, &QQuickPlatformMessageDialog::handleClick); messageDialog->setOptions(m_options); } - return dialog; } void QQuickPlatformMessageDialog::onShow(QPlatformDialogHelper *dialog) diff --git a/src/imports/platform/qquickplatformmessagedialog_p.h b/src/imports/platform/qquickplatformmessagedialog_p.h index 1190c71d..e8355932 100644 --- a/src/imports/platform/qquickplatformmessagedialog_p.h +++ b/src/imports/platform/qquickplatformmessagedialog_p.h @@ -104,7 +104,7 @@ Q_SIGNALS: void restoreDefaultsClicked(); protected: - QPlatformDialogHelper *onCreate() override; + void onCreate(QPlatformDialogHelper *dialog) override; void onShow(QPlatformDialogHelper *dialog) override; private Q_SLOTS: |