diff options
Diffstat (limited to 'src/imports/platform/widgets')
8 files changed, 122 insertions, 32 deletions
diff --git a/src/imports/platform/widgets/qwidgetplatform_p.h b/src/imports/platform/widgets/qwidgetplatform_p.h index 792e87aa..5a983a33 100644 --- a/src/imports/platform/widgets/qwidgetplatform_p.h +++ b/src/imports/platform/widgets/qwidgetplatform_p.h @@ -56,14 +56,27 @@ #include <QtGui/qpa/qplatformmenu.h> #ifdef QT_WIDGETS_LIB +#include <QtWidgets/qtwidgetsglobal.h> +#if QT_CONFIG(colordialog) #include "qwidgetplatformcolordialog_p.h" +#endif +#if QT_CONFIG(filedialog) #include "qwidgetplatformfiledialog_p.h" +#endif +#if QT_CONFIG(fontdialog) #include "qwidgetplatformfontdialog_p.h" +#endif +#if QT_CONFIG(messagebox) #include "qwidgetplatformmessagedialog_p.h" +#endif +#if QT_CONFIG(menu) #include "qwidgetplatformmenu_p.h" #include "qwidgetplatformmenuitem_p.h" +#endif +#ifndef QT_NO_SYSTEMTRAYICON #include "qwidgetplatformsystemtrayicon_p.h" #endif +#endif QT_BEGIN_NAMESPACE @@ -104,19 +117,45 @@ namespace QWidgetPlatform 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 QPlatformMenu *createMenu(QObject *parent = nullptr) { +#if defined(QT_WIDGETS_LIB) && QT_CONFIG(menu) + return createWidget<QWidgetPlatformMenu>("Menu", parent); +#else + return nullptr; +#endif + } + static inline QPlatformMenuItem *createMenuItem(QObject *parent = nullptr) { +#if defined(QT_WIDGETS_LIB) && QT_CONFIG(menu) + return createWidget<QWidgetPlatformMenuItem>("MenuItem", parent); +#else + return nullptr; +#endif + } + static inline QPlatformSystemTrayIcon *createSystemTrayIcon(QObject *parent = nullptr) { +#ifndef QT_NO_SYSTEMTRAYICON + return createWidget<QWidgetPlatformSystemTrayIcon>("SystemTrayIcon", parent); +#else + return nullptr; +#endif + } static inline QPlatformDialogHelper *createDialog(QPlatformTheme::DialogType type, QObject *parent = nullptr) { switch (type) { +#if defined(QT_WIDGETS_LIB) && QT_CONFIG(colordialog) case QPlatformTheme::ColorDialog: return createWidget<QWidgetPlatformColorDialog>("ColorDialog", parent); +#endif +#if defined(QT_WIDGETS_LIB) && QT_CONFIG(filedialog) case QPlatformTheme::FileDialog: return createWidget<QWidgetPlatformFileDialog>("FileDialog", parent); +#endif +#if defined(QT_WIDGETS_LIB) && QT_CONFIG(fontdialog) case QPlatformTheme::FontDialog: return createWidget<QWidgetPlatformFontDialog>("FontDialog", parent); +#endif +#if defined(QT_WIDGETS_LIB) && QT_CONFIG(messagebox) case QPlatformTheme::MessageDialog: return createWidget<QWidgetPlatformMessageDialog>("MessageDialog", parent); - default: Q_UNREACHABLE(); break; - return nullptr; +#endif + default: break; } + return nullptr; } } diff --git a/src/imports/platform/widgets/qwidgetplatformmenu.cpp b/src/imports/platform/widgets/qwidgetplatformmenu.cpp index eddc7ccc..1aacb0ff 100644 --- a/src/imports/platform/widgets/qwidgetplatformmenu.cpp +++ b/src/imports/platform/widgets/qwidgetplatformmenu.cpp @@ -44,7 +44,7 @@ QT_BEGIN_NAMESPACE QWidgetPlatformMenu::QWidgetPlatformMenu(QObject *parent) - : m_menu(new QMenu) + : m_tag(reinterpret_cast<quintptr>(this)), m_menu(new QMenu) { setParent(parent); @@ -69,6 +69,10 @@ void QWidgetPlatformMenu::insertMenuItem(QPlatformMenuItem *item, QPlatformMenuI QWidgetPlatformMenuItem *widgetBefore = qobject_cast<QWidgetPlatformMenuItem *>(before); m_menu->insertAction(widgetBefore ? widgetBefore->action() : nullptr, widgetItem->action()); + int index = m_items.indexOf(widgetBefore); + if (index < 0) + index = m_items.count(); + m_items.insert(index, widgetItem); } void QWidgetPlatformMenu::removeMenuItem(QPlatformMenuItem *item) @@ -77,6 +81,7 @@ void QWidgetPlatformMenu::removeMenuItem(QPlatformMenuItem *item) if (!widgetItem) return; + m_items.removeOne(widgetItem); m_menu->removeAction(widgetItem->action()); } @@ -87,17 +92,17 @@ void QWidgetPlatformMenu::syncMenuItem(QPlatformMenuItem *item) void QWidgetPlatformMenu::syncSeparatorsCollapsible(bool enable) { - Q_UNUSED(enable); + m_menu->setSeparatorsCollapsible(enable); } quintptr QWidgetPlatformMenu::tag() const { - return 0; + return m_tag; } void QWidgetPlatformMenu::setTag(quintptr tag) { - Q_UNUSED(tag); + m_tag = tag; } void QWidgetPlatformMenu::setText(const QString &text) @@ -163,24 +168,26 @@ void QWidgetPlatformMenu::dismiss() QPlatformMenuItem *QWidgetPlatformMenu::menuItemAt(int position) const { - Q_UNUSED(position); - return nullptr; + return m_items.value(position); } QPlatformMenuItem *QWidgetPlatformMenu::menuItemForTag(quintptr tag) const { - Q_UNUSED(tag); + for (QWidgetPlatformMenuItem *item : m_items) { + if (item->tag() == tag) + return item; + } return nullptr; } QPlatformMenuItem *QWidgetPlatformMenu::createMenuItem() const { - return nullptr; + return new QWidgetPlatformMenuItem; } QPlatformMenu *QWidgetPlatformMenu::createSubMenu() const { - return nullptr; + return new QWidgetPlatformMenu; } QT_END_NAMESPACE diff --git a/src/imports/platform/widgets/qwidgetplatformmenu_p.h b/src/imports/platform/widgets/qwidgetplatformmenu_p.h index 2eea6470..1df9ef78 100644 --- a/src/imports/platform/widgets/qwidgetplatformmenu_p.h +++ b/src/imports/platform/widgets/qwidgetplatformmenu_p.h @@ -53,6 +53,7 @@ QT_BEGIN_NAMESPACE class QMenu; +class QWidgetPlatformMenuItem; class QWidgetPlatformMenu : public QPlatformMenu { @@ -91,7 +92,9 @@ public: QPlatformMenu *createSubMenu() const override; private: + quintptr m_tag; QScopedPointer<QMenu> m_menu; + QVector<QWidgetPlatformMenuItem *> m_items; }; QT_END_NAMESPACE diff --git a/src/imports/platform/widgets/qwidgetplatformmenuitem.cpp b/src/imports/platform/widgets/qwidgetplatformmenuitem.cpp index c7576296..8519c899 100644 --- a/src/imports/platform/widgets/qwidgetplatformmenuitem.cpp +++ b/src/imports/platform/widgets/qwidgetplatformmenuitem.cpp @@ -35,6 +35,7 @@ ****************************************************************************/ #include "qwidgetplatformmenuitem_p.h" +#include "qwidgetplatformmenu_p.h" #include <QtWidgets/qmenu.h> #include <QtWidgets/qaction.h> @@ -42,7 +43,7 @@ QT_BEGIN_NAMESPACE QWidgetPlatformMenuItem::QWidgetPlatformMenuItem(QObject *parent) - : m_action(new QAction) + : m_tag(reinterpret_cast<quintptr>(this)), m_action(new QAction) { setParent(parent); connect(m_action.data(), &QAction::hovered, this, &QPlatformMenuItem::hovered); @@ -60,12 +61,12 @@ QAction *QWidgetPlatformMenuItem::action() const quintptr QWidgetPlatformMenuItem::tag() const { - return 0; + return m_tag; } void QWidgetPlatformMenuItem::setTag(quintptr tag) { - Q_UNUSED(tag); + m_tag = tag; } void QWidgetPlatformMenuItem::setText(const QString &text) @@ -80,7 +81,8 @@ void QWidgetPlatformMenuItem::setIcon(const QIcon &icon) void QWidgetPlatformMenuItem::setMenu(QPlatformMenu *menu) { - m_action->setMenu(qobject_cast<QMenu *>(menu)); + QWidgetPlatformMenu *widgetMenu = qobject_cast<QWidgetPlatformMenu *>(menu); + m_action->setMenu(widgetMenu ? widgetMenu->menu() : nullptr); } void QWidgetPlatformMenuItem::setVisible(bool visible) @@ -113,10 +115,12 @@ void QWidgetPlatformMenuItem::setChecked(bool checked) m_action->setChecked(checked); } +#if QT_CONFIG(shortcut) void QWidgetPlatformMenuItem::setShortcut(const QKeySequence &shortcut) { m_action->setShortcut(shortcut); } +#endif void QWidgetPlatformMenuItem::setEnabled(bool enabled) { diff --git a/src/imports/platform/widgets/qwidgetplatformmenuitem_p.h b/src/imports/platform/widgets/qwidgetplatformmenuitem_p.h index 82398bb8..752f8a03 100644 --- a/src/imports/platform/widgets/qwidgetplatformmenuitem_p.h +++ b/src/imports/platform/widgets/qwidgetplatformmenuitem_p.h @@ -76,11 +76,14 @@ public: void setRole(MenuRole role) override; void setCheckable(bool checkable) override; void setChecked(bool checked) override; +#if QT_CONFIG(shortcut) void setShortcut(const QKeySequence& shortcut) override; +#endif void setEnabled(bool enabled) override; void setIconSize(int size) override; private: + quintptr m_tag; QScopedPointer<QAction> m_action; }; diff --git a/src/imports/platform/widgets/qwidgetplatformmessagedialog.cpp b/src/imports/platform/widgets/qwidgetplatformmessagedialog.cpp index 1f851ba1..365692dc 100644 --- a/src/imports/platform/widgets/qwidgetplatformmessagedialog.cpp +++ b/src/imports/platform/widgets/qwidgetplatformmessagedialog.cpp @@ -71,7 +71,9 @@ bool QWidgetPlatformMessageDialog::show(Qt::WindowFlags flags, Qt::WindowModalit m_dialog->setIcon(static_cast<QMessageBox::Icon>(options->icon())); m_dialog->setText(options->text()); m_dialog->setInformativeText(options->informativeText()); +#if QT_CONFIG(textedit) m_dialog->setDetailedText(options->detailedText()); +#endif m_dialog->setStandardButtons(static_cast<QMessageBox::StandardButtons>(int(options->standardButtons()))); return QWidgetPlatformDialog::show(m_dialog.data(), flags, modality, parent); diff --git a/src/imports/platform/widgets/qwidgetplatformsystemtrayicon.cpp b/src/imports/platform/widgets/qwidgetplatformsystemtrayicon.cpp index 4ef1e423..1cdfcfde 100644 --- a/src/imports/platform/widgets/qwidgetplatformsystemtrayicon.cpp +++ b/src/imports/platform/widgets/qwidgetplatformsystemtrayicon.cpp @@ -78,11 +78,13 @@ void QWidgetPlatformSystemTrayIcon::updateToolTip(const QString &tooltip) void QWidgetPlatformSystemTrayIcon::updateMenu(QPlatformMenu *menu) { +#if QT_CONFIG(menu) QWidgetPlatformMenu *widgetMenu = qobject_cast<QWidgetPlatformMenu *>(menu); if (!widgetMenu) return; m_systray->setContextMenu(widgetMenu->menu()); +#endif } QRect QWidgetPlatformSystemTrayIcon::geometry() const diff --git a/src/imports/platform/widgets/widgets.pri b/src/imports/platform/widgets/widgets.pri index c904e924..84efd930 100644 --- a/src/imports/platform/widgets/widgets.pri +++ b/src/imports/platform/widgets/widgets.pri @@ -3,21 +3,51 @@ DEPENDPATH += $$PWD HEADERS += \ $$PWD/qwidgetplatform_p.h \ - $$PWD/qwidgetplatformcolordialog_p.h \ - $$PWD/qwidgetplatformdialog_p.h \ - $$PWD/qwidgetplatformfiledialog_p.h \ - $$PWD/qwidgetplatformfontdialog_p.h \ - $$PWD/qwidgetplatformmenu_p.h \ - $$PWD/qwidgetplatformmenuitem_p.h \ - $$PWD/qwidgetplatformmessagedialog_p.h \ $$PWD/qwidgetplatformsystemtrayicon_p.h SOURCES += \ - $$PWD/qwidgetplatformcolordialog.cpp \ - $$PWD/qwidgetplatformdialog.cpp \ - $$PWD/qwidgetplatformfiledialog.cpp \ - $$PWD/qwidgetplatformfontdialog.cpp \ - $$PWD/qwidgetplatformmenu.cpp \ - $$PWD/qwidgetplatformmenuitem.cpp \ - $$PWD/qwidgetplatformmessagedialog.cpp \ $$PWD/qwidgetplatformsystemtrayicon.cpp + +qtConfig(colordialog) | qtConfig(filedialog) | qtConfig(fontdialog) | qtConfig(messagebox) { + HEADERS += \ + $$PWD/qwidgetplatformdialog_p.h + SOURCES += \ + $$PWD/qwidgetplatformdialog.cpp +} + +qtConfig(colordialog) { + HEADERS += \ + $$PWD/qwidgetplatformcolordialog_p.h + SOURCES += \ + $$PWD/qwidgetplatformcolordialog.cpp +} + +qtConfig(filedialog) { + HEADERS += \ + $$PWD/qwidgetplatformfiledialog_p.h + SOURCES += \ + $$PWD/qwidgetplatformfiledialog.cpp +} + +qtConfig(fontdialog) { + HEADERS += \ + $$PWD/qwidgetplatformfontdialog_p.h + SOURCES += \ + $$PWD/qwidgetplatformfontdialog.cpp +} + +qtConfig(menu) { + HEADERS += \ + $$PWD/qwidgetplatformmenu_p.h \ + $$PWD/qwidgetplatformmenuitem_p.h + SOURCES += \ + $$PWD/qwidgetplatformmenu.cpp \ + $$PWD/qwidgetplatformmenuitem.cpp +} + +qtConfig(messagebox) { + HEADERS += \ + $$PWD/qwidgetplatformmessagedialog_p.h + SOURCES += \ + $$PWD/qwidgetplatformmessagedialog.cpp +} |