diff options
author | J-P Nurmi <jpnurmi@qt.io> | 2016-08-15 19:57:09 +0200 |
---|---|---|
committer | J-P Nurmi <jpnurmi@qt.io> | 2016-08-15 19:10:32 +0000 |
commit | 0c76501617fda1e0ffa87334d3892f97e9d7d192 (patch) | |
tree | 17a144965445822d4cf504244cb088e931a7eed1 /src | |
parent | f8542bd1332224fe30ad2aea1388647933838cab (diff) |
Platform: offload widget fallback creation to qwidgetplatform_p.h
Change-Id: If51b359fa44a539c236e1a070e69451c75e190f7
Reviewed-by: J-P Nurmi <jpnurmi@qt.io>
Diffstat (limited to 'src')
-rw-r--r-- | src/imports/platform/qquickplatformdialog.cpp | 34 | ||||
-rw-r--r-- | src/imports/platform/qquickplatformmenu.cpp | 9 | ||||
-rw-r--r-- | src/imports/platform/qquickplatformmenuitem.cpp | 8 | ||||
-rw-r--r-- | src/imports/platform/qquickplatformsystemtrayicon.cpp | 8 | ||||
-rw-r--r-- | src/imports/platform/widgets/qwidgetplatform_p.h | 59 |
5 files changed, 65 insertions, 53 deletions
diff --git a/src/imports/platform/qquickplatformdialog.cpp b/src/imports/platform/qquickplatformdialog.cpp index 6a772940..dee4335d 100644 --- a/src/imports/platform/qquickplatformdialog.cpp +++ b/src/imports/platform/qquickplatformdialog.cpp @@ -41,12 +41,7 @@ #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 +#include "widgets/qwidgetplatform_p.h" QT_BEGIN_NAMESPACE @@ -346,31 +341,6 @@ 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; -} - static const char *qmlTypeName(const QObject *object) { return object->metaObject()->className() + qstrlen("QQuickPlatform"); @@ -382,7 +352,7 @@ bool QQuickPlatformDialog::create() if (useNativeDialog()) m_handle = QGuiApplicationPrivate::platformTheme()->createPlatformDialogHelper(m_type); if (!m_handle) - m_handle = createWidgetDialog(m_type, this); + m_handle = QWidgetPlatform::createDialog(m_type, this); qCDebug(qtLabsPlatformDialogs) << qmlTypeName(this) << "->" << m_handle; if (m_handle) { onCreate(m_handle); diff --git a/src/imports/platform/qquickplatformmenu.cpp b/src/imports/platform/qquickplatformmenu.cpp index 3fb93be9..17d3b2ce 100644 --- a/src/imports/platform/qquickplatformmenu.cpp +++ b/src/imports/platform/qquickplatformmenu.cpp @@ -52,9 +52,7 @@ #include <QtQuick/qquickwindow.h> #include <QtQuick/qquickitem.h> -#ifdef QT_WIDGETS_LIB -#include "widgets/qwidgetplatformmenu_p.h" -#endif +#include "widgets/qwidgetplatform_p.h" QT_BEGIN_NAMESPACE @@ -185,10 +183,9 @@ QPlatformMenu * QQuickPlatformMenu::create() if (!m_handle) m_handle = QGuiApplicationPrivate::platformTheme()->createPlatformMenu(); -#ifdef QT_WIDGETS_LIB if (!m_handle) - m_handle = new QWidgetPlatformMenu; -#endif + m_handle = QWidgetPlatform::createMenu(); + qCDebug(qtLabsPlatformMenus) << "Menu ->" << m_handle; if (m_handle) { diff --git a/src/imports/platform/qquickplatformmenuitem.cpp b/src/imports/platform/qquickplatformmenuitem.cpp index 3b5d0f6b..9f261d24 100644 --- a/src/imports/platform/qquickplatformmenuitem.cpp +++ b/src/imports/platform/qquickplatformmenuitem.cpp @@ -44,9 +44,7 @@ #include <QtGui/qpa/qplatformtheme.h> #include <QtGui/private/qguiapplication_p.h> -#ifdef QT_WIDGETS_LIB -#include "widgets/qwidgetplatformmenuitem_p.h" -#endif +#include "widgets/qwidgetplatform_p.h" QT_BEGIN_NAMESPACE @@ -142,10 +140,8 @@ QPlatformMenuItem *QQuickPlatformMenuItem::create() if (!m_handle) m_handle = QGuiApplicationPrivate::platformTheme()->createPlatformMenuItem(); -#ifdef QT_WIDGETS_LIB if (!m_handle) - m_handle = new QWidgetPlatformMenuItem; -#endif + m_handle = QWidgetPlatform::createMenuItem(); if (m_handle) { connect(m_handle, &QPlatformMenuItem::activated, this, &QQuickPlatformMenuItem::triggered); diff --git a/src/imports/platform/qquickplatformsystemtrayicon.cpp b/src/imports/platform/qquickplatformsystemtrayicon.cpp index 39101f8a..70393c41 100644 --- a/src/imports/platform/qquickplatformsystemtrayicon.cpp +++ b/src/imports/platform/qquickplatformsystemtrayicon.cpp @@ -42,9 +42,7 @@ #include <QtGui/qpa/qplatformtheme.h> #include <QtGui/private/qguiapplication_p.h> -#ifdef QT_WIDGETS_LIB -#include "widgets/qwidgetplatformsystemtrayicon_p.h" -#endif +#include "widgets/qwidgetplatform_p.h" QT_BEGIN_NAMESPACE @@ -176,10 +174,8 @@ QQuickPlatformSystemTrayIcon::QQuickPlatformSystemTrayIcon(QObject *parent) m_handle(nullptr) { m_handle = QGuiApplicationPrivate::platformTheme()->createPlatformSystemTrayIcon(); -#ifdef QT_WIDGETS_LIB if (!m_handle) - m_handle = new QWidgetPlatformSystemTrayIcon(this); -#endif + m_handle = QWidgetPlatform::createSystemTrayIcon(this); qCDebug(qtLabsPlatformTray) << "SystemTrayIcon ->" << m_handle; if (m_handle) { diff --git a/src/imports/platform/widgets/qwidgetplatform_p.h b/src/imports/platform/widgets/qwidgetplatform_p.h index 212900cf..06dcc9d3 100644 --- a/src/imports/platform/widgets/qwidgetplatform_p.h +++ b/src/imports/platform/widgets/qwidgetplatform_p.h @@ -49,22 +49,75 @@ // #include <QtCore/qdebug.h> -#include <QtWidgets/qapplication.h> +#include <QtCore/qcoreapplication.h> +#include <QtGui/qpa/qplatformtheme.h> +#include <QtGui/qpa/qplatformdialoghelper.h> +#include <QtGui/qpa/qplatformsystemtrayicon.h> +#include <QtGui/qpa/qplatformmenu.h> + +#ifdef QT_WIDGETS_LIB +#include "qwidgetplatformcolordialog_p.h" +#include "qwidgetplatformfiledialog_p.h" +#include "qwidgetplatformfontdialog_p.h" +#include "qwidgetplatformmessagedialog_p.h" +#include "qwidgetplatformmenu_p.h" +#include "qwidgetplatformmenuitem_p.h" +#include "qwidgetplatformsystemtrayicon_p.h" +#endif QT_BEGIN_NAMESPACE +#ifndef QT_WIDGETS_LIB +typedef QPlatformMenu QWidgetPlatformMenu; +typedef QPlatformMenuItem QWidgetPlatformMenuItem; +typedef QPlatformColorDialogHelper QWidgetPlatformColorDialog; +typedef QPlatformFileDialogHelper QWidgetPlatformFileDialog; +typedef QPlatformFontDialogHelper QWidgetPlatformFontDialog; +typedef QPlatformMessageDialogHelper QWidgetPlatformMessageDialog; +typedef QPlatformSystemTrayIcon QWidgetPlatformSystemTrayIcon; +#endif + namespace QWidgetPlatform { static inline bool isAvailable(const char *type) { - if (!qobject_cast<QApplication *>(QCoreApplication::instance())) { + if (!qApp->inherits("QApplication")) { qCritical("\nERROR: No native %s implementation available." - "\nQt Labs Platform requires Qt Widgets on this platform." + "\nQt Labs Platform requires Qt Widgets on this setup." "\nAdd 'QT += widgets' to .pro and create QApplication in main().\n", type); return false; } return true; } + + template<typename T> + static inline T *createWidget(const char *name, QObject *parent) + { + static bool available = isAvailable(name); +#ifdef QT_WIDGETS_LIB + if (available) + return new T(parent); +#else + Q_UNUSED(parent) + Q_UNUSED(available) +#endif + return nullptr; + } + + static inline QPlatformMenu *createMenu(QObject *parent = nullptr) { return createWidget<QWidgetPlatformMenu>("Menu", parent); } + static inline QPlatformMenuItem *createMenuItem(QObject *parent = nullptr) { return createWidget<QWidgetPlatformMenuItem>("MenuItem", parent); } + static inline QPlatformSystemTrayIcon *createSystemTrayIcon(QObject *parent = nullptr) { return createWidget<QWidgetPlatformSystemTrayIcon>("SystemTrayIcon", parent); } + static inline QPlatformDialogHelper *createDialog(QPlatformTheme::DialogType type, QObject *parent = nullptr) + { + switch (type) { + case QPlatformTheme::ColorDialog: return createWidget<QWidgetPlatformColorDialog>("ColorDialog", parent); + case QPlatformTheme::FileDialog: return createWidget<QWidgetPlatformFileDialog>("FileDialog", parent); + case QPlatformTheme::FontDialog: return createWidget<QWidgetPlatformFontDialog>("FontDialog", parent); + case QPlatformTheme::MessageDialog: return createWidget<QWidgetPlatformMessageDialog>("MessageDialog", parent); + default: Q_UNREACHABLE(); break; + return nullptr; + } + } } QT_END_NAMESPACE |