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/imports/platform/widgets | |
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/imports/platform/widgets')
-rw-r--r-- | src/imports/platform/widgets/qwidgetplatform_p.h | 59 |
1 files changed, 56 insertions, 3 deletions
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 |