aboutsummaryrefslogtreecommitdiffstats
path: root/src/imports/platform
diff options
context:
space:
mode:
authorJ-P Nurmi <jpnurmi@qt.io>2016-08-15 14:36:02 +0200
committerJ-P Nurmi <jpnurmi@qt.io>2016-08-15 12:47:36 +0000
commit8793cba8aab832a03ed0f608114d83765a02a8ec (patch)
tree639058d38fa38132a498ddadae5218ce30058e7e /src/imports/platform
parent748a9418544e25c2abc6e3eb8862517bea091e7d (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/imports/platform')
-rw-r--r--src/imports/platform/qquickplatformcolordialog.cpp22
-rw-r--r--src/imports/platform/qquickplatformcolordialog_p.h2
-rw-r--r--src/imports/platform/qquickplatformdialog.cpp48
-rw-r--r--src/imports/platform/qquickplatformdialog_p.h2
-rw-r--r--src/imports/platform/qquickplatformfiledialog.cpp22
-rw-r--r--src/imports/platform/qquickplatformfiledialog_p.h2
-rw-r--r--src/imports/platform/qquickplatformfolderdialog.cpp22
-rw-r--r--src/imports/platform/qquickplatformfolderdialog_p.h2
-rw-r--r--src/imports/platform/qquickplatformfontdialog.cpp22
-rw-r--r--src/imports/platform/qquickplatformfontdialog_p.h2
-rw-r--r--src/imports/platform/qquickplatformmessagedialog.cpp21
-rw-r--r--src/imports/platform/qquickplatformmessagedialog_p.h2
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: